Overview
Salesforce CDC Connector for Freshdesk keeps your CRM and helpdesk in sync — automatically. When a contact is created or updated in Freshdesk, the change flows to Salesforce. When your sales team updates an account, it appears in Freshdesk. No manual exports, no stale data, no switching tabs to copy fields.
The connector runs quietly in the background. Your team keeps working the way they always have — the data just stays current across both systems.
Available on the Freshworks Marketplace. Install directly from your Freshdesk account — no code required.
Use cases
Support team visibility into CRM data
Your sales team creates leads and contacts in Salesforce. With the connector, support agents see those contacts automatically in Freshdesk — with name, email, phone, title, and any other mapped fields — without needing access to Salesforce.
Keeping Salesforce up to date from support
When a support agent updates a customer's phone number or job title in Freshdesk, that change flows back to the Salesforce contact automatically. Your CRM stays accurate without any manual effort.
Account sync on deal close
When a sales deal closes in Salesforce and a new Account is created, it automatically appears as a Company in Freshdesk. Support teams can immediately associate tickets with the right company.
Freshdesk as the system of record
Use the Freshdesk to Salesforce only direction if your support team owns contact data and you want it to flow into Salesforce — without Salesforce changes overwriting it.
Salesforce as the system of record
Use the Salesforce to Freshdesk only direction if your CRM team owns the data and you want support agents to always see the latest CRM data in Freshdesk.
What syncs
The connector syncs two record types between Freshdesk and Salesforce:
| Freshdesk | Salesforce |
|---|---|
| Contacts | Contacts |
| Companies | Accounts |
Standard fields sync out of the box. Custom fields from both platforms are supported and can be mapped during installation.
Default field mappings
These mappings are used if you do not configure custom ones during setup:
| Freshdesk (Contact) | Salesforce (Contact) |
|---|---|
| name | LastName |
| phone | Phone |
| mobile | MobilePhone |
| job_title | Title |
| description | Description |
| address | MailingStreet |
| Freshdesk (Company) | Salesforce (Account) |
|---|---|
| name | Name |
How it works
Freshdesk → Salesforce
When a contact or company is created or updated in Freshdesk, the app checks the configured sync direction. If sync is active for that direction, it maps the Freshdesk fields to Salesforce fields and searches Salesforce by the match field (usually email for contacts, name for companies).
- If a matching record is found — it updates the Salesforce record (only if values differ).
- If no match is found — it creates a new Salesforce record.
Salesforce → Freshdesk
Salesforce's Change Data Capture (CDC) streams real-time change events whenever a Contact or Account is created or updated. These events are picked up by a background service and forwarded to your Freshdesk app, which then applies the same match-and-update logic.
- If a matching Freshdesk record is found — it updates it (only if values differ).
- If no match is found — it creates a new Freshdesk contact or company.
Loop prevention
The connector uses echo detection to prevent sync loops. Before writing to a target system, it compares the incoming values against the current values. If they already match, the update is silently skipped. This ensures a change in Freshdesk does not trigger a change in Salesforce that triggers a change back in Freshdesk indefinitely.
Getting started
Setup has two parts: installing a package in your Salesforce org, then configuring the connector from Freshdesk. You will need admin access to both.
Prerequisites
- A Freshdesk account with admin access
- A Salesforce org with admin access
- The External Client Applications feature enabled in your Salesforce org (required for the connector package — see note below)
- Change Data Capture enabled for Contact and/or Account in Salesforce (required for Salesforce → Freshdesk sync)
External Client App feature required. The connector uses Salesforce's External Client App framework for OAuth. This feature is available in full production orgs, Developer Edition orgs, and most sandbox orgs. Some trial orgs may not have it enabled by default — if you hit an error during package installation, see the Troubleshooting section.
Step 1 — Install the RelyApps CDC Connector package in Salesforce
Visit the package installation URL for your org type. Log in with your Salesforce admin credentials when prompted.
| Org type | Installation URL |
|---|---|
| Production / Developer Edition / Trial | login.salesforce.com — Install package |
| Sandbox | test.salesforce.com — Install package |
On the installation screen, you will see three options — Install for Admins Only, Install for All Users, and Install for Specific Profiles. Select Install for Admins Only. Check the acknowledgment checkbox confirming you are installing a non-Salesforce application, then click Install.
Once complete, the package appears under Setup → Installed Packages as "RelyApps CDC Connector".
Step 2 — Enable CDC in Salesforce
In Salesforce, go to Setup → Integrations → Change Data Capture. Move Contact and Account from Available Entities to Selected Entities, then save. This is required for Salesforce → Freshdesk sync.
Step 3 — Install from the Freshworks Marketplace
Find Salesforce CDC Connector in the Freshworks Marketplace and click Install. You will be taken to the setup page inside your Freshdesk account.
Step 4 — Choose objects and sync direction
On the setup page, select which objects you want to sync — Contacts, Companies, or both. Then choose your sync direction: bidirectional, Freshdesk to Salesforce only, or Salesforce to Freshdesk only.
Step 5 — Authorize Freshdesk
Enter your Freshdesk domain (e.g. yourcompany.freshdesk.com) and your Freshdesk
API key. This allows the connector to read and write contacts and companies on your behalf.
Step 6 — Connect to Salesforce
Enter your Salesforce domain (e.g. myorg.my.salesforce.com) and click Connect to Salesforce. A popup opens for OAuth authorization — log in and
approve access.
Sandbox orgs are supported. The connector auto-detects sandbox domains and uses the correct Salesforce login URL.
Step 7 — Configure field mapping and install
The setup page shows all available fields from both Freshdesk and Salesforce. Map them using the dropdowns — you can use the defaults or configure custom mappings including custom fields from either platform.
For each enabled object, select the deduplication key — the field used to
match existing records and prevent duplicates. For Contacts, this defaults to email. For Companies, this defaults to name. Choose a field that is
unique and consistently populated in both systems. See the Field mapping section for available options.
Once you are satisfied with the field mapping and deduplication key selections, click Install.
To verify: create a test contact in Freshdesk and check if it appears in Salesforce.
Sync directions
You choose how data flows during installation. Three options are available:
| Setting | Freshdesk → Salesforce | Salesforce → Freshdesk |
|---|---|---|
| Bidirectional | Yes | Yes |
| Freshdesk to Salesforce only | Yes | No |
| Salesforce to Freshdesk only | No | Yes |
You can also choose to sync contacts only, companies only, or both. The sync direction cannot be changed after installation without reinstalling the app.
Field mapping
Field mapping is configured during installation via the setup UI. Each mapping connects one Freshdesk field to one Salesforce field.
Match field (deduplication key)
The match field — also called the deduplication key — is the field used to identify existing records before creating new ones. If a record with a matching value already exists in the target system, it is updated. If not, a new record is created. Choosing the right field is critical to preventing duplicates.
Contact — available deduplication keys
| Field | Notes |
|---|---|
| Freshdesk Id | The native Freshdesk contact record Id. Stable but only useful when syncing back from Freshdesk. |
| Good default. Works well when email is always present and unique across both systems. | |
| Phone | Use only if email is unavailable and phone numbers are guaranteed to be unique. |
| Mobile Phone | Same caveats as Phone. |
| External Id | A built-in field on Freshdesk Contacts. Map it to the Salesforce Contact Id and populate it with the Salesforce Id for reliable precision matching — no custom field needed. |
| Salesforce Id | Most reliable option. Create a custom text field in Freshdesk, populate it with the Salesforce Contact Id, and use it as the deduplication key for precision matching. |
Company / Account — available deduplication keys
| Field | Notes |
|---|---|
| Freshdesk Id | The native Freshdesk company record Id. Stable but only useful when syncing back from Freshdesk. |
| Name | Default. Works when company names are unique and consistently formatted across both systems. |
| Domain | Good alternative to name. More stable when company names vary or change over time. |
| Salesforce Id | Most reliable option. Create a custom text field in Freshdesk, populate it with the Salesforce Account Id, and use it as the deduplication key for precision matching. |
Important: Records where the deduplication key field is empty or null will not be synced. This is by design — without a match field value, the connector cannot safely determine whether to create or update a record, which would risk duplicates or infinite loops.
Warning: When using mutable fields like name, email, phone, or domain as the deduplication key, any change to that field value may cause the connector to fail to find the existing record — resulting in a duplicate being created, or an update being applied to a different record. Use an immutable identifier (Salesforce Id or External Id) wherever possible.
Custom fields
The setup UI lists all available custom fields from both Freshdesk and Salesforce. Map them the
same way as standard fields. Nested Freshdesk custom field paths (e.g. custom_fields.my_field) are supported automatically.
Changing mappings after installation
New mappings take effect immediately for all future sync events. Existing records are not retroactively re-synced. If you need to re-sync, trigger an update on the records in the source system.
Best practices
Choose the right deduplication key
The most reliable deduplication key is the Salesforce Id — stored automatically when records originate from Salesforce, guaranteeing a 1:1 match regardless of how other fields change. For records that originate in Freshdesk, use the External Id field and populate it with the Salesforce Contact or Account Id.
- Best for Contacts: Salesforce Id (for SF-originated records) or External Id populated with the Salesforce Contact Id.
- Good alternative for Contacts: Email — reliable when email is always present and unique across both systems.
- Best for Companies: Salesforce Id (for SF-originated records) or External Id populated with the Salesforce Account Id.
- Good alternative for Companies: Domain — more stable than company name, which can change or have inconsistent formatting.
Verify the deduplication key before going live
Before activating the connector, ensure the field you have chosen as the deduplication key is populated and unique across all existing records in both systems. A blank or duplicated match field will cause records to be skipped or matched incorrectly.
Export your Freshdesk contacts and companies to CSV and review the chosen key field for completeness. Do the same in Salesforce using a report or Data Loader export. Fix any gaps before enabling sync.
Match field types when mapping
Map Freshdesk fields to Salesforce fields of the same data type wherever possible. Mismatched types — for example, mapping a Salesforce picklist to a Freshdesk free-text field — may cause sync failures or store unexpected values.
- Text ↔ Text
- Date ↔ Date
- Number ↔ Number
- Checkbox / Boolean ↔ Checkbox
If the source and target field types do not match exactly, test the mapping with a single record before relying on it for production data.
Watch for API rate limit errors
Both Freshdesk and Salesforce enforce API rate limits. During periods of high activity — or when re-syncing a large number of records — you may encounter rate limit errors. These will appear in the connector's error logs as HTTP 429 responses.
If you regularly hit Freshdesk API limits, contact Freshworks support to request a limit increase for your plan. For Salesforce, review your API usage under Setup → System Overview → API Usage and consider upgrading your Salesforce edition if limits are regularly exceeded.
FAQ
What happens if I change field mappings after installation?
New mappings apply to all future sync events immediately. Existing records are not retroactively re-synced. Trigger updates on individual records in the source system if you need them re-synced.
Can I sync custom fields?
Yes. The setup UI shows all available custom fields from both Freshdesk and Salesforce. Select and map them using the dropdown selectors during installation.
How do I re-sync all records?
There is no bulk re-sync button. To re-sync, trigger updates on records in the source system. For large volumes, use Salesforce Data Loader or Freshdesk's bulk import tools.
Does it work with Salesforce sandboxes?
Yes. Enter your sandbox domain during installation (e.g. myorg--sandbox.sandbox.my.salesforce.com). The connector detects sandbox orgs
automatically.
What happens if Freshdesk or Salesforce is temporarily down?
If Salesforce is unreachable when a Freshdesk change fires, the sync attempt fails and is logged. There is no automatic retry — you will need to manually trigger a re-sync when the system is back up. The same applies in the reverse direction.
What Salesforce API version does the connector use?
v61.0 (Summer '24).
Troubleshooting
Package installation fails with "External Client Applications — Missing feature"
If you see an error like the one below during Step 1 package installation, the External Client Applications feature is not enabled in your Salesforce org:
This package can't be installed.
External Client Applications (externalClientApps/Freshdesk_integration.eca)
Missing feature: External Client Applications
External Client App Oauth Settings (extlClntAppOauthSettings/Freshdesk_integration_oauth.ecaOauth)
Missing feature: External Client App Oauth Settings You have two options:
- Contact Salesforce support and request that the External Client Applications feature be enabled for your org.
- Use a Developer Edition org for testing — Developer orgs have this feature enabled by default. Create a free one at salesforce.com/products/free-trial/developer .
Freshdesk changes are not appearing in Salesforce
- Check that the sync direction includes Freshdesk to Salesforce — if set to Salesforce-only direction, FD→SF sync is disabled.
- Make sure the contact or company has the match field (e.g. email) populated. Records without a match field value are skipped.
-
Check that the Salesforce contact requires
LastName— the Freshdesk contact must have a name for the Salesforce record to be created.
Salesforce changes are not appearing in Freshdesk
- Verify that Change Data Capture is enabled in Salesforce for Contact and Account under Setup → Integrations → Change Data Capture.
- Check the sync direction — if set to Freshdesk-only, Salesforce→Freshdesk sync is disabled.
- Delete events (records deleted in Salesforce) are not synced. Only creates and updates are propagated.
A sync update is being skipped silently
This is likely echo detection. If the values already match between Freshdesk and Salesforce (case-insensitive, whitespace-trimmed), the update is considered an echo and skipped. Make a more distinct change to trigger a genuine sync.
A contact was created with incomplete data
When a Salesforce CDC event contains only changed fields (typical for updates), the connector fetches the full Salesforce record before creating the Freshdesk contact. If that fetch fails, the contact may be created with only the changed fields. Contact support if this happens consistently.
An existing Freshdesk contact is failing to update
If a contact is in the Freshdesk trash, updates to it will fail. Go to Freshdesk Admin → Contacts → Trash, then restore or permanently delete the record. Trigger a re-sync from Salesforce afterwards.
The OAuth popup did not close after authorizing
The authorization is complete even if the popup does not close automatically. You can close it manually. The setup page should show "Connected" status. If it does not, refresh the page.
Known limitations
- Deletes are not synced. Records deleted in either system are not deleted in the other. You will need to handle deletions manually.
- No bulk re-sync. There is no one-click way to re-sync all records. Updates must be triggered individually from the source system.
- Records without a match field value are not synced. If a contact has no email (when email is the match field), it will be skipped to prevent duplicate creation loops.
- Sync direction cannot be changed post-install. Reinstall the app to change the sync direction.
- No historical backfill. Only changes made after installation are synced. Pre-existing records are not automatically synced.
Support
If you run into an issue not covered here, reach out. Include a description of what you expected to happen and what actually happened, along with your Freshdesk domain and a rough timestamp of when the issue occurred.
Need a custom workflow?
The default configuration covers most team setups, but every workflow is a little different. If you need the connector to behave in a way that is not supported out of the box — custom sync logic, additional field transformations, or integration with other systems — we are happy to discuss it.
Reach out at hello@relyapps.com with a description of what you need. We take on custom work at a reasonable cost and will let you know if it is something we can build.