ClearingHouse

How to reconcile Stripe payments in Xero manually: a step-by-step guide

By Duncan ·

Xero doesn't have a native Stripe feed the way some other accounting platforms do. If you take payments through Stripe and file your books in Xero, you're reconciling payouts, fees, refunds, and disputes by hand, or paying for a third-party app to do it. Here's how to do it properly yourself, no app required.

This is a genuinely manual process. It takes longer than it should, and it's easy to get wrong in ways that don't show up until your VAT return or your year-end accounts. Follow it carefully.

What's inside a Stripe payout

Stripe doesn't pay you gross revenue. Every few days it bundles up your recent activity and pays out the net result. A single payout can contain:

  • Charges: payments from customers
  • Fees: Stripe's processing fee on each charge (typically 1.5–2.9% + a fixed fee, depending on the card and region)
  • Refunds: money returned to customers, which reduces the payout
  • Disputes: chargebacks initiated by a customer's bank, plus a dispute fee
  • Currency conversions: if you're settling foreign currency charges into your base currency

Your Xero bank feed shows one line: the net amount that landed in your account. None of what's inside it is visible from the bank feed alone. If you record that single line as sales revenue, your P&L is wrong twice over: your revenue is understated by the fees and refunds netted out of it, and your expenses don't show the fees at all.

Set up a Stripe clearing account first

Before reconciling a single payout, set up a clearing account. This is the single most important step, and skipping it is why most manual Stripe reconciliation in Xero turns into a mess.

A clearing account is a bank account in Xero that doesn't correspond to a real bank account. It represents your Stripe balance instead. Every individual Stripe transaction — charges, fees, refunds — gets recorded here as it happens. When Stripe actually pays out to your real bank account, that payout becomes a simple transfer between the two, not a bundle you have to unpick after the fact.

To set it up:

  1. Go to Accounting > Bank Accounts > Add Bank Account in Xero
  2. Search for and select a generic option like "Cash" or manually add an account (some regions call this a "petty cash" or "cash on hand" account type)
  3. Name it something clear, like "Stripe Clearing Account"
  4. Leave it disconnected from any live bank feed. You'll be entering transactions manually

If you settle in more than one currency, create a separate clearing account per currency (more on that below).

Recording charges

For each charge in a payout, you need a Receive Money transaction in the clearing account:

  1. Open the Stripe Clearing Account and go to Create in the top right
  2. Choose the type of transaction and select Receive Money
  3. Enter the gross amount of the charge (not the net amount after fees)
  4. Code it to your sales/income account, with the correct tax rate
  5. Date it using the charge date, not the payout date

If you're invoicing customers through Xero and they're paying via a Stripe-hosted checkout link, it's often cleaner to record the payment against the actual invoice instead of a generic income line, so the invoice shows as paid and your aged debtors report stays accurate. In that case, go to the invoice, click Add Payment, and post it to the clearing account rather than the real bank account.

Doing this one charge at a time only works at low volume. Stripe's Payout Reconciliation Report (downloadable as a CSV from the Stripe Dashboard, under Reports > Payout reconciliation) gives you a line-by-line breakdown of every transaction in a payout, which you can batch-import or work through against the clearing account.

Recording Stripe's fees

