RevOps HQ
← BACK TO CASE STUDIES
CASE STUDY8/19/2026

HubSpot–Business Central Integration Case Study: Order-to-Cash for a Industrial Distributor

A distributor quoting from a price list that was three days behind the ERP, with credit holds invisible to sales until an order was rejected. Field ownership assigned per property, availability read live, and orders written once.

CLIENT: Kestrel Industrial Supply

Running Industrial Distribution on HubSpot, or thinking about it?

Schedule a consultation

GET WEEKLY REVOPS INSIGHTS

No spam. Unsubscribe anytime.

Summary

Kestrel Industrial Supply distributes fastenings and fixings to contractors across four states, at roughly 2,400 order lines a month and an average order value of $3,180. Sales quoted from a price list exported nightly from Dynamics 365 Business Central into a spreadsheet, and re-exported when someone noticed it had drifted.

The engagement assigned a system of record per field, replaced the exported price list with a live availability and pricing read, and made order creation a single write from HubSpot into Business Central. Quote-to-order rework fell from 18 percent of orders to 4 percent, quotes issued against unavailable stock fell from 11 percent to under 1 percent, and the median time from accepted quote to confirmed order fell from 2.4 days to 3 hours.

Background: Two Prices for the Same Part

Business Central held the authoritative price. The spreadsheet held the price sales quoted from. Between the two sat a nightly export, a manual refresh nobody owned, and a contract pricing tier the export flattened.

The gap produced two distinct failures. Quotes went out below the current price, which finance corrected after acceptance and which the customer experienced as a price rise. And quotes went out for parts on backorder, because availability was a column in a file rather than a question asked at quote time.

Soh and Sia (2004) studied what happens when an organisation adopts packaged software whose built-in assumptions do not match how it works, and found the gap can be closed in only three ways: change the organisation, change the package, or build something at the boundary between them. Kestrel had chosen a fourth that is not a choice — a spreadsheet in the middle, owned by nobody, reconciled by whoever noticed.

The Audit

Two weeks against the portal, the ERP and eight weeks of order history produced four measurements.

Rework. 18 percent of orders required a price or availability correction after the quote was accepted. Each correction took a median 41 minutes across sales, finance and the customer.

Stale quoting. The exported price list carried a median age of 2.1 days at the point a quote was built from it, and 11 percent of quoted lines referenced stock that was unavailable at quote time.

Credit exposure. Credit hold status existed only in Business Central. Sales discovered a held account when the order was rejected, which happened on 6 percent of orders.

Identity. 340 of 1,910 customer records existed twice across the two systems, ordinarily as a trading name in HubSpot and a legal entity name in the ERP, with no shared key between them.

Identity Before Anything Moves

No two commercial systems share an identifier space. Wand and Wang (1996) treat an information system as a representation of the real world and define a data quality problem as a breakdown in the mapping between the two, and a customer existing twice is exactly that breakdown: one real business, represented twice, with a credit limit attached to one of them.

A dedicated property was created on the HubSpot company to hold the Business Central customer number, with unique values enforced at creation. Matching ran on that key alone. Where no key existed, the record was matched by hand against the ERP rather than by name, because name matching is what produced the duplicates.

Pipino, Lee, and Wang (2002) set out how data quality can be assessed in practice and give uniqueness a metric of its own rather than treating it as a by-product of careful work. The key is what makes it computable here: a weekly job now counts HubSpot companies with no ERP number, and the count is reported rather than assumed to be zero.

Field Ownership, Decided Once

Every field crossing the boundary was assigned an owner before any connector was configured.

Business Central owns price, availability, credit limit, credit hold status, payment terms and every tax determination. HubSpot owns the relationship: owner, lifecycle stage, activity history, quote state before submission. Nothing is owned by both.

Which system owns each field, and the direction the value travelsSeven fields, each listed once. Two vertical axes represent the CRM and the finance system. For each field a connector runs from the axis of the system that owns it to the axis of the system that receives it: company name, deal amount and account owner flow from the CRM to finance; billing address, payment terms and invoice status flow from finance to the CRM. Industry is drawn as a dashed line with no arrowhead at either end, because no system owns it — which means it is written by whichever integration ran most recently. The conflict policy for each field is stated on the right.FIELDCONFLICT POLICYCRMFINANCECompany nameSales maintains it; finance mirrorsBilling addressInvoice of record winsPayment termsContractual; read-only in the CRMDeal amountUntil invoiced, then finance owns itInvoice statusOne direction onlyAccount ownerNo finance equivalentIndustryOwned by neither — decide, or it flapsA dot marks the owning system, the arrowhead the receiving one. One owner per field: a field with two would flap.
One owning system per field, with the losing value's fate written down rather than left to whichever job ran last

The rule that made this hold is that HubSpot never writes a price. It reads one. A quote built in HubSpot requests current price and availability at build time and again at submission, and a difference between the two is surfaced to the seller rather than silently resolved.

The Build

Seven weeks, in four phases, using the Business Central OData v4 endpoints, a private HubSpot app for the write path, and a queue in the client's own Azure tenancy for order submission.

Phase one, identity. The customer number property was created and backfilled, and the 340 duplicates were merged against an agreed survivorship rule with an export taken first.

