The situation
A national parts distributor set pricing and stock levels in the ERP that ran its warehouse, and showed them everywhere else: a CRM for salespeople, a quoting tool for customers, an e-commerce storefront, a partner portal for resellers, and BI dashboards for the leadership team. Every one of those surfaces was meant to show the same numbers, and by mid-afternoon most days, none of them quite did.
Each surface had picked up its copy of pricing and stock its own way, on its own schedule. One synced from a nightly upload, another from a spreadsheet someone remembered to run, a third from a feed that had quietly failed the previous week without anyone noticing. Every copy had been correct at the moment it was taken, and each had aged differently since. The cost landed on the customer-facing edge: a quote went out at last month’s price, the partner portal showed a part in stock that had sold out that morning, and someone promised a lead time the warehouse could not meet.
What we built
We kept the ERP as the single system of record for pricing and stock, and fed every other surface from it through one governed sync rather than the mix of private uploads it replaced.
Pricing and stock were owned in the ERP and changed only there; every other surface became a consumer of that truth rather than a second source of it. A single sync read from the system of record and pushed current values out to each surface, on a schedule fast enough that nobody downstream noticed the lag. One path meant one behaviour to reason about, one place to see a failure, and one definition of what the current value actually was.
Diagram: the ERP holds prices and stock as the single system of record. A governed platform reads those values once and fans them out to many consumer surfaces as peers — the CRM, quoting, the e-commerce site and customer portal, and business intelligence. Every surface reads the same live values, so they all agree, and nobody uploads figures by hand any more.
The CRM, the quoting tool, e-commerce, the partner portal and the BI layer all read the same fed values from that point on. The portal was one consumer among several rather than a special case, and none of the surfaces kept its own upload running alongside the sync. When a price or stock level changed once in the ERP, every surface changed with it.
The discipline had to be defended after go-live, not just designed in. The recurring pressure was a surface asking for a local override, a convenient place to nudge a price or hold a stock number by hand, and every exception granted would have reopened the exact drift the sync existed to close.
The outcome
A price quoted matched the price shown matched the price billed, and stock on the partner portal matched what the warehouse actually held. The routine questions that used to need a person on the phone, is this in stock, what is the price, started answering themselves from numbers everyone trusted. The distributor’s own systems team now owns the sync and has held the line against new local overrides since we handed it over.