A CRM built around how you actually sell.

Pipelines, properties and permissions mapped to your real sales process, not the default setup.

Six services. One revenue system.

E-commerce services / CRM architecture

One architecture, two regions.

Page Pros sells across the US and Canada. We built a single HubSpot architecture both regions work inside — shared where the team works, separated where the numbers are read — without the Business Units add-on.

Stack — HubSpot · WooCommerce Subscriptions · Square · Zapier
The symptom
Two regions inside one business is where most HubSpot setups quietly fracture.

Page Pros, a Canadian e-commerce services firm, sells three products across the US and Canada. The default move is to give each region its own portal, or its own everything inside one — and it fails the same way every time. The team ends up mentally running two platforms. A property means one thing on one side and something slightly different on the other. Within a year, nobody can produce a single number that covers the whole business.

The owner wanted two regions to read separately without the team feeling like it worked in two systems.

What we built — the object layer
One shared object layer. Contacts, companies, and deals carry the same properties and the same lifecycle in both regions.

So anyone moving between them works in one system with one vocabulary. The separation happens at the reporting layer instead — metrics break out cleanly by country.

Shared
Where people work — one mental model for the team
Separated
Where numbers are read — two sets of figures for the owner

We did it with property architecture and reporting rather than the Business Units add-on, which is cheaper and, for two regions sharing one business model, the right answer anyway.

Three pipelines — 01 Sales
On top of that layer, three pipelines — each following a sequence the business already ran.

The sales pipeline tracks a deal from first contact to payment, with closed-won set by the payment completing — not by a rep deciding the deal feels done. The stage reflects an event that happened in the world. What follows the payment is a creation order, and the order is the finding.

The path in

One checkout, then everything else follows.

Payment completed.
Immediately
Contact createdDeal created
Then
Company created
Only once the company exists and is active
Marketing status unlocked

The emails below are gated on this. Build them in the obvious order and they fire into a gap.

Deal closed, properties written→Account manager assigned→Welcome sent→Onboarding call booked
If unbookedReminder if unbookedFollow-up assigned after five days
Onboarding form completed. Business detail lands on the record before the first call.
Three pipelines — 02 Service
The service pipeline follows the actual delivery lifecycle — not a generic ticket template.

Onboarding and discovery, strategy and setup, then maintenance and review on a repeating rhythm — instead of a template that would only have tracked whether someone replied to an email. Alongside it, the renewal cycle runs on the same record, month after month, without anyone touching it.

The recurring cycle

The month runs itself.

Monthly meeting invitation, from the customer's own account manager
Renewal taken→Record updated: payment dates, deal value, lifetime sales→Receipt sent
Next month
Review request, every six weeks
Service delivery
Onboarding and discovery→Strategy and setup→Maintenance and review

Two rhythms on the same record. Neither depends on anyone remembering.

Three pipelines — 03 Renewal
A separate renewal pipeline, so a renewal in difficulty is a record moving through defined stages rather than an absence somebody eventually notices.

When a payment fails, three statuses change at once, three people are told, and the retries run on a schedule. Whichever way it resolves, the record says so.

When it breaks

A failed renewal is a state change, not an absence.

Renewal fails.→
Three statuses move together
Deal payment status
Account payment status
Account status
Customer emailed a card-update linkTask created and assignedAdmin notified with customer, subscription and amount
Retry sequence
Attempt one, within 24 hours→Attempt two, after 3 days→Attempt three, after 7 days
Recovered.
Account inactive.
Account manager removedUnenrolled from review and meeting cycles

A cancelled customer receiving a cheerful monthly invitation is a small failure that tells them exactly how well your systems talk.

Reactivation
Link in the failure emailLink sent by an agentLink by SMS
→
Same company, new deal, statuses reset, lifecycle re-enrolled.

The history stays on the company. The customer does not come back as a stranger.

The governance that keeps it true
Properties exist to drive automation, not to describe records.

Last payment date and next payment date make renewal timing queryable.

Last status change date exposes accounts that have sat still.

A multi-checkbox product field holds any combination of the three products, so a two-product customer is one record rather than a compromise.

Ownership is assigned by event, not by a rule someone maintains. Booking the onboarding meeting through a round-robin link is the same action that assigns the account manager, so there’s no gap between a customer becoming active and someone owning them.

And property creation is restricted to super admin, because a schema anyone can extend becomes six fields meaning the same thing within a year.

That risk doubles across two regions, where a property invented on one side is a property the other side doesn’t have.

The outcome
One architecture holding both regions at once.

A shared vocabulary the whole team reads the same way.

Country-level reporting the owner can trust — via property architecture, not a paid add-on.

Three pipelines matching the real sales, delivery, and renewal motions.

A schema disciplined enough that someone who has never opened the portal could read the property list and understand the business.

Every element exists because a decision in the business needed it — none of it because HubSpot offered the field.

Bring the mess.
We will bring the map.