Kaizen #107 - Field Trackers in ZOHO CRM

Kaizen #107 - Field Trackers in ZOHO CRM

Hey folks! Welcome to a fresh week of Kaizen. 

In this post, we will be looking at the Field Trackers in ZOHO CRM APIs. Currently, this support is provided to all the picklist fields (system-defined and custom) and is available by default for a picklist field (Stage) in the Deals module and a datetime field (Rescheduled_To) in the Appointments module. 

Field Trackers 

Field trackers in ZOHO CRM help you to monitor the changes made to a specific field. It ensures data integrity and compliance as it helps in maintaining the history of changes applied to the critical data. 

It captures the details such as who made the change, when the change occurred, the previous and current values of the field. Users can use this data to analyse how a field's value evolved and identify the important patterns/trends in the business. 

Picklist Field Trackers 

Both system-defined and custom picklist fields support Field Tracker. The history details of the field will be available in a related list with five default fields - picklist values, duration, modified time, modified by, and moved to.

To enable this support for a picklist, follow these steps. 
  • Go to Setup > Customization > Modules and Fields in your ZOHO CRM account. 
  • Select your desired module in which you want to create a picklist field tracker. 
  • Select the settings icon (...) of the required picklist field and click Edit Properties.
  • In the Picklist properties page, select the Enable history tracking for picklist values checkbox.
Refer to this help guide to learn more about picklist trackers and how to add additional fields that you want to view in the picklist history related list. At most, only one picklist field can be tracked within a module.

Consider you are a Manager and you have enabled field tracking for the Lead Status picklist field within the Leads module to trace the timeline of your leads' status changes. Now, take the following steps to obtain the picklist history details:

STEP 1: Make a GET Fields Metadata API call to the Leads module.  
STEP 2: In the response, check for the history_tracking key in the Lead Status field. 



In the history_tracking key, 
  • the module key, provides both the api_name and id of the new module responsible for tracking picklist history details. As a result, it naturally establishes a relationship with the Leads module, and it will be accessible as a new related list within the same module.  
  •  the duration_configured_field key provides the field api_name and id of the key which contains the duration of the picklist values in that picklist tracking module. 
STEP 3: With the api_name of new picklist tracking module, you can fetch the history details in two ways. 

(i) Fetching picklist changes of all the leads records from that new module

As we already know that picklist tracking details are maintained in a new module, make a GET Records API call with the following details. 

Replace the module_api_name with the api_name of the picklist tracking module(Lead_Status_History), which is obtained from the fields metadata of the Leads module.

Request URL: {api-domain}/crm/{version}/{module_api_name} 
For our case, it will be provided as https://www.zohoapis.com/crm/v5/Lead_Status_History. 
Request Method: GET
Possible Parameters: fields, page, per_page, sort_by and sort_order.
For our case, make a GET Fields Metadata API call to the related list (Lead_Status_History). The response will give you the list of fields available in the related list. 
Scope: ZohoCRM.modules.ALL (or) ZohoCRM.modules.{module_name}.READ 
Sample Response:



To fetch individual history records, use this {api-domain}/crm/{version}/{module_api_name}/{record_id} request url and replace the record_id with the id fetched in this response.

(ii) Fetching the history details of a particular lead

This approach fetches the related list data of a particular record in a module (here it is Leads). 
Make a GET Related Records Data API call with these details. 

Request URL: {api-domain}/crm/{version}/{module_api_name}/{record_id}/{related_list_api_name}
For our case, it will be given as https://www.zohoapis.com/crm/v5/Leads/5545974000004023008/Lead_Status_History.
Request Method: GET
Possible Parameters: fields, page, per_page, sort_by and sort_order.
Scope: ZohoCRM.modules.ALL (or) ZohoCRM.modules.{module_name}.READ 
Sample Response:



To fetch individual history records, use this {api-domain}/crm/{version}/{module_api_name}/{record_id}/{related_list_api_name}/{related_record_id} request url and replace the related_record_id  with the id fetched in this response.

Stage History

In the Deals module, a picklist field called Stage acts as a default field tracker. The history details of this picklist are recorded in a new module called DealHistory. In this module, there are four default fields followed from the Deals module which cannot be unfollowed. They are Expected Revenue, Amount, Probability and Closing date. You can add additional fields from the Deals module to this list based on your requirement. 

