Bidirectional sync between Zoho Bookings and Zoho CRM - Part 1

Bidirectional sync between Zoho Bookings and Zoho CRM - Part 1

Hey, community members!

The default integration between Zoho CRM and Zoho Bookings is unidirectional, which means that any appointments booked, rescheduled, or deleted in Zoho Bookings will be reflected in Zoho CRM. However, any modifications made to events in Zoho CRM that originated from Zoho Bookings will not be reflected back in Zoho Bookings. Hence, as we're announcing in this community post, we've made the sync bidirectional.

This community post will cover the process of configuring appointment bookings from Zoho CRM in Zoho Bookings, as well as managing appointment statuses such as Canceled, No Show and Completed. We have addressed the rescheduling action in a separate post. To view it, please click on the following link: Reschedule Action

This community post will be beneficial for active Zoho CRM users who handle all their meetings within Zoho CRM. Additionally, you can use this community post as a reference to explore various automation possibilities tailored to your business requirements. For instance, with this post's guidance, when you update a booking's status field to "Completed" in Zoho CRM, it will automatically sync with Zoho Bookings and trigger an automated "Mark as completed" email to customers. This enhancement will improve your Zoho Bookings and Zoho CRM synchronization experience, making appointment management easier.

Prerequisites of bidirectional sync: 
  • Zoho Bookings Premium subscription
  • Zoho CRM paid subscription
  • Enable Zoho CRM integration within Zoho Bookings
The purpose of enabling the Zoho CRM integration within Zoho Bookings is to transfer booking details from Zoho Bookings to Zoho CRM. In this configuration, the mandatory field is the Booking ID, which is passed from Zoho Bookings to Zoho CRM through the integration. Whenever an appointment is booked, customer details will be sent to the designated CRM module, and a corresponding record will be created in the Meetings module within Zoho CRM, which will help in automating the workflow.

Here's the complete demo video that covers all the configurations discussed in the community post below:

Timestamps for your reference: 

0:35 - Purpose of this community post
1:26 - Zoho CRM plugin installation
4:43 - Custom field creation
7:20 - Function creation
9:22 - Connection creation
10:24 - Configuring arguments 
11:06 - Workflow creation
13:33 - Argument mapping
14:41 - Output verification
17:41 - Conclusion



How we're approaching this bidirectional sync

1. Booking an appointment from Zoho CRM

Install the Zoho Bookings for Zoho CRM plugin within your Zoho CRM application. This plugin enables the creation of a "New Appointment" button within the Zoho CRM Leads and Contacts module, which enables you to select the desired booking page you wish to open. You can choose from various workspace, service, or staff booking pages. After configuration, you can initiate the process of scheduling bookings directly from within your Zoho CRM account. 
2. Booking status: Completed or No Show

To update a booking's status (Completed or No Show), we've added a new picklist properties field named "Booking Status" in the Meetings module and configured it with two options: "completed" and "no show". Depending on the booking status chosen, the corresponding booking in Zoho Bookings will be updated.
  • Details on how to add a custom field to the Meetings module : Customizing modules

  • Here's a video that demonstrates how to add a field to a module in Zoho CRM: Adding fields
Reference:




3. Booking status: Canceled 

Whenever a meeting is deleted from the Meetings module, the corresponding booking in the Zoho Bookings app will also be canceled automatically. The meeting can be deleted either from the Meetings module or directly from the calendar.





To enable bidirectional sync between Zoho CRM and Zoho Bookings

Complete these steps in Zoho CRM.

Step 1: Creating connections

You first need to establish a connection between Zoho CRM and Zoho Bookings. Zoho Bookings is listed as one of the default connections in Zoho CRM, making it simple to set up. Select the Zoho Bookings connection, define the connection name and scope, and you'll be all set. This connection will enable you to link both applications and facilitate the seamless transfer of data. 
Read here for more details on how to create connection in Zoho CRM: Connections

Step 2: Creating functions

In this context, we'll be creating three functions: one for marking appointments as completed, another for canceling appointments, a third for marking appointments as no shows, and a fourth for rescheduling appointments. For each function, we must also configure arguments, which pass values or data into a function when making a call. Here, we'll pass the booking ID to the function as an argument to update the necessary booking status.

i. To create a function for marking appointments as completed:
 
     1. Go to Setup > Developer Space > Functions.
     2. In the Functions page, click + Create New Function.

     3. Configure the function name, display name, and description.
     4. Set the category as automation.

More details:  Functions

