When to use it
Connect Salesforce when Salesforce is your system of record and you want your agents to work from it without anyone copying data between tools. It’s the right choice when you want to:- Call or text people who already exist in Salesforce. Contacts sync into Retell automatically, so your agent greets callers by name and knows their account details instead of asking for them.
- Keep Salesforce current without manual data entry. Analysis results from each conversation (qualification status, stated preferences, a corrected email address) write back to the Contact record.
- Give your sales team call history where they already work. Each call and chat lands on the Contact’s activity timeline as a Task, with the summary and duration.
Prerequisites
- A Salesforce edition with API access: Enterprise, Unlimited, Developer, or Performance. API access is not available on Essentials or Professional without the API add-on.
- System Administrator permissions in Salesforce, or a role that can create External Client Apps.
- A Salesforce user to run the integration as. Use a dedicated integration user rather than a person’s account, so the connection doesn’t break when someone changes roles or leaves.
Step 1: Create an External Client App
Open the External Client App Manager

Setup > Apps > External Client Apps > External Client App Manager, with the New External Client App button in the top-right corner.
Fill in the basic information
- External Client App Name — a descriptive name, for example
Retell AI. - API Name — auto-filled from the name; leave it as is.
- Contact Email — your admin email address.
Local. The app only needs to work inside your own org.Step 2: Enable OAuth and the client credentials flow
Enable OAuth settings
Set a callback URL
Select OAuth scopes
- Manage user data via APIs (api) — the only scope Retell requires. It covers every REST and SOQL call Retell makes.
- Perform requests at any time (refresh_token, offline_access) — optional. The client credentials flow doesn’t issue refresh tokens, so this changes nothing for Retell, but it’s harmless if your org adds it by default.
api alone.Enable the client credentials flow

The External Client App creation screen: the Callback URL and OAuth Scopes fields, with Enable Client Credentials Flow checked under Flow Enablement.
Create the app
Step 3: Copy the consumer key and secret
Open the app's Settings tab

The app's Settings tab: OAuth Settings > App Settings, with the Consumer Key and Secret link highlighted.
Store both values
- Consumer Key — Retell’s Client ID.
- Consumer Secret — Retell’s Client Secret.
Step 4: Set the Run As user
The client credentials flow has no logged-in user, so Salesforce needs to know whose permissions to apply. Every read and write Retell makes runs as this user.Open the Policies tab
Enable the flow and pick the user

The Policies tab: under OAuth Flows and External Client App Enhancements, Enable Client Credentials Flow is checked and a Run As username is set.
Confirm the user's permissions
- Read on Contact and on every field you plan to import.
- Edit on Contact and on every field you plan to write back, if you enable outbound sync.
- Create on Task, if you enable activity logging.
Save
Step 5: Connect Salesforce in Retell
Add the connection
Enter your credentials

The Salesforce connection dialog in the Retell Dashboard, with fields for connection name, instance URL, client ID, and client secret.
Connect and confirm
Set up contact sync
Phone to Retell phone_number. Phone number is how contacts are matched between the two systems, so it stays mapped and can’t be removed. See CRM data mappings for how to map the rest, create custom fields, and choose update modes.Verify it worked
- On the Connected tab, the Salesforce connection shows as connected.
- Open Contacts. After the first sync, Salesforce Contacts appear with correctly formatted phone numbers and your mapped fields populated.
- The first sync is a full scan of every Contact with a phone number, so a large org takes a while. After that, Retell polls every 5 minutes and imports only Contacts modified since the last run.
Troubleshooting
Connecting fails right after I created the app
Connecting fails right after I created the app
Retell rejects my instance URL
Retell rejects my instance URL
https://<domain>.my.salesforce.com, lowercase, with no trailing slash or path. Lightning URLs (.lightning.force.com) and bare .salesforce.com URLs are rejected. Find the correct value in Salesforce under Setup > Company Settings > My Domain.The connection shows an error after working for a while
The connection shows an error after working for a while
INVALID_SESSION_ID. The usual causes are a rotated consumer secret, a deactivated Run As user, or the app being deleted or disabled in Salesforce. Reconnect with current credentials.Sync runs clean but one field never populates
Sync runs clean but one field never populates
I need to rotate the consumer secret
I need to rotate the consumer secret
Calls aren't showing up as Tasks in Salesforce
Calls aren't showing up as Tasks in Salesforce
FAQ
Does Retell create new Contacts in Salesforce?
Does Retell create new Contacts in Salesforce?
Can I connect more than one Salesforce org?
Can I connect more than one Salesforce org?
How are calls and chats represented in Salesforce?
How are calls and chats represented in Salesforce?
WhoId, with Status set to Completed. A call uses the Call task subtype, a subject of Call <call_id>, and sets CallDurationInSeconds. A chat uses the generic Task subtype, since Salesforce has no standard chat or SMS subtype. The description carries the conversation ID, the from and to numbers, the disconnection reason for calls, and the summary.Which Salesforce objects does contact sync read?
Which Salesforce objects does contact sync read?
Contact. Leads, Accounts, Opportunities, and Cases are not part of contact sync.Can I sync a custom object or a custom field?
Can I sync a custom object or a custom field?
__c custom fields, to a Retell custom field. Custom objects are not part of contact sync.What happens to my Retell contacts if I disconnect?
What happens to my Retell contacts if I disconnect?