The module's relationship with the Deals module identifies it as a related list within the Deals module as Stage History.  You can retrieve the history details of this default picklist field tracker in those aforementioned two ways. 

Let us show you a sample of each way for better understanding.

(i) Fetching picklist changes of all the deals records from DealHistory

Make a GET Records API call to the DealHistory module with the following details.

Request URL: {api-domain}/crm/{version}/Stage_History or {api-domain}/crm/{version}/DealHistory/{record_id} 
Request Method: GET
Possible Parameters: fields, page, per_page, sort_by and sort_order.
Make a GET Fields Metadata API call to DealHistory to get the list of fields. 
Scope: ZohoCRM.modules.ALL (or) ZohoCRM.modules.DealHistory.READ
Sample Response:


(ii) Fetching the history details of a particular deal

Make a GET Related Records Data API call with these details. 

Request URL: {api-domain}/crm/{version}/Deals/{record_id}/Stage_History or {api-domain}/crm/{version}/Deals/{record_id}/Stage_History/{related_record_id}
Request Method: GET
Possible Parameters: fields, page, per_page, sort_by and sort_order.
Scope: ZohoCRM.modules.ALL (or) ZohoCRM.modules.Deals.READ
Sample Response:


Appointments' Rescheduled History

In the Appointments module, a datetime field named Rescheduled_To acts as a default field tracker. The history details of this particular field are stored in a separate module with the API Name Appointments_Rescheduled_History__s. It is also accessible as a related list under the Appointments module with the same module API name as the related lists API name. Only the recent 20 rescheduled data of an appointment will be available in this tracker module.  

This module has six default fields - Appointment_Name, Rescheduled_Time, Rescheduled_By, Rescheduled_From, Rescheduled_To, Reschedule_Note and Reschedule_Reason. You cannot remove the existing fields or add new fields to this module. The lookup field with display label Appointment Name and API name Appointment_Name points to the corresponding appointment to which the history data belongs. 

Apart from fetching the rescheduled history data, Zoho CRM also helps you to CREATE, UPDATE and DELETE the history records for this field. This helps you to synchronise the rescheduled history when importing the Appointments records from a third party application. 

Let us look into a few scenarios in which the use of each of the Appointments Rescheduled History CRUD operations.  

Scenario 1  

As a Manager, you might want to retrieve all the rescheduled appointment history data to determine the most common reasons for rescheduling. 

Use the GET Appointments Rescheduled History API with the following details. 

Request URL: {api-domain}/crm/{version}/Appointments_Rescheduled_History__s (or)
{api-domain}/crm/{version}/Appointments__s/{appointment_id}/Appointments_Rescheduled_History__s
Request Method: GET
Scope: ZohoCRM.modules.appointments_rescheduled_history.READ
Possible Parameters: fields, page, per_page, sort_by and sort_order
Sample Response:



The '204 - No Content' response will be thrown if the reschedule count of the specific appointment is 1. This response will not include the current appointment time, which is the last rescheduling of the appointment. You can retrieve it only using the GET Appointments API.  

Scenario 2

For instance, you are using a third party application for booking appointments and have decided to move to ZOHO CRM. But, losing the rescheduled history data for "not completed" appointments can be a major concern. In such a scenario, you can seamlessly transfer and incorporate the rescheduled data for these appointments with the help of Add Appointments Rescheduled History API

In this context, we are just adding new records of rescheduled data to the tracking module(Appointments_Rescheduled_History__s), which records the details of the Rescheduled_To field. Given that Appointments_Rescheduled_History__s is a module, it also allows us to execute UPDATE and DELETE operations, as elaborated in the forthcoming scenarios.

Following are the details of the API:

Request URL: {api-domain}/crm/{version}/Appointments_Rescheduled_History__s
Request Method: POST
Scope: ZohoCRM.modules.appointments_rescheduled_history.CREATE
Sample Request Body:

