Hello Everyone,
Welcome back to yet another post in the Kaizen Series!
As you already may know, for the Kaizen #200 milestone, we asked for your feedback and many of you suggested topics for us to discuss. We have been writing on these topics over the past few weeks. One of the feedbacks asked us to cover "more on ZDK CLI". In this post, we will discuss building an Event Management System in Zoho CRM Using
ZDK CLI.
Consider the case of Zenith, a Zoho CRM partner who is also partner for Zoho's competing products. Zenith is hosting a conference in which their representatives are inviting speakers from Zoho and also other competing products. The attendees of the conference will be either external attendees or leads or contacts of Zenith. For this purpose existing meetings module of Zoho CRM (previously called Events) can not be used as it is not a good fit for this case. Custom modules and fields are required for this. In this post, we’ll discuss how to create a Event Management System that is complimentary to Zoho CRM using ZDK CLI.
Why Use ZDK CLI?
ZDK CLI allows developers to:
- Create and edit CRM metadata (modules, fields, roles, profiles, and widgets)
- Define relationships between modules (lookups, multi-select lookups)
- Push and sync metadata changes to sandbox.
- Resolve conflicts when multiple users work on the same metadata.
This makes it ideal for building reusable CRM systems such as event management.
Initial Setup
As the initial setup, initialize the ZDK CLI project directory using zdk init command and create a new ZDK Project folder "Zenith".
Then, login to the sandbox environment for Zenith using zdk auth:login command.
When you execute zdk auth:login, you can either select any org that is already signed in or select NEW LOGIN to visit the login page and select the sandbox org you will be working on.
After logging in to Zoho select the sandbox environment and give required permissions.

