Payment Processor Reconciliation
Overview
PSPs (PayPal, Stripe, Square, Adyen, Braintree) net out fees, refunds, chargebacks, and disputes before depositing to your bank. The bank sees a single net number; your books need the gross. Every reconciliation problem comes from this gross-vs-net gap.
Core principle: For every PSP payout to your bank, you must be able to explain — line by line — what gross sales, fees, refunds, and adjustments add up to that exact net amount. If you can't, something is wrong.
The reconciliation equation
Gross sales (in period)
− PSP fees
− Refunds issued
− Chargebacks / disputes
− Reserves held
± Adjustments (currency, rounding)
= Net payout to bank
If left ≠ right, find the line that breaks it before adding a plug entry.
Workflow
Step 1: Pull the 3 source documents
For the period being reconciled, get:
- Bank statement — the deposits from the PSP
- PSP payout report — Stripe Dashboard → Payouts; PayPal → Reports → Activity Download
- Accounting record — QBO/Xero PSP clearing account transactions
Step 2: Match payouts 1:1 to bank deposits
Each PSP payout = one bank deposit (usually 1-2 day delay).
| PSP payout date | PSP payout amount | Bank deposit date | Bank deposit amount | Match? |
|---|---|---|---|---|
| 2026-05-01 | $4,832.17 | 2026-05-03 | $4,832.17 | ✓ |
| 2026-05-08 | $3,201.50 | 2026-05-10 | $3,201.50 | ✓ |
| 2026-05-15 | $1,876.22 | ??? | — | ✗ MISSING |
If a payout is missing from the bank: check (a) PSP reserve hold, (b) account-on-hold notice, (c) routing change.
Step 3: For each payout, break down the gross
In Stripe: click the payout → "Show details" → CSV export.
Each payout row should be one of:
charge(gross sale)refundadjustment(chargeback, dispute, currency conversion)application_fee/stripe_feetransfer(account-to-account)
Sum each category for the period. The sum should match the payout amount.
Step 4: Reconcile to accounting
In QBO/Xero, your PSP should appear as a clearing account (current asset). Workflow:
- Customer pays via PSP → debit Clearing Account, credit Revenue
- PSP charges fee → debit Fee Expense, credit Clearing Account
- PSP issues payout → debit Bank, credit Clearing Account
- End of period: Clearing Account = funds sitting in PSP not yet paid out (should reconcile to the PSP's "Balance" on that date)
If your books are recording net deposits as Revenue, you're losing 2.9% of revenue visibility — and your COGS/margins are wrong. See references/journal-patterns.md for the correct entries.
PSP-specific gotchas
See references/psp-quirks.md for the full list. Top 5:
Stripe
- Instant Payouts have a 1% fee on top of the 2.9% — easy to miss
- Stripe Tax auto-collects sales tax; that goes to Sales Tax Liability, NOT Revenue
- Disputes show as $-15 in payout for the dispute fee, then $-original_amount when lost
- Connect platforms have nested fees (application_fee + Stripe fee)
PayPal
- PayPal Working Capital loan repayments come out of payouts — looks like a fee but it's debt service
- Currency conversion uses PayPal's rate, not market — track the spread separately
- eCheck payments take 3-5 days; show as pending then clear
Square
- Instant Deposit has 1.75% fee; standard deposit is free but 1-2 day delay
- Square Capital loan repayment is a hold-back %, not a fixed amount
Multiple PSPs
- If you use 2+ PSPs, never co-mingle them in one clearing account. One clearing account per PSP.
The reconciliation report (Claude's deliverable)
After reconciling, produce this format:
# PSP Reconciliation — [PSP Name], [Period]
## Summary
- Gross sales (PSP): $X
- PSP fees: $X (Y% effective rate)
- Refunds: $X
- Chargebacks: $X
- Reserves change: $X
- **Net payouts: $X**
- **Bank deposits matched: $X**
- **Unmatched: $X**
## Unmatched items (require investigation)
| Date | PSP txn ID | Amount | Notes |
## Journal entries posted
[List]
## Anomalies
- [Refund rate this period: X% vs. trailing 3mo avg Y%]
- [Effective fee rate X% vs. expected Y%]
Red flags
Investigate immediately:
- Effective fee rate > 4% on Stripe → probably card-not-present + international cards; check pricing tier
- Chargeback rate > 1% → risk of PSP account hold
- Refund rate > 10% → product or fulfillment issue
- Reserve growing → PSP risk team flagged you; call them
- Payout missing > 3 days → account issue, call PSP immediately
- Currency conversion losses > 2% of FX volume → negotiate or switch FX provider
Quick reference
| Issue | Where to look |
|---|---|
| Missing payout | PSP Dashboard → Payouts → Status |
| Mystery deduction | PSP Dashboard → Disputes + Reserves |
| Fee anomaly | Pricing page + per-transaction breakdown |
| Bank deposit doesn't match PSP payout | Currency conversion + reserve hold |
| Customer paid but no record | Webhook delivery log (Stripe/PayPal) |