Ilya Shkura
EN UK RU

Cases · Reconciliation · month close

Closing March across seven channels: what was sold, what arrived, where the rest is

Self-initiated case study on synthetic data in the documented formats, with the disagreements planted on purpose. The code that reconciles reads only the files, but it was written by the same person who planted them, so this is a demonstration of the method, not a blind test.

€93,170had not reached the shop's account on 31 March, and where each part is

Goal

A shop sells through its own Shopify store, where customers pay by card, PayPal, Klarna, bank transfer or cash at the till; on amazon.de; and by invoice to a US wholesale customer through Stripe, in dollars. At the end of March the owner asks how much actually came in this month, and where the rest of the money is.

Challenge

Eleven files across seven channels: Shopify orders, Shopify Payments, PayPal, Klarna, Amazon All Orders and settlements, Stripe in dollars, and two bank accounts. No two write the same thing the same way: a Klarna sale is three rows keyed by a UUID, Amazon writes one row per amount type, and the bank has one line per payout and none per order.

Solution

Rules written down before counting: which sales belong to March, that money is received when the bank books it, each provider's cut-off, fees held to the contracts, and credits that are not a customer's money kept apart. Each order was joined to its provider and each payout to its bank line, and every channel's bridge from sales to the bank was closed to the cent.

Outcome

Received in March: EUR 422,108.80 and USD 32,753.08. EUR 93,170.12 had not reached the account on 31 March: EUR 42,234 paid out in March and booked in April, EUR 33,656 not yet paid out, EUR 7,938 held by the providers, and EUR 9,341.59 a payout the bank never booked. 28 records did not agree, each with what to do. EUR 33,132 that came into the account is not revenue: a transfer from savings, a currency conversion and a shareholder loan. 119 refunds, EUR 12,307.90, are still to go out.

The 28 records that did not agree

Download JSON

As the close delivers them, and as data for the shop's own tools. Amounts in EUR unless marked USD.

Showing 28 of 28

ChannelWhat went wrongReferenceIn the shopAt the providerIn the bankDifferenceWhat to do
Shopify PaymentsOrder paid, no card charge#1039438.95——-38.95Ask Shopify support; the order may have been marked paid by hand
Shopify PaymentsCharged less than the order#9838273.00260.50—-12.50Collect the difference or correct the order
Shopify PaymentsOrder paid, no card charge#8935337.85——-337.85Ask Shopify support; the order may have been marked paid by hand
Shopify PaymentsCharged less than the order#834552.9548.00—-4.95Collect the difference or correct the order
Shopify PaymentsCharged twice#7560266.00266.00 + 266.00—266.00Refunded already; the fee of the second charge was kept
Shopify PaymentsCard charged for an order paid through PayPal#903147.9547.95—47.95The customer paid twice: refund one of the two payments
Shopify PaymentsCard charged for an order paid through PayPal#9490745.00745.00—745.00The customer paid twice: refund one of the two payments
Shopify PaymentsCard refund differs from the order's refund#909099.00103.95—-4.95Find who refunded the difference and why
Shopify PaymentsAdjustment with no order2026-03-12—-23.40—-23.40Ask Shopify what the adjustment was for
Shopify PaymentsChargeback, the order still reads paid#7795154.00-154.00 and a 15.00 fee—-169.00Answer the dispute, or record it on the order
Shopify PaymentsPayout never reached the bankpayout 2026-03-18—9341.59—-9341.59Ask Shopify for the payout's trace; check the bank account on file
PayPalOrder paid, no PayPal payment#8041582.00——-582.00Search PayPal by the customer's e-mail; the order may be marked paid by mistake
PayPalRefund in PayPal, none in the shop#92320.00-45.00—-45.00Find who refunded it and why; record it in the shop or claim it back
KlarnaFee above the contract (3.49% for 2.99%)KL2026032349282.99%3.49%—-146.50Claim the difference from Klarna
KlarnaHeld back as a rolling reserveKL202603234928—2000.00—-2000.00Ask Klarna why and until when; it is the shop's money
Bank transferCustomer paid a different amount#8067224.10—209.10-15.00Probably the customer's bank charges; invoice them or write it off
CashDeposit differs from the tillweek of 09 March1748.00—1708.00-40.00Count the till against the day reports of that week
AmazonCancelled, but charged302-2534212-3499741 NO-BTL-75Cancelled27.90—27.90Refund the customer
AmazonPaid less than the price304-4103772-7671362 NO-CBL-0214.909.90—-5.00Open a case with Seller Support
AmazonCommission above the rate card302-5103311-7220635 NO-PWR-102.445.24—-2.80Open a case with Seller Support
AmazonShipped, never paid306-2995046-5638590 NO-SCK-0224.90——-24.90Open a case with Seller Support
AmazonFBA fee charged twice303-3618526-6250112 NO-SCK-02-3.12-6.24—-3.12Open a case with Seller Support
AmazonShipped, never paid304-7670079-7856065 NO-LMP-3539.90——-39.90Open a case with Seller Support
AmazonShipped, never paid304-7670079-7856065 NO-SPK-0139.80——-39.80Open a case with Seller Support
AmazonCharge with no order in the report302-8819284-1290456 NO-LMP-35—39.90—39.90Check whether the report was pulled before this order
AmazonRefund larger than the sale304-4179934-8659362 NO-GLV-0134.9069.80—-34.90Open a case with Seller Support
Stripe (USD)Invoice due, not paidNO-US-2026-007USD 3880.00——USD -3880.00Remind the customer
BankCredit nobody can place26.03.2026——310.00310.00Ask the bank for the payer's details

Service

Reconciliation for your own files

The same method on your exports: definitions in writing first, then an independent recount.