IOSS and Stripe Tax: EU VAT on Goods in QuickBooks

Stripe charges EU VAT on parcels up to 150 EUR under IOSS and none above it. Which orders reach your QuickBooks liability account, and where duties go.

Acodei Content Team · 10/5/2026 · 14 min read

A US business that ships physical products to customers in the EU runs into a pattern that confuses almost every bookkeeper the first time they see it. Two orders go to the same country in the same week. One has VAT on it in Stripe and one does not. Neither is a mistake.

The reason is the Import One Stop Shop, or IOSS, and the 150 EUR line that decides whether it applies. Below the line, if you are registered, Stripe Tax charges the customer VAT at checkout and you owe it to the EU. Above the line, Stripe charges no VAT at all, and the customer settles VAT and duty with customs when the parcel arrives. That second payment never touches Stripe, and in most setups it never touches your books either.

This guide explains which orders carry VAT in Stripe and why, what reaches QuickBooks for each kind of order, where border charges show up when they are yours to pay, and how the monthly IOSS return relates to the liability account in your books. It is bookkeeping guidance, not tax or customs advice. Whether IOSS suits your business, and how your shipments should be declared, are questions for your accountant, your IOSS intermediary and your carrier.

Start a free trial to bring Stripe Tax amounts into QuickBooks automatically, so the IOSS VAT you collect is already in your liability account when the return is due.

What IOSS is, in the terms that matter for the books

The European Commission describes the import scheme as covering "distance sales of goods imported from a third territory or third country to customers that take place in the EU." It is limited in two ways: it "only covers low value goods, i.e. goods in consignments of an intrinsic value not exceeding EUR 150 and does not apply to goods subject to excise duties."

Stripe's EU tax guide puts the effect plainly. If you sell physical goods to individuals in the EU in packages valued at or under 150 EUR, IOSS "means you charge your customer VAT at checkout and no VAT is payable when the goods arrive at the border in the EU." You register in one member state and file one return for all of those sales, instead of registering in every country you ship to.

Three details shape everything that follows:

  • It is a consumer scheme. Stripe describes it as covering sales "to individuals in the EU."
  • The limit is per consignment, not per product. A 150 EUR limit on a parcel behaves very differently from a 150 EUR limit on an item, and the difference shows up in the split-shipment cases below.
  • A US business usually needs an intermediary. Stripe notes that "businesses based outside the EU normally need to appoint a local intermediary to register for IOSS." The Commission defines an intermediary as an EU-established taxable person "who will be the person liable to pay VAT and to fulfil the VAT obligations" of the scheme on your behalf. In practice, the intermediary files the IOSS return on your behalf.

Which orders carry VAT in Stripe, and which do not

Stripe's default for goods shipped into the EU from abroad is not to charge VAT. Its guide says: "When goods are shipped into the EU from abroad, Stripe treats the sale as an export and applies the zero rate, unless you choose to calculate tax on cross-border sales of goods into the EU through the tax registration settings."

An IOSS registration is the exception that switches VAT on for low-value parcels. With one, "Stripe calculates tax on imported low-value goods shipped into the EU in packages valued at up to 150 EUR, regardless of your choice to calculate tax on cross-border sales of goods into the EU." In Stripe's registration types, IOSS has its own API value, ioss, separate from the One Stop Shop schemes used for digital services.

Over the limit, Stripe is just as clear: "If a transaction is over 150 EUR, IOSS won't apply, which means your customers are charged taxes and customs duties by Customs when the goods arrive at the border in the EU." Customs duties are never part of Stripe's calculation in either case. The guide says cross-border sales of goods "might also be subject to import taxes and customs duties in the EU, which Stripe doesn't calculate."

So, for a US seller registered for IOSS and selling to consumers, every EU order falls into one of two groups:

OrderVAT in StripeWho pays VAT to the EUWhat your liability account sees
Package at or under 150 EURYes, at the customer's country rateYou, through the monthly IOSS returnThe VAT Stripe collected
Over 150 EURNo, treated as an exportThe customer, at the borderNothing

There is a third route, which applies only if you have deliberately set it up. Stripe's inbound_goods option on a standard registration collects tax on cross-border sales of goods into an EU country. Stripe notes that businesses generally need to collect tax on these sales "if they act as the importer for customs purposes." That is a different arrangement from IOSS, with its own registrations and returns, and this guide does not cover it.

A worked month: five orders, two kinds of record