This opens the Deluge script page.

     5. Next, configure the function's arguments:
          A. Click on Edit Arguments on the Deluge script page.

          B. Set the Parameter Name as bookingID. (Please note that the "bookingID" value is case sensitive and must match 
               the term used in the code).
          C. Set the type as string.

Reference:


Please configure the below code in the Deluge script page. 

Code link: Completed



By completing these steps, we've configured a function that will mark appointments as completed.

ii. To create a function for marking appointments as no shows

      1. Go to Setup > Developer Space > Functions.
      2. In the Functions page, click + Create New Function.

      3. Configure the function name, display name, and description.
      4. Set the category as automation.

More details:  Functions

This opens the Deluge script page.

      5. Next, configure the function's arguments:
           A. Click on Edit Arguments on the Deluge script page.

           B. Set the Parameter Name as bookingID. (Please note that the "bookingID" value is case sensitive and must match
                the term used in the code).
           C. Set the type as string. 

Reference:


Please configure the below code on the Deluge script page.

Code link: No show



By completing these steps, we've configured a function that marks appointments as no shows.

iii. To create a function for marking appointments as canceled

      1. Go to Setup > Developer Space > Functions.
      2. In the Functions page, click + Create New Function.

      3. Configure the function name, display name, and description.
      4. Set the category as automation.

More details:  Functions

This opens the Deluge script page.

      5. Next, configure the function's arguments:
            A. Click on Edit Arguments on the Deluge script page.

            B. Set the Parameter Name as bookingID. (Please note that the "bookingID" value is case sensitive and must match
                 the term used in the code).
            C. Set the type as string. 

Reference



Please configure the below code on the Deluge script page.

Code link: Cancel appointment 



By completing these steps, we've configured a function that marks appointments as canceled.

Code explanation

Below is an explanation of the code that covers all the configurations present in the three functions mentioned above (cancel, mark as completed, and mark as no show).

Line 1: Based on the Zoho Bookings account's data center, we're setting up the API endpoint URL configuration. 
Lines 2 - 4: To update appointments, we utilize the Zoho Bookings API. Within the update appointment API, there are two mandatory fields that need to be included: BookingID and action (completed/cancel/noshow). 

Lines 5 - 10: We use the invokeURL task for API calls. To learn more about the invokeURL task, please refer to the following document: InvokeURL task for API calls

Now, let's proceed and learn about the process of creating a workflow and linking the established functions to it. This will enable us to automate the entire appointment status updating process.


Step 3: Creating a workflow

Workflow rules are sets of actions (email notifications, tasks and field updates) that are executed when specified conditions are met. Here, we'll generate workflow rules for each action to activate the respective function, thereby automating the appointment status updating process.

More details: Workflow overview

i. Creating a workflow for "canceling" appointments in Zoho Bookings when a meeting is deleted in Zoho CRM

Part 1: Creating the rule

      1. Go to Setup > Automation > Workflow Rules.
      2. In the Workflow Rules page, click Create Rule.

      3. Select "Meetings" under Module and configure rule name and description as required.

More details: Create Rule

Reference: 


Part 2: Specifying the rule trigger

More details: Specify rule triggers

      1. Select Record Action > Delete > Done to execute the rule when meetings are deleted.

      2. Configure condition > All Meetings.

      3. Instant Actions > Function.

      4. Click the New Function button.


      5. In the Configure custom function page, select the "cancel" function you created from among the functions users in your organization have created.


Part 3: Argument mapping

      1. Press # to choose an argument value.

      2. Select Meetings under Module and BookingId in the field.

      3. Click the Save and Associate button.

Reference:


Below is the final flow of the cancel booking workflow:


At the end of Part 3, we will have created a workflow that will be executed automatically when meetings are deleted in Zoho CRM. Simultaneously, the bookings associated with the meeting will also be canceled in Zoho Booking.

ii. Creating workflow for updating an appointment's status as "no show" in Zoho Bookings when the meeting's booking status is marked as no show in Zoho CRM

Part 4: Creating the rule

      1. Go to Setup > Automation > Workflow Rules.
      2. In the Workflow Rules page, click Create Rule.

      3. Select Meetings under Module and configure the rule name and description as required.

More details: Create Rule

Reference:

 
Part 5: Specifying the rule trigger

If you encounter difficulties while navigating through the steps mentioned below, please refer to Part 2 above, where we have provided step-by-step screenshots for clarification.

      1. Record Action > Edit. 

      2. Enable the Specific field(s) gets modified and configure it per the screenshot below.
          a. This is to ensure that the workflow is executed only when the booking status under the meeting module is
              updated to "No Show".

      3. Configure condition > All Meetings.
      4. Instant Actions > Function > New Function.
      5. In the Configure custom function page, select the "no show" function you created from among the functions
          users in your organization have created.

