Join the waitlist

Let us know how we should get in touch with you.

Thank you for your interest! We’re excited to show you what we’re building very soon.

Close
Oops! Something went wrong while submitting the form.

Two-Way CRM Sync Conflicts: Field Ownership, Stale Updates, and Recovery

·
Updated on: September 9, 2026

TL;DR: Bidirectional CRM sync is safe only when every field has an authoritative owner, every write carries source and version context, retries are idempotent, and ambiguous updates enter a review queue. Treat compliance and customer state as high-priority controls. Practice recovery on reversible records before allowing broad two-way writes.

What is bidirectional CRM sync, and why does it matter for outbound?

Bidirectional sync allows changes to move from the CRM to an outbound system and from the outbound system back to the CRM. This matters because ownership, eligibility, enrichment, sequence state, replies, meetings, and opportunities can change while a workflow is running. A late or duplicate update can route work to the wrong seller, overwrite a newer value, or reintroduce a contact that should remain suppressed.

Two-way transport is not permission for both systems to edit every field. Define authority field by field, state by state, and operation by operation. If authority is unknown, the safe result is a conflict record, not a last-write-wins overwrite.

Field-authority matrix for a two-way CRM and outbound integration
Field or stateAuthoritative ownerAllowed inbound useAllowed write-backFreshness or version ruleConflict action
Account owner and territoryCRMRoute research and tasksNo external owner overwrite unless an approved reassignment operation existsRequire current CRM record version or compare server-side update markerReject stale write and queue disputed ownership
Lifecycle, customer, and opportunity stateCRMControl enrollment and suppressionOutbound system may append outcome context, not replace the stateRe-read immediately before enrollment and sendCRM state stops or reroutes the motion
Opt-out, suppression, and compliance stateDesignated compliance authorityBlock applicable sends in every toolPropagate the most restrictive valid stateNo relaxation from an older or lower-authority updateStop sends, alert owner, and preserve the event trail
Contact enrichment fieldField-level policyUse value plus source and observed timeWrite value, source, method, and observation timestampAccept only permitted, newer evidence under the field policyKeep prior value and send ambiguity to review
Signal eventSignal or event systemQualify and prioritize workflowsAppend normalized event with stable source event IDDeduplicate by source event ID and event typeReturn prior result for duplicates
Sequence enrollment and stepSales engagement systemDisplay current execution stateWrite normalized enrollment, step, pause, reply, and completion summariesUse sequence event version or monotonically ordered event timeDo not replay completed steps
Reply, meeting, and task outcomeConversation or task ownerStop automation and advance workflowAppend normalized outcome with source system and ownerDeduplicate by stable conversation or event identifierMerge only under explicit event rules; never overwrite history
Calculated score or derived fieldSystem that defines the calculationUse for routing only within its documented scopeWrite the current score plus model or rule version if policy allowsRecompute in owner; do not compare unrelated versionsReject cross-system recalculation

Model every write as an operation

A useful write envelope contains: operation ID, entity ID, field or event type, prior version observed, proposed value, source system, source event ID, observed time, ingestion time, policy version, actor, and correlation ID. The receiver returns one of five outcomes: applied, duplicate, stale, rejected by policy, or queued for review.

  • Operation ID: stable across retries of the same intended change.
  • Prior version observed: the record version the writer used when making the decision.
  • Source event ID: stable identifier for the underlying reply, meeting, signal, or workflow event.
  • Policy version: the ownership and conflict rules used for the decision.
  • Correlation ID: connects the inbound event, evaluation, write, retry, and final result.

Reject stale writes before they overwrite truth

A stale write occurs when a process proposes a change based on an older record state. Prefer server-side record versions or compare-and-set behavior where the platform supports it. If only timestamps are available, compare authoritative server timestamps, not client clocks, and route ambiguous orderings to review.

The general retry pattern in Making retries safe with idempotent APIs uses a stable identifier so repeated requests do not repeat the business action. Store the first terminal result for an operation ID and return that result on subsequent deliveries. Do this for applied, rejected, and no-action decisions.

Deduplicate events without deleting history

  • Deduplicate a reply or meeting by stable event ID, not by matching text or timestamps alone.
  • Keep append-only history for events. Do not collapse multiple valid events into one "latest" field.
  • Separate the event from the derived current state. A sequence can have many step events but one current execution state.
  • Record the duplicate decision so operators can distinguish a harmless retry from missing processing.
  • Never use deduplication to erase a conflicting human edit; send the conflict to the appropriate owner.

