PreciseBankFlowPreciseBankFlow home

Stripe Payout Reconciliation to the Bank and Ledger

By PreciseBankFlowPublished October 17, 2026

Stripe payout reconciliation means taking one payout that landed in your bank, listing every charge, refund, dispute and fee Stripe netted inside it, and proving those items add up to the deposit. You then book the charges as gross sales, the fees as expense and the payout as a transfer, so revenue and cash are both right.

What goes into a single Stripe payout?

A single Stripe payout is the net of every balance transaction that became available in your Stripe balance since the previous payout. Stripe adds successful charges, subtracts refunds, dispute withdrawals and its own fees, and sends the remainder to your bank as one credit. The bank line never shows those parts.

Stripe calls each movement in your account balance a balance transaction. Each one has a gross amount, a fee and a net amount. The payout is simply the sum of the nets for the transactions grouped under it. The usual members of a payout are:

  • Charges. A customer paid you. Gross is the price, the fee is Stripe's processing charge, and net is what you keep.
  • Refunds. You sent money back. These carry a negative gross. Whether any of the original fee comes back depends on the account, so read the fee column rather than assuming.
  • Disputes. A cardholder challenged a charge, so the amount leaves your balance, and a dispute fee may come with it. If you win, the money returns on a separate positive line.
  • Adjustments and other fees. Items such as fees for add-on products or corrections Stripe posted to your balance.

Because the bank only sees the total, you cannot reconcile Stripe from the bank statement alone. The detail lives in Stripe. The rest of this guide is about pulling that detail out and tying it back.

Pulling the itemized Stripe payout export

The itemized export is the file that turns one bank credit back into its parts. In the Stripe Dashboard it is the Payout reconciliation report, which groups the transactions settled in each automatic payout by reporting category, such as charges, refunds and fees. Download the itemized version, not the summary.

Stripe's documentation for the Stripe payout reconciliation report lists the columns in the itemized file. A handful of them do almost all of the matching work:

Column What you use it for
automatic_payout_id Groups every line under the payout it was paid in
automatic_payout_effective_at The date Stripe expects the payout to reach your bank
reporting_category Tells charges, refunds, disputes and fees apart
gross, fee, net The three amounts you book and total
balance_transaction_id A unique key, useful for spotting a line counted twice
invoice_number or payment_metadata[key] Links a charge back to the invoice or order in your books

Two optional columns earn their place. customer_facing_amount shows what the customer saw when they paid in a different currency, and trace_id carries the reference a bank uses to locate the transfer. Stripe notes that custom metadata can be added to the itemized CSV, which is the cleanest way to get your own order numbers into the file.

Summary or itemized?

The summary file gives one row per reporting category per payout. It is enough to post a journal entry. It is not enough to prove which sales are inside the payout, so keep the itemized file as the support and the summary as a convenience.

Matching a Stripe payout to its bank deposit by arrival date

Stripe groups payouts by their estimated arrival date, not by the date your bank posts the credit. Most of the time those are the same day. Around weekends, holidays and month-end they drift apart, so match on amount first and date second, within a window of a few banking days.

The documentation is explicit that the report uses the estimated arrival date shown on the Payouts page. It also warns that report data runs on its own processing schedule, so a payout can reach the bank before its detail is ready to download. If you reconcile on the first morning of the month, the last payout of the old month may not have its itemized lines yet. Wait for them rather than estimating.

A workable matching order:

  1. Sort bank credits from Stripe by amount.
  2. Sort payouts in the export by net total per automatic_payout_id.
  3. Pair exact amounts where the bank date falls on or shortly after the expected arrival date.
  4. For anything left, compare the trace ID if your bank prints a reference on the statement line.
  5. List payouts that Stripe shows as sent but the bank has not posted. These are in transit at month-end.

The bank description is little help on its own. Stripe's column notes say most banks truncate the payout statement descriptor and show it inconsistently, and some do not show it at all. Do not build a matching rule that depends on that text.

Booking a Stripe payout gross in QuickBooks or another ledger

Book a Stripe payout gross: record the full charges as sales, refunds as a reduction of sales, Stripe fees as an expense and dispute amounts in their own account, then move the net to the bank. Booking only the deposit amount as income understates both revenue and fees.

Most teams give Stripe its own balance sheet account in the ledger, named something like "Stripe balance". It behaves like a small bank account held at the processor. Activity flows in at gross, and each payout is a transfer from that account to the operating bank account. At any date, the ledger balance of the Stripe account should equal the balance Stripe reports.

For a Stripe QuickBooks reconciliation, the practical pattern is the same. Post a journal entry or a sales receipt per payout that splits the categories, with the bank deposit matched to the transfer side. When the bank feed brings in the deposit, it matches to that transfer instead of being added as new income. You can also reconcile the Stripe balance account itself in the ledger's reconcile screen, using Stripe's balance report as the statement.