Part 6: Argument mapping:

If you encounter difficulties while navigating through the steps mentioned below, please refer to Part 3 above, where we have provided step-by-step screenshots for clarification.

      1. Press # to choose an argument value.
      2. Select Meetings under Module and configure the field as "BookingId".
      3. Click Save and Associate button.

Reference:


Below is the final flow of the "No Show" booking status workflow:


At the end of part 6, we will have created a workflow that automatically executes when the booking status field within the Zoho CRM Meetings module is updated to "No Show." This action will result in the associated bookings for that meeting also being marked as "No Show" in Zoho Bookings.

iii. Creating workflow for updating appointment status as "Completed" in Zoho Bookings when the booking status field of the meeting is marked as completed in Zoho CRM.

Part 7: Creating the rule

      1. Go to Setup > Automation > Workflow Rules.
      2. In the Workflow Rules page, click Create Rule.

      3. Select Meetings under Module and configure rule name and description as required.

Reference:



Part 8: Specifying the rule trigger

If you encounter difficulties while navigating through the steps mentioned below, please refer to Part 2 above, where we have provided step-by-step screenshots for clarification.

      1. Record Action > Edit.

      2. Enable the Specific field(s) gets modified setting and configure it per the screenshot below.
            a. This serves to ensure that the workflow is executed only when the booking status under the Meetings module is
                updated to "Completed".

      3. Configure condition > All Meetings.
      4. Instant Actions > Function > New Function.
      5. In the Configure custom function page, select the "completed" function you created from among the functions users
          in your organization have created.

Part 9: Argument mapping:

If you encounter difficulties while navigating through the steps mentioned below, please refer to Part 3 above, where we have provided step-by-step screenshots for clarification.

      1. Press # to choose an argument value.
      2. Select Meetings under Module and configure the field as "BookingId".
      3. Click Save and Associate button.

Reference:


Below is the final flow of the "Completed" booking status workflow:


At the end of part 9, we will have created a workflow that is automatically executed when the booking status field within the Zoho CRM Meetings module is updated to "Completed." As a result, the associated bookings for that meeting will also be marked as "Completed" in Zoho Bookings.

Conclusion

We've reached the end of this community post. With the integration mentioned above in place, you'll be able to book, cancel, and update the status of appointments in Zoho Bookings directly from your Zoho CRM application. This will help you effectively manage your appointments in one place. As mentioned above, we've covered the rescheduling action in a separate post, which you can access by clicking on the following link: Reschedule Action

Furthermore, we've outlined a method for automating appointment statuses in detail. You can use this document as a reference to explore the various possibilities that suit your needs.
 
