Check your own payouts free. Every Stripe payout in the last 90 days, matched to the cent. Nothing stored. Run the check →

Guide

How to reconcile Stripe payouts in Xero: what Xero matches on its own, and what it can't

A Stripe payout shows up in your Xero bank feed as one line: $4,812.33 in, from Stripe. Behind it are eighteen charges, eighteen fees and a refund. Whether Xero can explain that line by itself depends on how the money was collected, and most SaaS businesses are on the side where it cannot.

Two different Stripe connections, and they do different jobs

Xero talks to Stripe in two ways. The first is Stripe as a payment service: a Pay now button on Xero invoices, so a customer pays the invoice by card and Xero knows about the payment because it created the invoice. The second is the Stripe feed: a bank-feed style import of your Stripe balance activity into a Stripe account inside Xero. Stripe's own support page says that once the feed is connected, transactions import from the most recent payout only, so it does not backfill history. Everything in this guide about automatic matching is about the first connection. If you bill customers through Stripe Checkout, Payment Links or Stripe Billing, there is no Xero invoice behind the charge, and the match described below has nothing to match.

What Xero records when a customer pays a Xero invoice through Stripe

Three things happen on their own. Xero records the payment against the invoice and marks it paid. Xero creates a spend money transaction for the Stripe fee on that payment; Stripe's documentation says this happens automatically when the payment is made. And the payment is tied to the Stripe charge ID, the ch_ reference, which is what the payout match uses later. You choose in the payment service settings whether to absorb the fee or pass it on to the customer. One setting matters here: in Xero's payment service settings you pick the bank account the payout will land in, and it has to be the account Stripe pays out to.

How the payout gets matched

When the payout reaches the bank account in Xero, Xero looks up the transactions Stripe says are inside that payout and matches them to your Xero invoices by charge ID. Stripe's support page puts it plainly: Xero will usually suggest a match between the bank payment and the Stripe payments and fees it recorded, and you click OK to accept it. If no match is suggested, open Find & Match on the payout line and tick the payments and the fee yourself. The fee is a spent item, so it only appears when spent items are included in the list. The payout matches when the invoice payments, minus the fees, minus any refunds in the same payout, equal the bank line to the cent.

When the automatic match does not happen

Stripe lists the conditions. Auto reconciliation is available only when the Stripe account is on an automatic payout schedule; a manual schedule means every payout is a Find & Match. It is not supported when one Stripe account is connected to more than one Xero organisation. Stripe subscriptions cannot be managed through Xero invoicing; the suggested workaround is a repeating invoice in Xero with Stripe as the payment method, and auto pay on a repeating invoice only works on templates that are approved for sending. And invoices created in Stripe cannot be transferred into Xero at all. In practice the match also breaks when a refund or dispute from an earlier payout is deducted from this one, because the amount Xero expects is now larger than the bank line by exactly that refund.

The SaaS case: Stripe Checkout, no Xero invoice, one bank line

This is where most founders and their bookkeepers live. Stripe charged eighteen customers through Checkout, your app recorded the sales, and Xero's first sight of any of it is a $4,812.33 deposit. There is no invoice to match, so Xero offers to create a receive money transaction for $4,812.33, and the easiest wrong move is to code it to Sales. That records net, not gross: revenue is understated by the $150.00 of fees, the $37.67 refund never appears as a refund, and a dispute would vanish into the deposit too. The fix is a Stripe clearing account.

The clearing account method, step by step

Create a bank-type account in Xero called Stripe clearing, with no bank feed attached, and an expense account called Stripe fees. Then, once a month or once a week, post the gross activity from Stripe's payout reconciliation report into the clearing account: a receive money of $5,000.00 for the charges coded to Sales, a spend money of $150.00 coded to Stripe fees, and a spend money of $37.67 coded to Refunds or against Sales, all dated inside the period. Now reconcile the real bank line, $4,812.33, as a transfer from Stripe clearing to your bank account. The clearing account started at zero, took in $5,000.00, paid out $187.67, and transferred $4,812.33 out: it is back to zero. That zero is the whole check. If it is not zero after every payout in the period is matched, something inside a payout was never posted.

Refunds and disputes that cross payouts

Stripe takes a refund out of the next available payout, not the payout that carried the original sale, and a dispute takes the disputed amount plus a $15 fee the day it opens. In the clearing account method this is fine: the refund is a spend money dated the day it was issued, the dispute and its fee are two spend money lines dated the day it opened, and the payout that is $52.67 smaller as a result still transfers out of the clearing account and still leaves it at zero. In the invoice-matching flow it is the usual reason a suggested match is missing: the payout no longer equals the invoices Xero expected. Use Find & Match, include the refund or dispute line, and the total comes right.

What to look at on the last day of the month

Open the Stripe clearing account. Its balance should equal exactly the payouts Stripe has created but your bank has not yet received, which you can read off the Payouts page as anything still Pending or In transit. Any other balance is a charge, fee, refund or dispute that was posted on one side and not the other. Then open Stripe, set the month, and compare gross volume to the Sales you posted and the fee total to the Stripe fees account. If both agree, your books match Stripe, and the month can close.

Know which payout to look at before the close

Conciliq reads your payouts with a read-only key every morning and rebuilds each one from its balance transactions. A payout whose lines are only charges and fees is Matched; one carrying a refund or dispute from an earlier sale is Timing, with the amount; one that does not add up is Unexplained. The monthly close report lists fees and refunds per payout, which is the clearing-account posting written out for you. Conciliq never writes to Xero. We can see your data, never touch it.

Check yours

Does the money Stripe paid you match your books?

Upload a Stripe export or paste a read-only key. Every payout in the last 90 days, matched to the cent, usually in under a minute. Nothing stored.

Run the free audit →

Questions people ask

Does Xero automatically record Stripe fees?
For invoices paid through Xero's Stripe payment service, yes: Stripe's documentation says Xero creates a spend money transaction for the fee when the payment is made. For charges that did not start as a Xero invoice, such as Stripe Checkout or Stripe Billing, nothing is recorded until you or a sync tool post it.
Why does Xero not suggest a match for my Stripe payout?
The usual reasons, from Stripe's own list: the Stripe account is on a manual payout schedule, the same Stripe account is connected to more than one Xero organisation, or the payout carries a refund or dispute that makes it smaller than the invoices Xero expected. Use Find & Match and include the fee and any refund lines.
Should I record the Stripe payout as sales in Xero?
No. The payout is net of fees and refunds, so coding it to Sales understates revenue by exactly your Stripe fees. Post the gross charges, fees and refunds into a Stripe clearing account and record the payout as a transfer from that account to your bank.

More guides