Freight forwarding · 40 staff · Cluj
Four hours every Monday,
matching lines by eye.
- Live in
- 19 days
- Pipelines
- 2
- Hours back
- 17 / month
The week before
Every Monday morning one person opened the previous week's bank statement beside the invoice ledger and matched them line by line. Roughly 300 movements a week: most matched cleanly on amount and reference, a stubborn thirty did not — partial payments, two invoices settled in one transfer, references typed by a human at the other end.
The four hours were not the real cost. The real cost was that nobody knew which invoices were actually unpaid until Monday afternoon, so the chasing always started three days late.
What we built
Two pipelines, deliberately separate. The first pulls the statement daily, normalises the reference field, and matches on amount plus reference plus a date window. Anything it matches with full confidence is written straight to the ledger and never seen by a person.
The second handles everything the first would not touch. It groups candidate matches — one payment against several invoices, one invoice against several payments — and puts them in a single review queue with the evidence attached. A person confirms or rejects; the confirmation writes back.
- daily statement pull · reference normalisation · amount and date window matching
- a review queue for the ambiguous cases, with evidence attached to each
- a Friday summary of what is still unpaid, before the weekend rather than after it
What changed
About four in five movements now match without anyone looking. The Monday session became a twenty-minute pass over the queue, and unpaid invoices surface on the day they go past terms instead of the following week.
What broke
Three weeks in, the bank changed its export format and every reference arrived with a trailing space. The matcher's confidence dropped to almost nothing overnight and the queue filled up with things it should have matched on its own.
Nothing was lost — the queue is the safety net, and it did its job. But the alert we had built fired on failures, not on a match rate falling off a cliff, so it stayed quiet while the pipeline politely did the wrong thing. We added a rate alarm that day. It is now standard on everything we build.