For the current beta release, ZDK CLI is exclusively available for Sandbox environment and is not operational in Production environments.
You will be redirected to the terminal after successful login and you can start working on ZDK CLI.
Change the api_version to 8 in zdk-project.json file.
Step 1: Define the Modules
For an event management use case, we will need the following custom modules:
- Conference – Stores details of each event.
- Attendees – Tracks participants, whether leads, contacts, or external.
- ConferenceAttendees (Linking Module, not created) – Connects conferences and attendees with registration status.
- Venues – Captures details of event locations.
- Speakers – Stores details of invited speakers.
This has been visualized in the data model below.
To create a module, use the command
This creates the json file for module metadata : Conference.modules-meta.json in the path Zenith/crm/meta/modules/Conference
Conference.modules-meta.json content
{ "singular_label": "Conference", "plural_label": "Conferences", "api_name": "Conference", "profiles": [ { "api_name": "Administrator" } ], "display_field": { "api_name": "Conferences" }, "show_as_tab": true } |
Similarly create modules Attendees , Venues, and Speakers modules
Step 2: Customize Fields
To create a field, use the command
Conference module:
Conference modules's fields are:
- Attendees (multiselectlookup to Attendee module)
- Speakers (multiselectlookup to Speakers module)
- Venue (lookup to Venue module)
- Date (datetime)
- Duration(double)
- Description (textarea)
- Status (picklist: Planned, Ongoing, Completed)
Attendees field
Let us check how to create the field attendees of type multi-select lookup (to Attendee module)
The json file Attendees.fields-meta.json created in the path Zenith/crm/meta/modules/Conference/fields will look like this
To provide dependent details for the multi select lookup, add the multiselectlookup json object to the Attendees.fields-meta.json file as below:
{ "field_label": "Attendees", "display_name": "Attendees", "api_name": "Attendees", "type": "used", "data_type": "multiselectlookup", "multiselectlookup": { "connected_details": { "module": { "api_name": "Attendee" }, "field": { "field_label": "AttendingConference" } }, "linking_details": { "module": { "plural_label": "Conferences_X_attendees" } } } } |
Speakers (multi-select lookup to Speakers module)
Similar to Attendees field, create Speakers field and modify the json file Speaker.fields-meta.json created in the path Zenith/crm/meta/modules/Conference/fields:
{ "field_label": "Speaker", "display_name": "Speakers", "api_name": "Speakers", "type": "used", "data_type": "multiselectlookup", "multiselectlookup": { "connected_details": { "module": { "api_name": "Speaker" }, "field": { "field_label": "AttendingConference" } }, "linking_details": { "module": { "plural_label": "Speakers_X_attendees" } } } } |
Venue (lookup field to Venue module)
Similarly, create the Venue field with type as "lookup" The json file Venue.fields-meta.json created in the path Zenith/crm/meta/modules/Conference/fields will look like this
To provide dependent details for the lookup, add the lookup json object to the json as below.
{ "field_label": "Venue", "display_name": "Venue", "api_name": "Venue", "type": "used", "data_type": "lookup" "lookup": { "display_label": "Venue", "api_name": "Venue", "module": { "api_name": "Venue" } } }
|
Description (textarea)
After create a textarea field Description using zdk meta:create fields command, add textarea json object to the field meta json file as below :
{ "field_label": "Description", "display_name": "Description", "api_name": "Description", "type": "used", "data_type": "textarea", "textarea": { "type": "rich_text" } }
|
The possible values for text area are small, large and rich_text.
Status (picklist)
After create a picklist field Status using zdk meta:create fields command, add pick_list_values json array to the field meta json file as below:
{ "field_label": "Status", "display_name": "Status", "api_name": "Status", "type": "used", "data_type": "picklist", "pick_list_values": [ { "display_value": "Planned", "actual_value": "Planned" }, { "display_value": "Ongoing", "actual_value": "Ongoing" }, { "display_value": "Completed", "actual_value": "Completed" } ] } |
Date and duration fields of type datetime and double does not require any edits to the created meta.json file.
Attendees Module
Similarly, add fields for attendees modules
- Phone (phone)
- Company (text)
- EventsAttended (multi-select lookup to Conference module)
- Attendee Type (picklist with options Lead, Contact, External)
- Leads (lookup to Lead module)
- Contacts (lookup to Contact module
Venue Module
- Location (text)
- Capacity (integer)
- Contact erson (text)
- ContactNumber(phone)
- Description(textarea)
Speakers Module
- Phone (phone)
- Company (text)
- SpeakerStatus (picklist with options Confirmed, Pending, Canceled)
Step 3: Create a Custom Role
To create a field, use the command
This ensures event managers have the right access without interfering with other CRM operations.
Pushing changes to the sandbox environment
Once all changes are done execute
zdk org:push and zdk org:push result --{jobId} command to deploy the changes to the sandbox environment. Once the changes are verified in your sandbox environment you can deploy it to the production environment.

You can extract this
metadata zip file, that is created using
zdk org:export command to your own ZDK project directory and try pushing the changes to your sandbox environment.
Building the Event Management System for "Zenith" illustrates the core strength of ZDK CLI. It brings software engineering best practices to Zoho CRM customization. By defining modules/fields/roles as json files directly or creating them using the command, the source truth of the metadata is available in local system. The same can be tracked via version control systems like GIT for better collaboration among the team.
Recent Topics
Whatsapp Connection Status still "Pending" after migration
Hello, I migrated my WhatsApp API to Zoho from another provider a day ago. So far the connection status is still “Pending”. There is a problem? How long does it usually take?
Kaizen #226: Using ZRC in Client Script
Hello everyone! Welcome to another week of Kaizen. In today's post, lets see what is ZRC (Zoho Request Client) and how we can use ZRC methods in Client Script to get inputs from a Salesperson and update the Lead status with a single button click. In this
Search Bar positioning
Why is the Search bar on the far right when everything is oriented towards the left?
How to use Rollup Summary in a Formula Field?
I created a Rollup Summary (Decimal) field in my module, and it shows values correctly. When I try to reference it in a Formula Field (e.g. ${Deals.Partners_Requested} - ${Deals.Partners_Paid}), I get the error that the field can’t be found. Is it possible
How to Filter timewise question to check uploaded one month or two months before in these community question ?
i want to find the question that is asked some month or before any particular year, so how can i filter it ?
Send Whatsapp with API including custom placeholders
Is is possible to initiate a session on whatsapp IM channel with a template that includes params (placeholders) that are passed on the API call? This is very usefull to send a Utility message for a transactional notification including an order number
Welcome to the Zoho ERP Community Forum
Hello everyone, We are thrilled to launch Zoho ERP (India edition), a software to manage your business operations from end to end. We’ve created this community forum as a space for you to ask questions, comment answers, provide feedback, and share your
Proposal for Creating a Unique "Address" Entity in Zoho FSM
The "Address" entity is one of the most critical components for a service-oriented company. While homeowners may change and servicing companies may vary, the address itself remains constant. This constancy is essential for subsequent services, as it provides
How to apply customized Zoho Crm Home Page to all users?
I have tried to study manuals and play with Zoho CRM but haven't found a way how to apply customized Zoho CRM Home Page as a (default) home page for other CRM users.. How that can be done, if possible? - kipi Moderation Update: Currently, each user has
Workflow Down/Bug
We have a workflow that sends an email to one of our internal departments 10 minutes after a record is created in a custom module. The workflow actually works correctly. However, we have now noticed that on January 8, between 3:55 p.m. and 4:33 p.m.,
Please can the open tasks be shown in each customer account at the top.
Hi there This has happened before, where the open tasks are no longer visible at the top of the page for each customer in the CRM. They have gone missing previously and were reinstated when I asked so I think it's just after an update that this feature
Service Locations: Designed for Shared Sites and Changing Customers
Managing service addresses sounds simple—until it isn’t. Large facilities, shared sites, and frequently changing customers can quickly turn address management into an operational bottleneck. This is where Service Locations deliver clarity and control.
Can I re-send the Customer Satisfaction Survey after a ticket closure?
Hello, Some customers does not answer the survey right after closure, is it possible to re-send after a few days or weeks? Best Regards!
Filter contacts based on selected category in Zoho Desk ticket
Hello community, I’m setting up the Tickets module in Zoho Desk and I need help implementing the following: When a category is selected in a ticket, I want the Contact field to be filtered so that it only displays contacts that are related to that category.
Mapping a new Ticket in Zoho Desk to an Account or Deal in Zoho CRM manually
Is there any way for me to map an existing ticket in Zoho desk to an account or Deal within Zoho CRM? Sometimes people use different email to put in a ticket than the one that we have in the CRM, but it's still the same person. We would like to be able
Introducing Multi-Asset Support in Work Orders, Estimates, and Service Appointments
We’re excited to announce a highly requested enhancement in Zoho FSM — you can now associate multiple assets with Work Orders, Estimates, and Service Appointments. This update brings more clarity, flexibility, and control to your field service operations,
Assign Income to Project Without Invoice
Hello, Fairly new user here so apologies if there is a really obvious solution here that I am just missing... I have hundreds of small deposits into a bank account that I want to assign to a project but do not want to have to create an invoice every time
Tracking Non-Inventory Items
We have several business locations and currently use zoho inventory to track retail items (sales and purchase orders). We were hoping to use zoho inventory to track our non-inventory items as well (toilet paper, paper towels, etc). I understand that we
Profile Page View Customization
I need to change the fields, sections from the profile view of an emplyoyee.
Zoho Desk Android app update: Filter, Sort and Saved filters Enhancements
Hello everyone! We are excited to introduce the below features on the Android version Zoho Desk mobile app: 1. Filter & Sort support has been introduced for the Contacts and Accounts modules. 2. Sort options is now available in Custom Modules as well.
Zoho CRM Meetings Module Issues
We have a use-case that is very common in today's world, but won't work in Zoho CRM. We have an SDR (Sales Development Rep) who makes many calls per day to Leads and Contacts, and schedules meetings for our primary Sales Reps. He does this by logging
How to filter Packages in zoho inventory api
Hi Team, I want to perform some tasks in a schedular on the packages which are in "Shipped" state. I tried to use filter_by in my api call but in return I get response as {"code":-1,"message":"Given filter is not configured"} My Api request is as follows
Accessing shared mailboxes through Trident (Windows)
Hi, I have a created a couple of shared mailboxes. The mailboxes are showing up on the browser based Zoho workplace, but I cannot seem to figure out how to access my shared inboxes through Trident (Windows). Am I missing something or is this feature not
Issues Logging into ZOHO
Hello, one of my coworkers is having issues logging into ZOHO, she has requested a code when entering and the email is correct but she has not received the code. can you help us with this?
Feature Request: Ability to set Default Custom Filters and apply them via URL/Deluge
I've discovered a significant gap in how Zoho Creator handles Custom Filters for reports, and I'm hoping the Zoho team can address this in a future update. This limitation has been raised before and continues to be requested, but remains unresolved. The
Closing the Loop: Why Lookup Asymmetry is Harming Data Integrity in Creator
TL;DR: Lookup fields allow users to add new related records inline via the "+" icon, but there's no equivalent ability to edit an existing related record without navigating away and losing form context. Adding a native "Edit" icon—with automatic User
Syncing with Google calendar, Tasks and Events
Is it possible to sync Zoho CRM calendar, task and events with Google Calendar's tasks and events. With the increasing adoption by many major tool suppliers to sync seamlessly with Google's offerings (for instance I use the excellent Any.do task planning
filtering lookup field options based on information in another module.
In our CRM system. We have the standard Accounts and Deals modules. We would like to introduce the ability to classify Accounts by Sector. Our desired functionality is to have a global list of all sectors that an Account can select, with the ability to
Really want the field "Company" in the activities module!
Hi team! Something we are really missing is able to see the field Company when working in the activities module. We have a lot of tasks and need to see what company it's related to. It's really annoying to not be able to see it.🙈 Thx!
Cliq iOS can't see shared screen
Hello, I had this morning a video call with a colleague. She is using Cliq Desktop MacOS and wanted to share her screen with me. I'm on iPad. I noticed, while she shared her screen, I could only see her video, but not the shared screen... Does Cliq iOS is able to display shared screen, or is it somewhere else to be found ? Regards
Service op locatie organiseren met Zoho FSM: waar lopen organisaties tegenaan?
Bij organisaties met service teams op locatie merken we vaak dat de complexiteit niet zozeer in de planning zelf zit, maar in wat er rond die planning gebeurt. Denk aan opvolging na interventies, consistente servicerapporten, en het bijhouden van installaties
Introducing Assemblies and Kits in Zoho Inventory
Hello customers, We’re excited to share a major revamp to Zoho Inventory that brings both clarity and flexibility to your inventory management experience! Presenting Assemblies and Kits We’re thrilled to introduce Assemblies and Kits, which replaces the
Automate pushing Zoho CRM backups into Zoho WorkDrive
Through our Zoho One subscription we have both Zoho CRM and Zoho WorkDrive. We have regular backups setup in Zoho CRM. Once the backup is created, we are notified. Since we want to keep these backups for more than 7 days, we manually download them. They
Does the ability exist to make tax on the customer profile mandatory?
I am reaching out to inquire about the possibility of making the "Customer Tax" field mandatory when creating a new customer in Zoho. We want to ensure that all customers have their tax information recorded to maintain compliance with our internal processes.
CRM gets location smart with the all new Map View: visualize records, locate records within any radius, and more
Hello all, We've introduced a new way to work with location data in Zoho CRM: the Map View. Instead of scrolling through endless lists, your records now appear as pins on a map. Built on top of the all-new address field and powered by Mappls (MapMyIndia),
IMAP mail after specify date
Hi My customer's mail server is on premise and mail storage is very huge. So It never finish sync. and finally stop sync. Cloud CRM have a option like zoho mail sync mail after some date.
How to integrate XML with Zoho CRM
Hi, I have an eCom service provider that gives me a dynamic XML that contains order information, clients, shipments... The XML link is the only thing I have. No Oath or key, No API get... I want to integrate it into Zoho CRM. I am not a developer nor
email association with CRM
Why is it 2024 (almost 2025) and Zoho has not figured out how to integrate email with CRM? It is so inconsistent at associating emails within CRM. I am an attorney. I have clients and work with other attorneys. Attorney John Doe is associated with multiple
Fix the speed
It takes ages to load on every step even though my dataset is quite small.
Credit Note for Shipped and Fatoora pushed invoices
We have shipped a Sales Order and created an Invoice. The Invoice is also pushed to Fatoora Now we need to create a credit note for the invoice When we try it, it says we need to create a Sales Return in the Zoho Books, we have already created a Sales
Next Page