Here is the question that decides whether you sleep at night during a tax audit: when a customer in Lisbon buys from your German-registered PrestaShop store, whose VAT do you charge, where do you declare it, and where does the money end up? Since 1 July 2021 the answer is "the customer's VAT, declared through one quarterly return, paid to your home tax office." That return is the One Stop Shop (OSS), and its import-side cousin is the Import One Stop Shop (IOSS). This guide is about exactly those two schemes — who has to register, what each return actually contains, the deadlines that carry penalties, and the specific things your PrestaShop store has to record so the numbers on your OSS return match the orders in your back office.
It is not a guide to setting up tax rules per country — that mechanical work (tax rule groups, per-state rates, the International → Taxes screens) is its own job, and we cover it step by step in tax configuration in PrestaShop: EU VAT rules explained. Here we stay on the reporting layer: the obligations OSS and IOSS create, and how to make PrestaShop feed them clean data.
What actually changed in July 2021
Before mid-2021, every EU country had its own distance-selling threshold — typically €35,000, sometimes €100,000 — and below it you charged your domestic rate. Cross those thresholds and you registered for VAT locally in that country. The 2021 reform deleted those per-country thresholds and replaced them with a single, EU-wide figure.
The new principle is simple to state: VAT on B2C sales of goods to another EU country is due at the destination country's rate. Sell from Germany (19%) to a consumer in France, and 20% French VAT applies; to Poland, 23%; to Luxembourg, 17%. What changed is not just the rate logic but where you account for it — and that is the whole point of OSS.
The €10,000 threshold — the one number that decides if OSS applies to you
There is exactly one threshold left, and it is EU-wide, not per country. If your total cross-border B2C sales of goods to all other EU countries combined stay under €10,000 per calendar year, you may keep charging your own domestic rate and account for it at home as normal. Cross €10,000 in aggregate and, from that sale onward, you must charge destination rates — which in practice means either registering for OSS or registering for VAT in each destination country (almost nobody chooses the latter).
Two traps live in this threshold:
- It is cumulative across all countries, not per country. €4,000 to France plus €4,000 to the Netherlands plus €3,000 to Spain is €11,000 — you are over, even though no single country saw much volume. A few hundred cross-border orders a year clears it.
- For eligible EU-established sellers, the €10,000 threshold is calculated across goods and digital services combined. The same EUR 10,000 EU-wide threshold covers combined cross-border intra-EU B2C distance sales of goods and telecommunications, broadcasting and electronically-supplied (TBE) services (ebooks, software licences, online courses, SaaS), provided you are established in the EU. Below the combined threshold you may keep charging your domestic rate; above it — or if you opt out, or are a non-EU supplier — destination VAT applies.
The practical advice we give merchants: do not wait to "notice" you crossed it mid-year. Register for OSS proactively the moment cross-border is a real channel, because registering late leaves you with a gap where you charged the wrong rate.
What OSS actually is (and what it spares you)
Without OSS, charging destination VAT would mean registering for VAT in up to 26 other member states — 26 sets of filing rules, languages, and deadlines. OSS is the deal the EU offers instead: register once in your home country, file one quarterly return that covers every cross-border B2C sale across the EU.
On that return you break sales down by destination country and by the rate applied, declare the VAT due in each, and pay a single lump sum to your home tax authority — which then redistributes the money to the other countries. You never deal with a foreign tax office.
The OSS return calendar — these dates carry penalties
- Quarterly, due by the end of the month after the quarter: Q1 → 30 April, Q2 → 31 July, Q3 → 31 October, Q4 → 31 January.
- Report sales split by destination country and applicable VAT rate.
- Pay the whole quarter's VAT in one payment to your home authority.
- Keep the underlying records for 10 years — far longer than ordinary domestic VAT retention. This is the obligation most merchants underestimate, and it is where your PrestaShop data discipline matters (see below).
IOSS — the import scheme for parcels under €150
IOSS is the mirror image of OSS for goods imported from outside the EU in consignments valued up to €150. It exists because the old low-value import VAT exemption was scrapped (it had handed non-EU sellers an unfair price edge). Under IOSS:
- VAT is collected at the point of sale — in your checkout — not at the border.
- The customer pays a VAT-inclusive price and the parcel clears customs without a surprise bill or handling fee on the doorstep.
- You report and pay through a monthly IOSS return (note: monthly, unlike OSS's quarterly cadence), and you receive an IOSS number that travels on the customs declaration.
IOSS is the scheme to care about if you dropship from outside the EU — say, fulfilment from China — with per-shipment values under €150. Above €150, IOSS does not apply and standard import VAT and duty procedures kick in at the border. The "per consignment" wording matters: it is the value of the shipment, not the order, so splitting one order into two parcels can change the treatment.
OSS vs IOSS at a glance
| OSS (Union scheme) | IOSS (Import scheme) | |
|---|---|---|
| Covers | B2C goods shipped within the EU, cross-border | B2C goods imported from outside the EU |
| Value limit | None on the sale itself (threshold is the €10,000 entry test) | Consignment value up to €150 |
| VAT charged | Destination-country rate | Destination-country rate, collected at checkout |
| Return frequency | Quarterly | Monthly |
| Entry threshold | €10,000 EU-wide threshold for eligible EU-established sellers, calculated across covered cross-border goods and TBE/e-services; otherwise destination VAT/OSS rules apply | No sales threshold; optional scheme for consignments up to €150, usable from the first eligible parcel if you register/use an intermediary where required |
| Record retention | 10 years | 10 years |
Making PrestaShop produce OSS-ready data
OSS and IOSS do not change how you configure rates in PrestaShop — that is the per-country tax rule group work covered in our tax configuration guide. What they change is what your store must be able to prove and report afterwards. Three things have to line up.
1. Tax is charged on the delivery country, and recorded that way
OSS reporting is built on destination, so your tax rule groups must key off the delivery address country, not the billing country or your store's home country. In PrestaShop, a tax rule group (managed under International → Taxes → Tax Rules) holds one rule per country, each pointing at the right tax rate; products are then assigned to a group on the Pricing tab. The detail that trips people up: PrestaShop has a configurable "Tax based on" setting under International → Taxes that can use either the delivery or the invoice address — set it to the delivery address for OSS-style destination VAT reporting, then verify your tax rules per country. A misconfigured group (a missing country, a stale rate) shows up later as a destination row on your OSS return that does not reconcile.
2. Two non-contradictory pieces of location evidence per order
For both OSS and IOSS you must keep evidence of where the customer belonged, and the rule is two non-contradictory pieces. For physical goods the delivery and billing address usually do the work; for digital goods, where there is no shipment, you need something like billing address plus IP-geolocation, or payment-account country. PrestaShop already captures the addresses on every order; the IP and the chosen carrier sit in the order record too. The job is making sure that data is retained for 10 years and is exportable — a cancelled-then-deleted customer should not take the evidence with them.
3. A clean export you can hand to whoever files the return
An OSS return is, at heart, a pivot of your orders: total taxable amount and VAT per destination country per rate, per quarter. PrestaShop's SQL Manager (under Advanced Parameters → Database) can produce exactly that from the ps_orders and ps_order_detail tables — grouping by delivery country and tax rate — without any extra software, which is usually enough for an accountant to file from. The invoice the customer receives must of course show the correct destination rate and amount; how you control the look and legal content of those PDFs is a separate topic we handle in invoice customization in PrestaShop.
Where this connects to the rest of your VAT setup
OSS and IOSS are the cross-border reporting layer; they sit on top of decisions you make elsewhere. Three of those decisions have their own guides, and pushing them out of this article is deliberate — it keeps each topic in one place rather than half-explained in four:
- B2B and reverse charge. Selling to a business with a valid VAT number generally means 0% under the reverse-charge mechanism — and that sale does not go on your OSS return at all (OSS is B2C only). How to wire up VAT-number handling, customer groups and net pricing in PrestaShop is its own piece: B2B e-commerce with PrestaShop.
- How prices are shown. EU B2C prices are displayed VAT-inclusive; the rules on when to show net, gross and unit prices are covered in price display rules in Europe.
- Real and structured invoices. Several countries now mandate structured e-invoices on top of the PDF; if you sell into them, see e-invoicing in Europe.
The mistakes that turn into penalties
- Charging your home rate after crossing €10,000. The single most common error. The moment your cumulative cross-border total passes the threshold, every further EU B2C sale must carry the destination rate — keep charging 19% to a French consumer and you have underpaid French VAT.
- Treating the threshold as per-country. It is one EU-wide €10,000 figure across all destinations combined. Small amounts to many countries add up faster than people expect.
- Misjudging how digital goods count toward the threshold. For eligible EU-established suppliers, cross-border digital/TBE sales fall under the same €10,000 combined threshold as goods — but non-EU suppliers, and sellers above the threshold or who have opted out, must charge destination VAT. Once you are over (or outside the threshold), cross-border downloads are destination-taxed.
- Mixing up OSS and IOSS cadence. OSS is quarterly; IOSS is monthly. A merchant who imports under €150 and ships intra-EU is running two different calendars.
- Letting records lapse before 10 years. Deleting old orders or customers to "clean up the database" can erase the location evidence you are legally required to retain.
The honest bottom line
OSS and IOSS made cross-border VAT administratively simpler — one quarterly return instead of 27 registrations — but they did not make the rate logic optional. PrestaShop already holds everything you need to file accurately: destination-keyed tax rules, address and IP evidence on every order, and an SQL export that pivots straight into the shape an OSS return wants. Your job is to make sure those three things are configured correctly and retained long enough. For the per-country rate setup that underpins all of it, start with our PrestaShop tax configuration guide — and for anything genuinely borderline (unusual reduced rates, mixed B2B/B2C, IOSS edge cases on consignment value), a one-off conversation with an EU e-commerce VAT advisor costs far less than a reassessment. The configuration is in your hands; the interpretation of your specific situation is worth a specialist's eye.
Comments
No comments yet. Be the first!
Be the first to ask a question or share useful feedback.
Leave a comment
Share a question, an installation detail, or feedback that could help another reader.