Phase two, read path. Price, availability, credit limit and hold status were exposed to HubSpot as read-only properties refreshed on demand at quote build and quote submission, rather than on a schedule. A scheduled refresh would have reintroduced the staleness the project existed to remove.

Phase three, write path. Order submission writes once, through a queue, with an idempotency key derived from the HubSpot quote identifier. Applying the same submission twice produces the same order rather than two.

Phase four, credit. Credit hold is read before a quote can be submitted, and a held account blocks submission with the reason shown. The check is in the flow rather than in a report.

Outcomes

Rework. 18 percent of orders before, 4 percent after. The residual is dominated by customer-initiated changes rather than by system disagreement.

Stale quoting. Quoted lines referencing unavailable stock fell from 11 percent to 0.6 percent, the remainder being stock that sold between quote build and submission.

Quote to confirmed order. Median 2.4 days before, 3 hours after. The former figure was dominated by the manual re-key into Business Central, which no longer exists.

Credit rejections. Orders rejected for credit hold fell from 6 percent to 0.2 percent, because the condition is now visible before submission rather than after.

Duplicate customers. 340 before, 0 at go-live, with the weekly unmatched count holding under 5 since.

Finance time. Order-entry time in finance fell by an estimated 22 hours a month, measured as the difference between orders re-keyed manually before and after.

What Resisted

Contract pricing tiers resisted. Business Central computes a customer-specific price from tier, volume break and any campaign discount, and reproducing that calculation in HubSpot would have created a second implementation that could drift from the first.

The mechanism was to stop trying. HubSpot requests a computed price for a customer and quantity rather than the inputs to compute one, so the arithmetic exists once. This is the module boundary Parnas (1972) described: neighbours depend on an interface rather than on internals, and a change to the pricing rules inside Business Central does not propagate outward.

The second difficulty was organisational. Sellers had built spreadsheets around the exported list, and those spreadsheets carried their own annotations. Umble, Haft, and Umble (2003) catalogued what determines whether an enterprise-system implementation succeeds, and training and sustained involvement appear in that list more reliably than any technical variable. The annotations were migrated into notes on the company record before the export was switched off, because switching it off first would have destroyed information nobody had written down anywhere else.

Limits

This does not prove that live reads outperform scheduled syncs in general. Kestrel's gain came substantially from price volatility and stock scarcity; a distributor with stable pricing and deep stock should expect a fraction of the same effect, and would pay the same latency cost at quote time for it.

The write path also assumes order volume that a queue can absorb. At 2,400 lines a month the queue is idle most of the day. A business writing orders continuously would likely need to consider throughput and back-pressure, neither of which was tested here.

Figures are drawn from the client's own order history and from HubSpot reporting. No holdout was run, and the improvement is not separated from a concurrent change in the sales team's compensation plan.

Conclusion

The integration is not a connector problem. Every figure above follows from two decisions taken before anything was connected: which system owns each field, and what identifies a customer across both. The connector can then move what it is told to move.

The general form is that a spreadsheet between two systems is not a workaround. It is a third system, with no owner, no schema and no reconciliation, and it may well be the one the business is actually running on.

References

Haug, Anders, Frederik Zachariassen, and Dennis van Liempd. 2011. "The Costs of Poor Data Quality." Journal of Industrial Engineering and Management 4 (2): 168–193. https://doi.org/10.3926/jiem.2011.v4n2.p168-193

Parnas, David L. 1972. "On the Criteria To Be Used in Decomposing Systems into Modules." Communications of the ACM 15 (12): 1053–1058. https://doi.org/10.1145/361598.361623

Pipino, Leo L., Yang W. Lee, and Richard Y. Wang. 2002. "Data Quality Assessment." Communications of the ACM 45 (4): 211–218. https://doi.org/10.1145/505248.506010

Soh, Christina, and Siew Kien Sia. 2004. "An Institutional Perspective on Sources of ERP Package–Organisation Misalignments." Journal of Strategic Information Systems 13 (4): 375–397. https://doi.org/10.1016/j.jsis.2004.11.001

Umble, Elisabeth J., Ronald R. Haft, and M. Michael Umble. 2003. "Enterprise Resource Planning: Implementation Procedures and Critical Success Factors." European Journal of Operational Research 146 (2): 241–257. https://doi.org/10.1016/S0377-2217(02)00547-7

Wand, Yair, and Richard Y. Wang. 1996. "Anchoring Data Quality Dimensions in Ontological Foundations." Communications of the ACM 39 (11): 86–95. https://doi.org/10.1145/240455.240479

Conflict of Interest

RevOps HQ is a HubSpot Solutions Partner and was engaged and paid by the client described.

Acknowledgments

Prepared by RevOps HQ.

Schedule a consultation

Thirty minutes, no deck. We look at your portal and tell you what this would involve for a industrial distribution business — including whether it is worth doing yet.

HubSpot services

Onboarding, implementation, integration, migration, administration and training, each scoped and priced before the work begins

WEEKLY PROGRAM

RevOps Office Hours

A recurring weekly RevOps operating program. Live support plus hands-on HubSpot implementation work.

$1,500/mo
Monthly Operating Program
  • 1 live Office Hours session per week
  • 4 hours of hands-on implementation work per month
  • Hours allocated against priorities agreed at the start of each period
  • Recurring monthly cadence