Take a US shop selling leather goods. It is registered for IOSS through an intermediary and has added the registration in Stripe Tax. The values below are in euros because that is the currency the limit is written in.

  1. A wallet to Munich, 60 EUR. One package, well under the limit. Stripe calculates German VAT at checkout and the customer pays it. The order carries a VAT amount.
  2. A bag to Lyon, 140 EUR. One package, under the limit. Stripe calculates French VAT. The order carries a VAT amount.
  3. A jacket to Rotterdam, 220 EUR. Over the limit. Stripe treats the sale as an export and charges no VAT. The customer is charged VAT and duty by customs on arrival. The order has no tax line.
  4. A belt and a bag to Vienna, bought together, 45 EUR + 115 EUR = 160 EUR. Each item is under 150 EUR, but Stripe says it "assumes that goods purchased together are shipped together." Stripe sees one 160 EUR transaction, so IOSS does not apply and no VAT is charged. That remains true if you later ship the two items in separate boxes.
  5. Two separate orders from the same Dublin customer, 90 EUR on Monday and 80 EUR on Thursday, packed into one parcel on Friday. Stripe charged VAT on each order, because each was under the limit when it was placed. The parcel that reaches the border is worth 170 EUR, which is over the consignment limit the scheme is defined by. The VAT you collected at checkout and the parcel customs sees no longer describe the same thing.

Orders 1 and 2 are the normal IOSS case. Order 3 is the normal over-limit case. Order 4 is the one that generates "why is there no VAT on this?" questions, and the answer is Stripe's shipped-together assumption.

Order 5 is the one to design out of your fulfillment process rather than fix in the books. Stripe decides the tax at checkout, per transaction. The border looks at the parcel. Consolidating separately taxed orders into a parcel over 150 EUR creates a shipment that cannot be cleared under IOSS, so your customer may be asked to pay import VAT on goods they already paid VAT on. How to handle a parcel like that is a question for your intermediary and carrier. The bookkeeping lesson is simpler: keep IOSS orders in their own parcels, and tell whoever packs your orders why.

What reaches QuickBooks for each order

For a United States QuickBooks company, Acodei's documented tax method is the Tax Product. You create a non-inventory product, such as "Sales Tax," mapped to a liability account, and choose that product in Acodei's Stripe Tax settings. The documentation lists Stripe Tax enabled with Stripe Invoice or Stripe Checkout as the requirement for this method. All Stripe Tax amounts are then rolled into a single line on the QuickBooks invoice or sales receipt, and you use Stripe's tax reports to file and pay from the liability account. Acodei's documentation notes that QuickBooks' own Sales Tax Center does not let third parties create official tax rates for US companies, which is why the product approach is the one that works there.

Applied to the five orders:

  • Orders 1, 2 and 5 reach QuickBooks with the sale and a tax line for the VAT Stripe collected. That VAT lands in the same liability account as any US state sales tax you collect through Stripe Tax.
  • Orders 3 and 4 reach QuickBooks as sales with no tax, because Stripe calculated none. Nothing goes to the liability account. The sale itself is still revenue in your books.

Two consequences follow, and both are worth writing down for whoever closes your books.

First, your liability account now mixes taxes owed to different authorities on different schedules. US state sales tax follows each state's filing period. IOSS follows the calendar month. The account balance on any given day is a blend of both, and only Stripe's reports can split it.

Second, EU revenue and IOSS VAT do not move together. If more of your EU orders cross 150 EUR, the IOSS VAT in the liability account falls even while EU sales hold steady or grow. That is expected, not a sync gap.

The VAT and duty that never touch Stripe

For orders over the limit, the import VAT and any duty are charged at the border. Stripe says the customer is charged them "by Customs when the goods arrive." In that arrangement, the charge sits between your customer, the carrier and customs. It is not your revenue, not your tax, and not a transaction in your books.

The picture changes if you have agreed to pay border charges yourself, for example by shipping on terms where you cover duties and import taxes so the customer pays nothing on delivery. Then the carrier or customs broker bills you, and that bill is the only record of the charge. It comes from the carrier, not from Stripe, so it enters QuickBooks the way any supplier bill does: as a bill or an expense against that vendor.

A few habits keep those bills from causing trouble:

  • Keep them out of the tax liability account. The liability account holds VAT you collected from customers and owe through your IOSS return. A border charge you paid on a different parcel is not that tax, and posting it there makes the account impossible to tie to the return.
  • Agree the expense account with your accountant once. Duties and border charges you absorb are a cost of selling into that market. Which account takes them is a classification decision, and it should be the same every month.
  • Keep the carrier's reference with the bill. When a customer disputes a charge or asks for a refund, the carrier invoice is the document that shows what was paid at the border and why.

Filing the IOSS return from Stripe's data

The Commission's OSS return guidance sets the timing: "The tax period is the calendar quarter for the non-Union and Union scheme and the calendar month for the import scheme." The return and payment are due "by the end of the month following the tax period covered by the return." So every month, your intermediary needs the previous month's IOSS sales, by country, with the VAT on them.

Stripe's tax reports are where that comes from. The itemized export breaks each line item out by jurisdiction, includes a taxability_reason column, and can be filtered by jurisdiction before you export. The summarized export aggregates by jurisdiction and, per Stripe, is the one to "use for country-level filings and VAT OSS." Stripe's page names OSS rather than IOSS, so compare the export to what your intermediary files for the first few months before you rely on it.

