Configuring Zoho CRM as a Source
In the Sources tab, click on the “Add source” button located on the top right of your screen. Then, select the Zoho CRM option from the list of connectors. Click Next and you’ll be prompted to add your access.1. Add account access
You’ll need to provide OAuth2 credentials to authorize Nekt to access your Zoho CRM data. The following configurations are available:- OAuth Client ID: The Client ID of the Self Client you registered in the Zoho API Console.
- OAuth Client Secret: The Client Secret associated with your Client ID. (Masked as a password field).
- Refresh Token: The Refresh Token generated for that Self Client. (Masked as a password field).
- Zoho data center (default:
com): The data center hosting your Zoho CRM account. You can infer it from the URL of your Zoho CRM instance — for example,crm.zoho.comis the United States data center. Supported values arecom(United States),eu(Europe),in(India),com.au(Australia),jp(Japan),com.cn(China), andca(Canada). - Initial sync date (optional): The earliest date from which records will be synced. Only records created or updated after this date will be extracted. If not provided, all historical data will be extracted.
Use a Zoho CRM user with access to every module you want to sync. A user with restricted profile permissions will cause those modules to be skipped.
Generating your credentials in the Zoho API Console
Follow these steps to obtain the three values above. The whole process takes a few minutes and is done only once.1
Create a Self Client
Sign in to the Zoho API Console with a Zoho user that can read every module you want to sync. Click GET STARTED, choose Self Client, and click CREATE NOW.A Self Client needs no name, homepage, or redirect URI. Open the Client Secret tab and copy the Client ID and Client Secret.
Use the API Console of your own data center. If your Zoho CRM runs on
crm.zoho.eu, use api-console.zoho.eu, and so on.2
Generate an authorization code
Open the Generate Code tab and fill in:
- Scope: paste the four scopes below, separated by commas and with no spaces.
- Scope Description: any description, for example
Nekt data extraction. - Time Duration: choose 10 minutes, so you have time for the next step.
3
Exchange the code for a refresh token
Run the request below, replacing the three placeholder values. Use the accounts URL of your data center — The response contains a
accounts.zoho.com for the United States, accounts.zoho.eu for Europe, and so on.refresh_token. Copy it — this is the third value Nekt needs.4
Paste the credentials into Nekt
Fill in the Client ID, Client Secret, and Refresh Token fields, and select your data center.
The refresh token does not expire. It stays valid until you revoke it or delete the Self Client in the Zoho API Console, so you only go through this process once.
2. Select streams
Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis. You can select entire groups of streams or pick specific ones.Tip: The stream can be found more easily by typing its name.Select the streams and click Next.
3. Configure data streams
Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a folder to organize it inside the layer, a name for each table (which will effectively contain the fetched data) and the type of sync.- Layer: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
- Folder: a folder can be created inside the selected layer to group all tables being created from this new data source.
- Table name: we suggest a name, but feel free to customize it. You have the option to add a prefix to all tables at once and make this process faster!
- Sync Type: you can choose between INCREMENTAL and FULL_TABLE.
- Incremental: every time the extraction happens, we’ll get only the new data, which is good if you want to keep every record ever fetched.
- Full table: every time the extraction happens, we’ll get the current state of the data, which is good if you don’t want to have deleted data in your catalog.
4. Configure data source
Describe your data source for easy identification within your organization, not exceeding 140 characters. To define your Trigger, consider how often you want data to be extracted from this source. This decision usually depends on how frequently you need the new table data updated (every day, once a week, or only at specific times). Optionally, you can define some additional settings:- Configure Delta Log Retention and determine for how long we should store old states of this table as it gets updated. Read more about this resource here.
- Determine when to execute an Additional Full Sync. This will complement the incremental data extractions, ensuring that your data is completely synchronized with your source every once in a while.
5. Check your new source
You can view your new source on the Sources page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.API Limitations
Zoho CRM meters its API with a daily credit budget per organization, which depends on your Zoho edition — 5,000 credits per day on the Free edition, and progressively more on Standard, Professional, Enterprise, and Ultimate. If the limit is reached (HTTP 429), the connector waits for the period indicated by Zoho and then retries, so the extraction continues instead of failing. A run that hits the limit takes longer than usual. A few field types cannot be read through the query API Zoho exposes for bulk extraction:- Multi-select lookup and subform fields are not synced. Their data is stored in a separate linking module in Zoho.
- Notes, Attachments, and Emails are served by dedicated Zoho APIs rather than the query API. If your organization exposes them as modules, the connector skips them and reports it in the run log.
Streams and Fields
Zoho CRM is fully customizable, so this connector does not use a fixed list of tables. On every run it reads your organization’s own module and field configuration and syncs all modules available to the connected user, including custom modules, with all of their standard and custom fields. This means the streams you see in step 2 mirror your Zoho account. Standard modules typically include:Sales
Sales
Activities
Activities
Inventory
Inventory
Marketing and support
Marketing and support
Custom modules
Custom modules
Any custom module created in your Zoho CRM account is discovered automatically and appears in the stream list under its own name. No configuration or connector update is needed.
Field naming and types
Field names come from your Zoho configuration and are converted to lowercase with underscores. For example, the Zoho fieldLast_Name becomes the column last_name, and Annual_Revenue becomes annual_revenue.
Every table includes these three fields, regardless of the module:
The remaining fields are typed from your Zoho field configuration:
Fields that hold a structured value in Zoho — such as a lookup, which carries both the linked record’s ID and its name — are stored as a JSON string. You can read them in SQL with your warehouse’s JSON functions.