{
    "data": [
        {
            "Rescheduled_From": "2023-09-19T15:00:00+05:30",
            "Rescheduled_To": "2023-09-22T10:30:00+05:30",
            "Appointment_Name": {
                "name": "AC Service - Leota Dilliard (Sample)",
                "id": "5545974000004330038"
            },
            "Rescheduled_Time": "2023-09-19T15:30:00+05:30",
            "Rescheduled_By": {
                "name": "Patricia Boyle",
                "id": "5545974000000393001"
            },
            "Reschedule_Note": "Customer unavailable",
            "Reschedule_Reason": "By Customer"
        }
    ]
}

You can add up to 100 records in a single API call, with a limit of 20 rescheduled history records allowed for a single appointment.

Scenario 3

To ensure accuracy and completeness, you may want to update the reason and other details for rescheduling the appointment. At times you would even want to insert additional information to the existing history data. In situations like these, use the Update Appointments Rescheduled History API

Following are the particulars about this API,

Request URL: {api-domain}/crm/{version}/Appointments_Rescheduled_History__s (or) {api-domain}/crm/v5/Appointments_Rescheduled_History__s/{record_id}
Request Method: PUT
Scope: ZohoCRM.modules.appointments_rescheduled_history.UPDATE
Sample Request Body:

{
    "data": [
        {
            "id": "5545974000004365002", 
            "Reschedule_Note": "Team unavailable",
            "Reschedule_Reason": "By Team"
        }
    ]
}

You can update all the POST request JSON keys except the Appointment_Name key. Using this API, you can update a maximum of 100 rescheduled history records per API call. 

Scenario 4

As a Manager, you may want to delete certain history entries that contain sensitive or outdated information to comply with the data privacy regulations. You can use the Delete Appointments Rescheduled History API to remove sensitive/outdated and even duplicate entries. 

Following are the details of this API: 

Request URL: {api-domain}/crm/{version}/Appointments_Rescheduled_History__s/{record_id}
Request Method: DELETE
Scope: ZohoCRM.modules.appointments_rescheduled_history.DELETE
Sample Response:



You can delete only one rescheduled history record per API call. The rescheduled history records of an appointment in the recycle bin will still be available in the related list. To remove them, you have to delete the appointment from the recycle bin. 

We trust you found this post both beneficial and informative!

Your thoughts and perspectives matter to us. If there is a topic you would like us to delve into or if you have any questions, please feel free to drop a comment below or send us an email at support@zohocrm.com.

Stay tuned until we circle back to you on next Friday! 

Cheers!



Previous Post: Kaizen #107 - Functions and Invoke URLs

