Digital Transformation

Do Not Rip Out HubSpot: The Hybrid Architecture Where Marketing Stays and Your Operational Core Goes Custom

TuniCyberLabs Team
8 min read

Most CRM exit advice says migrate everything. The better architecture often keeps HubSpot for marketing and moves the operational core custom. Here is the schematic: what stays, what moves, and how the sync boundary works.

The standard CRM exit story has two endings: stay and keep paying, or migrate everything and spend a year rebuilding marketing automation nobody was complaining about. There is a third architecture that most exit guides acknowledge in one paragraph and never design: keep HubSpot for what it is good at, and build a custom operational core for everything you have been forcing into it. Here is the schematic, which hub stays, what moves, where the seam goes, and how identity and reporting survive the split. It is one pattern from our complete guide to escaping SaaS for custom software.

Why keep HubSpot instead of migrating everything?

Because HubSpot is genuinely good at what it was built for: email sequences, landing pages, forms, meeting scheduling, and top-of-funnel attribution. The pain that triggers a CRM exit almost never comes from marketing features. It comes from forcing quotes, inventory, projects, or fulfilment into CRM objects. Keep the strength, replace the stretch.

A full rip-out carries three costs the migration quote never shows:

  • Marketing retraining. A new tool means months of lost fluency for the one team that was not complaining.
  • Attribution history. Years of campaign, source, and touch data rarely survive a platform move intact.
  • Rebuild risk. Re-implementing nurture flows, scoring, and templates is real engineering work that displaces the operational build you actually needed.

This is the pattern from Replace the Seat, Not the Suite: stop paying HubSpot to host operations badly, and stop asking a custom build to re-implement marketing automation badly. Still upstream of the whole decision? Start with Build vs Buy: When to Use SaaS and When to Build Custom Software.

What stays in HubSpot, and what moves to the custom core?

HubSpot keeps everything up to the moment a deal is won: contacts as marketing identities, sequences, forms, landing pages, ads and attribution, meeting links, and the sales pipeline through closed-won. The custom core owns everything after that moment: orders, contracts, pricing, delivery, projects, invoicing, and every entity HubSpot was faking with custom properties.

Drawn in words, the architecture has three zones:

  • Zone A, HubSpot, demand and pipeline. Contact and company records, lifecycle stages, sequences, campaigns, forms, and the deal pipeline up to closed-won.
  • Zone B, the seam, a sync service you own. A small, deliberately boring service that validates webhooks, calls both APIs, owns the identity map, and enforces the data-flow rules below, the only component allowed to talk to both sides.
  • Zone C, the operational core, custom. Your real domain model: orders with line items, projects with milestones, contracts with renewal terms, stock, invoicing, and delivery workflows, in a relational database with foreign keys, migrations, and tests.

The litmus test: if losing a feature for a day hurts marketing, it is Zone A; if it stops delivery or cash collection, it is Zone C. A HubSpot custom object with a dozen properties and no native marketing behaviour is a Zone C entity wearing a CRM costume, the same failure mode as When the Spreadsheet Becomes the Database: An SME Escape Plan, except this version renews annually.

Where is the sync boundary, and which way does each field flow?

The boundary sits at closed-won, and the non-negotiable rule is single-writer: every field is owned and written by exactly one side, and the other side only ever reads its synced copy. Bidirectional field sync is how hybrid architectures die, because every edge case becomes a conflict-resolution question nobody answers.

Concretely:

  • HubSpot to core, on deal close: contact identity, company details, consent status, and the deal amount and terms as signed. The seam creates the customer and the initial order in the core.
  • Core to HubSpot, continuously: rollup facts marketers segment on, customer status, lifetime value, last order date, renewal date, written into read-only custom properties. Marketers build lists and trigger nurture from them; they never edit them.
  • Never synced: operational detail. Line items, delivery state, and the invoice ledger stay in the core. HubSpot gets summaries, not tables.

When someone asks for an exception, sales wants to edit the renewal date from HubSpot, the answer is a deep link into the core's edit screen, not a second writer.

How do you keep one customer identity across both systems?

Mint your own customer ID in the core and treat it as the master key. Store HubSpot's contact and company IDs as foreign keys in an identity map owned by the seam, and write your core ID back into a HubSpot property. Email address is a matching hint, never a key.

The identity map is a real table: core customer ID, HubSpot contact ID, HubSpot company ID, match method, timestamps. Three behaviours to design for rather than discover:

  • Merges. Users merge duplicates, and the surviving ID may not be the one your map holds; the seam must cope with webhooks referencing an ID it thought retired.
  • Changed and shared emails. People change addresses, and two contacts sometimes share an inbox. If email were the key, both events would silently corrupt the map.
  • Companies versus contacts. The core usually bills companies while HubSpot markets to people. Hold both edges in the map so a person can change employers without dragging order history along.

How should webhooks and APIs carry changes across the seam?

Webhooks for latency, scheduled reconciliation for truth. Treat every HubSpot webhook as a hint that something changed: verify the signature, fetch the full object from the API, and upsert it idempotently. A nightly diff job catches whatever the webhooks dropped. Never treat a webhook payload as complete state.

Practical rules for the seam service:

  • Queue first. The webhook handler only validates and enqueues; a worker performs the API reads and core writes, so retries and rate limits are the worker's problem.
  • Idempotency everywhere. Deliveries duplicate and arrive out of order. Key every write on object ID plus a last-modified watermark so replays are harmless.
  • Outbox on the core side. Publish core changes to HubSpot from an outbox table written in the same transaction as the business change, the pattern from Change Data Capture in Practice: Debezium, Kafka, and the Outbox Pattern, so a crashed worker never loses an update.
  • Reconcile nightly. Compare record counts and last-modified watermarks on both sides, alert on drift, and let the repair job write in one direction only.
  • Respect the limits. API and webhook allowances vary by tier and change; verify them against current HubSpot developer documentation before sizing the sync, and build backoff in from day one.

