Filling In the OSS Return Per Country and Per VAT Rate, Step by Step
Once your cross-border B2C sales push you into the One Stop Shop, the quarterly return is no longer a single line on your domestic BTW form. The OSS return demands a split per destination country and per VAT rate applied, on a net basis. This guide is the practical companion to the full OSS overview: it shows exactly which figures go where, with a worked example and the mistakes that trigger corrections.
6/3/20268 min readBTW
The OSS return reports, per EU destination country, the net taxable amount and VAT for each VAT rate you charged that quarter, standard and reduced. You file one return in the Netherlands by the quarterly deadline (30 April, 31 July, 31 October, 31 January) covering all EU consumer sales.
The OSS portal does not accept one combined sales figure. It asks for a separate net amount and VAT per VAT rate per destination country, and manually rebuilding that split from raw orders across a webshop, bol.com and Amazon is error-prone. Work systematically: filter to cross-border EU B2C sales only, group by destination country, split each country by VAT rate, and total the net amount and VAT per bucket. A report that aggregates every channel and outputs the per-country/per-rate table removes the manual reconstruction.
Summary
The OSS return is structured per destination country and per VAT rate, not a single combined figure.
A mixed-rate sale to Germany is declared at both the German standard rate (19%) and the reduced rate (7%).
All figures are net (excluding VAT): the net taxable amount and the VAT due per rate per country.
Exclude domestic, non-EU and B2B reverse-charge sales; B2B intra-EU goes on the ICP report instead.
Quarterly deadlines for return and payment: Q1 30 April, Q2 31 July, Q3 31 October, Q4 31 January.
Keep the underlying transaction data for 10 years to support the OSS figures.
Why the OSS return is per country AND per rate
The whole point of the One Stop Shop is that you charge the VAT rate of the country where your consumer lives, and then settle all of those foreign VAT amounts through one return at home instead of registering in every member state. Because each country sets its own rates, the return cannot collapse into a single number: the Belastingdienst has to forward the right VAT to the right country, so it needs the figures already split per destination country.
On top of the country split, the return is also per VAT rate. Most EU countries have a standard rate and at least one reduced rate. If everything you sell to a country falls under one rate, that country gets one line. But the moment you sell goods that are taxed differently, that country needs two (or more) lines.
The classic example is Germany. Suppose in one quarter you sell electronics (German standard rate 19%) and books (German reduced rate 7%) to German consumers. That is not "sales to Germany at an average rate". It is two separate declarations: the net amount and VAT at 19%, and the net amount and VAT at 7%, both under the country Germany.
Get this structure right and the rest of the return is mostly arithmetic. Get it wrong, by averaging rates or by lumping countries together, and you produce a return that cannot be reconciled and is likely to need correction.
Pro Tip: Think of each (country, rate) combination as its own bucket. A quarter with sales to four countries, two of which used both a standard and a reduced rate, produces six buckets, not four.
For every (destination country, VAT rate) bucket the OSS return asks for two values: the net taxable amount (your sales excluding VAT) and the VAT amount due at that rate. Both are net-based, which is the single most important thing to internalise about OSS reporting.
Net matters in two places. First, the €10,000 threshold that decides whether you are in OSS at all is measured on net cross-border B2C turnover, summed across all EU countries and all channels, your own webshop plus marketplaces like bol.com, Amazon and a WooCommerce store. Second, the amounts you declare per bucket are net plus the VAT computed on that net.
So if a German customer paid €119 gross for standard-rated goods, the net taxable amount is €100 and the VAT is €19 at the German 19% rate. You declare €100 net and €19 VAT, not €119.
You also need to be sure each sale belongs in the OSS return in the first place. OSS is B2C only and EU only. Domestic Dutch sales stay on your normal BTW return. Sales to the US, UK or any non-EU country are out of scope (0% export). And intra-EU B2B sales to a customer with a valid VAT number are reverse-charge and belong on the ICP / EC Sales List, never in OSS.
Finally, keep the underlying transaction data, orders, VAT rates applied, customer country evidence, for 10 years. This is a hard OSS requirement and the basis on which any audit will reconstruct your figures.
Start free trial
Test all features without credit card. Automatic invoices within minutes.
Step by step: from your transactions to a complete return
The reliable way to build an OSS return is to start from the raw transactions and filter down, rather than trying to read totals off a dashboard that was never designed for this split. The path is always the same five moves.
1. Collect all sales for the quarter. Pull every order across every channel: your own webshop and each marketplace. The OSS threshold and return are channel-agnostic, so a fragmented view across platforms is exactly where mistakes start.
2. Exclude what does not belong. Remove domestic Dutch sales (they stay on the normal BTW return), remove non-EU sales (0% export, out of scope), and remove B2B reverse-charge sales to valid EU VAT numbers (these go on the ICP report). What remains is cross-border B2C to EU consumers, the OSS population.
3. Group by destination country. Sort the remaining sales by the consumer's country. Germany, France, Italy and so on each become a group.
4. Split each country by VAT rate. Within each country, separate sales by the rate that was charged, standard versus reduced. This is where the per-rate buckets appear, e.g. Germany 19% and Germany 7%.
5. Total each bucket and enter it. For each (country, rate) bucket, sum the net taxable amount and the VAT. Those totals are what you type into the OSS portal, one block per country, one line per rate within it. Cross-check that net × rate equals the VAT in each line before submitting.
A worked mini-example
Imagine a single quarter where you sold to German, French and Italian consumers. In Germany you sold standard-rated goods (19%) and books at the reduced rate (7%). In France everything was standard-rated (20%). In Italy you sold standard-rated goods (22%) and reduced-rated food (10%). All figures below are net.
Country
VAT rate
Net amount
VAT due
Germany
19% (standard)
€4,000.00
€760.00
Germany
7% (reduced)
€1,000.00
€70.00
France
20% (standard)
€3,000.00
€600.00
Italy
22% (standard)
€2,000.00
€440.00
Italy
10% (reduced)
€500.00
€50.00
Total
€10,500.00
€1,920.00
Notice that this quarter produces five lines across three countries: Germany and Italy each carry two rate lines because they had mixed-rate sales. Three countries, five buckets.
Each line is independently checkable: €4,000 × 19% = €760, €1,000 × 7% = €70, €3,000 × 20% = €600, €2,000 × 22% = €440, €500 × 10% = €50. The portal totals the VAT to €1,920, which becomes the single OSS payment you remit alongside the return.
This is the level of detail the portal expects. There is no "€10,500 of EU sales" shortcut, the structure is the deliverable.
Common mistakes that trigger corrections
Using gross instead of net for the threshold. The €10,000 line is net cross-border B2C turnover across all EU countries and all channels. Measuring it on the gross amount customers paid overstates your position and can make you think you crossed when you did not, or the reverse.
Charging home VAT instead of destination VAT. Once you are in OSS, a German consumer pays German VAT (19%), not Dutch 21%. Continuing to apply the home rate produces wrong VAT on every cross-border order and a return that does not match your invoices.
Forgetting the reduced-rate bucket. If you sell anything at a country's reduced rate, books, certain foods, that country needs a second line. Declaring everything at the standard rate is a common and visible error.
Mixing in B2B reverse-charge. Intra-EU B2B sales to a valid VAT number are reverse-charge and belong on the ICP / EC Sales List. Dropping them into the OSS return double-counts them and corrupts both reports.
Missing the deadline. The OSS return and payment are due by 30 April (Q1), 31 July (Q2), 31 October (Q3) and 31 January (Q4). Late filing or payment can lead to penalties and, if it persists, exclusion from OSS, which forces individual registrations in each country. For edge cases (rate classification of a specific product, place-of-supply nuances) raadpleeg een BTW-adviseur / consult a tax advisor.
Generating the per-country/per-rate report automatically
Rebuilding the (country, rate) buckets by hand each quarter is exactly the kind of work software should do. Winkel Factuur ships a VAT reports page with an OSS-rapport tab: you pick a year and quarter and get the per-destination-country table with the per-VAT-rate breakdown, the net amount and VAT for each rate in each country, already aggregated across all your sales channels and stores.
The same page shows a live €10,000 threshold indicator measured on net cross-border B2C turnover, so you can see how close you are to OSS obligations before the quarter closes rather than discovering it afterwards.
When you are ready to file, the report offers CSV and JSON export of the per-country/per-rate figures, the same structure the OSS portal asks for, so transferring the numbers is a matter of reading them off rather than reconstructing them.
Alongside the OSS-rapport there is a separate ICP report for B2B intra-EU reverse-charge sales and a Dutch BTW return summary, which keeps the three reporting streams cleanly separated, the boundary that the common mistakes above tend to blur.
Your OSS return, already split per country and rate
Do I report net or gross amounts in the OSS return?
Net. Both the €10,000 threshold and the figures on the return are net (excluding VAT). For each country and rate you declare the net taxable amount and the VAT computed on it, so €119 gross at 19% German VAT is declared as €100 net and €19 VAT.
Why does one country appear on two lines of my OSS return?
Because you charged two different VAT rates there. If you sold standard-rated and reduced-rated goods to the same country (e.g. Germany at 19% and 7%), each rate is a separate line. The return is structured per country and per rate, not one line per country.
Do B2B sales to other EU countries go in the OSS return?
No. Intra-EU B2B sales to a customer with a valid VAT number are reverse-charge and belong on the ICP / EC Sales List, not the OSS return. OSS is for B2C consumer sales only. Non-EU sales (US, UK) are also out of scope as 0% exports.
What are the OSS filing deadlines?
The OSS return and payment are due quarterly: Q1 by 30 April, Q2 by 31 July, Q3 by 31 October and Q4 by 31 January. Late filing or payment can lead to penalties and, if it continues, exclusion from the scheme.
How long do I need to keep the underlying data?
Ten years. OSS requires you to retain the underlying transaction records, orders, applied VAT rates and evidence of the customer's country, for 10 years so the figures on each return can be reconstructed if audited.
Stop rebuilding your OSS return by hand
Winkel Factuur aggregates every sales channel into a ready-to-file OSS report, split per country and per VAT rate, with a live €10,000 threshold indicator and CSV/JSON export.