Skip to content

Real-time CRM sync, explained without the marketing layer

Most 'real-time' CRM integrations are batch jobs with a shorter cron. This is what real bidirectional sync looks like at the engine level — and why it matters when sales is staring at the dashboard.

Author
Ruben Burdin · Founder & CEO
Published
June 3, 2026
Read time
9 min

What 'real-time' actually means in production

Most CRM integrations sold as "real-time" are a 5-minute batch with a marketing veneer. The mechanism underneath is the same one that's been wrong for fifteen years: poll, diff, push. Each pass loses ordering, drops fields that were unset, and re-emits updates already applied — because the system has no concept of a change event, only of an end-state delta.

Real-time means three things at once. First, the source emits a change as it happens — not on an interval. Second, the change is propagated as a discrete event with identity, not as part of a recomputed snapshot. Third, downstream consumers can ask the engine to replay events in the same order in which they originally fired.

The cheap shortcut nobody admits to
If your vendor's docs talk about 'sync frequency' or 'every N minutes', the engine is a poller. That's not real-time — it's batch with a smaller batch window.

Two-way sync is not mirroring

Two-way sync gets sold as if it were a database trigger that goes both ways. It isn't. A real bidirectional sync layer keeps a per-object ledger of which side last wrote each field, then applies conflict-resolution rules at the field level. Mirror semantics — where every write on one side blindly overwrites the other — produce a feedback loop within minutes.

  • Field-level ownership: email is HubSpot-owned, account_owner is Salesforce-owned.
  • Last-writer-wins by timestamp, with a clock skew tolerance.
  • Explicit reconciliation on conflict, surfaced as a replayable event.

If a vendor can't answer "who wins when both sides write the same field within 200 ms?" — they aren't doing two-way sync. They're doing one-way mirroring twice.

See real-time two-way sync in action
Book a demo with real engineers — no sales script.
Book a demo

Change data capture across Salesforce and HubSpot

Salesforce exposes change events through Platform Events and the Streaming API. HubSpot exposes them through webhooks tied to object subscriptions. Both have ordering guarantees inside their own surface but neither commits to global order across object types.

A real CDC pipeline ingests both streams, attaches a monotonic sequence at the engine, and writes them to a queue you can rewind. When a downstream system fails for an hour, you don't lose anything — you replay from the last committed offset on the consumer side.

FAQ

Frequently asked questions

What is the actual latency you can hit between Salesforce and HubSpot?
Median end-to-end propagation sits in the sub-second range when the source emits a change event and the target accepts an upsert in the same call window. Tail latency depends on the target's rate limits and webhook backpressure, not the sync engine.
Why can't we just run a 5-minute cron and call it real-time?
A 5-minute cron loses every change that happened between runs, can't tell update from upsert from delete without a checksum diff, and quietly drifts when one side fails. Real-time sync is event-driven, ordered, and recoverable — none of which a cron job is.

About the author

Ruben Burdin
Founder & CEO

Ruben Burdin is the Founder and CEO of Stacksync, the first real-time and two-way sync for enterprise data at scale. Ruben is a Y Combinator alumni with a strong background in software engineering and business.

All posts by Ruben Burdin

About Stacksync

Stacksync powers real-time, two-way sync between CRMs, ERPs, and databases. Engineers sync data at scale and automate workflows — not dirty API plumbing.

Coworkers laughing in front of a laptop in a casual office setting

Your last integration took months.
Your next one takes a prompt.