What syncs between Zendesk and Salesforce
A Zendesk Salesforce integration — whether you use Zendesk’s own connector, Salesforce Service Cloud’s native ticketing layer, or a third-party middleware tool — moves a defined set of fields between the two systems. Contact name, email address, and ticket metadata (subject, status, priority, creation date) are the common denominator across most setups. Beyond that, what actually syncs depends entirely on the field mapping someone configured, not on anything either vendor ships by default.
Teams often assume “we’ve connected Zendesk and Salesforce” means every field is now shared, and that assumption is the whole problem. It doesn’t. A connection moves whatever fields were mapped, in whatever direction was chosen, on whatever schedule the connector runs. Everything else stays exactly where it was, siloed on its original side.
For a support-heavy DTC brand, the practical sync usually looks like this: a new Zendesk ticket checks for a matching Salesforce contact by email, creates one if none exists, and writes the ticket’s existence back as an activity or case reference. For a sales-led B2B brand running Salesforce Service Cloud, the flow often runs the other way — the Salesforce contact is the source, and Zendesk reads it to populate the requester’s name and account tier on the ticket sidebar.
Either direction is workable. The article’s core argument is that you need to choose one, on purpose, field by field — not accept whatever direction the connector defaults to during setup.
What doesn’t sync automatically
Full ticket transcripts rarely sync into Salesforce by default, and this is usually correct: a sales rep pulling up an account doesn’t need the entire back-and-forth of a shipping complaint, just that one happened and how it ended. What should sync instead — open ticket count, last contact date, satisfaction score if you track one — needs to be mapped explicitly, because the default connector setup often omits it.
Salesforce opportunity stage, deal value, and forecast category don’t sync into Zendesk by default either, and for the same reason in reverse: a support agent triaging a queue needs to know an account’s tier or order value, not where it sits in a sales pipeline. Syncing the whole opportunity record into a support ticket adds noise a support agent has no use for and no time to read.
Contact merges are the sync gap that causes the most damage. When a Salesforce admin merges two duplicate contacts, that merge event does not automatically tell Zendesk anything. The two systems drift apart from that point: Salesforce now has one contact, Zendesk still has two requester records pointing at two different Salesforce IDs, one of which no longer exists. The next ticket from that shopper either fails to match or attaches to the wrong side.
Custom fields — loyalty tier, subscription status, store credit balance — sync only if someone explicitly mapped them, and most default integration guides don’t mention them at all. If a field matters to how an agent handles a ticket, check whether it’s in the field map before assuming it travelled across.
What sales genuinely needs from support history
The difference matters enough to work through directly, because it’s where most field maps go wrong in the sales-to-support direction. A rep preparing for a renewal or upsell call needs enough support context to avoid an obviously bad conversation — asking for more money from an account that’s been waiting two weeks on an unresolved shipping claim is the failure this is meant to prevent. That need is met by a small set of fields: open ticket count, whether any ticket is currently unresolved, the date of the last contact, and maybe a satisfaction score if the helpdesk tracks one.
What doesn’t help, and actively gets in the way, is the full transcript. A rep scanning a Salesforce record before a call is not going to read through eleven back-and-forth messages about a return label; they’re going to skim past it, or worse, stop checking the field at all because it’s become unreliable as a quick signal. The same applies to internal agent notes, macros used, and CSAT survey free-text responses — all useful to a support manager reviewing agent performance, none of it useful to a rep fifteen minutes before a call.
The practical rule: sync the fields that change a sales conversation’s opening line, not the fields that document how a ticket was resolved. If a field would only ever be read by someone already deep in the support tooling, it belongs in Zendesk and nowhere else.
How to decide which system owns the customer record
The question “which system owns the customer record” doesn’t have a universal answer, and any integration guide that gives you one is guessing at your business model. What decides it is where a contact record is usually created first.
At a brand where most contacts start as a sales lead — outbound B2B, wholesale accounts, a sales team working inbound demo requests — Salesforce is where the record is born. Support only sees that contact after a deal closes, so Salesforce should own identity fields: name, email, company, account tier. Zendesk reads those fields to populate the ticket sidebar and should not overwrite them.
At a brand where most contacts start as a shopper placing an order and later emailing support — the pattern for most $3M–$30M direct-to-consumer accounts — the reverse often makes more sense. Zendesk (or the helpdesk layer, if support tickets originate there before any Salesforce contact exists) is where the record is born, and Salesforce should treat that side as authoritative for identity until a sales-qualified event — a wholesale inquiry, a large custom order — moves that contact into an active sales process.
Either model works. What doesn’t work is leaving the direction unset, because the default sync behaviour in most connectors is “whichever side changes a field last wins” — and that turns identity fields into a coin flip decided by which team happened to touch the record more recently that day.
The B2B case: one company, many buyers
Everything above assumes a contact-level sync — one shopper, one email, one Salesforce contact. That assumption holds for most direct-to-consumer traffic and breaks for wholesale.
A wholesale account is one company with several people emailing support and several people showing up in Salesforce as separate contacts under a shared account: a buyer who places orders, an AP contact who handles invoices, a warehouse manager who emails about a damaged shipment, and sometimes a founder who only appears when something goes wrong. A contact-level sync built for one-shopper-one-email doesn’t know these four people belong to the same account unless the Salesforce account object and the Zendesk organization object are both populated and both kept in step.
A wholesale account turns the duplicate-contact problem from the DTC case into something worse: instead of one shopper with two email addresses producing two contacts, a wholesale account can produce a scattered set of tickets that never roll up to the account level at all, because the connector matched each requester to a contact but never associated that contact with the right company. A support agent triaging a ticket from the warehouse manager has no way to see that the same account has an open invoice dispute from the AP contact, because nothing on the ticket points back to the shared account.
The fix follows the same identity-field logic, but needs an extra layer: sync at the account level as well as the contact level, and make sure the connector’s matching logic checks company or account association, not just email, before deciding whether a new requester is a new contact or an existing one at an account you already have. Most connector defaults were built with the one-shopper model in mind and need this checked explicitly for a wholesale book of business, not assumed to work the same way.
How to set up one-way sync from the owning system
Once you’ve named an owner for identity fields, the fix is mechanical: configure the connector so those specific fields — name, email, phone, account status — flow from the owning system outward, and set the receiving system’s mapping to read-only on that field set. Not the whole record, just the fields you decided matter for identity.
Most connectors let you set sync direction per field, not just per object, so you’re not choosing “Zendesk owns everything” or “Salesforce owns everything” — you’re choosing field by field. Ticket status can stay two-way (support and sales both need to see the current state); the shopper’s legal name and primary email should not.
Check the specific connector’s field-mapping screen for a per-field direction setting before assuming it only offers all-or-nothing sync — the naming and location of this setting varies by which connector you’re using, so confirm it in your own setup rather than assuming it matches another vendor’s documentation.
How to handle two-way sync without a data war
Some fields genuinely need input from both sides. Ticket status is the obvious one — support closes it, but a sales rep working a renewal might reopen a billing question that started as a support ticket. Account notes are another: both teams add context, and neither should overwrite the other’s entry.
For any field in this category, define a conflict rule before turning two-way sync on, not after the first conflict happens. The simplest workable rule is last-write-wins with a visible edit log, so at minimum both teams can see when a value changed and by whom, even if they can’t always see why. A stricter rule — never overwrite, always append — works for free-text fields like notes but breaks for structured fields like status, which can only hold one value at a time.
Write the rule down somewhere both teams can find it. The actual failure mode here isn’t usually the sync logic; it’s that support and sales each build a mental model of “how the sync works” independently, and those models disagree the first time a field looks wrong to one side.
The initial backfill: deduplicating before sync goes live
Everything discussed so far assumes an ongoing sync running against a clean base. The first time a Zendesk-Salesforce integration is switched on, that assumption is usually false — both systems already have months or years of contacts created independently, with no matching logic ever applied between them.
Turning on live sync against that existing mess doesn’t fix it; it propagates it. A live sync built to match new tickets against existing contacts will happily match against the wrong one of an existing duplicate pair, or create a third contact when neither existing one matches cleanly, adding to a problem that already existed rather than resolving it.
The backfill has to happen first, as a one-time pass, before the connector goes live: export both contact lists, match on name plus order history the same way the ongoing duplicate check does, and resolve every match — merge where you’re confident, flag for manual review where you’re not — before flipping the sync on. This is slower and more tedious than just turning the integration on and letting it run, and it’s the step most setups skip, which is why “we turned on the sync and now we have thousands of duplicates” is a common outcome rather than a rare one. A sync that starts clean stays manageable with a recurring check; a sync that starts dirty never fully catches up, because new duplicates keep arriving faster than anyone has time to reconcile the old backlog.
How to catch the duplicate-contact problem before it multiplies
This particular failure causes the most support tickets about the integration itself, and it starts with something entirely ordinary: a shopper checks out with a work email because that’s the card on file, then emails support later from a personal Gmail address because that’s the account they actually check.
If the sync matches contacts on email alone — the default in most out-of-box connector setups — that shopper now has two Salesforce contacts and, depending on direction, potentially two Zendesk requester records too. Neither system knows they’re the same person. A support agent working the Gmail-side ticket has no visibility into the order history sitting under the work email, and a renewal call from sales might reach out to the wrong address entirely.
The fix isn’t a smarter connector setting — it’s a recurring match process that looks beyond the sync field alone. Match on name plus order history (same shipping address, same order ID pattern, same phone number if you collect it) rather than email in isolation, and flag near-matches for a human to confirm rather than auto-merging them, since an automatic merge on a false-positive match is its own kind of damage.
Run this check on a schedule, not once. New duplicates form continuously as long as shoppers keep using more than one email address to reach you, which for most consumer brands is constant and not a one-time cleanup problem.
Three things that break in a Zendesk-Salesforce integration
Duplicate contacts from mismatched emails. This is the failure that appears first and most often, usually within the first few hundred tickets from repeat shoppers. It’s rarely caught in initial testing because test accounts use one consistent email address; it shows up once real shoppers, who use several, start generating tickets.
Fields silently overwritten by sync direction. When two-way sync runs on a field without a conflict rule, whichever system happens to sync last in a given window wins, and neither team gets a notification that their edit was overwritten. A support agent updates a shopper’s phone number after a call; an hour later, a sales rep’s earlier Salesforce edit syncs back through and reverts it. Nobody notices until the next call goes to the wrong number.
Ticket resolution that never reaches the opportunity record. A support ticket closes as resolved in Zendesk, but if “ticket closed” isn’t mapped to anything on the Salesforce side, a sales rep working that account has no way to know a problem existed and got fixed — or didn’t. This gap matters most around renewal conversations, where an unresolved support issue is exactly the kind of thing that should surface before a rep calls to ask for more money.
Each of these traces back to the same root cause: a sync that moves data without anyone having decided, field by field, who’s supposed to see what and who’s allowed to change it.
Permissions: who can see support history, and why it matters
Syncing a field is not the same as deciding who should see it, and it’s easy to configure the first without thinking through the second. Once ticket summaries or contact fields land in Salesforce, they’re visible to whoever has read access to that object — which, in most default Salesforce configurations, is a broader group than “the people who need this for a renewal call.” A sales manager, a finance user pulling account reports, or anyone with general contact-record access can now see that a shopper filed a complaint, disputed a charge, or reported a problem with an order, even if that was never the intent of the sync.
Sensitivity is where this matters most: a complaint that touches a medical condition (returns on a health or wellness product), a payment dispute that references card details entered into a ticket by mistake, or a support conversation that names a household member other than the account holder. None of that belongs on a widely-readable Salesforce record, even summarized, and a field map built only around “what does sales need” without asking “who else can now read this” will eventually put something sensitive in front of someone who has no reason to see it.
The fix is the same discipline as the identity-field decision: set field-level or object-level permissions on the synced fields explicitly, don’t rely on the default visibility either system ships with, and treat “can sales see this” and “should this specific role see this” as two different questions with two different answers.
When the answer is a warehouse or CDP instead of a sync
Everything above assumes a direct, point-to-point connection between two systems is the right shape for the problem. For two systems and a handful of fields, it usually is. It stops being the right shape once a third or fourth system needs the same customer record — an email platform, a loyalty program, a data warehouse already pulling order data for reporting — because each additional point-to-point connection multiplies the number of places a field mapping, a conflict rule, and a deduplication pass all have to be kept consistent independently.
At that point, the more durable answer is usually a system built to be the single record — a customer data platform or a warehouse that both Zendesk and Salesforce (and anything else) write into and read from, rather than writing into each other. Identity resolution, field ownership, and deduplication get solved once, in one place, instead of separately in every pairwise connection. This is a bigger commitment than a connector setup — it’s its own system to buy, configure, and maintain — so it’s worth treating as the answer to a measured problem, such as three or more systems needing the same record or a point-to-point sync already showing the failure modes covered here, rather than a default starting point for a two-system integration.
How to verify the sync is working after go-live
Don’t trust the connector’s “sync successful” status message as proof the integration works the way you intended — it confirms the sync ran, not that it matched records correctly or respected the direction you configured.
Pull a sample of tickets from shoppers you know have ordered more than once, ideally from more than one email address if any exist in your order history. Confirm each one maps to a single Salesforce contact, not two. Then check that the specific fields each team actually uses in their daily work — ticket count and account tier for support, order value and open-ticket flag for sales — arrived correctly on the other side, rather than checking every field in the map, which tells you the sync ran but not whether it’s useful.
Repeat this check on a schedule rather than once at launch. A sync that matches correctly in month one can start missing matches in month six if checkout collects a new field, a connector updates its default mapping, or ticket volume grows past whatever rate the connector was tested at.
Deciding who owns the customer record, setting the sync direction to match that decision, and catching duplicates before they compound is a customer service automation problem before it’s a Salesforce admin task or a Zendesk configuration setting — see customer service automation for how that decision fits into the rest of a support operation.
Sources
- No external figures are quoted in this article. It is written from how Zendesk-Salesforce sync connectors behave structurally — field mapping, sync direction, and contact matching — rather than from any vendor’s measured statistics, which should be checked against the specific connector you use before you rely on them.