Tax Handling
How to handle VAT, GST, and sales tax collection and remittance across jurisdictions using Stripe Tax.
Why
Tax compliance is non-optional: if you sell to customers in the EU, you must collect and remit VAT; if you sell to customers in the US, you must collect and remit sales tax in states where you have nexus. The rules are complex and change frequently: the EU's VAT MOSS, the US's Wayfair decision (economic nexus), and the UK's post-Brexit VAT rules all require you to track where your customers are, calculate the right tax rate, collect it, and remit it to the right authority. Doing this manually is impossible for a small team — the rates change, the thresholds change, and the filing cadences vary by jurisdiction. Stripe Tax (or Anrok, Octobat) automates this: it tracks your customers' locations, calculates the right rate, adds it to the invoice, and generates the filing reports you need to remit. The most common mistake is ignoring tax until you get a notice from a tax authority — by then, you owe back taxes plus penalties, and you have to retrofit tax collection into your billing system under pressure. Set up Stripe Tax at launch; it costs 0.5% per transaction and handles the complexity.
When
At launch. Set up Stripe Tax before the first international customer pays — retroactive tax collection requires re-issuing invoices and is a compliance nightmare.
How
1. Enable Stripe Tax on your Stripe account — it costs 0.5% per transaction and handles rate calculation, collection, and reporting 2. Set your tax registrations: add each jurisdiction where you have a registration (your home country, plus any country where you exceed the VAT threshold — EU threshold is €10k, US is state-by-state) 3. Collect the customer's location at checkout: billing address (street, city, postal code, country) — this determines the tax rate; do not rely on IP geolocation, which is wrong 5-10% of the time 4. Validate the customer's tax ID: for B2B EU customers, validate the VAT number via VIES and store it on the customer — if valid, reverse-charge applies (no VAT charged, customer self-accounts) 5. Let Stripe Tax calculate the rate on every invoice: it knows the rate for every jurisdiction and updates when rates change — do not hardcode rates 6. For US sales tax: Stripe Tax tracks your economic nexus in each state and tells you when you need to register — register in a state when you exceed its threshold 7. Generate filing reports from Stripe Tax at each filing cadence (monthly, quarterly, annually depending on jurisdiction) — these reports have the tax collected by jurisdiction, ready to remit 8. Remit the tax to each authority on time — late remittance carries penalties; use the Stripe Tax report as the source of truth and set calendar reminders for filing deadlines
Example
# Stripe Tax setup
// 1. Enable Stripe Tax
await stripe.tax.calculations.create({
customer_details: {
address: { line1: "123 Main St", city: "Berlin", postal_code: "10115", country: "DE" },
tax_ids: [{ type: "eu_vat", value: "DE123456789" }],
},
line_items: [{ amount: 2900, quantity: 1 }],
});
// Returns: subtotal 2900, tax 551 (19% Germany VAT), total 3451
// 2. B2B reverse-charge (valid VAT number)
// Customer in Germany with valid DE VAT number → no VAT charged
// Invoice notes: "Reverse charge — customer self-accounts for VAT"
// 3. US sales tax (economic nexus)
// You exceed $100k sales in California → register in CA
// Stripe Tax auto-calculates CA rate (7.25% base + district) on every CA invoice
# Filing report (quarterly, from Stripe Tax)
# Q3 2025 Tax Collected by Jurisdiction
# Germany (VAT 19%): $1,234 collected → remit to Bundeszentralamt für Steuern
# California (7.25%): $567 collected → remit to CDTFA
# UK (VAT 20%): $890 collected → remit to HMRCCommon Problems
- ⚠Ignoring tax until a tax authority sends a notice — by then you owe back taxes plus penalties, and you have to retrofit tax collection under pressure. Set up Stripe Tax at launch.
- ⚠Relying on IP geolocation for customer location — IP is wrong 5-10% of the time (VPNs, corporate proxies), and you charge the wrong tax rate. Collect and validate the billing address.
- ⚠Not validating B2B VAT numbers — you charge VAT to a business that should be reverse-charged, and they ask for a corrected invoice. Validate via VIES and apply reverse-charge.
Best Practices
- ✓Use Stripe Tax (or Anrok) from launch — it handles rate calculation, nexus tracking, and filing reports for 0.5% per transaction, and is far cheaper than a tax-compliance failure.
- ✓Collect and validate the billing address, not just IP — the address determines the tax rate, and IP geolocation is wrong 5-10% of the time.
- ✓Validate B2B VAT numbers via VIES and apply reverse-charge — this avoids charging VAT to businesses that should self-account, and prevents corrected-invoice requests.