Supported CRM platforms
Salesforce
Sync contacts and log call and chat activity as Salesforce Tasks.
HubSpot
Sync contacts and log call and chat activity to the HubSpot timeline.
How it works
The integration has four parts, each configured separately.1. Contact sync (CRM to Retell)
Retell imports contacts from your CRM and keeps them current. Imported records appear on the Contacts page.- Phone number is the key used to match contacts between systems. It’s mapped by default and can’t be unmapped.
- Inbound sync mappings control which CRM fields are imported.
- Default contact fields are
phone_number,first_name,last_name, anddo_not_call. - Custom fields (string, number, boolean, date, datetime, enum) capture anything else you want from your CRM.
Contacts are skipped when the mapped phone field is empty, or when its value can’t be parsed into a valid E.164 phone number. A contact that syncs but shows no name or custom fields usually means those fields aren’t mapped, not that the sync failed.
2. Post-call analysis mapping (analysis to contacts)
After each call or chat, Retell can map post-call analysis results onto contact fields, building a richer profile as your agents have more conversations. Each mapping has an update mode. The dashboard labels these differently on the contact fields page:
Analysis data mappings are configured per organization, not per agent, so the same rules apply no matter which agent handled the conversation.
See CRM data mappings for the full data flow and how to write field descriptions that make merges behave.
3. Conversation activity logging (Retell to CRM)
With Log activities automatically enabled, Retell logs each call and chat to your CRM:- Salesforce — a Task record with the call duration, direction, and summary.
- HubSpot — a Call engagement, or a Communication object for chats, on the contact’s activity timeline.
Activity is only logged for contacts that were imported from the currently connected CRM. A call from a number that doesn’t match a synced contact produces no activity record, and neither do contacts Retell created on its own.
4. Outbound field sync (Retell to CRM)
Outbound sync mappings push contact field updates from Retell back to your CRM. When a contact’s fields change in Retell, whether manually or through analysis mapping, the mapped fields are written to the matching CRM record. Outbound sync updates existing CRM records only. It never creates or deletes contacts in your CRM. Unlike contact sync, this isn’t on a schedule. It runs right after a conversation ends, as part of applying that conversation’s analysis results.Set up a CRM integration
1
Connect your CRM
Open Integrations in the Retell Dashboard, select the Available tab, and pick your provider. Follow the provider guide for the credentials:You need a role with the CRM.Write permission to create a connection.
2
Configure field mappings
After the connection test passes, select Set up contact sync. The dialog has two tabs: Import contacts (CRM to Retell) and Sync to [provider] (Retell to CRM). Phone number is mapped for you and stays locked.
3
Create custom fields
For CRM fields that don’t correspond to a default Retell field, create a custom field in Retell to hold the value. You can do this inline from the mapping dropdown.
4
Set up analysis data mappings (optional)
Map your post-call or post-chat analysis fields to contact fields, choosing an update mode for each based on how you want data to accumulate.
5
Enable conversation activity logging (optional)
Turn on Log activities automatically on the Sync to [provider] tab to log each call and chat to your CRM.
6
Run the first sync
Trigger a manual sync to import your existing contacts. This is a full scan, so a large CRM takes a while. It picks up where it left off if it doesn’t finish in one pass.
You can connect several CRM accounts, but only one connection drives contact sync for your organization at a time. Set up contact sync is disabled on a second connection while another one owns it.
Contact fields
Every Retell contact has four built-in fields:
Extend contacts with custom fields of type
string, number, boolean, date, datetime, or enum.
do_not_call isn’t mapped by default in either direction. Map it explicitly on both tabs if you want it to sync.
