Retrieving a bulk read job in Zoho CRM lets you check the status and results of a previously submitted bulk data export by querying the job using its unique job ID.
Why this matters
When you export large volumes of CRM records using the bulk read API, the job runs asynchronously — meaning you submit it and then need to poll for its completion. Knowing how to retrieve a specific bulk read job lets you monitor progress, confirm success, and fetch the resulting data. This is essential for any integration or automation that depends on bulk CRM exports.
> Note: Beam Help is an independent expert support resource — not official Zoho support.
---
Step-by-step
Step 1. Ensure your OAuth token includes the correct bulk scope.
Before making any bulk API call, confirm that your Zoho CRM OAuth credentials include the ZohoCRM.bulk.ALL scope. Without this permission, requests to the bulk endpoints will be rejected. [2]
Step 2. Obtain the job ID from a previously created bulk read job.
A bulk read job is created by sending a POST request to /bulk/v1/read with the appropriate configuration payload. The response from that creation call will include a job ID (jid) that you'll need for retrieval. [5]
Step 3. Call the GET endpoint with the job ID.
To retrieve the status and details of a specific bulk read job, send a GET request to the following endpoint:
GET /bulk/v1/read/{jid}
Replace {jid} with the actual job ID returned when the job was created. [1]
Step 4. Use the getbulkread_job method in your integration.
If you're working with a Python-based Zoho CRM client, the retrieval call is wrapped in a dedicated method. Pass the job ID as a string parameter — the method internally constructs the correct endpoint path and fires the request: [1]
def get_bulk_read_job(self, jid: str):
return self.c.request("GET", f"/bulk/v1/read/{jid}")
Step 5. Handle the tool call via the getbulkread_job tool (if using an AI-assisted workflow).
If you're using an AI-assisted Zoho integration layer, the tool name to invoke is getbulkreadjob, which belongs to the crm service. Pass the job ID using the jobid parameter key in your tool call payload. [3]
Step 6. Ensure your access token is valid before making the request.
The Zoho CRM API will return a 401 error if your access token has expired. A well-implemented client should automatically refresh the token using the stored refresh token before the request is made — typically with a buffer of around 120 seconds before expiry to avoid mid-request failures. [8]
---
Common pitfalls
- Missing
ZohoCRM.bulk.ALLscope: If this scope was not included when the OAuth connection was first authorised, bulk endpoint calls will fail with a permissions error. You'll need to re-authorise the connection with the correct scopes included. [2]
- Using an invalid or stale job ID: The
{jid}path parameter must exactly match the ID returned from the original job creation call. Passing an incorrect or expired job ID will result in a not-found error. [^1, ^5]
- Expired access tokens: If your integration does not handle token refresh automatically, calls to
/bulk/v1/read/{jid}may fail with authentication errors. Implement proactive token refresh logic to avoid this. [8]
---
What to check
- Scope confirmation: Verify that
ZohoCRM.bulk.ALLis present in your active OAuth token's scope list before making the retrieval call. [2] - Job ID accuracy: Cross-reference the
jidyou're passing against the response from your originalPOST /bulk/v1/readjob creation call to ensure they match. [5] - Token validity: Confirm your access token is current and that your client is set up to refresh it automatically when it approaches expiry. [8]