A number that matches nothing
Every few days a deposit from Stripe arrives in the bank. It is an odd amount. It does not match an invoice, it does not match a day's sales, and it certainly does not match the total you see on the Stripe dashboard for that week. Someone in finance opens Stripe in one tab and Xero in another and tries to work backwards.
They find most of the charges, then realise a refund from last week has been netted off, then find a dispute fee, then a currency conversion. After an hour, the difference is a few pounds and they post it to a sundry account to make the line go away. Next payout, it starts again.
Why payouts are hard to reconcile
Stripe does not send you money per sale. It collects many charges into a balance, deducts its fees, takes back refunds and dispute amounts, and pays out the net figure on a schedule. That is sensible for Stripe and awkward for your books, because your ledger thinks in invoices and the bank thinks in payouts.
| Inside one payout | What your books need |
|---|---|
| Many customer charges | Each one marked against the right invoice or sales account |
| Stripe processing fees | Posted to a fees expense account, with VAT treatment right |
| Refunds | Linked to the original sale or credit note |
| Disputes and dispute fees | Recorded separately, with the disputed invoice reopened |
| Currency conversion | Exchange differences handled, not lost in the total |
Integrations that post each Stripe charge as a separate bank line get you part of the way, but they often leave fees, refunds or disputes to be handled by hand, and the running difference grows until someone reconciles it in bulk.
What the gap costs you
The obvious cost is the time spent reverse engineering payouts. The more serious cost is that your revenue, fee expense and receivables are all slightly wrong, and nobody is quite sure by how much. Invoices that were paid through Stripe may still show as outstanding. Refunds may be recorded twice or not at all. A dispute can reverse a sale without anyone updating the ledger.
For subscription businesses using Stripe Billing, the picture is harder still: proration, credit balances and failed payments all feed into the same payouts.
How we reconcile each payout
- Listen for payouts through Stripe webhooks, and for each payout fetch its balance transactions from the Stripe API: every charge, refund, fee, dispute and adjustment that makes up the total.
- Link each charge to its invoice or order: Stripe invoice ID, metadata you already set, or the order number from Shopify, WooCommerce or your own system.
- Post to Xero or QuickBooks through a Stripe clearing account: gross receipts against the invoices, fees to an expense account, refunds against the original sale, dispute amounts to a holding account.
- Record the payout itself as a transfer from the clearing account to the bank, for exactly the payout amount, so the bank line matches without adjustment.
- Check the clearing account balance: after each payout it should return to what Stripe says is still pending. If it does not, the difference is reported with the transactions that caused it.
- Handle currency: charges in other currencies are recorded at the rates Stripe applied, and the difference is posted to exchange gains and losses rather than disappearing.
A daily summary shows payouts processed, anything that could not be linked, and open disputes, so a person looks at a short list instead of reconciling by hand.
What your books look like afterwards
Each payout reconciles with a clear trail from bank line to individual sales. Stripe fees show up in the right expense account, which is useful when you are deciding whether a payment method is worth its cost. Invoices paid through Stripe are marked paid when the money is actually received, and disputes are visible in the ledger instead of only in the Stripe dashboard.
Your accountant can see how revenue, fees and refunds fit together, which removes a common source of year-end questions.
Is this happening in your books?
- Stripe payouts are matched by posting the difference to a sundry account.
- Stripe fees are not recorded separately, or are recorded in bulk once a month.
- Invoices paid by card still show as outstanding in Xero or QuickBooks.
- Refunds and disputes are handled in Stripe but not reflected in the ledger.
- You take payments in more than one currency.