Skip to content
All articles
Setup

Help desk: Zendesk, Freshdesk and Intercom

Sync your help desk tickets (Zendesk, Freshdesk or Intercom) to the CRM as Tickets, using your own account (BYO model).

The Help desk integration uses YOUR Zendesk, Freshdesk or Intercom account (BYO model: you bring your own account). Each ticket created or updated in your help desk becomes a Ticket in the CRM, with the Contact linked automatically by the requester's email. There is no cost, margin or intermediation on our side: the data comes straight from your account.

The integration starts inert: nothing happens until you fill in the credentials and activate. All secrets (signing secret, client secret, API tokens) are stored encrypted in the CRM and are never displayed back. Each platform has its own card in Settings → Integrations; the webhook URL is unique (/api/inbound/helpdesk/…) and the CRM knows which platform it is by the URL token.

Prerequisites

  • A Zendesk, Freshdesk or Intercom account with administrator access to create webhooks/triggers and view the signing secrets.
  • Zendesk: the subdomain (the part before .zendesk.com) and the webhook Signing secret (Admin Center → Apps and integrations → Webhooks).
  • Freshdesk: the domain (e.g., mycompany.freshdesk.com) and a shared secret you define. Intercom: your app's Client secret (Developer Hub).
  • In Sellio, administrator access to save the credentials and activate the integration in Settings → Integrations.

What happens on each ticket

  • The external ticket becomes a record of the Ticket object in the CRM (subject, status, priority and the requester's email).
  • The status and priority are converted to the CRM values (e.g., Zendesk open → in progress, solved → resolved; Freshdesk 2 → in progress, 4 → resolved; Intercom open → in progress, closed → closed). Priority urgent/priority → critical/high.
  • The Contact is linked by the requester's email when it already exists in the CRM. If it does not exist, the ticket is created anyway (unlinked) and you can associate it later.
💡 The sync is idempotent: if the help desk resends the same event, the CRM updates the existing Ticket instead of creating a new one. It identifies the record by the external id (stored as provider:id). Only the fields coming from the help desk are updated; what you edited by hand in the CRM is preserved.

Zendesk

  1. Open Settings → Integrations and find the "Help desk (Zendesk)" card.
  2. Fill in the subdomain (the part before .zendesk.com) and the webhook Signing secret. Optionally, the agent email and the API token, if you want to create tickets from the CRM. Click "Save credentials".
  3. Copy the "Webhook URL" that appears.
  4. In Zendesk Admin Center → Apps and integrations → Webhooks, create a webhook (JSON) pointing to that URL and associate it with a trigger that fires on ticket create/update. The trigger body must include: id, subject, status, priority, requester_email. Zendesk signs each call (header X-Zendesk-Webhook-Signature) with the Signing secret.
  5. Return to the CRM and click "Activate".

Freshdesk

Freshdesk does not sign webhooks natively. Instead, you define a shared secret and configure the automation to send it in the X-Freshdesk-Secret header; the CRM verifies this header on each call.

  1. In the CRM, find the "Help desk (Freshdesk)" card.
  2. Fill in the domain (e.g., mycompany.freshdesk.com) and a Webhook secret (a string you choose). Optionally, the API key, if you want to create tickets from the CRM. Click "Save credentials".
  3. Copy the "Webhook URL".
  4. In Freshdesk → Admin → Automations, create a rule that fires on ticket created/updated with the "Trigger webhook" action (POST, JSON) to that URL, including the X-Freshdesk-Secret header with the secret above. The body must include: id, subject, status, priority, email.
  5. Return to the CRM and click "Activate".

Intercom

  1. In the CRM, find the "Help desk (Intercom)" card.
  2. Fill in your Intercom app's Client secret (Developer Hub → your app → Basic information). Optionally, an Access token, if you want to create conversations from the CRM. Click "Save credentials".
  3. Copy the "Webhook URL".
  4. In Intercom Developer Hub → your app → Webhooks, point the notification URL to that URL and subscribe to the conversation topics (e.g., conversation.user.created, conversation.user.replied). Intercom signs each call with the Client Secret (header X-Hub-Signature, HMAC-SHA1).
  5. Return to the CRM and click "Activate".

Create tickets from the CRM (outbound, optional)

If you fill in the outbound credentials (Zendesk: email + API token; Freshdesk: API key; Intercom: access token), the CRM can also create a ticket in your help desk. It is a best-effort feature: if the API call fails, the CRM does not break the flow. It just reports the error. Where the tickets appear: in the CRM Tickets object and, when the requester is already a Contact, linked to it.

Treat the webhook URLs and the secrets as secret. The CRM verifies the signature of each call (Zendesk/Intercom by HMAC; Freshdesk by the shared secret); invalid calls are refused. If you try to activate without filling in the verification secret, the integration stays inert, and nothing is synced until everything is in place.

How to test

  1. Zendesk: in Admin Center → Apps and integrations → Webhooks, use the webhook test button, or create/update a real ticket that fires the trigger.
  2. Freshdesk: trigger the automation rule by creating/updating a ticket; Intercom: generate a test conversation that matches the subscribed topics.
  3. In the CRM, open the Tickets object and confirm the ticket appeared with subject/status/priority and linked to the Contact (if the requester's email already exists).
  4. Resend the same event and confirm the Ticket is updated, not duplicated (dedup by provider:id).

Troubleshooting

  • Zendesk: invalid signature: the Signing secret saved in the CRM differs from the webhook's (header X-Zendesk-Webhook-Signature). Copy the webhook secret in the Admin Center and re-enter it.
  • Freshdesk: calls refused: the automation must send the X-Freshdesk-Secret header with EXACTLY the secret saved in the CRM (Freshdesk does not sign natively).
  • Intercom: invalid signature: check the app's Client secret (Developer Hub → Basic information); the signature is HMAC-SHA1 in the X-Hub-Signature header.
  • Does not sync: confirm the trigger/webhook body includes the expected fields (id, subject, status, priority and the requester's email) and that the integration is activated.
  • Ticket with no contact: the link is by the requester's email. If they are not yet a Contact, the Ticket is created unlinked. A 404 on the URL indicates the integration is deactivated or the token changed.

Open this article inside the system

Read it and want to see it working?

The account is free and the whole manual is available inside the system, with an assistant that answers from this very content.

Create free account
Help desk: Zendesk, Freshdesk and Intercom · Sellio