Reviewed June 2026, VAT thresholds and the OSS regime described here reflect the current EU rules; treat tax specifics as a starting point and confirm with an accountant for your own situation.
Selling across Europe from one PrestaShop install is mostly a configuration problem, three of them, actually: the language a customer reads, the currency they pay in, and the tax you're legally required to charge them. The first two are forgiving; get them wrong and you lose a sale. The third is not: get VAT wrong and you can owe back-tax to a tax authority in a country you've never visited. This guide ties the three together and goes deep on the one that scares merchants most, EU VAT, because the languages and currencies each have a dedicated guide of their own, linked below, and there's no point repeating them here.
If you want the full walkthrough of either of the other two pillars, start there and come back: multi-language store setup covers translating products, slugs and CMS pages properly, and multi-currency and international selling covers exchange rates, rounding and per-currency pricing. This page is the map that sits above both, with tax as its centre of gravity.
The three dials, and which one is unforgiving

It helps to be honest about the stakes before you touch a setting, because they are wildly different. Language and currency are conversion levers. Annoy a customer and they leave. Tax is a compliance obligation. Annoy a tax authority and you get an assessment. Here's the split that should drive how much care each one gets:
| Dial | What it really is | Cost of getting it wrong | Where it lives in PrestaShop |
|---|---|---|---|
| Language | Conversion lever | Lost sale; damaged trust from a bad machine translation | International → Localization → Languages |
| Currency | Conversion lever | Lost sale; cart abandonment from an "awkward" converted price | International → Localization → Currencies |
| Tax (VAT) | Legal obligation | Back-tax assessment, penalties, blocked OSS return | International → Taxes and Tax Rules |
So what does that mean for how you spend your time? Most merchants over-invest in flag pickers and under-invest in tax rules. Reverse it. A customer forgives a euro price in Poland far more readily than the Polish tax office forgives a wrong VAT return. Spend an afternoon on the front-end polish, covered in currency selector and language flags, and spend a serious day on what follows.
How PrestaShop actually charges VAT
PrestaShop never stores "the VAT rate." It stores tax rules groups, and each product is assigned one. A tax rules group is a lookup table: for a given delivery country (and optionally state/region), it returns the tax rate to apply. The chain runs Tax (a single named rate, e.g. "DE Standard 19%") → Tax Rule (the country→rate mapping) → Tax Rules Group (the bundle of rules you assign to a product). Internally these are the Tax, TaxRule and TaxRulesGroup classes; the calculation at checkout flows through PrestaShop's TaxCalculator against the customer's delivery Address.
The practical consequence: VAT is decided by where the parcel is going, not where your store is hosted. That's exactly what EU distance-selling law requires for B2C above the threshold, so PrestaShop's model and the law line up, as long as your tax rules group actually contains a rule for every country you ship to.
Building a pan-EU tax rules group, step by step
- Go to International → Taxes and confirm a Tax exists for each rate you'll need (PrestaShop's localization packs install most EU standard rates for you when you import a country pack, verify rather than assume).
- Go to International → Taxes → Tax Rules and create or edit a group such as "EU OSS. Standard rate." Add one rule per destination country, each pointing at that country's standard rate. [SCREENSHOT: International → Taxes → Tax Rules, a tax rules group open with several country rules listed (DE 19%, FR 20%, etc.), one row per destination country]
- Assign that group to your products. Per product it's on the Pricing tab as the Tax rule dropdown; for bulk changes use catalog mass-edit rather than touching products one by one.
- Set the tax address basis under International → Taxes, in Tax options (the "Based on" option,
PS_TAX_ADDRESS_TYPE): whether to base tax on the delivery address or the invoice address. For EU distance selling you want the delivery address.
One trap that catches people: shipping is taxable too, and at a rate tied to the carrier, not the product. If your carriers have no tax rule, you'll under-charge VAT on delivery and your OSS numbers won't reconcile. Set the carrier tax under each carrier's configuration in Shipping → Carriers.
Reduced rates and product-category quirks
The reason you can't get away with a single 27-country group for everything is that EU VAT isn't one rate per country, it's a standard rate plus reduced rates that apply to specific goods, and the categories differ by country. Books, food, children's items, e-books and some health products frequently sit at a reduced rate, and a product that's standard-rated in one member state can be reduced-rated in another.
In PrestaShop the clean way to handle this is one tax rules group per rate-class, not per country. So you might run:
- EU Standard, your default group, standard rate per destination country.
- EU Reduced (books/printed), reduced rate per country for products that qualify everywhere they're sold.
- EU Reduced (food). A separate group, because the qualifying-country list is different.
Then you assign the right group to each product category. The point of separating them is auditability: when a rate changes, and EU reduced rates change more often than standard ones, you edit one group, not hunt through products. The benefit in plain terms: a rate change becomes a five-minute edit instead of a catalog-wide risk.
The €10,000 threshold and One-Stop Shop, decoded
This is the rule that turns "I sell to a few EU countries" into a tax-registration question. Up to €10,000 in total cross-border B2C sales across the EU per year, you may charge your home country's VAT rate on all of it. The moment your combined cross-border B2C sales pass that threshold in a year, you must charge the destination country's rate on cross-border B2C sales, for every EU country, from that point.
Without OSS, "charge destination VAT everywhere" would mean a separate VAT registration in every country you sell to. One-Stop Shop (OSS) is the relief: you register once, through your home country's tax authority, and file a single quarterly return covering all your EU cross-border B2C VAT. You still charge each country's correct rate (that's what your destination-based tax rules group does), OSS just consolidates the reporting into one return instead of 26.
| Situation | VAT rate you charge B2C | What you file |
|---|---|---|
| Under €10k cross-border/year | Your home country's rate | Your normal domestic VAT return |
| Over €10k, OSS registered | Destination country's rate | One quarterly OSS return + your domestic return |
| Over €10k, not OSS registered | Destination country's rate | A separate VAT registration & return in each country (avoid this) |
The PrestaShop side of crossing the threshold is exactly the destination-based tax rules group described above, so the right time to build it is before you cross €10k, not the week after, when you'd otherwise be retroactively under-collecting. Note this is the EU intra-community regime; the UK, Switzerland and Norway sit outside it with their own rules, which is why those markets often get their own carrier zones and tax handling.
B2B sales: the reverse-charge exemption
Cross-border sales to a business customer with a valid EU VAT number work differently again: under the reverse-charge mechanism, you don't charge VAT, the buyer accounts for it in their own country. To apply it correctly you must (a) verify the customer's VAT number is genuinely valid against the EU VIES database, and (b) show that customer net (tax-excluded) prices at checkout.
PrestaShop has partial native support, there's a B2B mode you enable under Shop Parameters → Customer Settings and a VAT-number field on the address, but the core does not validate the number against VIES in real time, and it won't automatically zero the tax for a verified EU business. That gap is where a wrong number costs you: accept an invalid VAT number, zero the tax, and you're the one liable for the uncollected VAT. Our Automatic EU VAT Checker closes it. It validates the number against VIES live at checkout, and a verified EU business is shown net prices and charged zero VAT automatically, with no manual look-up on your side. The benefit: legitimate B2B buyers convert without a tax surprise, and you're not personally exposed to a number that turns out to be fake.
Where languages and currencies plug in (without repeating their guides)
Tax is the spine, but a European sale still has to read right and price right. Rather than re-cover ground, here's how the three connect and where the detail lives:
- Language → tax wording. Your invoice, your "VAT included/excluded" labels and your tax-exempt notices all need translating alongside products. The mechanics of adding languages, translating slugs and CMS pages are in multi-language store setup.
- Currency → tax display. A destination-VAT price still has to render cleanly in the local currency, €9.99 shouldn't surface as PLN 44.73. Rounding rules, ECB auto-updates and per-currency pricing are in multi-currency and international selling.
- The switcher itself. Letting visitors pick their language and currency from any page is a small UX detail with outsized retention impact, covered in currency selector and language flags.
- Telling Google which version to serve. Multiple language URLs need hreflang or Google serves the wrong one, that's its own job, walked through in hreflang tags.
- Separate sites, not just languages. If a market needs its own domain, catalogue or legal identity rather than just a translation, that's multistore territory, see PrestaShop multistore.
Shipping zones and local payment, briefly
Two more things vary by country and feed back into tax and conversion. Shipping is best handled as 2–4 carrier zones grouped by cost and transit time (Germany→Austria is a 1–2 day, ~€5 lane; Germany→Portugal is 5–7 days and several times the cost) with different free-shipping thresholds per zone, and remember each carrier needs its own tax rule, as noted above, or your VAT reconciliation drifts.
Payment preferences are sharply local: iDEAL is effectively mandatory in the Netherlands, BLIK and Przelewy24 in Poland, Bancontact in Belgium, and bank transfer plus Klarna carry real weight in Germany. The pragmatic minimum for pan-EU selling is a card processor that covers the major networks, PayPal, and one or two local methods for your largest non-domestic markets. We'd be overstating things to attach a single conversion-uplift number to "add a local method". The honest claim is narrower: in markets where a local method dominates, its absence is a hard blocker, not a soft one.
A launch order that won't bite you later
Don't open 27 countries on day one. Sequence it so the unforgiving dial is set before money moves:
- Pick 1–2 neighbouring markets first, cheapest shipping, closest expectations, easiest support.
- Build the destination-based tax rules group before you cross €10k, and register for OSS at (or just before) the threshold, never retroactively.
- Translate fully, not halfway, a half-translated checkout reads as less trustworthy than an English one.
- Add local currency with clean rounding, and the local payment method that market expects.
- Place one real test order from each target country, confirm the VAT line, the carrier tax, the currency rounding and the payment method all behave before a real customer does it for you.
Frequently asked questions
Where in PrestaShop do I tell it to charge VAT by the customer's country?
Two places work together. The tax rules group on each product (International → Taxes → Tax Rules) holds one rule per destination country, each pointing at that country's rate. Then under International → Taxes → Tax options you set the "Based on" option (PS_TAX_ADDRESS_TYPE) to the delivery address, which is what EU distance selling requires. With both set, checkout's TaxCalculator picks the rate from where the parcel is going.
What is the €10,000 threshold, exactly?
Up to €10,000 in total cross-border B2C sales across the EU per year, you may charge your home country's VAT rate on all of it. Once your combined cross-border B2C sales pass that figure in a year, you must charge each destination country's rate from that point. Build the destination-based tax rules group before you cross it, not the week after, and confirm your own position with an accountant, since this is a legal obligation, not a setting.
Do I need a VAT registration in every country I sell to?
Not if you use One-Stop Shop (OSS). OSS lets you register once through your home country's tax authority and file a single quarterly return covering all your EU cross-border B2C VAT. You still charge each country's correct rate, your destination-based tax rules group does that, OSS just consolidates the reporting. Without OSS, charging destination VAT everywhere would mean a separate registration in each country. This is general information, not tax advice; verify registration timing with a professional.
How do I handle B2B sales to a verified EU business?
Cross-border B2B with a valid EU VAT number uses the reverse-charge mechanism: you don't charge VAT, the buyer accounts for it. To apply it correctly you must verify the number against the EU VIES database and show that customer net prices. PrestaShop has a B2B mode and a VAT-number field, but core doesn't validate against VIES live or auto-zero the tax, accept an invalid number and you're liable for the uncollected VAT. Our Automatic EU VAT Checker validates the number against VIES at checkout and shows verified businesses net prices automatically.
Is shipping taxable too?
Yes, and at a rate tied to the carrier, not the product. Set the tax rule on each carrier under Shipping → Carriers. Carriers with no tax rule under-charge VAT on delivery, and your OSS numbers won't reconcile.
Related reading
- Multi-Currency and International Selling, exchange rates, rounding and per-currency pricing so destination-VAT prices still render cleanly.
- Multi-Language Store Setup, translating products, slugs and the tax-wording on your invoices.
- Currency Selector and Language Flags. The front-of-house polish that sits on top of the tax engine.
The EU single market is genuinely one of the largest expansion opportunities a PrestaShop store has, and the platform is built to handle the complexity, multiple languages, multi-currency, and a tax engine that charges by destination address out of the box. The work that actually protects you isn't the flag picker; it's the tax rules group behind it. Get that right, lean on the sibling guides for the language and currency detail, and "selling across Europe" becomes a configuration you can trust rather than a liability you're hoping holds.
Comments
Leave a comment
Share a question, an installation detail, or feedback that could help another reader.