Blog
How to Handle Sales Tax and VAT for a Global Ecommerce Store (2026)
US nexus thresholds, EU OSS and IOSS, UK VAT, and the per-order tax fields an auditor will ask for. A build-and-audit guide for global ecommerce in 2026.

New York requires a remote seller to register once it has passed both $500,000 in gross receipts from goods delivered into the state and more than 100 such sales, measured across the immediately preceding four sales tax quarters (NY Department of Taxation and Finance). Texas uses a flat $500,000 over the preceding twelve calendar months with no transaction count (Texas Comptroller). California measures its $500,000 over the preceding or current calendar year. Alabama's figure is $250,000. All four are sourced in the threshold reference list below.
Four states, four rules, and none of them is something a tax engine decides on a merchant's behalf. That is the first of two things this guide is built around. Collecting is not remitting, and an engine does not make a business compliant. Avalara, TaxJar, Stripe Tax and Vertex rate a transaction accurately. Registration, threshold monitoring, filing calendars, exemption certificate custody, marketplace carve-outs and any back taxes for the period before registration stay with the merchant.
The second is that tax is a record, not a calculation. The number printed at checkout has no evidentiary value on its own. What matters three years later is whether the rate, the jurisdiction, the product category, the taxable base after discounts, the currency and the registration number used were stored on the order and can still be read back. This guide is for the person who configures the store and then has to hand a filing to an auditor. Readers still deciding whether to buy tax automation will find that case in 31 automated tax calculation statistics.
Key Takeaways
- Economic nexus thresholds are not uniform: most states use $100,000, Alabama uses $250,000, and California, New York and Texas use $500,000, with different measurement periods and different rules on whether a transaction count applies (Streamlined Sales Tax Governing Board).
- A tax engine calculates. It does not register a business, file its returns or absorb its liability. Stripe states plainly that the merchant must identify obligations, register, and then file and remit for every location where it is registered (Stripe Tax docs).
- In the EU, a single EUR 10,000 annual threshold covers all intra-EU distance sales of goods and digital services combined, above which VAT is charged at the destination rate (European Commission). Imports of EUR 150 or less can run through the Import One Stop Shop instead of being taxed at the border.
- The UK registration threshold is GBP 90,000 of taxable turnover over any rolling 12 months, or an expectation of exceeding it within the next 30 days (GOV.UK). UK VAT records must be kept for at least 6 years.
- Tax-inclusive versus tax-exclusive pricing is a pre-launch, one-way door. UK consumer price marking law defines the selling price as the final price including VAT and all other taxes (Price Marking Order 2004), so retrofitting gross display later re-bases every stored taxable amount.
- Nine field groups have to survive to audit time on every order: rate and its source, jurisdiction, product tax category, tax-inclusive flag, taxable base after discounts and shipping, currency plus rate at the time of supply, registration number used, exemption reference, and a refund that reverses tax proportionally.
Where a Tax Obligation Actually Starts
An obligation to collect begins when a jurisdiction says a seller has a taxable connection to it. The trigger differs by regime, and in the US it differs by state. Getting it wrong is expensive in one direction: tax that should have been collected is still owed by the seller, out of margin, whether or not the customer ever paid it.
Physical Presence Has Not Gone Away
Economic nexus gets the attention, but physical presence remains the older and broader test. An employee working remotely from a state, inventory in a third-party fulfilment warehouse, a trade show booth or a contractor performing installation can each create nexus below any revenue threshold. Brands that move inventory into a distributed fulfilment network routinely acquire registration obligations in states they have never marketed to, which is worth checking before the expansion rather than after it.
Economic Nexus Thresholds and Their Measurement Periods
Three variables change per state: the dollar figure, whether a separate transaction count applies, and the period over which both are measured. A rolling four-quarter test behaves very differently from a calendar-year test at the end of a strong Q4. The Streamlined Sales Tax Governing Board publishes each member state's threshold, compliance date and official guidance link in one place, which is the practical starting point for a nexus study.
A fourth variable decides which sales count toward the figure. The Streamlined board distinguishes gross sales, where every sale into the state counts, from retail sales, which exclude sales for resale, and taxable sales, which count only transactions that should be taxed. A wholesale-heavy brand can cross a gross-sales threshold in a state where almost none of its revenue is taxable, so a store running both DTC and wholesale has to run the threshold test against the right subset.
- United States, most states: $100,000 in sales into the state. Per-state thresholds, measurement periods and transaction-count rules are published by the Streamlined Sales Tax Governing Board, linked above.
- New York: more than $500,000 in gross receipts and more than 100 sales of tangible personal property delivered into the state over the immediately preceding four sales tax quarters. Both conditions must be met (NY Department of Taxation and Finance, linked above).
- Texas: $500,000 in total Texas revenue in the preceding twelve calendar months, with collection required no later than the first day of the fourth month after the month the threshold is crossed (Texas Comptroller, linked above).
- California: $500,000 in combined sales for delivery into the state during the preceding or current calendar year, including sales by related persons and sales facilitated through a marketplace (CDTFA).
- Alabama: $250,000 in sales into the state, with a flat 8 percent Simplified Sellers Use Tax available in place of local rate lookup (Alabama Department of Revenue).
- European Union: EUR 10,000 per year across all intra-EU distance sales of goods and telecommunications, broadcasting and electronic services combined, above which destination-country VAT applies (Your Europe, linked above).
- EU imports: consignments valued at EUR 150 or less can be declared through the Import One Stop Shop, with VAT charged at the point of sale (European Commission VAT One Stop Shop).
- United Kingdom: GBP 90,000 of taxable turnover over any rolling 12 months, or an expectation of exceeding it in the next 30 days (GOV.UK, linked above). Imported consignments of GBP 135 or less are taxed at the point of sale instead of at the border (HMRC).
Collecting Is Not Remitting
These are two separate obligations with two separate failure modes, and most tooling only touches the first.
Registration Comes Before Collection
Collecting tax where a business is not registered is its own problem: money has been taken from a customer under the description of tax, and there is no return on which to pay it over. Stripe's registration documentation states the sequence directly: identify where obligations exist, register with those authorities, then add the registration before collection starts. It also notes the reverse case, that expiring a registration inside the tool stops collection but does not deregister the business with the authority.
Filing Calendars Belong to the Authority
Filing frequency is assigned, not chosen. It can be monthly, quarterly or annual, it often changes as volume grows, and several jurisdictions require a zero return even in a period with no collections. A missed zero return generates a penalty and a notice, and notices consume more operator time than any other part of compliance. Texas shows how short the clock is: collection is required no later than the first day of the fourth month after the threshold month.
The Period Before Registration
Crossing a threshold in March and registering in September does not erase April through August. The tax on those sales is generally still due, and the seller pays it from its own funds because the customer was never charged. This is the largest financial risk in indirect tax for a growing DTC brand, and delay creates it rather than error. Voluntary disclosure programmes exist to cap look-back periods and waive penalties, but they remedy a problem that threshold monitoring prevents.
The EU and UK Regimes in Operator Terms
The EUR 10,000 Threshold and the One Stop Shop
A seller established in one EU country charges its home rate on intra-EU B2C sales until total intra-EU distance sales of goods plus digital services exceed EUR 10,000 in a year. It is a single combined figure across all destination countries, not a per-country allowance. Above it, VAT is due at the rate of the customer's country, which turns one rate into up to 27. The Union One Stop Shop exists so that this does not require 27 registrations: a seller registers in one member state and declares all of it there.
IOSS and the EUR 150 Consignment Threshold
For goods shipped into the EU from outside it, consignments valued at EUR 150 or less can be handled through the Import One Stop Shop, with VAT charged to the customer at checkout rather than collected at the border. Non-EU sellers generally need an EU-established intermediary to use it. Above EUR 150, normal import rules apply. The regime is also moving. The VAT in the Digital Age package, adopted on 11 March 2025, brings single VAT registration elements into effect on 1 July 2028 and cross-border digital reporting on 1 July 2030.
The UK Sits Outside Both
The UK operates its own thresholds. Registration is required once taxable turnover passes GBP 90,000 over any rolling 12-month period, or when it is expected to pass that figure within the next 30 days, with a 30-day window to apply. Imported consignments valued at GBP 135 or less are taxed at the point of sale rather than at the border, which is the UK analogue of IOSS and a separate configuration from it. A store selling into both markets needs both, and needs to know which one a given order fell under.
Customs duty, DDP terms and landed cost are a customs topic rather than an indirect tax one, and they are decided at the carrier and incoterm layer rather than in the tax engine. That decision belongs with the rest of the cross-border shipping build, covered in global shipping ecommerce statistics.
Tax-Inclusive Versus Tax-Exclusive Is a One-Way Door
What the Display Rules Require
US stores conventionally display net prices and add tax at checkout. EU and UK consumer law goes the other way. The UK Price Marking Order 2004 defines the selling price shown to a consumer as "the final price for a unit of a product, or a given quantity of a product, including VAT and all other taxes". A GBP 50 product is displayed at GBP 50 with the VAT already inside it, not at GBP 41.67 plus VAT. The same principle applies across EU consumer price indication rules.
What Retrofitting Breaks
This is a pre-launch decision because the tax-inclusive flag determines the taxable base, and every stored amount derives from that base. Flip a catalogue from exclusive to inclusive after launch and every price either changes for the customer or changes in margin for the business. Historical orders were computed on the other basis, so a period-over-period comparison silently measures net revenue against gross. Discounts behave differently too: a 20 percent code on a tax-inclusive price reduces the VAT proportionally, while the same code on a net price reduces the base before tax is applied.
In practice a multi-region store makes the decision per region and stores the flag per order. Swell exposes this as separate settings for Product prices include tax and Shipping prices include tax under the store's tax settings, and persists the outcome on the order as `item_tax_included` and `shipment_tax_included` rather than inferring it later. Currency display is a settled question at this layer and is covered in multi-currency pricing statistics; what matters for tax is which currency the tax amount was recorded and filed in.
Digital Goods and the Place-of-Supply Rule
Physical goods are generally taxed where they are delivered. Telecommunications, broadcasting and electronically supplied services to EU consumers are taxed where the customer resides, regardless of where the seller sits, once the EUR 10,000 threshold is passed. That makes customer location evidence part of the tax record rather than a marketing attribute, and it means a download, a membership and a physical item in the same cart can carry three different determinations.
Recurring digital products compound this, because the determination has to be made again at each renewal rather than inherited from the original order. A customer who moves countries mid-subscription changes the rate on the next invoice. Any store running digital subscription products needs tax fields on the invoice, not only on the first order, which is why Swell repeats `item_tax`, `taxes`, `tax_total` and `tax_included_total` on the invoice model as well as the order.
Product Tax Categories, and Why One Rate Fails an Audit
Applying a single rate to an entire catalogue is the most common configuration error and the one an auditor finds fastest. Rates vary by product category in almost every regime: reduced rates for food and children's clothing, exemptions for certain medical items, and in the US, state-level differences on whether clothing, groceries or digital downloads are taxable at all. A catalogue mapped to one code is wrong in both directions, overcharging some customers and undercharging others.
Category mapping has to live on the product record so that it travels with the line item into the order. Swell carries two fields on the product model for this: `tax_class`, which selects between the store's own Standard and Digital classes, and `tax_code`, described in the docs as the "product tax code for tracking with Avalara, TaxJar, etc." Every engine publishes its own code set, and mapping a catalogue onto those codes is merchant-owned work that no engine performs automatically. A cart that mixes a physical item, a digital download and a subscription makes the per-line mapping non-optional rather than a tidy-up task.
Marketplace Facilitator Rules Move Collection, Not Reporting
Every US state with a sales tax now has a marketplace facilitator regime, though the Tax Foundation's research notes there is little uniformity among them and that only 24 states are full Streamlined members offering centralised administration. Under California's Marketplace Facilitator Act the facilitator is the retailer for facilitated sales and collects and remits the tax, and a seller whose sales are all facilitated by a registered marketplace is generally not required to register with CDTFA at all.
Two carve-outs catch operators. First, facilitated sales still count toward the seller's own economic nexus threshold in California, so marketplace volume can push a direct channel over the line. Second, New York requires a registered seller to report facilitated sales on its own return as nontaxable sales, retain the marketplace's Form ST-150 certificate of collection, and keep collecting on everything the marketplace did not facilitate. Collection moved. Reporting, record-keeping and the threshold arithmetic did not.
What a Tax Engine Does Not Do For You
What They Genuinely Do Well
Rating a transaction across thousands of jurisdictions, tracking rate and rule changes, handling address validation and rooftop-level sourcing, and monitoring sales against registration thresholds are all genuinely hard and genuinely solved. Stripe Tax, Avalara, TaxJar and Vertex do this well, and rebuilding it in-house is a poor use of engineering time. The question is not whether to use one. It is what the engine leaves behind.
What Stays With the Merchant
The liability boundary sits well before the parts most buyers assume are covered.
- Determining obligations and registering. Stripe's own documentation puts it on the business to identify every state, province and country where obligations exist and to register with each one before collection begins.
- Filing and remitting. Filing is a separate product or a separate partner in every case. Avalara Returns is distinct from AvaTax calculation and still requires the business to reconcile transactions, review liabilities and approve returns each month. TaxJar AutoFile and Stripe's filing partners work the same way.
- Exemption certificate custody. Accepting a resale or exemption certificate in good faith relieves the seller of tax on that sale only if the certificate is valid, timely and retained. The certificate document itself is the seller's record to keep and produce.
- Marketplace carve-outs. Deciding which orders were facilitated, which were direct, and how each is reported is merchant logic, not engine logic.
- Back taxes before registration. No engine retroactively covers the period between crossing a threshold and registering.
- Deregistration. Turning off collection in the tool does not close the registration with the authority, and an open registration keeps generating filing obligations.
Reality Check: Costs, Certificates and What Breaks
The Cost Line Is Larger Than the Calculation Fee
Engine pricing is visible and modest. Stripe Tax charges 0.5 percent per transaction on its no-code integration, or 50 cents per transaction on the API integration with 10 calculation calls included and 5 cents for each additional call. Its Tax Complete subscription runs from $90 per month, covering 2 registrations a year, 200 transactions a month and 4 filings a year, up to $1,500 per month for 10 registrations and 32 filings. What surprises operators is the rest: per-registration filing fees across 20 or 30 states, accountant hours spent on notices, and the one-off cost of a voluntary disclosure.
Platform pricing is a separate line again. Swell's published plans run from $29 to $2,250 per month billed yearly, each with a trailing twelve-month revenue ceiling of $50K, $250K, $1M or $5M and an overage above the ceiling of 2 percent, 1.5 percent, 1 percent or 0.4 percent, with custom pricing above $10M in annual sales. Tax software, filing and platform fees are three separate budget lines, and only the first is usually in the business case.
Certificates, Invoices and Retention
EU invoicing rules require a full VAT invoice to carry a unique sequential number, the date of issue, supplier and customer names and addresses, the customer's VAT identification number where the customer is liable, a description and quantity of what was supplied, the unit prices, the rates applied and the amounts payable. Invoices are mandatory for most B2B supplies and for B2C distance sales taxed in another member state when OSS is not used. In the UK, VAT records must be kept for at least 6 years, with a simplified invoice permitted where the charge is GBP 250 or less including VAT, and a full or modified invoice required above that.
Retention is where a headless build usually breaks first. If the invoice is rendered by a template at print time rather than stored, and the template has since changed, the document produced in year four is not the one the customer received in year one. Store the issued artefact, or store enough structured fields to reproduce it exactly.
Refunds and Partial Returns
Refunding tax as a flat credit is wrong in a way that survives into the filing. Tax reverses in proportion to the taxable base being returned, at the rate that applied on the original supply rather than today's rate. A partial return of two items from a five-item order that carried an order-level discount requires the discount to be reallocated before the tax portion is computed. Shipping tax is a separate decision again, because shipping may or may not have been taxable in that jurisdiction.
Swell's return model separates these explicitly, with `credit_tax` for "total amount of taxes credited to the order for the returned items" and a distinct `shipment_tax` credit for the original shipping tax. Keeping them as separate stored amounts is what makes a return reconcilable against the original order rather than merely netted against it.
The Data Model: What Has to Survive to Audit Time
An audit does not ask what the store calculated. It asks the store to reconstruct the calculation, which is only possible if the inputs were persisted with the output. Nine things belong on every order.
- The rate applied and where it came from, so that a later rate change does not silently rewrite history.
- The jurisdiction chain, meaning which country, state, county and local rules combined and in what order.
- The product tax category per line item, as it was at the time of sale rather than as it is configured now.
- The tax-inclusive flag, separately for items and for shipping.
- The taxable base after discounts and shipping, which is the figure the rate was actually applied to.
- The currency and the rate at the time of supply, because the filing currency is often not the transaction currency.
- The registration number used, whether that is an OSS or IOSS identifier, a VAT number or a state permit.
- The exemption certificate reference, where the order was exempt.
- A proportional tax reversal on refund, stored as its own amount rather than as a flat credit.
How Swell's Order and Tax Fields Map
For the tax record specifically, what matters is where the values live: on the order document itself, readable through the same REST API that wrote them, rather than assembled at report time out of an app's private storage. The order model carries `tax_total`, a `taxes` array whose entries hold `name`, `rate`, `amount`, `priority` and a `shipping` boolean, plus `item_tax`, `shipment_tax`, `tax_included_total`, `item_tax_included`, `shipment_tax_included` and `taxes_fixed`, documented as indicating that the order is tax-exempt and that taxes will not be calculated when true.
The rest of the nine map cleanly. Taxable base comes from `sub_total`, `discount_total` and `shipment_total` sitting beside the tax amounts on the same document. Currency at the time of supply comes from `currency`, `currency_rate` and `display_currency`. The registration number used comes from `billing.vat_number` on the order itself, with `shipping.tax_id` alongside it for customs identifiers. Product category comes from `tax_class` and `tax_code` on the line item's product. Refund reversal comes from `credit_tax` on the return.
Two of the nine need merchant work rather than a stock field, and it is worth being honest about which. The `taxes` array records a rule `name` such as "NY Sales Tax" and its `rate`, so the full jurisdiction chain and the rate's source are only as detailed as the rule naming convention or the engine response the store chooses to persist alongside it. And `taxes_fixed` records that an order was exempt without holding the certificate, so the certificate reference needs a field of its own. Both are solvable with custom fields on the order, which is the kind of schema extension covered in custom data model statistics, and both are decisions better made before the first exempt order than after the first audit letter.
Where Hosted Platforms Sit
Hosted platforms deserve credit for the common case. Shopify and BigCommerce both handle a single-country store with a standard-rated catalogue with almost no configuration, and at that stage the setup time saved is real. The trade appears later, when the tax record has to be queried rather than exported. That difference only starts to matter once registrations are in double digits.
Choosing Your Setup
The decision is less about which engine and more about how much of the record the store owns.
- Use a hosted platform's built-in tax calculation if the business sells in one country, is below foreign registration thresholds, and has a uniformly rated catalogue. Adding an engine before there is anything to compute is cost without benefit.
- Add a dedicated tax engine on top of a headless platform once there are registrations in more than a handful of jurisdictions, or the catalogue mixes physical, digital and reduced-rate items. The engine rates; the platform stores the record.
- Use a merchant of record if the business sells digital goods worldwide, the team is small, and giving up margin and some of the customer relationship is an acceptable price for moving the liability entirely off the balance sheet.
- Build on an API-first platform such as Swell when the tax record itself has to be queryable, the catalogue mixes one-time and recurring supplies, and compliance reporting needs to read stored fields rather than regenerate them.
- Whatever the choice, decide tax-inclusive versus tax-exclusive per region before launch, and store the flag on every order. This is the only item on the list that cannot be changed later at reasonable cost.
Frequently Asked Questions
If a threshold is crossed in March and registration happens in September, is the gap owed?
Generally yes. The obligation attaches when the threshold is crossed and the compliance date arrives, not when the seller notices. Tax on the intervening sales is typically still due and comes out of the seller's own funds, since the customer was never charged it. Voluntary disclosure programmes can cap the look-back period and waive penalties, but they do not erase the liability.
Do marketplace sales count toward a seller's own nexus threshold?
In California they do. CDTFA instructs sellers to include sales made on their own behalf, sales by related persons, and sales facilitated through a marketplace when calculating the $500,000 threshold. Other states treat this differently, which is why the threshold test has to be run per state rather than once globally.
Can one store display tax-exclusive prices in the US and tax-inclusive prices in the EU?
Yes, and it should. The setting is per region, and the resulting flag belongs on each order rather than being read from current configuration at report time. Swell stores it as `item_tax_included` and `shipment_tax_included` on the order and the invoice, so a filing built later reads what was true at the time of the sale.
What has to be written back when a partial refund is issued?
The proportional share of tax for the returned lines, computed at the original rate on the original taxable base after any reallocated discount, plus a separate decision on whether the shipping tax is being credited. Storing a single flat refund amount makes the order impossible to reconcile against the filing period it belongs to.
How long do tax records have to be kept?
At least 6 years in the UK under VAT Notice 700/21. EU member states set their own periods under the invoicing rules, and US states commonly require 3 to 4 years, longer where a return was never filed. Building for the longest applicable period is the cheaper mistake.
Does a subscription renewal need a fresh tax determination?
Yes. Place of supply is assessed at each supply, so a renewal for a customer who has moved countries, or a renewal that crosses a rate change, is determined on its own facts. That is why tax fields have to exist on each generated invoice and not only on the original order.
Is a tax engine enough to be compliant?
No. An engine rates transactions and, in several cases, monitors thresholds and offers filing through a partner. Registration, the choice of what to register for, certificate custody, marketplace reporting and liability for the pre-registration period remain with the merchant. Compliance is an operating process that an engine supports rather than replaces.