Where does reporting live when the data is split?

Neither side alone. Marketing reports stay in HubSpot and operational reports live in the core, but the questions executives actually ask, which campaigns produce customers who renew, what a lead is worth by source, span the seam. Those belong in a small warehouse that both systems feed.

  • HubSpot keeps the funnel dashboards: traffic, conversion, sequence performance, pipeline velocity.
  • The core keeps the operational screens: orders in flight, overdue invoices, delivery status.
  • The warehouse joins them on your core customer ID, the identity map is what makes marketing-to-revenue joins possible.

This can start as a nightly export into Postgres plus a few SQL views, whether it should ever become a BI platform is the seat-count question in the seat math of custom dashboards versus Power BI and Tableau.

How do you secure the seam between HubSpot and the core?

Treat the seam as the most privileged component in the architecture: it holds a HubSpot token and write access to your operational data. Scope both credentials to the minimum, isolate the service in its own runtime, and log every cross-boundary write with what changed and which event caused it.

  • HubSpot side: a private app token carrying only the scopes the seam uses, rotated on a schedule, with webhook signatures validated on every delivery.
  • Core side: the seam writes through the core's API under its own service identity, never with direct database credentials, so every mutation is authorized and audited like a user's.
  • Blast radius: a leaked seam token should expose sync capability, not your ledger.

The wider risk picture is in a threat model of a typical CRM stack, and the core's back-office screens deserve the scrutiny in what security auditors find in admin panels.

What sequence should you build the hybrid in?

Identity first, one-way sync second, one operational workflow third. Do not start by modelling your whole operation in the new core; start by proving the seam works on the narrowest slice that touches money, running in shadow mode against real closed deals before anyone depends on it.

  • Phase 1, identity map. Build the map, backfill it from existing HubSpot contacts and companies, and write core IDs back. No workflows yet.
  • Phase 2, closed-won handoff. One webhook, one direction: a won deal creates a customer and an order in the core. Shadow-run it against live deals until the diffs are boring.
  • Phase 3, first workflow. Move the most painful process, usually quote-to-invoice or delivery tracking, into the core, and start writing rollups back.
  • Phase 4, retire the fakes. Delete the custom objects and property farms the core replaced, and check whether that drops the HubSpot tier you need at renewal.

Before Phase 1, run the CRM exit-readiness audit so you know which lock-in mechanisms you are unwinding. If your centre of gravity is Salesforce, the full-exit path is the Salesforce engineering migration runbook.

How TuniCyberLabs helps

We design and build exactly this seam, identity map, sync service, operational core, for companies across the EU and North Africa, with the security model in place from the first commit. We also shipped TuniReach: The All-in-One Marketing CRM We Built (and Why We Built It), so we argue from the builder's side of the object model.

If your HubSpot bill has quietly become an operations bill, talk to us about a hybrid architecture review.

TAGS
CRM architectureHubSpotcustom softwaresystem integrationwebhooksSaaS migrationdata architecture

Frequently Asked Questions

Can we keep using HubSpot as the system of record for contacts?

+

Yes, for marketing identity. HubSpot remains the master for contact details, consent, and lifecycle stage, because that is where those fields are edited daily. The custom core masters everything operational: orders, contracts, invoices, delivery. The seam service maps the two with your own customer ID as the master key, so each side reads the other's facts without ever writing them.

Do we need an iPaaS like Zapier or Make for the sync?

+

For a prototype, maybe; for the production seam, usually not. The seam needs an identity map, idempotent retries, signature validation, reconciliation, and audit logging, exactly the things generic connectors make hard. A small owned service plus a queue is more reliable, cheaper at volume, and auditable. Keep iPaaS tools for genuinely peripheral automations that never touch money.

Will marketing attribution break when revenue moves out of HubSpot?

+

Not if the core writes revenue facts back. Sync customer status, first and latest order dates, and lifetime value into read-only HubSpot properties, and attribution reports keep working, often better, because they now reflect invoiced reality rather than deal amounts. Cross-system questions like revenue per campaign move to the warehouse, joined on your core customer ID.

What happens to the HubSpot custom objects we already built?

+

They are usually the first candidates to move. Custom objects with heavy property counts and no native marketing behaviour are operational entities in disguise. Migrate their data into real tables in the core, keep a summary property or a deep link on the related contact or company, then retire the custom object, which may also let you drop a subscription tier at renewal.

How long does a hybrid build take compared with a full CRM replacement?

+

Typically materially less, because you are not rebuilding marketing automation. The identity map and the closed-won handoff are commonly a matter of weeks; the first operational workflow usually lands within the first quarter of work, depending on complexity. A full replacement is commonly a multi-quarter programme. Treat these as planning ranges and scope against your own audit, not anyone's averages.

What should we check in our HubSpot contract before starting?

+

Three things: API rate limits and webhook allowances on your tier, since the seam depends on them; export completeness for the objects you plan to move; and renewal dates, because retiring custom objects and seats can change which tier you need. Verify limits and export behaviour against current HubSpot documentation, those change more often than architecture advice does.

Need help with
this topic
?

Our team specializes in the technologies and strategies discussed in this article. Let’s talk about how we can help your business.

Get in Touch