Head over here to refer to our Kaizen collection on Zoho CRM developer tools. 

    • 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.
    • Recent Topics

    • Why does Zoho’s diff viewer highlight parts of unchanged lines?

      Hi everyone, I’ve noticed something odd in the Zoho editor’s diff view. When I delete a single line, the diff doesn’t just mark that line as removed. Instead, it highlights parts of the next line as if they changed, even though they are identical. Example:
    • All new Address Field in Zoho CRM: maintain structured and accurate address inputs

      The address field will be available exclusively for IN DC users. We'll keep you updated on the DC-specific rollout soon. It's currently available for all new sign-ups and for existing Zoho CRM orgs which are in the Professional edition. Latest update
    • CRM x WorkDrive: File storage for new CRM signups is now powered by WorkDrive

      Availability Editions: All DCs: All Release plan: Released for new signups in all DCs. It will be enabled for existing users in a phased manner in the upcoming months. Help documentation: Documents in Zoho CRM Manage folders in Documents tab Manage files
    • Wrapping up 2025 on a high note: CRM Release Highlights of the year

      Dear Customers, 2025 was an eventful year for us at Zoho CRM. We’ve had releases of all sizes and impact, and we are excited to look back, break it down, and rediscover them with you! Before we rewind—we’d like to take a minute and sincerely thank you
    • Passing the CRM

      Hi, I am hoping someone can help. I have a zoho form that has a CRM lookup field. I was hoping to send this to my publicly to clients via a text message and the form then attaches the signed form back to the custom module. This work absolutely fine when
    • Automating Employee Birthday Notifications in Zoho Cliq

      Have you ever missed a birthday and felt like the office Grinch? Fear not, the Cliq Developer Platform has got your back! With Zoho Cliq's Schedulers, you can be the office party-cipant who never forgets a single cake, balloon, or awkward rendition of
    • Drop Down Value

      Hi, May I know why Zoho Flow treat this drop down as number and not as string. If so, how can I fetch the right value for filtering. This field is from Creator, in Creator upon checking by default it is a string since it's not a lookup field.
    • Create PO from an invoice

      We are a hardware and software sales company which receives orders over the internet. We drop ship most of our products from a warehouse outside of our company. Our orders get sync'd into Zoho from our store via onesaas as invoices. It would be great
    • SMS to customers from within Bigin

      Hi All, Is there anyone else crying out for Bigin SMS capability to send an SMS to customers directly from the Bigin interface? We have inbuilt telephony already with call recordings which works well. What's lacking is the ability to send and receive
    • Zoho Survey reminder settings are extremely confusing

      Hi, I just want to set 3 reminders, one week apart from the first email out. Your form is too confusing and I don't understand. Can you simplify and be more specific regarding the language used on the form ?
    • Add deluge function to shorten URLs

      Zoho Social contains a nice feature to shorten URLs using zurl.co. It would be really helpful to have similar functionality in a Deluge call please, either as an inbuilt function or a standard integration. My Creator app sends an email with a personalised
    • Add specific field value to URL

      Hi Everyone. I have the following code which is set to run from a subform when the user selects a value from a lookup field "Plant_Key" the URL opens a report but i want the report to be filtered on the matching field/value. so in the report there is
    • form data load issue when saving as duplicate record is made

      Hello. I have a form with a lookup when a value is selected the data from the corresponding record is filled into all of the fields in the form. But the form is loaded in such a state that if any value is changed it will take all of the values pre loaded
    • Recurring Tasks and Reminders in Projects

      Recurring tasks are tasks that are created once, and then recreated automatically after a designated time period. For example, the invoice for your billable tasks is due every week. You can set that task to recreate itself every week. Also, the future
    • Unable to remove the “Automatically Assigned” territory from existing records

      Hello Zoho Community Team, We are currently using Territory Management in Zoho CRM and have encountered an issue with automatically assigned territories on Account records. Once any account is created the territory is assigned automatically, the Automatically
    • Track online, in-office, and client location meetings separately with the new meeting venue option

      Hello everyone! We’re excited to announce meeting enhancements in Zoho CRM that bring more clarity and structure to how meetings are categorized. You can now specify the meeting venue to clearly indicate whether a meeting is being held online, at the
    • Google Fonts Integration in Pagesense Popup Editor

      Hello Zoho Pagesense Team, We hope you're doing well. We’d like to submit a feature request to enhance Zoho Pagesense’s popup editor with Google Fonts support. Current Limitation: Currently, Pagesense offers a limited set of default fonts. Google Fonts
    • Improved Contact Sync flow in Google Integration with Zoho CRM

      Hello Everyone, Your contact sync in Google integration just got revamped! We have redesigned the sync process to give users more control over what data flows into Google and ensure that this data flows effortlessly between Zoho CRM and Google. With this
    • CRM Canvas - Upload Attachments

      I am in the process of changing my screens to Canvas.  On one screen, I have tabs with related lists, one of which is attachments.  There doesn't appear to be a way to upload documents though.  Am I missing something really obvious?  Does anyone have
    • Improved Functionality PO Bill SO Invoice

      Hello, I need to enter over 100 items, it's frustrating to scroll a few item rows and wait for more to load, then scroll again. It would be nice to have buttons that scroll to the top or bottom with one click. Furthermore, these items I'm adding are VAT
    • Wishes for 2026

      Hello, and a happy new year 2026! Let's hope it's better for everyone. I'd like to share some thoughts on Zoho One and what could be useful in the short, medium, and long term. Some things are already there, but not applied to Zoho One. Others seem like
    • How to Integrate Zoho Books with Xero (No Native Connection Available)

      Hi everyone, I’m currently facing an issue with integrating Zoho Books invoices with Xero, as I’ve noticed Zoho does not provide a native integration with Xero at this time. I would like to ask: What are the common or recommended solutions for syncing
    • How to install Widget in inventory module

      Hi, I am trying to install a app into Sales Order Module related list, however there is no button allow me to do that. May I ask how to install widget to inventory module related list?
    • Picklist field shows "none" as default

      Hello, Is there an option to avoid showing "none" as the default value in a picklist field? I also don't want to see any option displayed. My expectation is to have a blank bar, and then when I display the drop-down list, I can choose whichever I wa
    • error while listing mails

      I can't access email in any of my folders: Oops, an error occurred - retry produces the second error response: error while listing mails (cannot parse null string). I've signed in and out of Zoho, restarted my iMac.
    • Unlocking New Levels: Zoho Payroll's Journey in 2025

      Every year brings its own set of challenges and opportunities to rethink how payroll works across regulations and teams. In 2025, Zoho Payroll continued to evolve with one clear focus: giving businesses more flexibility, clarity, and control as they grow.
    • CRM project association via deluge

      I have created a workflow in my Zoho CRM for closing a deal. Part of this workflow leverages a deluge script to create a project for our delivery team. Creating the project works great however, after or during the project creation, I would like to associate
    • Zoho Browser??

      hai guys, this sounds awkward but can v get a ZOHO BROWSER same as zoho writer, etc. where i can browse websites @ home and continue browsing the same websites @ my office, as v have the option in Firefox, once i save and close the browser and again when i open it i will be getting the same sites. If u people r not clear with my explanation, plz let me know. Thanks, Sandeep  
    • Sync desktop folders instantly with WorkDrive TrueSync (Beta)

      Keeping your important files backed up and accessible has never been easier! With WorkDrive desktop app (TrueSync), you can now automatically sync specific desktop folders to WorkDrive Web, ensuring seamless, real-time updates across devices. Important:
    • MCP no longer works with Claude

      Anyone else notice Zoho MCP no longer works with Claude? I'm unable to turn this on in the claude chat. When I try to toggle it on, it just does nothing at all. I've tried in incognito, new browsers, etc. - nothing seems to work.
    • Enable History Tracking for Picklist Values Not Available

      When I create a custom picklist field in Deals, the "Enable History Tracking for Picklist Values" option is not available in the Edit Properties area of the picklist. When I create a picklist in any other Module, that option is available. Is there a specific reason why this isn't available for fields in the Deals Module?
    • Ability to Edit YouTube Video Title, Description & Thumbnail After Publishing

      Hi Zoho Social Team, How are you? We would like to request an enhancement to Zoho Social that enables users to edit YouTube video details after the video has already been published. Your team confirmed that while Zoho Social currently allows editing the
    • Free Webinar : Unlock AI driven business insights with Zoho Inventory + Zoho Analytics

      Are you tired of switching between apps and exporting data to build customized reports? Say hello to smarter & streamlined insights! Join us for this exclusive webinar where we explore the power of the Zoho Inventory–Zoho Analytics integration. Learn
    • Critical Issue: Tickets Opened for Zoho Support via the Zoho Help Portal Were Not Processed

      Hi everyone, We want to bring to your attention a serious issue we’ve experienced with the Zoho support Help Portal. For more than a week, tickets submitted directly via the Help Portal were not being handled at all. At the same time no alert was posted
    • Hide/Show Subform Fields On User Input

      Hello, Are there any future updates in Hide/Show Subform Fields "On User Input"?
    • Cloning Item With Images Or The Option With Images

      Hello, when I clone an item, I expect the images to carry over to the cloned item, however this is not the case in Inventory. Please make it possible for the images to get cloned or at least can we get a pop up asking if we want to clone the images as
    • Archiving Contacts

      How do I archive a list of contacts, or individual contacts?
    • Custom validation in CRM schema

      Validation rules in CRM layouts work nicely, good docs by @Kiran Karthik P https://help.zoho.com/portal/en/kb/crm/customize-crm-account/validation-rules/articles/create-validation-rules I'd prefer validating data input 'closer to the schema'
    • Adding Default Module Image into mail merge field

      As with most people finding their way to these forums i have a specific requirement that doesn't seem to be supported by Zoho I have created 2 custom modules to suit my purpose 1 is an inventory type module that lists aluminium extrusions, and all relevant
    • Is it possible to roll up all Contact emails to the Account view?

      Is there a way to track all emails associated with an Account in one single view? Currently, email history is visible when opening an individual Contact record. However, since multiple Contacts are often associated with a single Account, it would be beneficial
    • Next Page