Other ledgers follow the same logic with different screens. If the books are in Sage, the guide to reconciling a bank account in Sage covers where the transfer side gets cleared. The same clearing approach works for other processors too: reconciling Square deposits applies it to a card terminal, and reconciling PayPal transactions to an account that often holds money for weeks.

Stripe payout reconciliation worked for one deposit

A worked Stripe payout shows the full chain from charges to bank line. The figures below are an example for one daily payout of a small subscription business. None of them come from a real account.

The itemized export for payout po_example_0412 shows these totals by reporting category:

Reporting category Count Gross Fee Net
Charge 38 6,412.00 -195.94 6,216.06
Refund 2 -240.00 0.00 -240.00
Dispute 1 -89.00 -15.00 -104.00
Fee (add-on product) 1 0.00 -12.50 -12.50
Payout total 5,859.56

The bank statement shows a credit of 5,859.56 from Stripe on the expected arrival date. The amounts agree, so the payout is matched.

The journal entry for this payout, in example accounts:

Account Debit Credit
Stripe balance 6,412.00
Sales 6,412.00
Sales returns and refunds 240.00
Stripe balance 240.00
Disputed charges 89.00
Stripe fees 223.44
Stripe balance 312.44
Operating bank 5,859.56
Stripe balance 5,859.56

The Stripe balance account nets to zero for this payout: 6,412.00 in, 240.00, 312.44 and 5,859.56 out. The 223.44 of fees is 195.94 on charges, 15.00 for the dispute and 12.50 for the add-on. If the business uses invoices, the 38 charges should also tie to 38 invoices marked paid, which is where invoice_number in the export saves time.

What to check when the totals do not agree

If the bank credit differs from the payout total, look first for a line in the export dated after the payout cut-off, then for a manual payout taken the same day, then for a second payout that arrived on the same date. A difference equal to one line's net almost always means that line belongs to a neighbouring payout.

When Stripe payout matching breaks: instant, failed and negative payouts

Three kinds of Stripe payout fall outside the normal report. Instant payouts are not tied to a batch of transactions, failed payouts return money to the Stripe balance, and a negative balance can mean Stripe debits your bank instead of crediting it. Each needs its own handling.

Instant and manual payouts. Stripe's documentation says that because you control the timing and amount of an instant payout, it cannot say which transactions are inside it. The payout reconciliation report covers automatic payouts. If you use manual or instant payouts, reconcile the Stripe balance like a bank account instead: opening balance, plus activity, minus payouts, equals closing balance. Stripe's own guidance points to its Balance report for this case.

Failed payouts. A payout that the bank rejects comes back to the Stripe balance. The report has a separate failed payouts section, and the itemized file includes a column for the later payout that retried those transactions. In the ledger, reverse the transfer you booked for the failed payout, then book the retry when it lands. Without that, the same money looks paid out twice.

Debits from your bank. When refunds and disputes exceed new charges, the Stripe balance can go negative and has to be funded. If your bank statement ever shows a debit from Stripe, that debit is a transfer into the Stripe balance account, not an expense. Book it that way, or the fees and refunds behind it will be counted twice.

How do you reconcile the Stripe balance itself at month-end?

Reconcile the Stripe balance at month-end by comparing the Stripe balance account in your ledger to the ending balance Stripe reports for the same date. The difference should be zero. Any gap means a payout, refund or fee was booked in the wrong period or not at all.

The payout reconciliation report has an ending balance reconciliation section for exactly this. It lists transactions that had not been paid out as of the report's end date. Those lines are the money still sitting at Stripe, and they make up the month-end balance. Its summary uses the same categories as the payout section, so a ledger account that tracks Stripe at gross should agree category by category.

A short month-end routine:

  1. Run the report for the calendar month, using your reporting time zone.
  2. Confirm every automatic payout in the month has a matching bank credit, or is listed as in transit.
  3. Agree the ledger's Stripe balance account to the ending balance in the report.
  4. Agree sales booked from Stripe to gross charges in the report for the month.
  5. Keep the itemized CSV with the reconciliation as support.

The time zone deserves a note. Stripe reports in UTC unless you choose a time zone. A business in California that runs the report in UTC will see evening sales on the 31st fall into the next month. Pick one time zone and use it every month.

Stripe proves its own side. The bank statement proves the cash arrived. PreciseBankFlow is built for the bank side of that check: it confirms each statement foots from opening to closing balance and matches statement lines to your ledger, so a Stripe credit that never posted shows up as an unmatched item rather than a guess.

All posts in Payment and deposit reconciliations