Kaizen #103 - Bulk Write API using PHP SDK (v5) - Part I

Kaizen #103 - Bulk Write API using PHP SDK (v5) - Part I

Hi everyone and welcome to another amazing Kaizen week!

This week, we will discuss and explore Bulk Write API in detail, and how to implement the same using Zoho CRM PHP SDK. Please note that the information in the article holds true for Zoho CRM PHP SDK supporting version 5 of Zoho CRM APIs.

What is Bulk Write API?

The Bulk Write API enables you to efficiently insert, update, or upsert a large dataset into your CRM account. As this is an asynchronous API, the records will not be added immediately, instead a job will be scheduled to do so. You will receive a notification at the specified callback URL or you can periodically check the job status.

The Bulk Write API allows you to insert, update, or upsert up to 25,000 records in a single API call. This is much more than the maximum of 100 records that you can insert, update, or upsert using the Insert, Update, and Upsert Records API. 

When to use Bulk Write API?

  • When you want to schedule a job to import a huge volume of data in your CRM account.
  • When you want to insert, update, or upsert more than 100 records in a single API call. 
  • When you want to perform background processes like migration and initial data sync between Zoho CRM and external services.

However, the Bulk Write API consumes 500 credits per job, while the Insert, Update, and Upsert records API consumes 1 credit per 10 records. So, if you only need to insert, update, or upsert a small number of records (5,000 or less), it is economical to use the Records API as it will consume fewer credits.

Here are the major differences between Record APIs and Bulk Write API.

Insert, Update, Upsert Records API
Bulk Write API
You can insert, update, or upsert only up to 100 records per API call.
You can insert, update, or upsert 25000 records per API call.
The response is available instantly.
The response to the Bulk Write API request will not be available immediately. You can check the status of the job by polling for it, or you can wait for the status to be available in the callback URL after the job has completed.
The API consumes 1 credit per 10 records.
Bulk Write API consumes 500 credits per API call. 

Bulk Write API 

To insert, update, or upsert records in bulk, follow the below steps:
  1. Prepare your CSV file
  2. Upload your file in zip format
  3. Create a bulk write job
  4. Check the job status
  5. Download the result

1. Prepare the CSV file

To use the Bulk Write API, you must first create a CSV file containing the data you want to import to Zoho CRM. The first row of the CSV file must contain the field API names, and each subsequent row must contain the data. You can insert, update, or upsert records in a single module using one Bulk Write API call.

Input format for each data type:

Datatype
Description
Single Line
Accepts up to 255 characters.
Accepts alphanumeric and special characters.
Ex: Mike O'Leary
Multi-Line
Small - accepts up to 2000 characters.
Large - accepts up to 32000 characters.
Ex: This is a sample description.
Email
Accepts valid email IDs.
Phone
Accepts up to 30 characters. This limit may vary based on the value configured in 'Number of characters allowed' in the properties pop-up of the field, in UI.

Accepts only numeric characters and '+' (to add extensions). 
Ex: 9800000099
Picklist
You can pass an existing pick list value. If you give a new one, it is automatically added to the pick list set.
The pick list value accepts all alphanumeric and special characters.
Ex: auto mobile
Multiselect Picklist
You can either pass the existing pick list values separated by a semicolon(;) or add a new one.
The pick list value accepts all alphanumeric and special characters.
Ex: Analytics;Bigdata
Date
Accepts date in different formats as mentioned here.
Ex: 2023-05-03
DateTime
Accepts date in different formats as mentioned here.
Ex: 2023-05-03T20:39:19+05:30
Number
Accepts numbers up to 9 digits. This limit may vary based on the value configured in 'Maximum digits allowed' in the properties pop-up of the field, in UI. The accepted formats are mentioned here.
Accepts numeric values.
Ex1: 350
Ex2: 123,344
Currency
Before decimal point - accepts numbers up to 16 digits.  This limit may vary based on the value configured in 'Maximum digits allowed' in the properties pop-up of the field, in UI.
After decimal point - accepts precision up to 9 digits. This limit may vary based on the value configured in 'Number of decimal paces' in the properties pop-up of the field, in UI.
Please note that comma separated digits are accepted.
Ex1: 250000.90
Ex2: 123,456.657483
Decimal
Before the decimal point - accepts numbers up to 16 digits. This limit may vary based on the value configured in 'Maximum digits allowed' in the properties pop-up of the field, in UI.
After the decimal point - accepts precision up to 9 digits. This limit may vary based on the value configured in 'Number of decimal places' in the properties pop-up of the field, in UI.
Accepts comma separated numeric values.
Ex1: 250000.50
Ex2: 123,235.345
Percent
Accepts numbers up to 5 digits.
Accepts only numeric values.
Ex: 25
Long Integer
Accepts numbers up to 18 digits. This limit may vary based on the value configured in 'Maximum digits allowed' in the properties pop-up of the field, in UI.
Accepts only numeric values.
Ex: 0012345600012
Checkbox
Accepts only Boolean values(true,false).
Ex: true
URL
Accepts valid URLs.
Lookup
Accepts the unique ID of the record, which you can get through the get records API.
Use the dot(.) operator to link the record. For instance, if there is an account lookup in the Contacts module, you can give the column name as - Account.id
Ex: Account.id : 4150868000001136302
User
This is a default look-up field for users in Zoho CRM. Accepts the unique ID of the user, which you can get through the get users API.
Ex: User.id

