Reconciling your collections with your accounts
Reconciling your collections with your accounts: the three gaps between the amount collected and the bank payout, and a daily method that ties out.
A merchant who reads their first bank statement always asks the same question: why do 47,320 dirhams collected this week become 46,691.52 in my account?
The answer lies in three gaps, all explainable, and a daily reconciliation that takes five minutes once it is in place.
Gap 1: fees
The amount a customer pays is not the amount you receive. The commission is taken on each transaction, and the payout that reaches the bank is a net figure.
That is why the portal systematically shows three numbers on every operation: the amount paid, the fees, and the net. Your accounting needs all three — the gross for revenue, the fees for expenses, the net for cash.
Gap 2: the payout lag
Monday's payments credit your ChariPay payment account on Monday, the instant they succeed — the money is available there without waiting. What reaches the bank, however, is the payout: the distinct operation — by instant transfer on demand, or automatic every night once a settlement account is configured — that groups several collections. It is that payout which appears on the statement, with its own reference.
So a payout can contain payments from several days, and one day of payments can end up split across two payouts. Reconciling payment by payment against the bank statement is a lost cause: it is the payout you reconcile, together with the list of operations that make it up.
Every payout carries a reference that appears on your bank statement. That is your reconciliation key.
Gap 3: refunds
A refund issued on Wednesday may be deducted from a Friday payout. On the statement it does not appear as a separate line: it simply reduced the amount paid out.
Hence the rule: never reconcile a payout without looking at the period's refunds. An abnormally low payout almost always has that explanation.
Daily reconciliation, in practice
- 1Export the day. The payment account's CSV export of transactions covers the period you choose and opens straight in a spreadsheet. Past a few hundred rows it is faster and safer than pagination.
- 2Total by type. Payments, refunds, fees. Three totals, not one.
- 3Reconcile the payouts. For each line of your bank statement, find the matching payout by its reference, and check that its composition explains the net.
- 4Isolate what does not tie out. A persistent gap is almost always a forgotten refund, a payout still on its way to the bank, or an operation from the next day.
An invoice paid by link ties out all the faster when the link's description carries its number: see getting invoices paid online.
The timezone question
This is the quiet trap. A day boundary computed in UTC places payments collected between midnight and 1 a.m. on the previous day, since Morocco is at UTC+1.
In practice: every other day your total does not tie out, for no visible reason. Make sure your reconciliation tool cuts days in Moroccan time, not universal time. Export timestamps are in UTC (ISO format): it is up to your tool to convert them before totalling.
Building the export that adds up
Reconciliation is won when the export is designed, not when the boxes get ticked. Three construction choices make the difference.
Export by value date, not creation date. A sale created on the 31st at 11:50 pm and paid on the 1st at 0:10 am belongs to the next month. If your export mixes the two dates, every month-end will produce phantom differences that cancel out — the most painful kind to explain.
Keep the reference end to end. The ChariPay transaction identifier must live in your system — on the order, on the invoice, on the ledger entry. A reconciliation where matches are found by amount and date is an investigation; with the reference, it is a join. It is also point 6 of the accounting checklist for collecting online. Which identifier comes back where — order, session, webhook — is detailed in matching a payment to its order.
One line per movement, never net amounts. A 500 MAD sale refunded 100 MAD is two movements, not a 400 MAD sale. Net amounts make totals right... until the day the refund lands in another month, and nothing can be explained any more. The other account documents your accountant will ask for — RIB certificate, payout references, receipts for paid bills — are listed in payment account RIB certificate.
Automating without rewriting everything
Useful automation starts long before full accounting integration.
First rung: the portal export, as is, imported into your spreadsheet with references. Manual matching drops from an afternoon to half an hour.
Second rung: a daily script calling the API (see the transactions reference), comparing per-day totals with your database, alerting only on differences. Zero differences, zero work — reconciliation becomes a silence you keep an eye on.
Third rung only then: automatic entries in the accounting tool. It is the longest to make reliable, which is why it comes last — the first two rungs will already have taught you every subtlety of your own flows. If you run a network of sub-merchants, the same logic applies to collection and payouts: see network collection and payouts.
What to remember
Do not reconcile payments against a bank statement. Reconcile payouts, keeping the three amounts of each operation and the period's refunds at hand. Reconciliation then becomes a check, not an investigation.
Next step
To build your reconciliation on realistic data before the first real dirham, open a test account: Start in test mode asks for a name, a work email and your company name, then a password chosen from the activation link sent by email. Make a few payments with the test card and one refund, and train your script on the list of transactions — free, with no time limit. Money going out, from transfers to paying bills from your payment account, reconciles with the same references.
Written by ChariPay team.