The situation
A multi-brand retailer ran each brand’s sales through its own mix of CRM and ERP data, and every new report needed figures pulled from two or three of those systems at once. Over several years, that need had been met the same way each time: someone wired a direct feed to fetch what a report required. The CRM pushed to a report. The ERP exported to a spreadsheet. Finance pulled from both. Each feed made sense on the day it was built, and together they had grown into a web nobody could draw, feeding numbers nobody quite trusted.
The feeds did not agree with each other, because each had its own logic for what counted as a customer or when a sale counted as made. The same question asked of two reports returned two answers, and nobody could say with confidence where a figure in a board pack had actually come from. It traced back through a feed, to a spreadsheet, to another feed, to a system, and somewhere along that chain a rule had been applied that no one remembered agreeing to. When a number looked wrong, there was no thread to pull, so meetings argued about the data instead of the decision in front of them.
What we built
We stopped wiring systems to each other and gave the data one governed home instead, built inside the retailer’s own cloud tenancy across three stages.
Each source system delivered its data into the platform as it was, once, through a single managed feed rather than the tangle of private ones it replaced. The raw arrival was kept, so the team could always see exactly what a source had actually sent. From there, the landed data was shaped to shared definitions and matched across brands and systems: a customer meant one thing, a sale counted on one basis, and that reconciliation happened once, in the open, instead of separately inside every downstream feed.
Diagram: three kinds of source — CRM records, ERP transactions, and files or APIs — flow into a pipeline that sits inside the client's own cloud tenancy. The pipeline has three stages: land the data as received, conform and match it with quality checks, then serve trusted tables. Consumers on the right — business intelligence, analytics and AI — read from the served tables, and every number traces back to its source.
Reporting, analytics and downstream systems all read from that conformed layer from that point on, never from the source systems and never from each other, so one place answered a given question and the answer was the same wherever it was asked. Lineage and quality gates ran the length of the path: every field could be traced back to the source it came from, and data that failed a quality check was caught on the way in rather than discovered in a board pack. The whole layer sat inside the retailer’s own cloud tenancy, so the data never had to leave their control to be governed.
Standing up a conformed definition agreed across brands took longer than another direct feed would have, and that was the real cost. It paid off the first time a new report was a query against a layer that already agreed, rather than one more feed to build and reconcile by hand.
The outcome
Lineage could answer where a figure came from, and quality gates stopped bad data before it spread across brands. Meetings started arguing about the decision instead of the data behind it, and building a new report stopped meaning another feed to wire up. The retailer’s own analytics team now builds directly on the governed layer without needing us to touch it.