> ## Documentation Index
> Fetch the complete documentation index at: https://docs.retellai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Zoho contact sync

> Sync Zoho CRM Contacts with Retell AI: field mappings, post-call analysis write-back, and every call logged as a Zoho Call record on the timeline.

Contact sync imports your Zoho Contacts into Retell, writes [post-call analysis](/features/post-call-analysis-overview) results back to their fields, and logs each call as a **Call** record on the contact's timeline. This page covers the Zoho-specific behavior; [CRM integrations](/integrations/crm-overview) explains the four data flows all CRM providers share.

Contact sync requires a [connected Zoho org](/integrations/zoho). Integration tools work without it — see [Zoho agent functions](/integrations/zoho-functions).

## Required permissions

Sync runs as the [authorizing Zoho user](/integrations/zoho#prerequisites), whose profile needs:

* **View** on Contacts, including every field you import.
* **Edit** on Contacts for outbound sync, and **Create** if you turn on creating new contacts in Zoho.
* **Create** on Calls and Tasks for activity logging.
* Access to each mapped field. Zoho reports field permissions per user, so a field the authorizing user can't read or edit is skipped rather than synced.

A missing permission doesn't flag the connection; that field or feature silently stops syncing.

## Set up contact sync

After the connection test passes, click **Set up contact sync** to open the field mapping dialog, then map the Zoho fields you want to import and the Retell fields you want to write back. For a connection made earlier, the same dialog opens from the **Connected** tab: open the connection's settings and click **Set up contact sync**.

Retell pre-fills one mapping in each direction: Zoho `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. If the numbers you call live in a different field, such as `Mobile`, change the external field on both tabs. See [CRM data mappings](/integrations/crm-mappings) for how to map the rest, create custom fields, and choose update modes.

To log conversations to Zoho, turn on **Log activities automatically** on the **Sync to Zoho CRM** tab.

### Which Zoho fields can you map?

The field pickers read your Zoho modules live, so custom fields appear beside the standard ones. Retell maps the Zoho field types it can round-trip as plain values:

| Zoho field type                                               | Maps to                                           |
| ------------------------------------------------------------- | ------------------------------------------------- |
| `text`, `textarea`, `email`, `phone`, `website`, `autonumber` | string                                            |
| `integer`, `bigint`, `double`, `currency`, `percent`          | number                                            |
| `boolean`                                                     | boolean                                           |
| `date`                                                        | date                                              |
| `datetime`                                                    | datetime                                          |
| `picklist`                                                    | enum, offering the options Zoho reports as in use |

Every other type is left out because it doesn't round-trip as a single flat value: `lookup`, `ownerlookup`, `multiselectpicklist`, `formula`, `subform`, and `fileupload`.

<Note>
  Inbound sync reads at most **49 mapped fields** (as of August 2026), a cap Zoho's API sets on how many fields one read can request. Mapping a 50th on the **Import contacts** tab fails the sync rather than dropping a field quietly.
</Note>

## Verify it worked

* Open **Contacts**. After the first sync, Zoho Contacts appear with correctly formatted phone numbers and your mapped fields populated.
* The first sync is a full scan of every Contact in the module, read 200 at a time, so a large org takes a while. After that, Retell polls every 5 minutes (as of August 2026) and asks Zoho only for contacts modified since the last run.

<Note>
  Contacts with no value in the mapped phone field are excluded from the sync entirely, as are contacts whose number can't be parsed into a valid E.164 number.
</Note>

## How are conversations logged in Zoho CRM?

A call becomes a **Call** record linked to the Contact, carrying the call type (`Inbound` or `Outbound`), the start time, the call duration, and a description holding the call ID, the from and to numbers, the disconnection reason, and the summary.

A chat becomes a **Task** with status **Completed**, whose description holds the chat ID, the from and to numbers, and the summary. Zoho has no chat activity type, so a Task is the closest equivalent.

Both attach to the Contact that Retell matched by phone number, through the record's `Who_Id` field.

## Troubleshooting

<AccordionGroup>
  <Accordion title="Sync works but activities never appear on the timeline">
    Activity logging needs **Log activities automatically** enabled on the **Sync to Zoho CRM** tab, a Retell contact that was imported from this connection, and a profile that can create Calls and Tasks. A call from a number that doesn't match a synced contact is never logged.
  </Accordion>

  <Accordion title="The sync fails right after I add a mapping">
    You're likely past the 49-field cap on the **Import contacts** tab. Retell fails the run rather than dropping a field, so remove a mapping you don't need and the next poll succeeds.
  </Accordion>

  <Accordion title="A contact syncs but one field stays empty">
    Check the field on the Zoho side first. A field the authorizing user has no access to reads as absent rather than as an error, and a field type Retell doesn't map (a lookup, a multi-select picklist, a formula) never appears in the picker to begin with.
  </Accordion>
</AccordionGroup>

## FAQ

<AccordionGroup>
  <Accordion title="Does Retell create or delete Contacts in Zoho?">
    By default it only updates Contacts that already exist in Zoho, and it never deletes them. Turn on **Create new contacts in CRM** on the **Sync to Zoho CRM** tab to have Retell create a Contact after a conversation when the matched contact isn't linked to one yet. Your agent can also create Contacts through the **Create Contact** [tool](/integrations/zoho-functions), but that's an explicit tool call, not sync.
  </Accordion>

  <Accordion title="Which Zoho modules does sync touch?">
    Contacts for the records themselves, plus Calls and Tasks when activity logging is on. Leads aren't synced. If your callers live as Leads in Zoho, convert them or keep the numbers you dial on Contacts.
  </Accordion>
</AccordionGroup>

## Next steps

<CardGroup cols={2}>
  <Card title="CRM data mappings" icon="arrows-left-right" href="/integrations/crm-mappings">
    Map Zoho fields to Retell contacts, choose update modes, and control what syncs back.
  </Card>

  <Card title="Build contact memory" icon="brain" href="/integrations/build-contact-memory">
    Accumulate what your agents learn across conversations into the contact record.
  </Card>

  <Card title="Dynamic variables" icon="code" href="/build/dynamic-variables">
    Reference synced contact fields from your agent's prompt.
  </Card>

  <Card title="Zoho agent functions" icon="wrench" href="/integrations/zoho-functions">
    Look up callers, read their Deals, and create Tasks, Notes, and Calls mid-conversation.
  </Card>
</CardGroup>
