Stripe Payout Reconciliation: Why Your Bank Deposits Don't Match Your Revenue
January 30, 2026
You check your Stripe dashboard and see $12,340 in charges this week. You check your bank account and see a deposit of $11,287. Where did $1,053 go?
This isn't a bug. Stripe payouts will almost never match your gross revenue, and the gap isn't always just fees. Refunds, disputes, timing differences, and Stripe's batching logic all affect what lands in your bank account. Understanding how to reconcile the two is essential for accurate bookkeeping — and for not losing sleep over numbers that don't add up.
Why payouts don't match revenue
Stripe doesn't pay you per transaction. Instead, it batches your available balance into periodic payouts (usually daily). Each payout is the net result of everything that happened to your balance since the last one:
- Charges add to your balance (minus Stripe fees)
- Refunds subtract from your balance
- Disputes subtract the disputed amount (plus a dispute fee)
- Dispute reversals add the amount back
- Stripe fees are deducted from each charge
- Adjustments can add or subtract (corrections, account credits)
A single payout is the sum of all these movements. That's why it doesn't match your gross charges.
The reconciliation process
Step 1: Start with balance transactions, not charges
The most common mistake is trying to reconcile payouts against charges. This doesn't work because charges show gross amounts before fees, and the timing doesn't align — a charge created on Monday might be included in Wednesday's payout.
The correct data source is balance transactions. Every event that affects your Stripe balance (charge, refund, fee, payout, adjustment) creates a balance transaction with:
amount— the net impact on your balance (positive or negative)fee— Stripe fees deductednet— the actual balance change (amount - fee)type— what caused it (charge,refund,payout,adjustment, etc.)available_on— when the funds become available for payout
Step 2: Link balance transactions to payouts
Every balance transaction that was included in a payout has a payout field linking it to the specific payout ID. To reconcile a payout:
- Get the payout from the Retrieve Payout endpoint
- List all balance transactions where
payoutequals that payout ID using the List Balance Transactions endpoint withpayoutfilter - Sum the
netamounts of all linked balance transactions - This sum should equal the payout amount
If it does, the payout is reconciled. If it doesn't, there's a pagination issue (you didn't fetch all linked transactions) or a rare timing edge case.
Step 3: Categorize for accounting
For each reconciled payout, break down the balance transactions by type to understand the composition:
| Category | Balance transaction types | Accounting treatment |
|---|---|---|
| Revenue | charge | Income / Revenue |
| Fees | (fee component of charges) | Expense / Payment processing fees |
| Refunds | refund | Contra-revenue |
| Disputes | dispute, dispute_reversal | Varies — expense or contra-revenue |
| Adjustments | adjustment, stripe_fee, contribution | Depends on nature |
This breakdown is what your accountant or bookkeeper needs to record the payout correctly in your general ledger.
Common reconciliation problems
"My payout is less than expected"
Usually one of:
- Refunds processed since your last payout. Refunds reduce your available balance immediately, so they're deducted from the next payout.
- A dispute was filed. Stripe immediately debits the disputed amount plus a dispute fee ($15 by default) from your balance.
- Reserve held. New Stripe accounts sometimes have a rolling reserve that holds a percentage of each charge temporarily.
"My payout is more than expected"
This can happen when:
- A dispute was resolved in your favor. The held amount plus the dispute fee are returned to your balance.
- A Stripe adjustment or credit was applied to your account.
- A refund you issued was reversed (rare, but possible).
"I have charges but no payout"
Check your payout schedule. Stripe has an available_on date for each balance transaction — funds aren't available for payout until this date, which is typically 2 business days after the charge for US accounts (longer for some countries and new accounts). Also check that automatic payouts are enabled and your account isn't in a review hold.
"My accounting software shows different numbers"
This usually comes down to timing: when do you recognize revenue? If your accounting is on a cash basis, revenue is recognized when the payout hits your bank. On an accrual basis, revenue is recognized when the charge succeeds. These will always differ because of the 2+ day delay between charge and payout.
Make sure your accounting software and your Stripe reconciliation are using the same recognition method.
Automating reconciliation
Manual reconciliation works when you process a handful of payouts per month. At scale, it becomes a significant time sink. Here's what an automated approach looks like:
- Sync balance transactions from Stripe on a regular schedule
- Group by payout ID to see the composition of each bank deposit
- Flag discrepancies where the sum of transactions doesn't match the payout amount
- Generate reports that your finance team can review and export to accounting software
The key insight is that balance transactions are the single source of truth. If you have a complete set of balance transactions with their payout associations, reconciliation is just grouping and summing.
A note on Stripe Connect
If you're running a platform with Stripe Connect (where you process payments on behalf of connected accounts), reconciliation gets more complex. Your platform balance includes application fees and transfer amounts, not the full charge amounts. The same balance transaction approach works, but you'll see additional types like application_fee, transfer, and stripe_fee that reflect the platform's cut versus the connected account's share.
Tools that help
Stripe's built-in reporting (under the Reports tab in the dashboard) provides a reconciliation report that groups balance transactions by payout. For many businesses, this is sufficient.
If you need more — like historical trend analysis, automated discrepancy detection, or the ability to drill into any payout and see exactly what charges, refunds, and fees composed it — illumi includes a payout reconciliation report that syncs your Stripe balance transactions and lets you explore and export the breakdown for any payout. It also tracks your fee rates over time so you can spot unexpected changes.
For businesses that use QuickBooks or Xero, illumi also provides accounting-formatted exports that map Stripe transaction types to the appropriate accounts, so your bookkeeper doesn't have to manually categorize each payout.
Track your SaaS metrics with illumi
Connect your Stripe account and get MRR, churn, LTV, and cohort analytics in 30 seconds.
Start Free Trial