Note:
  • To give multiple values for a multi-select pick list field, enclose them in double quotes("") and separate each value with the semicolon(;).
  • If your multi-line field has more than one line, input them directly by enclosing them in double quotes("").
  • You can only zip one CSV file to upload for bulk write. Adding more than one CSV file into the zip file will result in an error.
  • You can specify a specific format for your number, currency, decimal, date and datetime fields using format key.

Subform Data in Bulk Write API:

The Bulk Write API allows you to import and update records with subforms. To insert or update records with subforms, you must import the parent records first with Bulk Write API, and then the subform records with another Bulk Write API. 

For example, consider an instance where you have a subform named "Contact Details" in the Account module. The subform has the following fields - Contact_Name, Contact_Email and Contact_Phone. You must first create a csv file with the parent records, compress it as a zip file, upload it, and create a bulk write job. 



This is an example csv file. Note the Field API names are in the first row, and the record data is in the subsequent rows.

Once you have imported the parent records, you can upload the subform data CSV. When you prepare the subform data CSV file, it is mandatory to have the parent record ID in the subform data file, along with the subform data. 



This is a sample CSV file for the subform data. The subform data in each row will be added to the corresponding parent record. 

Multiselect Lookup Fields in Bulk Write API

To upload records with multiselect lookup fields, you can follow the same steps as for subforms. First, import the parent records. Then, import the multiselect lookup field data. The CSV file should contain both the parent record ID and the multiselect lookup field data. Please note that this method does not work for line items.

User Lookup in Bulk Write API

To import records with user lookup fields, you can include them in the same CSV file as the parent records. Use the field API name of the user lookup field in the CSV header, and add the unique IDs of the lookup records in the data column for each record.

Once you have prepared the CSV file, compress it as a zip file to upload in the next step. We will add examples of how to add subform data, user lookup and multiselect lookup field data in subsequent sections.

2. Upload your zip file

Once you have your csv file ready and compressed into a zip file, you should upload the same using a POST request. Use the following code snippet to upload the file.


<?php
namespace bulkwrite;

use com\zoho\crm\api\bulkwrite\FileBodyWrapper;
use com\zoho\crm\api\bulkwrite\BulkWriteOperations;
use com\zoho\crm\api\util\StreamWrapper;
use com\zoho\crm\api\bulkwrite\UploadFileHeader;
use com\zoho\crm\api\HeaderMap;

require_once "vendor/autoload.php";

class UploadFile
{
  public static function initialize()
  {
      // Add init code here.
      // Refer to this post for more details
  }

  public static function uploadFile1(string $orgID, string $absoluteFilePath)
  {
    $bulkWriteOperations = new BulkWriteOperations();
    $fileBodyWrapper = new FileBodyWrapper();
    $streamWrapper = new StreamWrapper(null, null, $absoluteFilePath);
    $fileBodyWrapper->setFile($streamWrapper);
    $headerInstance = new HeaderMap();
    //To indicate that this a bulk write operation
    $headerInstance->add(UploadFileHeader::feature(), "bulk-write");
    $headerInstance->add(UploadFileHeader::XCRMORG(), $orgID);
    //Call uploadFile method that takes FileBodyWrapper instance and headerInstance as parameter
    $response = $bulkWriteOperations->uploadFile($fileBodyWrapper, $headerInstance);
    // Add your code to handle the response received in the $response.
  }
}

