Cash sits with the courier.
So it gets a ledger.
Hand over a manifest, import their statement, and match every dinar to an order. The gap between “delivered” and “in your account” stops being a spreadsheet.
Ninety seconds of remittance.
- 1
Hand over the manifest.
Confirmed orders go on one manifest per courier — an order sits on at most one. Tracking numbers stamp the orders; the customer hears about it on WhatsApp.
- 2
Import their statement.
Their CSV or Excel lands as-is — every raw row kept verbatim. The courier's saved column mapping normalizes amounts and statuses, Arabic-Indic digits included.
- 3
Match, flag, reconcile.
Each line finds its order by tracking number, order number or phone-plus-amount. Short, over, fee, returned: the difference is booked with a reason, and a batch cannot reconcile with one open.
Manifests are the hand-over receipt.
Draft to handed over, with a print view for the driver's signature and a CSV for their system. Hand-over dispatches the orders through the same state machine — inventory moves, events write, the audit stamps.
Matching that admits what it cannot match.
Two candidate orders is ambiguous; a claimed order is a duplicate — both wait in a review queue for a human, and re-running the match never touches what a human decided. Posting walks each order through delivered, cash collected and remitted; the courier's date stamps the delivery.
An adapter, not a one-off integration.
Couriers we connect directly — such as Blink — create the shipment at hand-over and keep the order status up to date; receiving the cash stays your call. Every other courier keeps sending an Excel statement, as before.
Screenshots vs a ledger.
| The group-chat way | Raizn | |
|---|---|---|
| The statement | A photo in a WhatsApp group. | A parsed batch, raw rows kept, matched line by line. |
| The difference | You find it at month-end. Maybe. | A variance row with a reason, booked on import. |
| Reconciled | A feeling. | A locked batch: declared equals collected, no open variance. |