Bulk Write API in Zoho CRM with PHP SDK: A Comprehensive Guide

Bulk Write API in Zoho CRM with PHP SDK: A Comprehensive Guide

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





                                                  Use cases

                                                  Make the most of Zoho Desk with the use cases.

                                                   
                                                    

                                                  eBooks

                                                  Download free eBooks and access a range of topics to get deeper insight on successfully using Zoho Desk.

                                                   
                                                    

                                                  Videos

                                                  Watch comprehensive videos on features and other important topics that will help you master Zoho Desk.

                                                   
                                                    

                                                  Webinar

                                                  Sign up for our webinars and learn the Zoho Desk basics, from customization to automation and more

                                                   
                                                    
                                                  • Desk Community Learning Series


                                                  • Meetups


                                                  • Ask the Experts


                                                  • Kbase


                                                  • Resources


                                                  • Glossary


                                                  • Desk Marketplace


                                                  • MVP Corner




                                                            • Sticky Posts

                                                            • Kaizen #197: Frequently Asked Questions on GraphQL APIs

                                                              🎊 Nearing 200th Kaizen Post – We want to hear from you! Do you have any questions, suggestions, or topics you would like us to cover in future posts? Your insights and suggestions help us shape future content and make this series better for everyone.
                                                            • Kaizen #198: Using Client Script for Custom Validation in Blueprint

                                                              Nearing 200th Kaizen Post – 1 More to the Big Two-Oh-Oh! Do you have any questions, suggestions, or topics you would like us to cover in future posts? Your insights and suggestions help us shape future content and make this series better for everyone.
                                                            • Celebrating 200 posts of Kaizen! Share your ideas for the milestone post

                                                              Hello Developers, We launched the Kaizen series in 2019 to share helpful content to support your Zoho CRM development journey. Staying true to its spirit—Kaizen Series: Continuous Improvement for Developer Experience—we've shared everything from FAQs
                                                            • Kaizen #193: Creating different fields in Zoho CRM through API

                                                              🎊 Nearing 200th Kaizen Post – We want to hear from you! Do you have any questions, suggestions, or topics you would like us to cover in future posts? Your insights and suggestions help us shape future content and make this series better for everyone.
                                                            • Client Script | Update - Introducing Commands in Client Script!

                                                              Have you ever wished you could trigger Client Script from contexts other than just the supported pages and events? Have you ever wanted to leverage the advantage of Client Script at your finger tip? Discover the power of Client Script - Commands! Commands


                                                            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 Writer

                                                                                              Get Started. Write Away!

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

                                                                                                Zoho CRM コンテンツ








                                                                                                  Nederlandse Hulpbronnen


                                                                                                      ご検討中の方




                                                                                                            • Recent Topics

                                                                                                            • Swipe between notes on iPhone

                                                                                                              It'd be convenient if I could move from one note to the next in a notebook simply by swiping left to right.
                                                                                                            • Sales IQ chat is not working in signed android apk

                                                                                                              I have integrated ZOHO sales IQ support chat and i have followed each step and its working fine in my development build but when i create signed APK for it. Chat does not work in it and showing awaiting for detail. I previously asked the same query but
                                                                                                            • COQL order by COUNT not working

                                                                                                              Dear community, I am trying to get a list of deal amounts per planner working on it and sorted to get see who has the least amount of deals. For some reason, I am unable to use sort by in combination with a COUNT. My original code was: query = "select
                                                                                                            • I want to duplicate a report and name it something else

                                                                                                              Hi, I have created a report, and now want to reproduce it and call it something else. so that I will end up with TWO separate reports with different titles. Please tell me how do I copy / reproduce a report please
                                                                                                            • Zoho CRM: Sales Rep Professional Certification Program on Coursera

                                                                                                              We are happy to share that we have published the Zoho Sales Representative Professional Certificate in partnership with Coursera, a leading platform for online learning and career development that offers access to courses and degrees from leading universities
                                                                                                            • OS X Notebook quits immediately upon launch

                                                                                                              NoteBook for OS X (Sequoia, but also under Sonoma) always quits immediately upon launch (so I cannot use the "Attach user log" option). I've restarted my MacBook but the problem persists. If it helps, attached is a diagnostic report from Library>Log
                                                                                                            • Can External users upload files or images to WorkDrive?

                                                                                                              I want to know if it is possible for someone externally through a link and PW be able to upload files and images onto WorkDrive?
                                                                                                            • Multi-line fields character limits

                                                                                                              Is there a way to set the character limit higher on multi-line fields so that we are not losing information pasted into the field? When the text is entered or pasted, there is no error to say that the text is too large. After saving and going back to view most of the text is gone.   Also, when viewing the resume, the text is not wrapped in the multi line fields and can t be read without scrolling across the page.
                                                                                                            • Taz bot not working — What should I do to resolve this issue?

                                                                                                              I am experiencing issues with the Taz bot in Zoho Cliq—not receiving responses or it does not seem to work as expected. Could you please explain why the Taz bot might not be functioning and what steps I should take to resolve this issue? Thank you!
                                                                                                            • Zoho Calendar soft bounce on @hotmail.com and @yahoo.com email addresses

                                                                                                              Hello, our Zoho calendar recently does not send the calendar invites to emails with hotmail and yahoo domains and comes back with a "soft bounce". other domains like Gmail works fine. Also sending "email" to the same emails to the above domains work well
                                                                                                            • OneNote Migration

                                                                                                              I am trying to migrate two notebooks from OneNote. For five days now I have had no notification that migration has completed and the migration page show 50% complete - one notebook completed one not finished. It just stays like this. I am unable to cancel
                                                                                                            • Set various time slot reminders for task and event

                                                                                                              Hi I would like known if there is possibility to set various time reminders for a task or event like we have the possibility to do in google calendar or google task. For example I'am creating an event or task and I want to be alerted before 30min and
                                                                                                            • is it possible to add more than one Whatsapp Phone Number to be integrated to Zoho CRM?

                                                                                                              so I have successfully added one Whatsapp number like this from this User Interface it seems I can't add a new Whatsapp Number. I need to add a new Whatsapp Number so I can control the lead assignment if a chat sent to Whatsapp Phone Number 1 then assign
                                                                                                            • Zoho Calendar not functioning---cannot edit, add attendees, etc.

                                                                                                              Hello, My calendar is acting strange. I'm using Chrome as my browser and pop ups are not blocked (the calendar worked fine yesterday). When creating an event, I'm not able to "edit" the event and add attendees, etc. The link is non-responsive. I cannot
                                                                                                            • Spilt Axis for stacked column and line graph

                                                                                                              Each month around this time I prepare a business review deck. One of the biggest annoyances I have with Zoho, also happens to be something that most other platforms have provided for a long time now, and that is being able to create a chart with stacked
                                                                                                            • Pin a note on top

                                                                                                              Dear Zoho Notebook Team, Please highly consider adding ability to pin a note on top and arrange pinned notes. I have a lot of notes that I want to pin important ones on top and this feature is missing badly. Thank you.
                                                                                                            • Windows 11 app ver 2.2.8

                                                                                                              I have been trialing Zoho Notes syncing between my PC and iphone. No problems with iphone but the Windows 64 bit app ver 2.2.8 was very buggy and would lock up completely, needing a Control Alt Delete etc to close it down. It seemed to be connected to
                                                                                                            • Deluge Script: Onboarding → Access Form

                                                                                                              Hello everyone, Edit: Sorry, I think I put this topic in the wrong section. I’ve recently run into an issue that’s been giving me a bit of a headache for the past few weeks. Context: This is my first time using Deluge to create a script, but it’s not
                                                                                                            • ZOHO BOOKS - EXCESSIVELY SLOW TODAY

                                                                                                              Dear Zoho Books This is not the first time but it seems to be 3 times per week now that the system is extremely slow. I work on Zoho Books 95% of my day so this is very frustrating. Zoho you need to do something about this. I have had my IT guy check
                                                                                                            • Windows Device Authentication

                                                                                                              We have recently started using ManageEngine, and my boss saw a device management feature in the Zoho One directory. We thought it would either help give us more intergration into Zoho one through bringing ManageEngine services through Zoho one. Or, it
                                                                                                            • How can I change spell check language?

                                                                                                              I cannot find the way to change spell check language. My "display language" is English, and I want to have the same one for Spell Check, but it is Russian!!! How can I change it? In one of your explanations you mentioned that I have to choose it from
                                                                                                            • Mail is so slow - doesn't even work!

                                                                                                              Mail has been getting slower and slower - and today it's not even pulling up emails in either Inbox or Unread. This is beyond frustrating since email is a big part of business. Sent a request through the useless help portal - no response. Called the useless
                                                                                                            • User marked as SPAMMER. Mail Fetch has also been disabled for any active POP accounts.

                                                                                                              I am the administrator for joelles.com One of our accounts has been blocked saying this: User marked as SPAMMER. Mail Fetch has also been disabled for any active POP accounts. I cannot change the disabled account in the control panel as it says that it
                                                                                                            • My domain did not activate

                                                                                                              Hi, my domain (apsaindustrial.com.ar) did not activate, and the phone verification message never arrived. Please would you solve this problem? Thanks.
                                                                                                            • ME SALE ESTE ERROR: No fue posible enviar el mensaje;Motivo:554 5.1.8 Email Outgoing Blocked

                                                                                                              Ayuda!! Me sale este error al intentar enviar mensajes desde mi correo electronico de Zoho! Tampoco recibo correos pues cuando me envia rebotan. Ayuda, Me urge enviar unos correo importantes!! Quedo atenta MAGDA HERNANDEZ +5731120888408
                                                                                                            • Is there a way to sync Tags between CRM and Campaigns/Marketing Hub?

                                                                                                              I wonder if there is a way to synch the tags between CRM and Marketing-Hub / Campaigns?
                                                                                                            • how to see if a specific contact opened an email in zoho campaign?

                                                                                                              how to see if a specific contact opened an email in zoho campaign?
                                                                                                            • Rich Text For Notes in Zoho CRM

                                                                                                              Hello everyone, As you know, notes are essential for recording information and ensuring smooth communication across your records. With our latest update, you can now use Rich Text formatting to organize and structure your notes more efficiently. By using
                                                                                                            • Revenue Management: #8 Revenue Recognition in Educational & Training Institutions

                                                                                                              Educational Institutions and training centres typically collect course fees at the time of enrolment, sometimes for a one-day workshop and sometimes for a year-long certification course. You might also charge separately for course materials or evaluation.
                                                                                                            • How to Customize Task Creation to Send a Custom Alert Using JavaScript in Zoho CRM?

                                                                                                              Hello Zoho CRM Community, I’m looking to customize Zoho CRM to send a custom alert whenever a task is created. I understand that Zoho CRM supports client scripts using JavaScript, and I would like to leverage this feature to implement the alert functionality.
                                                                                                            • how to use validation rules in subform

                                                                                                              Is it possible to use validation rules for subforms? I tried the following code: entityMap = crmAPIRequest.toMap().get("record"); sum = 0; direct_billing = entityMap.get("direct_billing_details"); response = Map(); for each i in direct_billing { if(i.get("type")
                                                                                                            • 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
                                                                                                            • Enhancements to the formula field in Zoho CRM: Auto-refresh formulas with the "Now" function, stop formula executions based on criteria, and include formulas within formulas

                                                                                                              Dear Customers, We hope you're well! By their nature, modern businesses rely every day on computations, whether it's to calculate the price of a product, assess ROI, evaluate the lifetime value of a customer, or even determine the age of a record. With
                                                                                                            • Maximum file limit in zoho people LMS

                                                                                                              Dear Team, I am having approximately 4.9 GB of material, including PPTs and videos for uploading in zoho people LMS course. May I know what is the maximum limit limit for the course files Thanking you, With regards, Logeswar V Executive _ Operations
                                                                                                            • Displaying related quotes in sales order and back

                                                                                                              Hi, My colleague liked to see to which sales orders, the quote has been converted. Quote shows Invoices, but not SO. Same, they would like to see the quotes in the sales order, as they can see invoices, packages, shipment, How can we achieve this ? Thank
                                                                                                            • automations: Can I execute a step on a specific date?

                                                                                                              I have created a form in Zoho forms, and created a contacts list. I have also begun setting up an automation with the intention of sending the form to the contact list on a specific date every month (via email) for the entire year (essentially sending
                                                                                                            • Dynamically prefill ticket fields

                                                                                                              Hello, I am using Zoho Desk to collect tickets of our clients about orders they placed on our website. I would like to be able to prefill two tickets fields dynamically, in this case a readonly field for the order id, and a hidden field for the seller
                                                                                                            • Optimize your Knowledge Base for better visibility by allowing search engine crawling and indexing

                                                                                                              All you need to know about no-follow and no-index in KB. What are article crawlability and indexability? Crawlability and indexability are vital for making an article visible and accessible to search engines. When a search engine crawls an article, it
                                                                                                            • Has anyone created a public ASAP Guide that I can check out?

                                                                                                              I am thinking of adding an ASAP guide to my web application, but I have noticed that the ASAP widget itself can be really slow to load sometimes. Has anyone created a public ASAP Guide that I can check to see how performant it is? I don't want to spend
                                                                                                            • Zoho Desk Partners with Microsoft's M365 Copilot for seamless customer service experiences

                                                                                                              Hello Zoho Desk users, We are happy to announce that Zoho Desk has partnered with Microsoft's M365 to empower customer service teams with enhanced capabilities and seamless experiences for agents. Microsoft announced their partnership during their keynote
                                                                                                            • Next Page