EU VAT OSS explained for startups selling with Stripe
If you sell B2C across the EU, the hard part is rarely the form itself. The hard part is knowing which sales belong in OSS, which country rate applies, and whether your records would survive review later.
What OSS actually solves
OSS is a filing channel for covered cross-border B2C sales inside the EU. It lets you register once, submit one return through a single Member State, and pay VAT there instead of maintaining separate registrations everywhere you sell.
That convenience does not remove the real work. You still need to know what you sold, whether OSS is the correct scheme, which country the customer belongs in, and whether the VAT rate on each row is defensible.
- OSS helps with reporting and payment
- OSS does not decide your product category for you
- OSS does not fix bad checkout data or missing evidence
Start with what you are selling
Digital products, remote services, and physical goods can fall into different VAT paths. Founders often jump straight to filing, but the cleaner starting point is to split the catalog into a few buckets and decide which rules each bucket follows.
If you sell a mixed catalog, do not assume one treatment covers everything. A subscription, a consulting engagement, and a shipped product may all need different handling even when they are sold through the same Stripe account.
- Digital products and electronically supplied services
- Other cross-border services that may need category-specific rules
- Distance sales of goods inside the EU
- Imported goods, which can push you into IOSS instead of OSS
The first split: EU-established or outside the EU
If your business is established in the EU, the Union scheme is usually the starting point for covered B2C sales into other Member States. If your business is established outside the EU and has no EU fixed establishment, the non-Union scheme is the usual path for covered services supplied to EU consumers.
This matters early because the scheme determines how you register and what you can report through OSS. Imported goods are a separate branch again, and low-value imports can fall under IOSS rather than the standard OSS workflow.
- EU-established seller: usually Union OSS for covered cross-border B2C sales
- Non-EU seller with no EU fixed establishment: usually non-Union OSS for covered services
- Imported goods up to EUR 150: often an IOSS question, not a standard OSS one
When the EUR 10,000 threshold matters
EU-established businesses can sometimes stay on home-country VAT below the EU-wide EUR 10,000 threshold for covered cross-border B2C sales. Once that threshold is exceeded, destination-country VAT usually applies and OSS becomes the practical way to report it.
The threshold is not a universal free pass. It only applies to specific covered categories, and non-EU sellers generally should not design their process around it. If your catalog sits near the line, you need a running threshold view instead of checking once a year from memory.
- Below threshold: some EU sellers may still use home-country VAT for covered sales
- Above threshold: destination VAT usually applies
- The threshold is EU-wide, not one separate limit per country
Pricing and checkout need a policy too
For B2C, the customer should see a clear final price before paying. The practical choice is usually between country-specific VAT-inclusive pricing or one VAT-inclusive EU price where your margin moves by country.
Neither approach is automatically right. If your margin is thin, country-specific pricing can protect it. If conversion simplicity matters more, many startups keep one displayed price and accept that net revenue will vary across Member States.
- Country-based final price: more accurate margins, more implementation work
- One final EU price: simpler checkout, variable net revenue by country
- In both cases, the VAT rate behind the price still has to be correct
How to prove the buyer country
Online sales rarely hand you a perfect place-of-consumption answer. The safer approach is to collect a primary country signal at checkout, compare it with a second signal where possible, and keep the evidence with the transaction record.
This is where many VAT workflows break down. Teams trust the checkout country, lose the supporting evidence, or silently override conflicts. A better process keeps ambiguous rows visible and stores the evidence trail for the long retention period OSS requires.
- Billing address country
- Card or bank country when available from the payment provider
- IP country or another technical location signal when collected lawfully
- Shipping country for goods
- A conflict rule for rows where the identifiers disagree
What the quarterly filing rhythm looks like
Once the sales are classified and the buyer country is reliable, the filing work becomes more mechanical. Aggregate VAT by Member State of consumption, review corrections such as refunds or chargebacks, then file and pay by the end of the month following the quarter.
That is also the point where records need to be archived properly. OSS record keeping can run for up to 10 years, so your process needs more than a screenshot and a spreadsheet someone may overwrite later.
- Export covered B2C sales by country
- Review refunds, reversals, and corrections before filing
- File the return and pay by the end of the month after the quarter
- Keep the report and supporting evidence for the retention period
Where SaldoKit fits
SaldoKit is built for the part most startups still do manually: turning Stripe payments into an OSS filing trail that can actually be reviewed. It imports charges, keeps the buyer-country signals visible, groups VAT due per Member State, and refuses to hide rows that still need judgment.
The current workflow is strongest for VAT-inclusive B2C Stripe sales where two matching identifiers can support the customer country. Ambiguous rows stay in review so the operator can fix the data before a report is treated as filing-ready.