← All posts
·6 min read

How to Reconcile Stripe to Xero for VAT Without Spreadsheets

Most UK and EU SaaS companies reconcile Stripe to Xero using CSV exports and manual tax code mapping. Here's why that breaks — and what a cleaner workflow looks like.

StripeXeroVAT ReconciliationUK SaaSTax CodesAutomation

The hard part is not getting Stripe data into Xero. The hard part is making sure each transaction lands in Xero with the correct VAT treatment, tax code, evidence, and refund handling.

If you're a UK SaaS company selling to UK, EU, or international customers through Stripe and Xero, there's a good chance none of that is happening cleanly today. Most teams are still exporting CSVs, manually assigning tax codes in a spreadsheet, and pushing the data across by hand. It works until it doesn't — and for most growing SaaS companies, it stops working well before anyone admits it.

This is the workflow I'm building Clearkite around. Here's why it breaks, what correct reconciliation actually requires, and what a cleaner process looks like.

This article is for educational purposes only and does not constitute formal tax advice. For complex cases, consult a qualified accountant or tax adviser.

The standard Stripe-to-Xero workflow (and where it falls apart)

Most SaaS companies follow some version of this process each month:

  1. Export a CSV of charges, invoices, or payouts from Stripe
  2. Open the export in a spreadsheet
  3. Manually determine the VAT treatment for each transaction
  4. Look up or manually assign the correct Xero tax code
  5. Create invoices or bank transactions in Xero with those codes
  6. Reconcile bank feeds against what Stripe actually deposited

At low volume, this is tedious but manageable. At a few hundred transactions per month, it starts breaking in predictable ways.

The breaks are quiet

The problem with manual Stripe-to-Xero reconciliation is not that it fails loudly. It fails quietly. A transaction gets the wrong tax code. A refund doesn't get a VAT reversal. An EU B2C sale gets mapped as zero-rated instead of OSS. Nobody notices until the accountant reviews the VAT return — or worse, until HMRC asks questions.

By that point, cleaning it up means going back through months of transactions, re-checking evidence, and amending returns. That's expensive in time and fees.

Sync tools move data — they don't classify it

There are good tools that connect Stripe to Xero. They handle the plumbing: creating invoices, matching payouts, and reconciling bank feeds. But VAT classification still often depends on defaults, rules, or manual accountant review.

The sync tool gets the transaction into Xero. It doesn't determine whether a sale to a customer in France should be treated as EU B2C (OSS at 20%), EU B2B (reverse charge at 0%), or something else entirely. That classification decision — and the evidence behind it — still falls on you or your accountant.

The result is clean-looking Xero data with the wrong tax codes underneath. The books balance, but the VAT treatment is wrong. This is the exact gap I kept seeing: tools could move Stripe data into Xero, but the VAT decision still happened somewhere else. That's why Clearkite focuses on classification first, sync second.

What correct Xero tax code mapping looks like

For a UK SaaS company selling digital services, there are typically four VAT treatments that need to map to specific Xero tax codes.

VAT treatmentWhen it appliesXero tax code (UK)
UK domestic (20%)Customer is in the UK20% (VAT on Income)
EU B2B reverse charge (0%)EU business with valid VAT IDZero Rated EC Services
EU B2C OSS (local rate)EU consumer, no valid VAT IDVaries — often tracked outside Xero or via manual rate
Outside scopeCustomer outside UK and EUNo VAT

A few things make this harder than it looks.

Tax codes vary by Xero organisation

Xero tax codes are not universal. They depend on the organisation's VAT scheme, country, and configuration. "Zero Rated EC Services" is the standard name in UK Xero accounts, but some accountants rename codes, add custom ones, or use different schemes. A correct mapping for one organisation may be wrong for another.

EU B2C OSS rates are per-country

If you sell to EU consumers, the VAT rate depends on the customer's country. France is 20%, Germany is 19%, Sweden is 25%. Xero doesn't natively handle per-country OSS rates in a straightforward way, which is why many accountants track OSS obligations in a separate report or spreadsheet. Getting this right inside Xero usually requires custom tax codes or manual adjustments.

Refunds need reverse entries

When a charge is refunded in Stripe, the corresponding VAT treatment needs to be reversed in Xero. If the original sale was mapped to 20% UK VAT, the refund should create a credit note with the same tax code. If this doesn't happen, your VAT return overstates what you owe.

This is one of the most common reconciliation errors. Stripe processes the refund. The bank feed shows the money going out. But the Xero entry either has no tax code, the wrong tax code, or doesn't exist at all.

Multi-currency adds another layer

If you bill in multiple currencies, Xero needs the correct exchange rate for each transaction. Stripe and Xero may use different rates on different dates. Small discrepancies compound over hundreds of transactions and create reconciliation differences that someone has to investigate.

What your accountant actually needs

Most accountants don't want a raw Stripe CSV. What they need for clean month-end reconciliation is:

  • Every transaction classified into the correct VAT treatment, with evidence
  • Mapped to the right Xero tax code for the specific organisation
  • Refunds matched to their original transactions with reversed VAT treatment
  • Exceptions flagged — transactions that couldn't be classified with confidence, so the accountant can make the call
  • A summary by treatment category — total UK domestic VAT, total reverse charge, total OSS, total outside scope

If you provide that, month-end is a review exercise. If you provide a Stripe export, month-end is a classification exercise — and you're paying your accountant to do work that should have been done upstream.

The cost compounds quietly

The spreadsheet approach has a cost that grows with transaction volume, even if it's not always visible.

Accountant time. Classifying transactions, mapping tax codes, investigating discrepancies — at £150–300/hour, a few hours per month of VAT cleanup adds up fast.

Silent errors. Misclassified transactions that slip through create incorrect VAT returns. Corrections mean amended filings, potential interest, and more accountant time.

Scaling pain. The workflow that works at 50 transactions per month does not work at 500. But most companies don't change the process until something goes wrong — which usually means it was broken for months before anyone noticed.

A cleaner Stripe-to-Xero VAT workflow

The alternative is not "a better spreadsheet." It's a workflow where classification happens automatically, close to the transaction, with evidence stored alongside the result. This is what I'm building with Clearkite:

  • Classify as transactions arrive — not in a month-end batch, but as each Stripe charge is processed, based on customer location, VAT ID status, and available evidence
  • Validate VAT IDs, don't assume themreverse charge is supported by actual VIES validation, not by whatever a customer typed into a field
  • Flag exceptions immediately — conflicting evidence or missing data goes to a review queue, not a default tax code
  • Map to the right Xero tax codes per organisation — based on their actual Xero configuration, not a generic default
  • Sync with the right codes already applied — refunds carry reversed treatment, and the accountant reviews classified data, not raw exports

Your accountant deserves better than a CSV

If your current process involves exporting from Stripe, manually assigning tax codes, and hoping nothing was misclassified — there's a better way to spend that time.

Clearkite is the classification layer between Stripe and Xero. Your accountant gets clean, mapped, reconciliation-ready data instead of raw exports.

If this sounds familiar, Clearkite is currently in early access for SaaS teams and accountants dealing with Stripe-to-Xero VAT reconciliation.

Get early access to Clearkite →

Stop reconciling Stripe VAT by hand

Clearkite connects to Stripe, classifies transactions, validates VAT IDs, flags exceptions, and produces cleaner Xero-ready outputs for reconciliation and reporting.

Clearkite is currently in private beta for UK and EU SaaS companies using Stripe.

Get early access to Clearkite