UploadFile::initialize();
$orgID = "add_your_org_id_here"; // add your zgid which you can obtain using Get Organization API.
$absoluteFilePath = "/Users/test/bulk-write.zip"; //add the absolute file path of your zip file here.
UploadFile::uploadFile1($orgID, $absoluteFilePath);

The uploadFile() method takes two parameters: the organization ID ($orgID) and the absolute file path ($absoluteFilePath) of the file to be uploaded. Within the uploadFile() method, an instance of BulkWriteOperations is created to call the Bulk Write API.  This API is used to upload files to the Zoho File System. The HeaderMap instance is created to hold the necessary headers for the API request. The UploadFileHeader::feature() and UploadFileHeader::XCRMORG() methods are used to set the feature and organization ID headers, respectively. These headers are required to identify the type of operation being performed and the organization that the file is being uploaded.
 The uploadFile() method is called on the BulkWriteOperations instance, passing the FileBodyWrapper and HeaderMap as parameters. The response from the API call will be stored in the $response variable, which contains the file ID as well. We will use this file ID in the next step, creating a bulk write job.

We hope you found this post on the Bulk Write API useful. In next week's post, we will cover how to create a bulk write job, including lookup and user lookup fields and subform data. We will also show you how to check the job status and download the job result.

If you have any specific questions about the Bulk Write API, please leave a comment below,  or reach out to us at support@zohocrm.com. We are happy to help!