Two checks are worth building into the monthly routine.

Check the over-limit orders are really absent. Stripe's itemized export includes non-taxable transactions unless you exclude them. Orders like 3 and 4 above appear there with no tax. Stripe's zero tax page lists zero_rated as the taxability reason when "the transaction is subject to the zero rate," which is the treatment Stripe describes for goods shipped into the EU outside IOSS. Look at how your own over-limit orders are labeled, then make sure none of them has crept into the return.

Check the currency conversion your return needs. The Commission says the return "should be made out in euro" in general, and that where supplies were made in other currencies, the seller or intermediary must "use the exchange rate as published by the European Central Bank on the last date of the tax period." Stripe's filing-currency columns are converted differently. Stripe says it "converts amounts using available exchange rates at the time of the transaction." If you price in dollars, the euro figures in Stripe's export may not be the euro figures the return needs. Confirm with your intermediary which they use, and expect the euro amount on the return not to match the dollar balance in QuickBooks exactly.

That last point is where your books and the return meet. The liability account holds the dollar amount Stripe collected. The return and the payment are in euros. When you pay the IOSS liability, clear the account by the amount you carried for that month's sales. Post any difference between that and what the payment actually cost in dollars to the account your accountant uses for currency gains and losses, not back to tax. Our Stripe multicurrency guide explains why QuickBooks and Stripe disagree about exchange rates in the first place.

What to set up once, and what to check every month

Once:

  • Confirm the IOSS registration is added in Stripe Tax, so low-value EU orders are actually taxed at checkout.
  • Write down how your fulfillment team handles split shipments and combined parcels, with the 150 EUR consignment limit in mind.
  • Decide, with your accountant, which account takes duties and border charges you absorb, and which takes currency differences on tax payments.
  • Make sure the liability account your Stripe tax lands in is understood to hold both US sales tax and IOSS VAT.

Every month:

  • Export the previous month's EU transactions from Stripe Tax and hand them to your intermediary.
  • Confirm over-limit orders are not on the return.
  • Confirm the conversion basis for any sales priced outside euros.
  • Record the IOSS payment against the liability account at the carried amount, with the difference to currency gain or loss.
  • File carrier bills for any border charges you paid as supplier bills, never against the tax account.

For the rest of the cluster, the Stripe Tax glossary entry explains the product itself, and the itemized export and summarized export entries cover the two reports used above. If your customers include EU businesses with VAT numbers, our guide to Stripe customer tax IDs covers what those IDs change on an invoice.

Frequently Asked Questions

What is IOSS in Stripe Tax?

IOSS is the EU's Import One Stop Shop. It lets a seller charge EU VAT at checkout on goods imported in consignments worth 150 EUR or less, and file one monthly return instead of registering in each country. Once you add an IOSS registration in Stripe Tax, Stripe calculates VAT on those low-value packages.

Why does a 160 EUR order to the EU have no VAT in Stripe?

Because it is over the IOSS limit. Stripe says that "if a transaction is over 150 EUR, IOSS won't apply," so it treats the sale as an export and charges no VAT. The customer is charged VAT and duty by customs when the goods arrive.

Does Stripe calculate EU customs duties?

No. Stripe says cross-border sales of goods into the EU might be subject to import taxes and customs duties "which Stripe doesn't calculate." Duties are settled at the border, outside Stripe.

Do I need an intermediary for IOSS as a US business?

Usually. Stripe notes that businesses based outside the EU "normally need to appoint a local intermediary to register for IOSS." The intermediary is liable for the VAT and files the monthly return for you.

Where do duties I pay on behalf of customers go in QuickBooks?

They arrive as a bill from your carrier or customs broker, not through Stripe, so record them as a supplier bill or expense in an account your accountant chooses. Keep them out of the sales tax liability account, which should hold only tax you collected from customers.

How often is the IOSS return due?

Monthly. The European Commission says the tax period "is the calendar month for the import scheme," and the return and payment are due by the end of the following month.

Two tax worlds, one checkout

IOSS is easy to collect once Stripe Tax knows about the registration. The bookkeeping trouble comes from treating every EU order the same. Some orders carry VAT you owe through a monthly return. Others carry none, because the customer settles with customs, or because Stripe saw the order as one shipment over the limit. Read which kind each order is, keep border charges out of the tax account, and the liability account will tie to the return.

Start a free trial to sync Stripe Tax into QuickBooks automatically, so the monthly IOSS tie-out starts from a complete liability account.

Share

Automate your Stripe to QuickBooks sync

Save hours every month. Acodei automatically syncs your Stripe transactions, invoices, and payouts to QuickBooks Online.

14-day free trial · card required · cancel anytime

How Acodei handles this in your stack

Stripe QuickBooks Integration

See how Acodei syncs Stripe payments, fees, refunds, invoices, and payouts into QuickBooks Online automatically.

Or go straight to a capability

Get more operational finance guides like this one

We will only send high-value product and finance content.