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

                                                                                                              • Tip of the Week #75– Manage your social media messages from a single shared inbox.

                                                                                                                Are you tired of jumping between apps or browser tabs to reply to your business's Facebook and Instagram DMs? Handling customer messages on social media might seem simple, but switching between multiple platforms can easily lead to lost messages, duplicate
                                                                                                              • Zoho Map integration tasks have changed - you need to "Locate all instances of Zoho Map integration tasks in your Deluge scripts by searching for the v1 marker... before 16 January 2026"

                                                                                                                The Zoho Map deluge integration task has been changed (as at 21 October 2025) to provide a more structured, JSON-like response. This change affects all three Zoho Map integration tasks (Geocode, Reverse Geocode, and Distance Between). More details can
                                                                                                              • Using files from Zoho CRM in Gemini/ChatGPT/Claude

                                                                                                                Hi all, I’ve got subscriptions to Gemini and a few other AI tools which I use for tasks like data enrichment, email composition, etc. In our workflow, we often receive various documents from clients — such as process workflows, BRDs/requirement documents
                                                                                                              • Zoho Analytics & Zoho Creator - Modified Time value

                                                                                                                I'm trying to use the Zoho Creator system field 'modified time' in Zoho Analytics, but it's consistently showing 12 hours 'out' In Zoho Creator In Zoho Analytics Is this a constant difference that I just need to correct with a timezone change - or is
                                                                                                              • Zoho CRM - Option to create Follow-Up Task

                                                                                                                When completing a Zoho CRM Task, it would be very helpful if there was an option to "Complete and Create Follow-Up Task" in the pop-up which appears. It could clone the task you are closing and then show it on the screen in edit mode, all the user would
                                                                                                              • Portal For Different Apps

                                                                                                                I found some older threads on this but didn't see anything very recent. I'm new to Zoho One so forgive me if my terminology is off a bit. I was hoping set up a single point of entry into Zoho One. So, many of the apps could be found in one single place
                                                                                                              • Calls undetected

                                                                                                                Zoho Voice records indicate my last call ended at 6:00 PM. All incoming and outgoing calls occurred between 6:00 PM and 7:00 PM.
                                                                                                              • Unable to Select Authenticated Domain as Sender

                                                                                                                We’ve already authenticated our domain, but it’s still not appearing in the sender list when we try to run a campaign. Could you please check what might be causing this issue?
                                                                                                              • Zoho Projects - Show Task List as dropdown field on Task records

                                                                                                                Hi Project's Team, I noticed today that there is no field on a task record related to the task list it belongs to. A dropdown would be helpful for quickly moving tasks between lists while in a task. I know that you can go to "Other Actions" and choose
                                                                                                              • My followed tickets extension is not working under the All departments view

                                                                                                                Hi. I've installed the My followed tickets extension. However, when I try to open the extension under the all departments view, I get the following message: 'Sorry, this extension is not supported in the All Departments view.' How can I solve this p
                                                                                                              • Ticket Time Entry to Timesheet

                                                                                                                The title just about sums it up. I have searched here and not found anything relevant, but If I overlooked, then please set me straight.  We have staff that do nothing but close tickets in desk all day long. These tickets represent their timesheet. Is there a way to have this information sync or for a tech to go into their timesheet themselves and sync it with their tickets of the same timeframe?? We waste a ton of time doing timesheets and the old "Clock in/Clock out" isnt detailed enough for us!!
                                                                                                              • Calls undetected.

                                                                                                                The call is not showing on the call log.
                                                                                                              • Calls undetected

                                                                                                                Zoho is not reading calls made.
                                                                                                              • Missing information data Zoho inventory

                                                                                                                there some missing data in Zoho inventory connection. pick list stock counts bin location we have requested it via mail and the support team doesn’t gove feedback. has anyone achieve to get these info or to ask other ya les
                                                                                                              • Calendar Events Issues

                                                                                                                Not able to view scheduled events on my calendar
                                                                                                              • Extensions 101 webinar series: Build, integrate, and monetize with extensions

                                                                                                                Attention developers! Are you ready to take your extension development skills to the next level? We're excited to bring back the Extensions 101 webinar series with an expanded lineup of Zoho products and an introduction to more platform features. Last
                                                                                                              • Where are recordings stored?

                                                                                                                I have hosted a couple of test meeting, used the "record" button to start and stop the recording but I am unable to find where are those recordings saved?  Can anybody help? Thanks
                                                                                                              • Zoho Desk's integration with Microsoft PowerBI delivers advanced analytics insights

                                                                                                                Hello everyone, Gaining advanced insights through reports and dashboards is one of the critical requirements of every business. In addition to key metrics tracked in Zoho Desk, such as agent performance, SLA adherence, and ticket lifecycle, businesses
                                                                                                              • IMAP error message in Zoho mail

                                                                                                                I cannot send emails today. Everything fine for years until today. Get a message: "You are yet to enable IMAP for your account. Please contact your administrator". Does anyone know how to correct this?
                                                                                                              • IMAP stopped working today

                                                                                                                Hello! I've been a paid customer for more than 10 years, IMAP was always working fine. But today this is the error I've got on my iPhone: I've tried toggling the IMAP for my account (Mail -> Settings -> Mail accounts) off and on again, but that did not
                                                                                                              • Are custom portals accessible on the Zoho learn smartphone app?

                                                                                                                In other words, can users external to my organisation, once signed up, use the app in the same way as internal users? Thanks
                                                                                                              • Conditional Layouts On Multi Select Field

                                                                                                                How we can use Conditional Layouts On Multi Select Field field? Please help.
                                                                                                              • Multiple columns in a form

                                                                                                                I am evaluating Zoho Creator. However, I am seeing almost no layout control on a form.  Just a basic 1 or 2 column format that is then imposed on the entire form.  That's not going to work for many, many real world cases. We need multiple columns per line, and we need each line/section to occupy a single column or be able to span the columns.   Someone please tell me that I'm missing something and the capability is actually there.  
                                                                                                              • Global search

                                                                                                                Hi! I think it would be great to have a global search that would give you results from all records of a database, no only for a single field of a single form as we have now. Thanks!
                                                                                                              • Any insights about API/v2? Having problem for a while.

                                                                                                                I don't know why it is throwing a 404 error, my report name is correct. Has someone had this issue and how you fix it?
                                                                                                              • Edit QR code with redirect to form

                                                                                                                Guten morgen, wir haben ein Formular Reklamation_erstellen. Dort soll ein QR Code erstellt werden, der im Lieferschein angezeigt wird. Beim Scannen auf dem soll das jeweilige Formular zum BEARBEITEN geöffnet werden. Leider bekomme ich es nur so hin, dass
                                                                                                              • Getting all the ingredients together for baking an app

                                                                                                                Good day everyone. After reading a lot of the help docs and watching videos, I now started on my app. To prevent hours and hours wasted on going down the wrong track, I would like some clarification on the following. But first some background: I have
                                                                                                              • Help Needed with Configuring ZC Microservice

                                                                                                                I'm attempting to create a simple microservice, but am running into problems with scope and auth. Using Custom API Builder, here's my setup: 1. Method: GET 2. Auth: OAuth2 3. User Scope: All users 4. Response: Standard 5. Function: A function that returns
                                                                                                              • Creator Simplified #10: Predefine Form Field Values and Make Them Read-Only for Users

                                                                                                                Hey Creators, Ready for this week's tip in the Creator Simplified series? Today, we will explore how to have read only fields in a form. Use Case: Assume a scenario where the default value for a Department field needs to be English Literature, but you
                                                                                                              • Zoho Mail : Email Outgoing Blocked

                                                                                                                I suddenly received the following message yesterday. I cannot send any mail. Please resolve as soon as possible, I cannot work without sending email. Dear User, We regret to inform you that your email outgoing has been blocked and you will not be able
                                                                                                              • Creator and Tables

                                                                                                                Good day. I am trying to create my first application. I have imported my data into Tables and am creating my app in Creator. I do not see my tables and cannot see how to write forms data to a table. Even the Workflow just uses the form. In one of the
                                                                                                              • customer Name and address details

                                                                                                                i created one application there is no customer details in that . how to add customer details and
                                                                                                              • Recalculate every row in the subform

                                                                                                                Hello, Can anyone help me with a script, please? I have an issue. Sometimes it happens, that in a multi row subform one of the rows show an incorrect row total value. Not really understand how it can happen, if I have a 20 row subform, 19 rows show correct
                                                                                                              • Creating Repeat Forms that remove redundancies

                                                                                                                I wanted to understand if you can make multi-layer forms that reduce the need for users to input information in again and again. We want a form that our suppliers fill out per ingredient they sell, and the end result should have the Ingredient (Section
                                                                                                              • What is the difference between the free plan and the mail lite plan?

                                                                                                                What is the difference between the free plan and the mail lite plan? How many emails can I send per day?
                                                                                                              • Unblock email

                                                                                                                Hi The outgoing mail from a client of me is blocked. I already made tickets and tickets are send to the EU desk but nobody is responding. The problem is already 4 days! There is absolutely no help from the support. I am really not satisfied at all! Can
                                                                                                              • Domain verification failure

                                                                                                                Hello Zoho Support, I purchased my domain directly through Zoho Mail, but the domain verification keeps failing with the message “TXT verification failed.” I’ve already waited and retried several times, but it still won’t verify. Could you please manually
                                                                                                              • Unable to send message;Reason:554 5.1.8 Email Outgoing Blocked.

                                                                                                                My email account is unable to send emails, and I urgently need to use it. How can I resolve this?If there is anything we have done wrong, please let us know in advance so we can actively cooperate to improve. User ID: 850482493
                                                                                                              • URGENT: Email stopped workin - can't access admin panel

                                                                                                                For some reason email sending stopped working. When I try to send an email it fails with "Unable to send message;Reason:451 4.7.1 Temporary system error" I can receive email just fine I see in my notifications some errors about the MX records, however
                                                                                                              • Can I associate an invoice to a Project after the fact?

                                                                                                                We have generated an invoice but would like to assoicate it to a Zoho Project after the fact.  Is there any way to accomplish that? Thanks, Scott
                                                                                                              • Next Page