Worked example · one PSP, one month, small enough to check by hand
Below is everything payrecon was given: what Stripe says happened, the two payouts, the bank statement and the ledger's Stripe clearing account. Two mistakes are hidden in the ledger. Add the numbers up yourself, then compare with the proof and the breaks the engine found. Every figure on this page comes from these records and nothing else.
dataset.json (these records) Excel workbook Exact import file breaks.json report.html Back
Each line is one sale or refund in Stripe's payout report. Gross is what the customer paid, fee is what Stripe kept, net is what goes into the payout.
| Order | Type | Date | Gross | Fee | Net | In payout |
|---|---|---|---|---|---|---|
| ORD-1001 | charge | 3 Aug | €100.00 | €1.75 | €98.25 | A |
| ORD-1002 | charge | 5 Aug | €50.00 | €1.00 | €49.00 | A |
| ORD-1003 | charge | 10 Aug | €80.00 | €1.45 | €78.55 | A |
| ORD-1004 | charge | 18 Aug | €120.00 | €2.05 | €117.95 | B |
| ORD-1002 | refund | 20 Aug | -€50.00 | €0.00 | -€50.00 | B |
| ORD-1005 | charge | 22 Aug | €60.00 | €1.15 | €58.85 | B |
| Totals | €360.00 | €7.40 | €352.60 | |||
Stripe pays out the net of its lines. Payout A holds the first three sales; payout B holds the last two sales and the refund.
| Payout | Paid on | Net of its lines | Payout amount |
|---|---|---|---|
| A | 14 Aug | 98.25 + 49.00 + 78.55 | €225.80 |
| B | 28 Aug | 117.95 − 50.00 + 58.85 | €126.80 |
Both payouts arrived the next day. The remittance text carries the payout id, which is how they are matched.
| Date | Counterparty | Remittance | Amount |
|---|---|---|---|
| 15 Aug | STRIPE PAYMENTS EUROPE LTD | STRIPE po_example_A | €225.80 |
| 29 Aug | STRIPE PAYMENTS EUROPE LTD | STRIPE po_example_B | €126.80 |
Every posting on the Stripe clearing account, debit positive. Sales go in, fees, refunds and payouts go out. The mistakes are in here.
| Date | Posting | Description | Reference | Category | Amount |
|---|---|---|---|---|---|
| 31 Jul | 26000001 | Beginsaldo Tussenrekening Stripe | opening | €100.00 | |
| 3 Aug | 26000002 | Verkoop ORD-1001 | ORD-1001 | sale | €100.00 |
| 5 Aug | 26000003 | Verkoop ORD-1002 | ORD-1002 | sale | €50.00 |
| 10 Aug | 26000004 | Verkoop ORD-1003 | ORD-1003 | sale | €80.00 |
| 14 Aug | 26000005 | Stripe kosten uitbetaling A | po_example_A | fee | -€4.20 |
| 15 Aug | 26000006 | Uitbetaling Stripe A | po_example_A | payout | -€225.80 |
| 18 Aug | 26000007 | Verkoop ORD-1004 | ORD-1004 | sale | €120.00 |
| 20 Aug | 26000008 | Retour ORD-1002 | ORD-1002 | refund | -€50.00 |
| 29 Aug | 26000009 | Uitbetaling Stripe B | po_example_B | payout | -€126.80 |
| Closing balance | €43.20 | ||||
Expected closing = opening + sales + refunds + chargebacks + fees + payouts arrived. The difference to the ledger must be fully explained by the breaks below.
| PSP | Opening | Sales | Refunds | Chargebacks | Fees | Payouts arrived | Expected closing | Ledger closing | Difference | Explained | Unexplained |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Stripe | €100.00 | €410.00 | -€50.00 | €0.00 | -€7.40 | -€352.60 | €100.00 | €43.20 | -€56.80 | -€56.80 | €0.00 |
| PSP | Amount | What happened | Proposed entry |
|---|---|---|---|
| Stripe | €60.00 | Stripe charge ch_1005 for €60.00 (order ORD-1005, 22 Aug 2026) has no booking. | Dr 1105 €60.00 Cr 2999 €60.00 |
| PSP | Amount | What happened | Proposed entry |
|---|---|---|---|
| Stripe | €3.20 | Stripe charged €7.40 in fees this period but only €4.20 is booked; €3.20 is missing. | Dr 4410 €3.20 Cr 1105 €3.20 |
Expected closing is what the clearing account should hold if everything Stripe reported were booked:
| Opening balance (31 Jul) | €100.00 |
| + sales (five charges) | €410.00 |
| − refund | -€50.00 |
| − Stripe fees | -€7.40 |
| − payouts that reached the bank | -€352.60 |
| = expected closing | €100.00 |
| Ledger closing (table 4) | €43.20 |
| Difference (ledger − expected) | -€56.80 |
The two breaks explain the difference exactly:
| Sale ORD-1005 is missing from the ledger, so the ledger is too low by | -€60.00 |
| The fee on payout B is missing from the ledger, so the ledger is too high by | €3.20 |
| Sum | -€56.80 |
That sum equals the difference, so nothing is left unexplained. Booking the two proposed entries moves the ledger to €100.00, and the account is proven. The Exact import file holds exactly those two entries.
The planted mistakes, for the record: The sale of ORD-1005 (60.00 on 22 Aug) is in Stripe's data but not in the ledger. The Stripe fee inside payout B (2.05 + 1.15 = 3.20) was never booked; only payout A's 4.20 was.