$11.8M in Receivables, Collected Systematically

$11.8M
gross open receivables
7,700+
open invoices under management
2,500
individual payer contacts tracked
Daily
automated risk re-scoring
The challenge: collections lived in inboxes and spreadsheets
This US insurance services firm bills insurance carriers for claims investigation work — an unusual AR profile where the people who approve payment are ~2,500 individual claims adjusters spread across 1,200+ carrier customers. Open invoices stretched back years, and the ledger stood at $11.8M gross with over 1,500 invoices more than 180 days overdue.
The ERP (Dynamics 365 Business Central) held the invoices, but the actual collections work — who called whom, what was promised, which invoice was disputed — lived in personal inboxes, spreadsheets and memory. There was no shared system of record, no prioritisation logic, and no way for a manager to see whether promised payments actually arrived.
The source data was messy in the ways real AR data always is: inconsistent status flags, invoices missing salesperson codes, free-text payer names that couldn't be joined to anything, and historical rows from a legacy accounting system polluting the queue. Any automation had to survive that reality rather than assume clean inputs.
What we built: a collections workspace on top of the ERP — not inside it
We built a custom AR collections platform that reads Business Central data through Azure Synapse, scores every account's risk daily, generates and routes follow-up tasks automatically, and sends templated dunning emails and statements through Microsoft Graph — while the ERP stays untouched as the clean source of record.
The design principle was read-only on the ERP: a daily sync mirrors open AR from Business Central (via an Azure Synapse view) into the platform's own Azure PostgreSQL database, and everything the team creates — call logs, notes, promises to pay, disputes, tasks, emails — is written back to the platform, never the ERP.
On top of that foundation sits the workflow engine the team actually lives in:
- Work queue & dashboards — a prioritised queue of open invoices with aging, ownership and follow-up status, plus KPI cards for total open AR, 30+ day overdue and promises due this week.
- Balance-weighted risk scoring — a weighted-average-days-overdue score recalculated daily for every payer, so a $50,000 invoice at 60 days outranks a $500 one at 90 — feeding four escalation tiers up to executive level.
- Automated task generation — grouped outreach tasks on a twice-monthly cadence for routine accounts, plus weekly tasks for broken promises to pay and seriously aged invoices — auto-closed when paid or resolved.
- Promise-to-pay tracking — every promise gets a date and amount, auto-creates a follow-up task on the promise date, and fulfilment is measured — including milestone tracking for payment plans.
- Dunning emails & statements — escalating templates from friendly reminder to formal notice, sent through Microsoft Graph from the company's own mailboxes with the full trail logged against the account.
- Role-based visibility — Entra ID single sign-on with five roles, so sales reps see only their own accounts while managers and executives see their tier of the escalation pyramid.
The Microsoft environment: Synapse, Graph, Functions, Entra
The whole platform runs on the client's existing Microsoft estate: Azure Synapse serves consolidated ERP views, Azure Functions run the daily sync and task-generation schedules, Microsoft Graph handles email and SharePoint document access, and Entra ID provides single sign-on — no new passwords, no data leaving their tenant.
Invoice PDFs stay in SharePoint and are opened on demand through Graph rather than being copied into the platform. A separate verification job even checks that each PDF actually contains the invoice it's supposed to — because filename-based matching had burned the team before.
Authentication uses managed identities throughout, so there are no connection-string secrets to rotate. Deployment is fully automated: a push to the main branch builds a container and ships it to Azure Container Apps.
Intelligent automation on messy data — without pretending it's AI magic
This platform is a case study in getting automation right before layering AI on top. The intelligence is deterministic and auditable: a risk-scoring algorithm the finance team can explain to an auditor, escalation rules they can edit in a settings screen, and task cadences they control — thresholds, templates, routing and override rules are all configurable in-app without a code deploy.
That matters in collections, where every automated action is a customer touchpoint with money attached. The result is a system the team trusts — and a clean, structured activity dataset (every call, promise, dispute and email) that makes an AI layer for reply drafting and prioritisation a straightforward next step rather than a leap of faith.
The result: $11.8M worked systematically instead of reactively
Collections went from inbox archaeology to a managed pipeline. Every payer has an owner, a risk tier and a next action. The executive team sees its escalation tier — around $3M of the ledger — without asking anyone for a spreadsheet. Broken promises surface automatically after seven days instead of whenever someone remembers.
Management reporting that used to be assembled by hand — collector productivity, promise fulfilment, aging trends — now comes off the platform's own activity data, with a daily snapshot history that makes the trend line real rather than reconstructed.
Frequently Asked Questions
Why build a custom collections platform instead of buying AR software?
Off-the-shelf AR tools assume a standard payer model — one AP contact per customer. This client chases 2,500 individual claims adjusters across 1,200 carriers, with escalation logic tied to their org structure. A custom build matched the real process, ran inside their Azure tenant, and cost less than enterprise AR licences for a team this size.
Does this kind of platform change or write to the ERP?
No — the ERP stays read-only. Invoice data flows out through Azure Synapse into the platform's own database, and all collections activity is stored alongside it. Finance keeps a clean source of record, and there's zero risk of automation corrupting the books.
How does automated task generation actually work?
Scheduled jobs score every payer daily using a balance-weighted days-overdue algorithm, then generate follow-up tasks on defined cadences: grouped outreach for routine accounts twice a month, weekly tasks for broken promises to pay, and immediate escalation when an account crosses a risk threshold. Tasks route to the right tier — AR team, account rep or executive — and close themselves when the invoice is paid or disputed.
Can dirty AR data stop a project like this?
It's the norm, not a blocker — this ledger had inconsistent status flags, missing salesperson codes and un-joinable free-text names. The build absorbed that with resolution logic and review queues rather than requiring a data cleanup project first. How messy your data is affects sequencing, not feasibility — that's one of the things our AI readiness assessment establishes upfront.
How much of your ledger is being worked systematically?
If collections at your company live in inboxes and spreadsheets, tell us about the process — size, staffing, how standardised it is. We'll show you what a system of record with automated prioritisation would look like on your ERP and Microsoft stack.