Authenticate using Zoho's OAuth 2.0 flow and obtain an access token scoped to ZohoCRM.bulk.ALL or ZohoCRM.bulk.CREATE + ZohoCRM.bulk.UPDATE for the relevant operations
Create a bulk write job via POST to the Zoho CRM v8 bulk write endpoint specifying the module (e.g., Leads, Contacts), operation (insert, update, or upsert), and the field used as the duplicate check key for upsert operations
Upload the data as a CSV or JSON file to the job's upload endpoint, then call the job execute endpoint to trigger processing
Poll the job status endpoint using the returned job ID until status is COMPLETED or FAILED — the job processes asynchronously and large files may take several minutes
On COMPLETED, fetch the result summary which reports total records processed, successful, and failed counts; download the failed-record file if failures are reported
Parse failed records to identify field-validation errors, duplicate conflicts, or missing required fields, then correct and resubmit a remediated file in a new job
Known gotchas
Zoho CRM bulk write jobs process records sequentially per job; submitting many small jobs in parallel is less efficient and may hit concurrent job limits — batch all records into one job file where possible
The field used as a duplicate check key for upsert must be marked as a unique field in the CRM module configuration; using a non-unique field causes all records to be processed as inserts, ignoring the upsert intent
Access tokens for bulk operations use data-center-specific token and API endpoints (e.g., .eu, .com.au domains); using the wrong regional endpoint returns a 401 even with a valid token
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp