Skip to main content

Zoho CRM

This connector captures data from Zoho CRM modules into Flow collections. It uses Zoho's Bulk API 2.0 and COQL API.

This connector offers several unique advantages:

  • Efficient Backfills: Uses Zoho's Bulk API 2.0 for initial data loads and backfills, enabling significantly faster data transfer rates.

  • Real-time Incremental Updates: Uses the COQL (CRM Object Query Language) API to efficiently detect and capture changes since the last sync.

  • Formula Field Handling: The connector can automatically refresh formula fields on a configurable schedule. This ensures your formula field data stays current without manual intervention, even though Zoho doesn't track formula field changes in record modification timestamps.

This connector is available for use in the Flow web application. For local development or open-source workflows, ghcr.io/estuary/source-zoho:dev provides the latest connector image. You can also follow the link in your browser to see past image versions.

Supported data resources

This connector captures data from Zoho CRM modules. All available modules will appear after connecting to Zoho CRM.

info

Some modules are not supported by the API and cannot be captured:

  • Notes
  • Attachments
  • Emails
  • CTI_Entry
  • Email_Analytics
  • Email_Template_Analytics
  • Functions__s
  • Email_Sentiment
  • Locking_Information__s

Prerequisites

Authentication

This connector uses OAuth 2.0 to authenticate with Zoho CRM. You'll need to authorize Estuary to access your Zoho CRM data.

The connector requires the following OAuth scopes:

  • ZohoCRM.bulk.READ - For Bulk Read API (backfills)
  • ZohoCRM.coql.READ - For COQL queries (incremental updates)
  • ZohoCRM.modules.READ - For reading module data
  • ZohoCRM.settings.modules.READ - For reading module metadata
  • ZohoCRM.settings.fields.READ - For field metadata

Configuration

You configure connectors either in the Flow web app, or by directly editing the Flow specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the Zoho CRM source connector.

Properties

Endpoint

PropertyTitleDescriptionTypeRequired/Default
/credentialsAuthenticationOAuth2 credentials for Zoho CRM.objectRequired
/credentials/client_idClient IDThe OAuth app's client ID.stringRequired
/credentials/client_secretClient SecretThe OAuth app's client secret.stringRequired
/credentials/refresh_tokenRefresh TokenThe refresh token received from the OAuth app.stringRequired
/credentials/api_domainAPI DomainThe Zoho API domain. Automatically detected from the OAuth response.stringRequired
/start_dateStart DateUTC date and time in the format YYYY-MM-DDTHH:MM:SSZ. Data added on and after this date will be captured. If left blank, defaults to 30 days before the present.string30 days ago

Bindings

PropertyTitleDescriptionTypeRequired/Default
/nameNameName of the Zoho CRM module.stringRequired
/intervalIntervalInterval between data syncs.stringPT5M
/scheduleFormula Field Refresh ScheduleThe schedule for refreshing this binding's formula fields. Accepts a cron expression. For example, a schedule of 55 23 * * * means the binding will refresh formula fields at 23:55 UTC every day. If left empty, the binding will not refresh formula fields.string

Sample

captures:
${PREFIX}/${CAPTURE_NAME}:
endpoint:
connector:
image: ghcr.io/estuary/source-zoho:dev
config:
credentials:
client_id: <secret>
client_secret: <secret>
refresh_token: <secret>
api_domain: https://www.zohoapis.com
start_date: "2024-01-01T00:00:00Z"
bindings:
- resource:
name: Leads
interval: PT5M
schedule: "55 23 * * *"
target: ${PREFIX}/Leads
- resource:
name: Accounts
interval: PT5M
schedule: "55 23 * * *"
target: ${PREFIX}/Accounts
- resource:
name: Contacts
interval: PT5M
target: ${PREFIX}/Contacts
{...}

Formula Fields

Zoho CRM modules can contain formula fields, fields whose values are calculated based on other data. Since formula fields do not update the associated record's last modified timestamp when their values change, formula field updates are not incrementally captured by the connector.

To address this challenge, the Zoho CRM connector can refresh the values of formula fields on a schedule after the initial backfill completes. This is controlled at a binding level by the cron expression in the schedule property. When a scheduled formula field refresh occurs, the connector fetches every record's current formula field values and merges them into the associated collection with a top-level merge reduction strategy.