Connect Zendesk to Salesforce
Why teams connect Zendesk and Salesforce
Support works in Zendesk, account teams work in Salesforce, and each is blind to the other. Agents do not know an account's plan or renewal date. CSMs do not know an account just opened five urgent tickets. The usual fixes are a shallow native connector or a manual weekly export.
- A new ticket is stamped with the account's plan, ARR, and CSM from Salesforce before an agent picks it up
- Tickets and Cases stay in step both ways: status, priority, assignee, and public comments sync, with a loop guard so an update the sync made does not trigger itself back
- Ticket volume, first response time, and CSAT roll up to the Salesforce Account, so success sees support health next to renewal date
- Every record change is a run you can inspect, so a case that fell out of sync can be traced to the sync that wrote it
Worked example
The enrichment and sync flow most teams turn on first.
New Zendesk ticket to a linked Salesforce Case, with account context and a loop check
Started on ticket creation, with a second flow for ongoing two-way updates.
- Trigger: a Zendesk trigger fires on
Ticket is Createdand calls a Neblex Webhook trigger with the ticket ID and the requester email. - Resolve account: search Salesforce for a
Contactby email, then read itsAccountforPlan__c,ARR__c,CSM__c, andRenewal_Date__c. - Stamp the ticket: a Zendesk ticket update sets the tier custom field, the CSM custom field, and a tag of
tier-enterpriseor similar. - Write the case: Salesforce
Upsert by external IDonCase, keyed onZendesk_Ticket_Id__c, mapping the fields below and linking the Contact and Account. - Loop check: the reverse flow, which polls Salesforce Case changes, skips any change whose last-modified-by is the integration user.
- Ongoing: a two-way flow syncs status, priority, assignee, and public comments. A Zendesk status maps to a Case status through a lookup, not one to one.
- Rollup: a scheduled flow recomputes open ticket count and 30-day CSAT per account and writes them to the Salesforce Account.
Field mapping
The starting map for the Zendesk ticket to Salesforce Case step. The status map is a lookup, not a direct copy.
| Zendesk | Salesforce Case | Notes |
|---|---|---|
ticket.id | Zendesk_Ticket_Id__c | Match and idempotency key. Custom field on Case. |
case.Id | → ticket custom field salesforce_case_id | Reverse match key. Written back after create. |
ticket.subject | Subject | |
ticket.description | Description | First comment only. Later comments sync as Case comments. |
ticket.requester.email | ContactId (resolved) | Resolved to a Contact, and its Account to AccountId. No match tags the ticket unmatched-account. |
ticket.status | Status | Lookup map. solved and closed both map to a single Case status you choose. |
ticket.priority | Priority | Lookup map. Zendesk has four levels, Salesforce has three by default. |
ticket.assignee.email | OwnerId (resolved) | Resolved through a user-map table. Unresolved assignees keep the queue owner. |
ticket.created_at | (not written) | Not written. Salesforce sets its own CreatedDate. Kept in the run log. |
| (system flag) | LastModifiedById check | The loop guard. Changes by the integration user are not synced back. |
What syncs, each direction
- Tickets to Cases. New tickets create linked Cases. Status, priority, assignee, and public comments sync on every update. (Zendesk to Salesforce)
- Account context. Plan, ARR, CSM, renewal date, and account health are written to Zendesk ticket fields and the organization record. (Salesforce to Zendesk)
- Case changes back. A Case status change, an internal comment, or a reassignment made in Salesforce syncs to the Zendesk ticket on the next poll, unless the integration user made it. (Salesforce to Zendesk)
- Support rollups. Open ticket count, first response time, and 30-day CSAT per account roll up to the Salesforce Account on a schedule. (Zendesk to Salesforce)
Governance and audit
The same controls apply to this sync as to every other Neblex workload.
- Run history. Every record sync is a run with each step's input and output, including the loop check. A failed run can be replayed from the step that failed, and the upsert stops a second case.
- Approval steps. Add a Wait for form step before a bulk status change, so a mapping error does not close a thousand cases.
- Scoped access. Zendesk uses an agent API token with the needed role. Salesforce uses a connected app and a permission set limited to Case, Contact, and Account.
- Environments. Build against a Zendesk sandbox and a Salesforce sandbox, then promote the same flow and mappings to production.
Frequently asked questions
How does the two-way sync avoid an infinite loop?
The flows run as dedicated integration users. Each reverse flow checks who last modified the record and skips changes made by the integration user, so only real user edits propagate.
Zendesk has more ticket statuses than Salesforce has case statuses. How is that handled?
Status is a lookup map you define, not a one-to-one copy. Several Zendesk statuses can map to one Case status and vice versa, and the map is versioned in the flow.
Is this immediate or batched?
Tickets start a flow immediately when the Zendesk trigger calls the Neblex Webhook trigger. Salesforce changes come back on the polled Case trigger, from every minute upward, or as they happen with a Change Data Capture stream. The support rollups run on a schedule.
What if a ticket's requester is not in Salesforce?
The ticket is tagged unmatched-account and the Case is created without an Account link, so support still gets a case and the CSM sees it later when the contact is added.
Is this different from the native Zendesk for Salesforce app?
The native app does one-way ticket-view and basic case creation. This adds two-way field sync with a loop check, a defined status map, account enrichment onto the ticket, and support rollups, all in one run history.
Connectors used
Zendesk
Customer Support & Success
- Operations
- 626
- Operations with typed output
- 88.5%
- Change triggers
- Poll or inbound webhook
- Signs in with
- Connection fields
Salesforce
CRM & Sales
- Operations
- 1,296
- Operations with typed output
- 57.9%
- Change triggers
- 31 (poll)
- Signs in with
- OAuth 2.0 sign-in
Bring one real integration
We will build it with you against your own systems, with the run log open.