Use a conflict and recovery runbook

Conflict and recovery runbook for bidirectional CRM sync
IncidentImmediate containmentEvidence to captureRepairReplay ruleExit check
Stale owner or lifecycle overwritePause writes for the affected field and segmentOperation ID, prior version, source, old value, new value, and impacted recordsRestore authoritative CRM values and correct version checksReplay only rejected operations that remain eligible after a fresh readNo stale write applies in the test set
Duplicate tasks, replies, or enrollmentsDisable the downstream create action, keep event intake runningSource event IDs, operation IDs, retry count, and created object IDsFix idempotency key scope and remove or close duplicates through an approved processReplay from the first uncommitted event, not the entire queueOne intended event produces one business action
Suppression failed to propagateStop applicable sends in every systemSuppression source, timestamps, delivery status, and scheduled sendsRestore the restrictive state and fix propagation pathDo not replay outreach events created during the unsafe intervalAll sending systems confirm the controlling suppression state
Mapping change corrupted valuesFreeze the affected mapping and preserve raw payloadsOld and new mapping versions, raw values, transformed values, and record IDsRollback the mapping or deploy a corrected version on quarantined recordsReplay only payloads that can be transformed deterministicallySampled values match the authoritative source and schema
Retry queue grows or poison event blocks processingIsolate the failing operation and continue safe independent workError class, attempt count, payload hash, dependency response, and queue ageFix transient dependency or route terminal failure to a dead-letter review pathUse bounded retry with backoff; manual approval for non-idempotent operationsQueue drains without repeating completed actions
Unknown writer or missing audit trailDisable writes to the affected fieldAvailable logs, API actor, timestamps, and before/after valuesRestore authority and require actor, source, and correlation metadataNo automatic replay until causality is establishedEvery new write is attributable and reproducible

Design retry queues for recovery, not concealment

Classify failures before retrying. Transient transport failures may retry with bounded backoff. Policy rejections and stale-version conflicts are terminal until the record is re-read or a person approves a new operation. Invalid mappings and missing authority are not transient; sending them through an endless retry loop only delays discovery.

  • Pending: eligible for a bounded retry.
  • Applied: committed, with result stored under operation ID.
  • Duplicate: prior terminal result returned.
  • Stale: fresh read required before a new operation can be created.
  • Policy rejected: no retry until policy or input changes.
  • Review queue: ownership, mapping, or causality is ambiguous.
  • Dead-letter review: repeated technical failure with full diagnostic context.

Make auditability a release requirement

HubSpot's Connect and use HubSpot data sync documents configurable sync direction, field mapping, and sync-health review. Regardless of platform, operators need a durable trail that answers: what changed, which system requested it, which record version was read, which policy decided it, whether it retried, and which final state was committed.

  • Dashboard conflicts by field, source, policy version, and final disposition.
  • Alert on suppression propagation failure, unexplained owner changes, duplicate creates, and rising queue age.
  • Keep raw source payloads long enough to investigate according to the team's data-retention policy.
  • Test recovery with reversible records and a defined replay boundary.
  • Require a rollback or compensation plan before enabling a new writable field.

How Unify fits

Unify Automated plays can use CRM state to qualify outbound work and return workflow context. Teams should configure each field's authority, allowed write direction, suppression precedence, and recovery behavior against their actual Salesforce or HubSpot schema before enabling broad writes.

Start using Unify to connect CRM context, signals, data, and outbound actions with explicit workflow controls.

Frequently asked questions

Is bidirectional sync the same as real-time sync?

No. Bidirectional describes direction, while real-time describes latency. A two-way integration can still process delayed batches.

Should both systems edit every field?

No. Assign an authoritative owner and permitted operation for each field or state.

Is last-write-wins a safe default?

Not for ownership, lifecycle, compliance, or human-authored data. The last arrival may be based on the oldest business state.

What is the difference between deduplication and idempotency?

Deduplication recognizes repeated events. Idempotency ensures a repeated operation produces one intended business result.

When should a retry stop?

Stop when the error is a policy rejection, stale version, invalid mapping, missing authority, or any condition that will not change through repetition.

How should recovery be tested?

Use reversible test records, simulate timeouts and competing edits, verify audit logs, contain the affected write path, and replay from a known safe boundary.

Sources