Splitting B2B leasing from D2C in one HubSpot Commerce portal
A hardware company ran high-touch institutional leases and a transactional web store in the same HubSpot portal. The two motions collided — blank invoices, orders multiplied by lease term. The fix was separating them, not restarting.
A hardware company leases devices to institutions on multi-year contracts and also sells prepackaged kits through a direct-to-consumer web store — two fundamentally different revenue motions running through one HubSpot portal on Commerce Hub. The tool bent the wrong way: invoices generated blank, e-commerce orders duplicated by lease term and shipped the wrong quantities, and web-only products leaked into institutional quotes. This is a first-principles account of separating transactional and contractual sales in the same portal: custom-coded workflow actions to reshape inbound order data, validation as an integrity gate, catalog visibility to keep the motions apart, and fulfillment-aware deal stages.
1 Two motions obey different rules
A transactional D2C sale and a high-touch B2B lease are not two flavors of the same pipeline; they obey different rules. One is instant, self-serve, and shipped from a catalog. The other is a negotiated multi-year contract with an obligated party, a billing schedule, and a legal document. Run both through one portal without separating them and the system applies one motion’s rules to the other — and the data integrity breaks in ways that look like random bugs.
The breakages here were concrete: invoices generated with no customer and no line items; web-store orders duplicated once per lease year, with ship quantities multiplied by the term, so a four-year lease of six units tried to ship twenty-four; and web-only kit programs selectable inside the institutional quoting flow. None of these is a mysterious defect — each is one motion’s logic misfiring on the other.
Separate the motions before you fix the symptoms. Decide where transactional and contractual sales diverge — catalog, quoting, invoicing, fulfillment — and isolate each. The blank invoices and multiplied orders are downstream of one un-separated model.
2 Custom-coded actions are the escape hatch
The native e-commerce connector mapped the web store into HubSpot with the wrong shape — duplicating orders by lease term, multiplying quantities, dropping addresses. When a native connector maps wrong, the escape hatch is a custom-coded workflow action: a small piece of code inside a HubSpot workflow that reshapes the inbound data before it lands — de-duplicating by term, preserving shipping and billing addresses, and correcting base-kit quantities. It’s the difference between accepting a connector’s defaults and controlling the data model.
3 Validation is an integrity gate
Blank invoices — no customer, no line items — are a data-integrity failure, and the cure is prevention, not cleanup. Required-field validation on the deal (billing address, obligated party, term) is a gate: a record can’t reach the stage that generates a document until the fields that document needs exist. The orphaned, half-built deals that produced empty invoices simply can’t form.
4 Keep the catalogs apart
Web-only kit programs were selectable inside institutional quotes, so a rep could put a D2C product on a B2B lease. Product-catalog visibility keeps the motions from contaminating each other: the transactional catalog and the contractual catalog are curated so each quoting flow only sees what belongs to it. It’s the same discipline as filtering an ERP catalog — the picker should show what’s valid here, not everything that exists.
5 Stages that know about shipping
A hardware sale isn’t done at “closed won” — a physical unit still has to ship and be paid. The deal pipeline needs fulfillment-aware stages (“shipped,” “paid”) that a pure software funnel never has, plus a simple first-order flag so new-customer versus expansion revenue becomes reportable. Cheap properties, high analytical payoff: without them, the business can’t tell growth from repeat.
6 What changed
Invoices populate because the deals that generate them can’t form without their required fields. Web-store orders arrive in HubSpot correctly shaped, with the right quantities and addresses. The two catalogs stay apart, so quotes only contain valid products. And fulfillment-aware stages plus a first-order flag make the physical, mixed-motion business reportable. Two motions now coexist in one portal without corrupting each other — no restart required.
Details are generalized and figures are representative of the engagement; specifics vary by business.
7 The model, generalized
Any business running two motions in one system faces the same exercise:
- Separate the motions where they diverge — catalog, quoting, invoicing, fulfillment.
- Reshape bad connector data with custom-coded actions instead of accepting the defaults.
- Gate with required-field validation so incomplete records can’t generate documents.
- Control catalog visibility so one motion’s products can’t leak into the other’s quotes.
- Model fulfillment-aware stages and a first-order flag for a physical, mixed-motion business.
The same “model before software” discipline runs through migrating an advisory firm off a legacy CRM, modeling a dealer channel, and separating sales from delivery in a project-based business.