If you have any questions or need assistance with your configuration, please email us at hello@zohobookings.com or support@zohobookings.com.

    • Recent Topics

    • How to Initiate WhatsApp Message on SalesIQ?

      I've just activated a Business WhatsApp phone number through SalesIQ because of its touted omnichannel chat approach. Sounds exciting. I understand that when a customer sends me a WA message, I can reply to it on SalesIQ and keep the chat going, perfect.
    • Episode IV:Handling User Inputs in custom functions

      Hi Everyone, We've been exploring custom functions which help in performing advanced automation tasks. Custom functions enable you to achieve possibilities based on your organization's requirements. Custom functions require user inputs that allow the
    • Set a lead as non-marketing if they opt out of email marketing

      I'm gathering Lead data via an enquiry form and wish to give them the option to opt out of marketing emails (which we send from Marketing Automation) whilst retaining the ability to send them non-marketing emails - so the email opt-out field doesn't work.
    • Set up multiple IMAP email addresses

      Hi, I just started using CRM and its great, but I just found out I can only add one imap email address for incoming mail in the included salesinbox ...this is ridiculous. All companies have different email such as sales@domain, info@domain , personal@domain
    • Zoho Recruit to Zoho People integration

      In the mapping of field from Zoho Recruit to Zoho People i am unable to map all fields What can i do
    • Zoho Recruit > Career Site > Customisation

      Hi All I have created multiple career site to represent my different organization In my Quanta Media career site > I set it with the with Quanta Malta view In my job opening : Quanta Malta view 2 job opening In my URL for quanta media https://lri.zohorecruit.eu/jobs/Quanta-Malta
    • Formatting Blueprint Stages (buttons)

      Is there a way to format Blueprint transition buttons in Creator like background colour, text colour etc.
    • Disable Default Value in Multi-Select field

      Hello, Is there a way to disable the default value feature when setting up a custom Multi-Select field? When creating tickets I would like it so there isn't a value pre-selected in the multi-select custom field that was created.
    • How to set custom business hours for different teams in Zoho Desk?

      Hi Zoho Team and Community, I’m trying to set different business hours for multiple departments in Zoho Desk. For example, our tech support team works 24/7, while our billing team is only available from 9 AM to 5 PM (Mon–Fri). Is there a way to assign
    • Zia Auto Tag Keyword Clusters

      Is there a way to remove a keyword from a keyword cluster? We're finding that Zia auto-tag is tagging things incorrectly based on some words that don't really make sense.
    • Centralized Domain Verification in Zoho CRM Plus

      Hi Team, I have a suggestion regarding Zoho CRM Plus. It's quite frustrating to verify the same domain separately for each application within the suite. It would be really helpful if you could introduce a centralized admin console—similar to what's available
    • HOw do I make a refund?

      I have a client that needs a refund. I see a refund history in the Report area... but where do I go to make a refund?
    • Creating a work order for dispatch

      We currently uses ZOHO for CRM and Intuit Field Service for creating Work orders and dispatching. This is causing double entry and is not efficient use of time.  I would like to use ZOHO for all customer related activities so can you tell me if you can :  Create a work order that we could manipulate to meet our needs.  Also if you could then dispatch that would be ideal. Thank you
    • "code": "500","description": "Account not exists", mail api

      I have been through all the steps and have a functioning Oath access_token etc etc... I then GET https://mail.zoho.com/api/organization And get my zoid then GET http://mail.zoho.com/api/organization/<hidden>/accounts and get the account details, which
    • Residual Formatting in Text Boxes After Undoing Pasting of Formatted Text

      Hi, guys! I have another problem to report. Actually, I have been aware of this for many months, possibly years, but I have been too lazy to report it to you. My apologies! Let's say you've pasted a formatted string into a text box. You change your mind
    • Feature Request: Stripe Terminal Integration

      I would like to request the addition of Stripe Terminal integration to Zoho Books, which will help process in-person payments. While Zoho Books already supports online payments through Stripe, extending this functionality to include Stripe Terminal would
    • Customer Parent Account or Sub-Customer Account

      Some of clients as they have 50 to 300 branches, they required separate account statement with outlet name and number; which means we have to open new account for each branch individually. However, the main issue is that, when they make a payment, they
    • Improved Security in SAML/OIDC Sign-in Redirection Flow

      To enhance the security of our authentication system, we’ve made a change to how SAML and OIDC sign-in redirections are handled. This update resolves a potential open redirection vulnerability and adds an extra layer of protection during the sign-in process.
    • GA4 data

      Hi, I have data being pulled from GA4 into numerous tables. There are a few major errors in the source data. Eg for a period of time GA4 reported ecommerce sales that were $98 as $9,800 and $42 as $4,200. It's not happening now but my historical data
    • Ask the Experts: Five-hour live Q&A session with Zoho WorkDrive product experts

      Have questions about WorkDrive 5.0? Let’s talk! We recently launched Zoho WorkDrive 5.0, packed with powerful updates to help your team work smarter, stay secure, and get more value from your business content. From content-centric workflows and AI-powered
    • Allow the usage of Multi-Select fields as the primary field on "Layout Rules"

      We want to force our users to enter some explanation strings when a multi-select field has been utilized. I can't understand the reason for the usage restriction of Multi-Select fields as a primary field. This is a simple "Display hidden mandatory field
    • Lost Search Box with new UI Design

      I would like to suggest bringing back the Search Box in the new Zoho Project UI.  I use the search feature a lot and having to click the magnifying glass to type for a search is one extra click that we did not have with the old UI.
    • Adaptación de zoho books a la nueva regulación de facturación electrónica

      La facturación electrónica será obligatoria para todas las empresa en España en 2025, en Francia probablemente también e imagino pronto en todos los países europeos. Ya en 2024 todas las empresa grandes tienen que utilizar el sistema de facturación electrónica.
    • ZOHOBOOK Sales_QUOTE: To Add Discount At Each Line Item Table

      Hi, Our quote need to display with discount at each line item level as well. Try to edit template, >CUSTOMISE>EDIT TEMPLATE> Table, I can see template view with discount column, but when hit SAVE the template, view in PDF the discount column not shown.
    • How to account for vat with postponed VAT accounting

      Hi everyone, looking for some help with postponed VAT accounting, I use DHL express for my imports and they used to pay the VAT for me and then invoice me. I could then log this as a bill and the VAT element from import was recorded as input VAT, all
    • Weekly Automation Trigger for Equipment Calibration Reminder

      Dear Team, I’m currently working on an automation in the Equipment module. The goal is to track calibration schedules for tools — all of which require regular calibration. I’ve created an automation that sends email reminders for tools that are due for
    • Want to use Zoho Books in Switzerland. CHF support planned?

      Hi, We're a Swiss company using other Zoho suite software and I discovered Zoho Books and other accounting SaaS when looking for an accounting tool. Do you intend to cover Switzerland and CHF based accounting anytime soon? Roy
    • ADDDATE formula using 2 calculations

      Hello, I want to create an ADDDATE formula using 2 calculations, add 1 month and deduct 1 day. the formula that I need should look like this: ADDDATE(due_date, 1, "Months")+ ADDDATE(due_date, -1, "Days") Each row itself works fine, but when I'm trying
    • Upgrading from Zoho Invoice to Books was a major downgrade in functionality for me

      I have been a user for many years of a free plan on Zoho Invoice for my personal consulting business. I recent upgraded my organization to Books since some of the additional functionality looked useful to me, and played around with the free trial for
    • 🎉 Dynamic Org Chart for Zoho CRM Extension Published [2025]

      Hey Zoho CRM Community! We're thrilled to unveil our latest Zoho extension:🥁 Dynamic Org Chart for Zoho CRM 🎊 This extension is now available to transform the way your teams visualize, manage, and interact with org chart directly inside any Zoho CRM's
    • Detailed General Ledger has problem of exporting out to excel and missing ledger details for some accounts

      I have been encountering some problems generating Detailed General Ledger report with Zoho books. Firstly, I cannot export out the report of Detailed General Ledger to Excel. It will show this error message "invalid value passed for sort column", and
    • Upload a file to a File Upload Field through API

      Hello, Is there any way to upload a file to a custom file upload field in a module when doing an Update using the Record API? I've found and I am able to upload files to attachments but I don't know how to upload them to a field. I've checked the documentation at  https://www.zoho.com/crm/help/api/v2/#update-specify-records but the File Upload field type does not appear in the examples. Thanks
    • Kaizen #131 - Bulk Write for parent-child records using Scala SDK

      Hello and welcome back to this week's Kaizen! Last week, we discussed how to configure and initialize the Zoho CRM Scala SDK. This week, we will be exploring the Bulk Write API and its capabilities. Specifically, we will focus on executing bulk write
    • Automatic pricing feature for sales orders

      I am currently setting up my Zoho Inventory system and would like to implement an automatic pricing feature for sales orders. We have created a custom field called "brandline" for our items. All products with the same brandline value should have the same
    • Ability to access VAT returns and submit them has disappeared.

      I have been using Zoho books successfully to submit quarterly VAT returns. Without reason I have lost that facility. I have followed all available instructions eg going into settings, taxes, VAT etc. without success. My registration number is there and
    • How to automatically schedule a meeting After Blueprint Transition

      As part of our sales process, we require a technician to go to the customer's site and perform an installation prior to advancing to the next stage of the blueprint.  So this will require (a) scheduling a meeting for the technician to visit the customer's site and (b) a reminder phone call the day before the scheduled meeting. As I'm designing the Deal Blueprint, I see that I can automatically add a Task to the deal, but I can't add a Meeting or a Call. What am I missing?  There seem to be 3 types
    • Zoho Recruit > Workflow

      I have created a workflow for my application module Whenever a record is created The condition , application status is 1st call invitation I have set this OI do not receive the email that was suppose to be send out
    • [Webinar] Zoho Writer for SCM and logistics

      Creating, sharing, and distributing complex documents are constant challenges in the SCM and logistics industry. That's why our next webinar is focused on how to simplify these document workflows. Join us on Jul 10, 2025 for a Zoho Writer webinar designed
    • Multiple locations but one parent company

      I am trying to configure my accounts that have multiple locations under one parent company to show separate locations in the portal.   
    • Stock Count History in Product Details – Zoho Inventory

      Hello Zoho Team, When I perform a Stock Count for a product in Zoho Inventory, I would like to view the history of those stock counts later — especially from the product details page. Currently, I can perform the count and update the quantity, but I’m
    • Next Page