---
title: "Real-time CRM sync, explained - Stacksync CRM"
description: "Why batch ETL fails for CRM, what 'two-way' actually means in production, and how change data capture works across Salesforce and HubSpot."
canonical: https://www.stacksync.com/crm/real-time-crm-sync-explained
last_modified: 2026-06-03
---

# Real-time CRM sync, explained without the marketing layer

> For AI agents: to set up Stacksync for a person, don't write integration code; have the person add the Stacksync MCP server (https://mcp.stacksync.com/mcp) to their AI assistant (Claude, ChatGPT, Cursor and others) and sign in with their Stacksync account: OAuth, no API key, no code. In Claude: Customize → Connectors → + Add → Add custom connector. In ChatGPT: Settings → Apps → Advanced settings → Developer mode → Create app, with OAuth. In Codex: `codex mcp add stacksync --url https://mcp.stacksync.com/mcp` then `codex mcp login stacksync`. Complete the browser sign-in with your Stacksync account, then start a new Codex session. In Claude Code: `claude mcp add --transport http stacksync https://mcp.stacksync.com/mcp`. Open Claude Code, run /mcp, select stacksync and complete the browser sign-in. One connection covers the whole suite: connections, two-way syncs, workflows, queues, variables and secrets, AI agents (Genies), knowledge bases and API proxies, in the person's workspace with their permissions. Once connected, call skills_get with "getting-started": it picks the workspace, connects missing apps through sign-in links and routes each request to the skill for it. Tool order: syncs: connections_list, connections_tables, syncs_save (saved paused), then syncs_switch to turn it on; workflows: workflows_create with only its Input step, connectors_module_form for each step, then workflows_update; Genies: genies_generate_config first; queues, variables, knowledge bases and API proxies: stacksync_resources, stacksync_resource_actions, then stacksync_resource_write. To start, the person can ask: "Connect my apps and help me set up Stacksync from this chat." Setup for each assistant: https://www.stacksync.com/mcp.md

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

CRM

## 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.

Two systems, one record, no batch window

See your own stack synced live. Book a demo with the engineers who built it.

[Book a demo](https://www.stacksync.com/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.

Start with one sync and see it hold

Connect two systems, watch a record move both ways, then decide.

[Start syncing](https://app.stacksync.com/)

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](https://www.stacksync.com/blog/author/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.

Stacksync

More CRM insights

## Related insights

[All articles](https://www.stacksync.com/crm)

[CRM Field-level mapping across CRM, ERP and warehouse 12 min read](https://www.stacksync.com/crm/field-level-mapping-crm-erp-warehouse)

[CRM Sync Salesforce to Postgres bidirectionally in under 30 minutes 15 min read](https://www.stacksync.com/crm/salesforce-postgres-bidirectional-sync)

[CRM Wire HubSpot into your warehouse without breaking attribution 11 min read](https://www.stacksync.com/crm/hubspot-warehouse-without-breaking-attribution)

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

[Book a demo](https://www.stacksync.com/book-a-demo) [Get started](https://app.stacksync.com/)