Thank you for reading! Stay tuned for more useful posts in the series. See you all next week!

    Access your files securely from anywhere







                            Zoho Developer Community




                                                  • Desk Community Learning Series


                                                  • Digest


                                                  • Functions


                                                  • Meetups


                                                  • Kbase


                                                  • Resources


                                                  • Glossary


                                                  • Desk Marketplace


                                                  • MVP Corner


                                                  • Word of the Day


                                                  • Ask the Experts



                                                            • Sticky Posts

                                                            • Kaizen #222 - Client Script Support for Notes Related List

                                                              Hello everyone! Welcome to another week of Kaizen. The final Kaizen post of the year 2025 is here! With the new Client Script support for the Notes Related List, you can validate, enrich, and manage notes across modules. In this post, we’ll explore how
                                                            • Kaizen #217 - Actions APIs : Tasks

                                                              Welcome to another week of Kaizen! In last week's post we discussed Email Notifications APIs which act as the link between your Workflow automations and you. We have discussed how Zylker Cloud Services uses Email Notifications API in their custom dashboard.
                                                            • Kaizen #216 - Actions APIs : Email Notifications

                                                              Welcome to another week of Kaizen! For the last three weeks, we have been discussing Zylker's workflows. We successfully updated a dormant workflow, built a new one from the ground up and more. But our work is not finished—these automated processes are
                                                            • Kaizen #152 - Client Script Support for the new Canvas Record Forms

                                                              Hello everyone! Have you ever wanted to trigger actions on click of a canvas button, icon, or text mandatory forms in Create/Edit and Clone Pages? Have you ever wanted to control how elements behave on the new Canvas Record Forms? This can be achieved
                                                            • Kaizen #142: How to Navigate to Another Page in Zoho CRM using Client Script

                                                              Hello everyone! Welcome back to another exciting Kaizen post. In this post, let us see how you can you navigate to different Pages using Client Script. In this Kaizen post, Need to Navigate to different Pages Client Script ZDKs related to navigation A.


                                                            Manage your brands on social media



                                                                  Zoho TeamInbox Resources



                                                                      Zoho CRM Plus Resources

                                                                        Zoho Books Resources


                                                                          Zoho Subscriptions Resources

                                                                            Zoho Projects Resources


                                                                              Zoho Sprints Resources


                                                                                Qntrl Resources


                                                                                  Zoho Creator Resources



                                                                                      Zoho CRM Resources

                                                                                      • CRM Community Learning Series

                                                                                        CRM Community Learning Series


                                                                                      • Kaizen

                                                                                        Kaizen

                                                                                      • Functions

                                                                                        Functions

                                                                                      • Meetups

                                                                                        Meetups

                                                                                      • Kbase

                                                                                        Kbase

                                                                                      • Resources

                                                                                        Resources

                                                                                      • Digest

                                                                                        Digest

                                                                                      • CRM Marketplace

                                                                                        CRM Marketplace

                                                                                      • MVP Corner

                                                                                        MVP Corner









                                                                                          Design. Discuss. Deliver.

                                                                                          Create visually engaging stories with Zoho Show.

                                                                                          Get Started Now


                                                                                            Zoho Show Resources

                                                                                              Zoho Writer

                                                                                              Get Started. Write Away!

                                                                                              Writer is a powerful online word processor, designed for collaborative work.

                                                                                                Zoho CRM コンテンツ



                                                                                                  Nederlandse Hulpbronnen


                                                                                                      ご検討中の方




                                                                                                              • Recent Topics

                                                                                                              • Send email template "permission denied to access the api"

                                                                                                                Hello, Per the title, I'm trying to send a Zoho CRM Email template based on the advice given here: https://help.zoho.com/portal/en/community/topic/specify-an-email-template-when-sending-emails-in-custom-functions (I'd prefer to send right from Deluge
                                                                                                              • how to Solve Conflict Invoices in Zoho POS

                                                                                                                Hello Team, I am facing a repeated issue in Zoho POS while saving a sale that contains service-based items. My products are intentionally created as Service (Non-Inventory) items because I do not want to track stock for them. However, every time I try
                                                                                                              • Copy, Paste, Highlighted text

                                                                                                                when i copy paste text it gets highlighted. Fix this.  WTF is with this black highlight ? Fix copy pasting. Some people pay for using this mail service. 
                                                                                                              • Pricing Strategies: #6 Common Mistakes while Configuring Pricing

                                                                                                                "Why does this month's billing feel messy again?" That was the exact line Priya muttered while staring at the spreadsheet full of edited pricing, one-off discounts and mismatched subscription details. Her business was growing, but the pricing machine
                                                                                                              • Publish to LinkedIn via API

                                                                                                                Hi, Is it possible to publish a job opening to LinkedIn (paid job slots) if creating a job opening via api / deluge function? Or is the user required to manually publish via the job boards process? Many Thanks Adrian
                                                                                                              • FSM - Associating and selecting Contacts based on Service Addresses

                                                                                                                Hi FSM team, I've come across an FSM limitation I wanted to share for improvement. I'm currently configuring FSM for a client who provides heating system install and maintenance services. The are often sub contracted by building management companies to
                                                                                                              • Do Unpublished Products in Shopify Sync to Zoho POS?

                                                                                                                Will an unpublished product in Shopify sync to Zoho POS? I would like to know how Zoho POS handles products that are in draft/unpublished status in Shopify.
                                                                                                              • Problem in Zoho POS frontend ERP.

                                                                                                                We are facing some difficulties in our billing and inventory processes and require your support to resolve them at the earliest. Customer Advance Payments We receive advance payments from customers for upcoming sales. Please guide us on how to record
                                                                                                              • Categorize Items with Item Headers

                                                                                                                Hello customers, Did you ever want to classify items based on specific categories to help your customers understand your invoice better? With the new Item Header feature, you can easily categorize items in your invoices and estimates and give them a common title.  Item Headers are available in the Invoices, the Recurring Invoices and the Estimates module. It can be carried forward from estimates to invoices at the time of converting the estimates.  To add an item header: Go to the Estimates, Invoices
                                                                                                              • Discount on the transaction level in POS

                                                                                                                "Is it possible to apply a discount on the total bill before tax in Zoho POS?" I want to apply a discount on the total transaction amount in Zoho POS, but the discount should be calculated before the taxes are applied. Is there an option to do this in
                                                                                                              • Create Tasklist with Tasklist Template using API v3

                                                                                                                In the old API, we could mention the parameter 'task_template_id' when creating a tasklist via API to apply a tasklist template: https://www.zoho.com/projects/help/rest-api/tasklists-api.html#create-tasklist In API v3 there does not seem to be a way to
                                                                                                              • Send Automated WhatsApp Messages and Leverage the Improved WhatsApp Templates

                                                                                                                Greetings, I hope all of you are doing well. We're excited to announce a major upgrade to Bigin's WhatsApp integration that brings more flexibility, interactivity, and automation to your customer messaging. WhatsApp message automation You can now use
                                                                                                              • Jobs at multiple locations

                                                                                                                Hi A lot of times we have same job open at multiple locations. So I would like an option where we can create a job and choose multiple locations. Currently we have to create individual jobs for each location. If we can create one job and mention multiple
                                                                                                              • From Zoho CRM to Paper : Design & Print Data Directly using Canvas Print View

                                                                                                                Hello Everyone, We are excited to announce a new addition to your Canvas in Zoho CRM - Print View. Canvas print view helps you transform your custom CRM layouts into print-ready documents, so you can bring your digital data to the physical world with
                                                                                                              • Tag Adding Option in Kanban Card Customization Bigin CRM Mobile App

                                                                                                                I would like to request an option to add and display tags on Kanban cards in the Bigin CRM mobile app. This feature would make it easier to categorize deals and quickly identify priorities while working on the go.
                                                                                                              • Empowered Custom Views: Cross-Module Criteria Now Supported in Zoho CRM

                                                                                                                Hello everyone, We’re excited to introduce cross-module criteria support in custom views! Custom views provide personalized perspectives on your data and that you can save for future use. You can share these views with all users or specific individuals
                                                                                                              • Associating a Candidate to a Job Listing

                                                                                                                Hello, I am trying to use Zoho Forms embedded on my website for candidates to apply for a job opening. I want the form then to tie directly with zoho recruit and have the candidate be automatically inputed into Recruit as well as associated with the specific
                                                                                                              • WhatsApp Voice Message Sending Option in Bigin CRM

                                                                                                                I would like to request a feature that allows users to send WhatsApp voice messages directly from Bigin CRM. This would help improve communication efficiency and make it easier for teams to respond quickly to customer inquiries.
                                                                                                              • CRM: hosting a single html file in Zoho and displaying it as a widget

                                                                                                                I have seen that CRM offers the option of uploading a web project to Zoho itself and displaying it as a widget in CRM. The instructions then talk about setting a development environment with Node and developing an application to upload to Zoho. But I
                                                                                                              • How to change position button transtition of Blueprint?

                                                                                                                Hi Everyone, Look at my screenshoot, it is possible move the reject button to the right? I couldn't find that setting in the blueprint. Thank you.
                                                                                                              • Multi file upload

                                                                                                                Hi, I just wonder if one could upload multiple files in one shot, say between one and three files, without adding multiple File Upload fields? Thanks, Alalbany
                                                                                                              • Sorting Descending in a lookup

                                                                                                                I have a case number lookup on multiple forms. I need the most recent added to appear at the top of the lookup or as the list of cases grom it's too much to scroll. Is there a way to have a look up sort descending?
                                                                                                              • Auto-upload Creator Files to WorkDrive

                                                                                                                Hi everyone, I’m working on a workflow that uploads files from Zoho Creator to specific subfolders in Zoho WorkDrive, as illustrated in the attached diagram. My Creator application form has two multi-file upload fields, and I want—on successful form submission—to
                                                                                                              • Asap Widget 2.0

                                                                                                                Where's the documentation for the new ASAP widget? https://www.zoho.com/desk/developers/asap/#introduction this one is outdated How can we dynamically navigate between different views? How can we prefill ticket forms using ASAP 2.0?
                                                                                                              • Can the Trigger be changed?

                                                                                                                I'm afraid I already know the answer, but here goes... After activating a workflow (under Campaigns > Automations), Then later choosing to Edit the workflow, Can the Workflow's Trigger be changed? Currently the entire Trigger section + options are gone
                                                                                                              • Marketer's Space: Proven tips to improve open rates – Part I

                                                                                                                Hello Marketers! Welcome back to another post in Marketer's Space! In this week's post, we'll discuss the ever-important concept of open rates. This will be a multi-part series, as we have a range of topics to cover. Open rates—which measure the percentage
                                                                                                              • Can't send nor receive emails on my external email accounts since this morning

                                                                                                                Greetings, I have two external accounts integrated into Zoho mail through POP3 + SMTP. These accounts have always worked normally since the day I've set them up. Starting 10:30 AM this morning (Western European Time) both suddenly stopped sending and
                                                                                                              • Creating Custom PDF Template from Form

                                                                                                                I am trying to create a custom PDF from form submissions. I have the standard subscription and it indicates that PDF forms are included. I cannot find anywhere to create PDF forms. I try to follow the instructions from here: https://help.zoho.com/portal/en/kb/forms/form-settings/pdf-settings/pdf-editor/articles/creating-your-own-pdf-template#Creating_your_template_from_the_scratch
                                                                                                              • Important Update: Facebook Metrics Deprecation & Impact on Zoho Analytics

                                                                                                                Dear Zoho Analytics users, Facebook has deprecated a set of metrics from the Facebook Pages Insights API, effective November 15, 2025. As a result, these changes will affect any reports and dashboards in Zoho Analytics that rely on Facebook Pages data.
                                                                                                              • Quick Copy Column Name

                                                                                                                Please add the ability to quickly copy the name of a column in a Table or Query View. When you right-click the column there should be an option to copy the name, or if you left-click the column and use the Ctrl+C keyboard shortcut it should copy the
                                                                                                              • Conditional Field Visibility in Bigin CRM

                                                                                                                I would like to request support for conditional field visibility within Bigin CRM. This feature should allow administrators to configure show/hide rules for fields based on predefined criteria (e.g., field values, picklist selections, stage changes,
                                                                                                              • Introducing Zoho MCP for Bigin

                                                                                                                Hello Biginners! We're excited to introduce Zoho MCP for Bigin, a completely new way of interacting with Bigin data using AI. With Zoho MCP, you can securely connect your Bigin account with popular AI agents like Claude, Cursor, Windsurf, and VS Code,
                                                                                                              • MCP > Creator connection failing with Claude

                                                                                                                I'm trying to get claude to access any of my Zoho Creator apps and it keeps failing. I have enabled all tools for creator and ensured in claude settings that everything is authorised. Here is what claude says : Unfortunately, the error messages I'm receiving
                                                                                                              • Is it possible to sync data every 5–10 minutes in Zoho Analytics (CRM or Excel imports)?

                                                                                                                Hello Team, I want to know if Zoho Analytics supports near real-time syncing of data from different sources. My requirements: I am importing data from Zoho CRM → Zoho Analytics I also have some datasets maintained in Excel/CSV I want both data sources
                                                                                                              • Feature Request: Dynamic Dimension Control for zc_LoadIn Popups

                                                                                                                As detailed in this community discussion, Zoho Creator's zc_LoadIn parameter is a vital tool for opening components (forms, reports, or pages) in modal dialogs via HTML snippets, Notes, or Rich Text Fields. While powerful, this feature suffers from a
                                                                                                              • Subforms in stateless forms

                                                                                                                I think the title says it all. We need to be able to add subforms to stateless forms. Currently the only workaround is to create a Form and delete each record upon submission of the form. I need to build an interface to update our inventory. Basically
                                                                                                              • Text wrap column headers in reports?

                                                                                                                Is it possible to auto wrap column headers so that a longer multi-word header displays as two lines when the column is narrower than the width of the header title?
                                                                                                              • What’s New in Zoho Inventory — Latest Features, Integrations & Updates | December 2025

                                                                                                                Zoho Inventory has evolved significantly over the past months, bringing you smarter, faster, and more connected tools to streamline your operations. Whether you’re managing multichannel sales, complex fulfillment workflows, or fast-moving stock, our newest
                                                                                                              • Marketer’s Space - Multi-Channel Campaigns for the Biggest Shopping Week with Zoho Marketing Automation

                                                                                                                Hello marketers, Welcome back to another post in Marketers Space! The biggest shopping week of the year is almost here, and it’s your moment to shine without the stress. With Black Friday and Cyber Monday just around the corner, being present across email,
                                                                                                              • Pricing Strategies: #5 Stay local, Price & Sell Global

                                                                                                                Arun had always dreamed of taking his handmade craft business beyond his hometown. For years, he sold locally. Most of his customers are familiar faces, in our usual currency and with the exact expectations. But one day, a traveller visited his workshop
                                                                                                              • Next Page