Three systems, one customer view — manual reconciliation replaced with an automated data layer
A growing SaaS platform had customer data split across three separate systems: billing in one place, usage metrics in another, account and contact records in a third. Monthly reconciliation was a two-day manual process shared between the finance and customer success teams. There was no single view of a customer. We designed and built a unified data layer with an API and an internal operations interface. Reconciliation now runs automatically on a nightly job. The two-day process is gone.
The Challenge
The three systems had evolved independently and were never designed to talk to each other. Billing was handled by a third-party provider with its own data model. Usage data lived in an internal database with a different customer identifier scheme. CRM records were the only place that had the full account picture, but they weren't connected to either. Any time the finance or CS team needed a complete view of a customer — for a renewal conversation, a billing dispute, or a usage review — someone had to manually pull from all three, match the records by hand, and build a spreadsheet. The process was slow, error-prone, and entirely dependent on a few people who knew how to do it.
The Solution
We spent the first week mapping the data model across all three systems and identifying where the identifier mismatches were. We then built a synchronisation layer: a backend service that periodically pulls from each source, normalises the records into a unified schema, and resolves the identifier conflicts using a matching logic we defined together with the operations team. On top of that, we built an internal GraphQL API and a lightweight operations interface — a single customer view showing billing status, usage, and account details together. The reconciliation job runs nightly and flags exceptions for human review instead of requiring full manual processing.
“The two-day reconciliation was something we just accepted as normal. It took someone mapping it out properly to make us realise how much it was costing us every single month.”