How to Reconcile Stripe Balance Transactions
Reconciliation means proving that, for each payout, the sum of the
net of every balance transaction it contains equals the payout
amount — and that the payout amount matches your bank deposit.
The short answer: group the itemized CSV rows by their payout
ID, add up the net column for that payout, and confirm the total
equals the payout and your bank deposit. A balance transaction’s
net is its amount minus its fee.
What a balance transaction is
Every financial event in your Stripe account — a charge, refund, fee, dispute, adjustment or the payout itself — is a balance transaction. According to Stripe’s API, each one carries:
id— a unique identifier (for example,txn_…).reporting_category— what kind of event it is:charge,refund,stripe_fee,payout_fee,dispute,adjustment, and so on.amount— the gross amount (in the smallest currency unit). Positive adds to your balance, negative removes from it.fee— the fee for that transaction (also in the smallest unit).net— the impact on your balance, equal toamount − fee.status—availableorpending.created— when the event happened;available_on— when it settled.
The reconciliation equation
For one payout, the relationship is simply:
Σ net (charges, fees, refunds, disputes, adjustments) = payout amount = bank deposit
The payout also appears as its own balance transaction (type payout,
with a negative net) that moves the money out of your Stripe balance to your bank.
Exclude that row from the sum — it is the total you are checking against, not
a component.
A worked example
One payout (po_ABC) arrives on 2026-08-06. Its itemized CSV has four
component rows:
| Balance txn ID | Category | Amount | Fee | Net |
|---|---|---|---|---|
| txn_1 | charge | 120.00 | 3.78 | 116.22 |
| txn_2 | charge | 84.00 | 2.74 | 81.26 |
| txn_3 | refund | −40.00 | 0.00 | −40.00 |
| txn_4 | stripe_fee | 0.00 | 0.30 | −0.30 |
| Sum of net = payout amount | 157.18 | |||
116.22 + 81.26 − 40.00 − 0.30 = 157.18. The payout is
$157.18, and that is the figure your bank should show as the
deposit.
Step-by-step
-
Export the itemized report
In the Dashboard, open the payout and export the Itemized CSV (or use Reports → Payout reconciliation for a date range). Each row is one balance transaction.
-
Keep IDs and amounts intact
Open the file in a spreadsheet but keep the payout and transaction IDs as text and the amounts as numbers. Don’t let the tool reformat IDs or strip currency symbols.
-
Group by payout
Rows are tied to a payout by an automatic payout ID (or payout ID) column. Filter or sort so you are working with one payout at a time.
-
Sum the Net column
Add up
netfor that payout’s rows. -
Confirm against the bank
The sum should equal the payout amount and your bank deposit. If you settle in multiple currencies, watch for FX conversion before comparing.
-
Investigate any difference
A mismatch usually comes from missing rows, duplicate balance transaction IDs, unparsed (“Unverified”) rows, or transactions still
pending(in a later payout).
Common mistakes
-
Mixing up created and available_on. Match the payout to the
settlement (
available_on) date, not the day each sale happened. -
Counting the payout’s own row as a component. The
payoutrow is the total you are verifying; sum only the transactions that feed it. - Letting a spreadsheet corrupt IDs. All-numeric IDs can be converted to numbers or scientific notation, breaking the grouping. Store them as text.
-
Blank fee cells. Stripe often leaves
feeempty on refund rows;netis stillamount − fee. - Currency conversion. With multi-currency settlement, the sum in one currency may not match a deposit in another after FX.
- Double-counting duplicate IDs. If the same balance transaction ID appears twice, flag it rather than adding it twice.
- Expecting a 1:1 match to charges. The bank shows one payout line, not individual charges — reconcile at the payout level.
How Stripe Money Detective can help. Stripe Money Detective imports the Payout Reconciliation (Itemized) CSV and groups every balance transaction by reporting category, so you can see the composition and reconciliation status at a glance. It flags duplicate balance transaction IDs instead of double-counting them and marks a payout Unverified when a row is missing or cannot be parsed. It supports automatic payouts in a single currency and runs entirely on your Mac — no Stripe connection, no upload. It assists the reconciliation; it is not a substitute for accounting or tax review. See how it works.
Related official resources
- Stripe Docs — Payout reconciliation report (itemized CSV per payout)
- Stripe API — Balance Transactions (amount, fee, net, status)
- Stripe Docs — Balance transaction types (reporting categories)
- Stripe Docs — Receive payouts (settlement timing, pending vs available)