Stripe deducts its fee from each charge before the money reaches your balance. Record that fee separately, as a Spend Money transaction in the clearing account:

  1. From the clearing account, go to Create > Spend Money
  2. Enter the fee amount from the balance transaction
  3. Code it to an expense account for merchant/bank fees (create one called "Merchant Fees" or "Bank Fees" if you don't already have one)
  4. Date it the same as the corresponding charge

Do this for every charge, every refund (where a fee applies), and every currency conversion. If you only record the fee on payouts you happen to remember, your P&L understates your true cost of processing payments. On £100k of Stripe revenue at roughly 2%, that's £2,000+ a year quietly missing from your accounts.

Setting up a bank rule speeds this up if your fee percentage is consistent. Go to Manage Account > Bank Rules on the clearing account, create a rule under the Spend Money tab, and set the remainder allocation to your Merchant Fees account. This still requires the fee amount to be identified correctly, so it works best alongside the payout reconciliation report rather than as a full substitute for checking it.

Reconciling the payout itself

Once every charge and fee inside a payout has been recorded in the clearing account, the payout arriving at your real bank account is just a transfer:

  1. Go to the Reconcile tab on your real bank account
  2. Find the statement line for the Stripe payout
  3. Click Find & Match
  4. Look for the matching transfer from your Stripe Clearing Account (if the balance in the clearing account matches the payout amount exactly, Xero will often suggest this automatically)
  5. Confirm the two figures agree exactly, then click Reconcile

If they don't match exactly, don't force it. Go back and check whether a charge, fee, or refund from that payout period is missing from the clearing account. Reconciling a mismatched amount to make the numbers "work" is how errors get buried instead of fixed.

Handling refunds

When you refund a customer through Stripe:

  1. Stripe deducts the refund from your balance immediately, before your next payout
  2. Stripe typically keeps its original processing fee. You don't get that back
  3. If the original charge was against a Xero invoice, go to that invoice, find the payment, and use Refund to generate a matching credit note automatically. This keeps your VAT return correct, since a bank adjustment alone doesn't reduce reported VAT
  4. Post the refund as a Spend Money transaction in the clearing account for the refunded amount, coded against the same income account (or the credit note) as the original sale

For refunds that cross a VAT period, most small businesses record the refund in the period it happened rather than restating the original period. If the amount is material, that's a conversation for your accountant, not a bookkeeping shortcut.

Handling disputes and chargebacks

A dispute isn't the same as a refund. It's a reversal your customer's bank forces, and Stripe adds a dispute fee (commonly around £15) regardless of the outcome:

  1. While the dispute is open: Stripe withdraws the disputed amount plus the fee from your balance immediately. Record both as Spend Money transactions in the clearing account
  2. If you win: Stripe returns the disputed amount (not the fee). Record that as Receive Money in the clearing account
  3. If you lose: the reversal stands. No further entry needed beyond what you've already recorded

Keep the dispute fee in a separate line from your normal Stripe processing fees. It's a real cost, but lumping it in with routine transaction fees makes it harder to spot if disputes start increasing.

Multi-currency Stripe payments

If you take payments in more than one currency, this is where manual reconciliation gets genuinely difficult.

First, enable multi-currency in Xero: Settings > General Settings > Currencies, and add each currency you transact in. Xero will then let you create bank accounts denominated in that currency, rather than converting everything to your base currency on entry.

Then:

  1. Create a separate clearing account for each currency you hold a Stripe balance in (a "Stripe Clearing (EUR)" account, a "Stripe Clearing (USD)" account, and so on), each set to that foreign currency
  2. Record charges, fees, and refunds in their original currency inside the matching clearing account
  3. When Stripe pays out a currency to a bank account in that same currency, reconcile it as a same-currency transfer, exactly as above
  4. If Stripe converts the balance to your base currency before paying out, you'll also see a currency conversion fee in the balance transactions. Record that as its own Spend Money line

Xero automatically posts realised currency gains and losses to a system account (Realised Currency Gains/Losses) whenever a foreign currency bank account is revalued through a spend, receive, transfer, or reconciliation. You don't create these entries yourself, but it's worth checking that account periodically. A large, growing balance there is usually a sign that foreign currency transactions aren't being reconciled promptly, not a sign of a real trading gain or loss.

Where manual reconciliation breaks down

This process works. It also doesn't scale. Once you're doing more than a handful of Stripe transactions a week, a few things tend to go wrong:

  • You batch it up. Falling a month behind on entering charges and fees is common, and it makes spotting a missing or duplicated transaction much harder.
  • Fees get skipped. It's the step most people drop first under time pressure, and it's the one that most directly understates your costs.
  • Multi-currency accounts drift. A clearing account you're not keeping current in real time slowly stops matching your actual Stripe balance, and untangling months of drift is a lot more painful than reconciling weekly.
  • Nobody checks the P&L for what it's actually saying. A "Stripe Clearing" balance that never hits zero, or fees that haven't moved in months, are both signs the process has quietly stopped happening.

None of this is a reason to skip the process. It's real bookkeeping, and it matters. It's a reason to know how much of your time it's costing.

This is exactly what ClearingHouse automates, today, for FreeAgent

Everything above — the clearing accounts, the per-transaction recording of charges and fees, the credit notes for refunds, the payout matching — is what ClearingHouse already does automatically for FreeAgent customers. Not a roadmap item. Live, today, for every customer using Stripe with FreeAgent.

Concretely, here's what it does:

  • Creates a clearing account per currency automatically. The first time ClearingHouse sees a transaction in a currency it hasn't handled before, it creates the matching clearing account in FreeAgent without any manual setup.
  • Records every Stripe balance transaction as it happens. Charges, refunds, disputes, currency conversions, and fees are each recorded individually in the clearing account, not reconstructed later from a payout total.
  • Records fees as their own line, every time. Every fee Stripe deducts is recorded as a separate expense, so it's never silently missing from your accounts. Processing fees and other adjustments land in your Bank & Finance Charges category; currency conversion fees get their own Currency Exchange Gain/Loss line automatically, rather than being lumped in with the rest.
  • Mirrors Stripe invoices in FreeAgent. When a Stripe invoice is finalised, a matching invoice is created in FreeAgent with the same line items, discounts, and tax. When it's paid, the clearing account transaction is explained against that invoice directly.
  • Creates credit notes for refunds automatically, linked back to the original invoice where one exists, so your VAT position stays correct without you creating them by hand.
  • Reconciles payouts against your bank feed automatically. When a payout lands, ClearingHouse looks for the matching bank transaction by amount and by the payout's destination account details, and explains it as a transfer from the clearing account. No manual Find & Match.
  • Lets you map Stripe prices to specific FreeAgent categories, so your P&L breaks revenue down by what you actually sell, not one undifferentiated "Stripe" line.

That's the FreeAgent product as it exists right now. Xero support doesn't exist yet.

Get Xero support first

We're deciding whether and how soon to bring ClearingHouse to Xero, and we're using signups to make that call rather than guessing. Joining the waitlist doesn't sign you up for a mailing list or commit you to anything. It tells us there's demand, and if we build it, you'll be first to know.

If reading this guide made you tired just thinking about doing it every week, join the Xero waitlist and vote with your signup.