All transformationsFitness Equipment Manufacturing & Distribution

The Fitness Equipment Company

Three systems. No shared substrate. The CFO was running finance from a spreadsheet bridge.

active~50 employees, 8 sales territories
The SaaS TrapThe ERP Trap

I'm the one receiving the last layer of it — and right now that layer is me, manually.

Finance lead describing invoice and freight reconciliation in the first architecture session

What was happening.

The situation

  • A specialty fitness equipment manufacturer selling through eight sales territories, key accounts, dealers, and an e-commerce replacement-parts channel.
  • HubSpot held customer relationships. Their ERP (a cloud manufacturing and operations platform) held orders, inventory, and finance. The two systems did not speak.
  • Freight quotes and installation requests lived in the gap between deal creation and order fulfillment — handled manually, not modeled.
  • Territory boundaries existed but were undefined in the system: no geographic mapping, no rep visibility into account penetration.
  • Sales team adoption was a known problem. The CEO issued a public mandate. The pattern: people agreed in meetings, then continued working around the system.
  • A franchise account structure — corporate gym chains with hundreds of locations — could not be represented. Corporate vs. franchisee orders, blanket POs, and rollup reporting were tracked in spreadsheets.
  • The CFO owned the last mile of every financial transaction manually, bridging what the ERP produced against what HubSpot showed.

The symptoms

  • No unified revenue view across direct sales, dealers, key accounts, and e-commerce
  • Freight and installation quoting handled outside the system — no tracking, no status, no automation
  • ERP and CRM treated as separate sources of truth; reconciliation was a human job
  • Territory rep visibility into accounts and opportunity penetration: zero
  • Franchise company hierarchies unmodeled — corporate vs. location revenue invisible
  • Replacement parts e-commerce creating buyers with no follow-up path into sales relationships
  • CFO manually bridging invoice and order data between systems

Where it stands now.

What's different

  • A future-state data model has been architected across all commercial objects: freight quoting, installation tracking, territory assignment, and franchise hierarchies are now modeled — not just described.
  • The CFO joined the architecture conversation and shaped it directly; her operational knowledge of the finance layer is now built into the data model rather than worked around.
  • A training certification activation went live early in the engagement — first proof that the team could move faster when AI handled the low-signal work.
  • The architecture decision to use native HubSpot objects (no custom objects) has been validated against the full commercial complexity of the business.
  • ERP integration surface has been defined: what syncs to HubSpot, what stays in the ERP, and where the source of truth boundary sits.

What's still messy

  • The data model is designed but not yet built — the gap between architecture and running infrastructure is still open
  • Sales team adoption is a known political challenge; the CEO mandate alone has not closed the behavioral gap
  • ERP integration requires technical assessment of the API surface before any build begins
  • Territory geographic definitions need validation with the sales leadership before they can be implemented
  • The franchise hierarchy data does not yet exist in HubSpot — it has to be built from scratch

The universal pattern.

When two systems each believe they are the source of truth, a human becomes the integration layer. That person — usually in finance or operations — absorbs all the friction the architecture didn't solve. The design work isn't done until that person's manual reconciliation job disappears.

See the full picture — all six engagements, all six patterns.

All transformations

See your situation in one of these?

Start with a conversation. There's no scope to commit to before we both understand what you're working with.