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

                                                                                                              • Show unsubscribed contacts ?

                                                                                                                Hello, I would like to display the unsubscribed contacts. Unfortunately, I do not have this subscription type as described in the documentation (https://help.zoho.com/portal/en/kb/marketing-automation-2-0/user-guide/contacts/contact-management/articles/subscription-type-24-1-2024#Subscription_Type_field.)
                                                                                                              • Zoho Developer Community Hackathon 2025 is LIVE!

                                                                                                                Hey developers! It’s that time of the year again — the Zoho Developer Community Hackathon 2025 is officially open for registrations! If you’ve been waiting for a chance to stretch your skills, try something new, or finally bring that idea to life, this
                                                                                                              • Converted Leads Not Showing in Lead Reports

                                                                                                                Converted leads are not showing in the Lead reports. How can I make converted leads visible in the report,
                                                                                                              • Text widgets in dashboards

                                                                                                                Having a text widget in a dashboard would help immensely. It would allow adding links to related documents, relevant CRM views, etc. It would allow adding explanations of the data displayed in the other widgets, about how to interpret them or about filtering.
                                                                                                              • [Webinar] Zoho Writer for content creators and publishing houses

                                                                                                                Managing multiple drafts, edits, and client reviews doesn't have to slow you down. Join our upcoming webinar to see how Zoho Writer helps content creators and publishing houses create, edit, and publish seamlessly—all in one place. You'll learn how to:
                                                                                                              • Adding Reports to Portals

                                                                                                                Is there a way to add Reports to portals so only the user can see report templates relevant to them?
                                                                                                              • How to assign one Manual to multiple Spaces?

                                                                                                                Hello, I have two spaces, one called tech knowledge and the other one called HR knowledge. I have a manual that is called HR tech. I want to assign this manual to HR knowledge and tech knowledge. How should I do that?
                                                                                                              • Introducing VeriFactu Support in Zoho Books

                                                                                                                Hello users, Spain has introduced the VeriFactu system under Real Decreto 1007/2023 to ensure integrity, traceability, and anti-fraud compliance in e-invoicing. Starting January 1, 2026, all B2B invoices must be reported to Agencia Estatal de Administración
                                                                                                              • How can I assign courses to Spaces?

                                                                                                                How can I make courses show up here in this space?:
                                                                                                              • When will Zoho Learn be able to support SCORM files on the mobile app?

                                                                                                                When I click the SCORM content, I just get a message saying it's not possible yet. Yet implies that it will be coming soon. All I'm asking for is a realistic timeline so I know whether or not to invest my time in using it. If it will be soon, then I will
                                                                                                              • Announcing new features in Trident for Windows (v.1.35.6.0)

                                                                                                                Hello Community! Trident for Windows just got better with an update that makes working with your emails even more efficient. Let’s dive into what’s new! Work with PST files more efficiently. You can now do more than just view mounted PST files. You can
                                                                                                              • Marketing Tip #9: Track your traffic sources

                                                                                                                Not all marketing channels work equally well. Knowing whether your visitors come from Google, Instagram, or email helps you focus on what actually drives sales. Try this today: Check your Zoho Commerce reports or connect Zoho PageSense to see your top
                                                                                                              • Google Analytics import data inaccurate (as of October 11, 2025)

                                                                                                                We have Zoho Analytics connected to GA4 to import daily event data. This has been running without issue for a couple of years. However, a month ago we started noticing discrepancies. All data until October 10 lines up perfectly - October 11 onward is
                                                                                                              • Prevent accidental duplicate entry of Customer Ordersome

                                                                                                                Zoho Support has confirmed that Zoho currently does not have any method (using Deluge, flow or any other method) to alert a user when a sales order has been entered twice using the same customer reference number (i.e. a duplicate). Most ERP platforms
                                                                                                              • Zoho Books | Product updates | November 2025

                                                                                                                Hello users, We’ve rolled out new features and enhancements in Zoho Books. From translating email notification templates to the new transaction locking restrictions, explore the updates designed to enhance your bookkeeping experience. Making Tax Digital
                                                                                                              • Insert Image into Notebook page

                                                                                                                Prior to today, I could add images to my notebook pages. Today when I tried to do this I got an error message that said something like, "There's been a problem on our end. Try again later." So, I've tried all the ways I know how, but I can't insert an
                                                                                                              • 【開催報告】名古屋 ユーザー交流会 Vol.2 2025/11/21 Zoho Analytics / Inventory で実現する在庫の"未来予測"

                                                                                                                ユーザーの皆さま、こんにちは。コミュニティチームの中野です。 11/21(金)に名古屋 ユーザー交流会 を開催しました。 本投稿では、当日実施したセッションの様子及び投影資料をお届けします。 会場にて参加できなかった皆さまも、ぜひご参照ください。 (Zoho 社員セッションの登壇資料については、11/28(金)開催の東京回の開催報告で共有いたします) 今年2回目の開催となる名古屋 ユーザー交流会では、株式会社エンツナクリエイト 野末さんによる Zoho Analytics / Inventory
                                                                                                              • Is there a way to automatically add Secondary Contacts (CCs) when creating a new ticket for specific customers?

                                                                                                                Some of our customers want multiple contacts to receive all notifications from our support team. Is there a way to automatically add secondary contacts to a ticket when our support team opens a new ticket and associates it with an account? This would
                                                                                                              • Improved RingCentral Integration

                                                                                                                We’d like to request an enhancement to the current RingCentral integration with Zoho. RingCentral now automatically generates call transcripts and AI-based call summaries (AI Notes) for each call, which are extremely helpful for support and sales teams.
                                                                                                              • Edit Pinned Comments in Zoho Desk

                                                                                                                It's great that private comments can now be pinned to the top of the ticket but what would be extremely helpful would be to allow for the pinned comment to be edited vs. having to find the comment in the ticket to edit it.
                                                                                                              • Updating Secondary Contact (CCs)

                                                                                                                We use Zoho Forms to capture the user request and integrated with Zoho Desk to raise tickets. Active Microsoft login is captured in our Zoho forms and registered as Primary contact in Zoho desk ticket. We also an have an option to raise ticket on behalf
                                                                                                              • blank page after login

                                                                                                                blank page after logging into my email account Thanks you
                                                                                                              • WriterTh

                                                                                                                After every space Writer goes to capital letters mode in my Android tablet. The cap mode stays till the second letter is typed in the word then it comes to normal mode.
                                                                                                              • Zoho writer unable to merge documents to PDF with basic fonts in Hebrew or fonts from my computer

                                                                                                                I created several forms that will be merged into PDF files through Zoho Writer and I am unable to receive the PDF in the basic fonts of the Hebrew language or in the fonts I have on my computer. The writer exports to PDF an exchange font that looks very
                                                                                                              • I have already created some Bots, Commands, and Widgets in Cliq, but I am still not seeing the “Create Extension” option in my account. Could you please help me enable or access this option?

                                                                                                              • Infinite loop of account verification

                                                                                                                Hi I can't do anything on my zoho account.  I always get this message Hi Sheriffo Ceesay As a security measure, you need to link your phone number with this account and verify it to proceed further. When ever I supply the details, it displays that the number is associated with another account. I don't have any other account on zoho so this is really annoying. 
                                                                                                              • How we cut CRM updates from ~20 minutes down to 2, our real workflow

                                                                                                                Updating the Zoho CRM after every call used to be one of the biggest time sucks for our team. By the time you write your notes, clean them up, fill in the fields, and log everything properly… you’ve easily lost 15–20 minutes per call. We started experimenting
                                                                                                              • Arattai App Features Update

                                                                                                                1. Offline Messaging & Sync Enable users to compose messages without internet and deliver them automatically via peer-to-peer methods (Bluetooth/WiFi Direct) when nearby users are available. This would be a game-changer for rural India with unreliable
                                                                                                              • How to add Product Add-Ons, Mandatory Forms, and Auto-Save Address in Zoho Commerce

                                                                                                                Hi all, I need help setting up several behaviors in Zoho Commerce. I can’t find the correct configuration options, so I want to confirm whether these are supported or if there is a workaround. 1. Product-Specific Add-Ons (Example: GWB Subscription) When
                                                                                                              • Zohomail

                                                                                                                Im trying to setup email address zoho
                                                                                                              • PROBLEMA

                                                                                                                Salve, non riesco a inviare email, e mi esce una tabela errore temporaneo. come posso risolvere il problema ?
                                                                                                              • Forever FREE Business Email with Zoho Mail

                                                                                                                Forever FREE Business Email with Zoho Mail: is it available?
                                                                                                              • Weekly Tips : Make collaboration effortless with Whiteboard in Zoho Mail

                                                                                                                Working with your team often means switching between emails, notes, and other applications just to explain an idea. Maybe you are trying to sketch a layout, plan a workflow, or quickly brainstorm ideas—with text alone, things can get confusing. So how
                                                                                                              • Formula field number of days between 2 dates

                                                                                                                Hi, I want to have a formula field which calculates the following: IF EndDate < TODAY and Oproep is true (this is a checkbox field) than EndDate - StartDate, otherwise TODAY - StartDate It should calculate the number of days How can I write this for
                                                                                                              • 'email address already exists'

                                                                                                                I deleted a user from my organization and want to use the same email address that user had, but the email address seems to still exist somewhere as I get 'email address already exists' when I try and create it. I have deleted the entire organization and
                                                                                                              • ZOHO reporting DKIM entries are not configured, when they have been configured and verified by 3rd parties

                                                                                                                Why is ZOHO reporting to my organisation users the following: "The DKIM entries in your domain's DNS records are not configured. Please contact your administrator for configuring DKIM to ensure optimal RSVP invite delivery." When I have configured the
                                                                                                              • Manage Bookings directly from Zoho Mail

                                                                                                                Greetings from the Zoho Bookings team! We’re introducing the new Zoho Bookings extension for Zoho Mail, designed to help you view appointments, copy time slots and share booking links without leaving your inbox. This integration brings scheduling right
                                                                                                              • My notes from the past 2 months have disappeared

                                                                                                                Hola, necesito ayuda urgente. Hoy, al iniciar sesión en mi Zoho Notebook como todos los días, me llevé una gran sorpresa al descubrir que todas mis notas de los últimos dos meses habían desaparecido. Estas notas son muy importantes para mí, ya que uso
                                                                                                              • How can I load a network into the cliq desktop app?

                                                                                                                I have both the standard cliq log in for my org and I am part of a cliq network. In the browser I can choose which I log in to. However, in teh desktop app if I log in it will alwasy load my org's cliq. Can I switch this to the network I have create
                                                                                                              • Ability to modify what displays in calendar invite?

                                                                                                                I am a long time calendly user and want to make the switch to bookings.  I understand that there is not currently a meets/hangouts integration, is one on the roadmap? Is there anyway I can modify the calendar invite to include the meet link?  I can add it to the emails no problem, but I would also like it to display on their calendar.  Is there some work around I can do to get it on the calendar?  Also am I able to modify the calendar event title?
                                                                                                              • Next Page