Kaizen 247 - Historical Deduplication using COQL API, Merge Records API and Functions

Kaizen 247 - Historical Deduplication using COQL API, Merge Records API and Functions


Welcome to another Kaizen week!

Duplicate records are a common problem in growing CRM databases. The same person fills out a web form, attends a trade show, and gets manually added by a rep. Three records, same email, slightly different data each time. Some users in our forum have described spending days merging records manually after a large import. Others have asked whether the merge can be triggered automatically.

In this post, we will build a button-triggered deduplication solution using the COQL API, the Merge Records API, and Deluge Functions. While we use Leads module in the sample implementation, the same approach works for Contacts, Accounts, Vendors, and custom modules with tweaks.

The solution will:
  1. Scan the Leads module for records sharing the same email address.
  2. Score each duplicate group and elect the most complete record as master.
  3. Carry over the best available field values from duplicates into the master via the merge payload.
  4. Merge all duplicates into the master in batches.
  5. Return a summary of groups processed, succeeded, failed, and skipped.

Doesn't Zoho CRM already handle duplicates?

Yes, and it works well for most cases. There are two built-in tools.
  1. Find and Merge to identify and merge duplicate records from the CRM UI.
  2. Deduplicate Records performs a bulk duplicate scan across a module and allows users to review and merge duplicate groups.
Both tools cover Leads, Contacts, Accounts, Vendors, Deals, and Custom modules.


The limitation both tools share is that they are UI-driven and admin-initiated. Neither can trigger automatically when duplicates arrive through imports, integrations, or API calls. And neither supports custom logic for deciding  which record to keep, or which field values to carry forward when the master  has a blank field that a duplicate has filled in.
This is not intended to replace Find and Merge or Deduplicate Records. If those tools meet your requirements, they remain the simplest option. This implementation is intended for scenarios that require automation, custom master-selection logic, or field arbitration. It provides a reusable framework for duplicate discovery, master selection, field arbitration, and merge execution.

The Merge Records API

The Merge Records API merges up to three records (one master and up to two children) into a single record. The child records are deleted after the merge operation. All related data including Notes, Activities, Emails, and Attachments transfers to the master.
Endpoint: POST {api-domain}/crm/v8/{module_api_name}/{master-record-id}/actions/merge
Supported modules: Leads, Contacts, Accounts, Deals (Potentials), Vendors, and Custom modules.
Scope required:
ZohoCRM.modules.{module_name}.WRITE
 or 
ZohoCRM.modules.{module_name}.ALL

Things to know before building:

  1. By default, the master record's field values are retained. To use a value from a child record for a specific field, name it in the child's _fields array in the request body.
  2. The data array accepts a maximum of two child records per call. For groups with more duplicates, you merge in batches of two.
  3. If a child has more than 1,000 records in any related list, the merge is scheduled as an async job. The API returns a SCHEDULED response with a job_id. Use the Get Merge Status API to track completion.
  4. Records that are locked, in an active Approval process, or Closed Deals return NOT_ALLOWED and cannot be merged.

The use case

Zylker Technologies generates leads from a website form, LinkedIn campaigns, trade show badge scans, and manual rep entries. The Email field was not set as unique, so the same prospect accumulated multiple records across these channels, each with slightly different data. The web form captures email but not phone. The trade show scan has a direct-dial number but an abbreviated company name. The LinkedIn entry has a title but no phone.
The team eventually made the Email field unique to prevent new duplicates from being created. However, a significant backlog of duplicate records already existed in the system. For a backlog of hundreds of groups arriving from multiple automated sources, Deduplicate Records was not practical. They needed a repeatable cleanup process that could apply the same master-selection and field-arbitration rules across every duplicate group.

Prerequisites

  1. A Zoho CRM account with access to Custom Functions and Connections.
  2. A Zoho OAuth connection named crm_oauth_connection with the scopes:
    1. ZohoCRM.modules.leads.ALL
    2. ZohoCRM.coql.READ
Setting up the connection:
  1. Go to Setup > Developer Hub > Connections
  2. Click Create Connection and choose Zoho CRM
  3. Name it crm_oauth_connection (must match the name used in the code)
  4. Add the scopes above and click Create and Connect.
Notes
Note: If this connection expires, the functions will return an UnAuthenticated Connection error. Reauthorize it from the Connections page to resolve this.

Solution overview

Three functions work together.
  1. button.cleanupAllDuplicates(): the entry point, triggered by the list view button. Calls the other two functions and returns a summary.
  2. standalone.findDuplicateEmails(): scans the Leads module and returns all email addresses that appear on more than one record.
  3. standalone.cleanupDuplicateGroup(emailValue): processes a single duplicate group. Fetches the records, elects a master, arbitrates field values, and calls the Merge Records API.

Step 1: Create the list view button

Go to Setup > Modules > Leads > Buttons and create a custom button:
  1. Label: Clean Up Duplicates
  2. Where to show: List View
  3. Action: Custom Function > cleanupAllDuplicates

Step 2: button.cleanupAllDuplicates()

This is the entry point, the function wired to the button. When clicked, it calls findDuplicateEmails() to get the list of emails that appear on more than one Lead record. It then loops through each email, calling cleanupDuplicateGroup() to process that group. At the end, it returns a summary map with the count of groups found, processed, succeeded, failed, and skipped.
The full function code is available here: cleanupAllDuplicates.

A typical result looks like this:
{
  "Status": "COMPLETED",
  "Duplicate_Groups_Found": 37,
  "Duplicate_Groups_Processed": 37,
  "Success_Groups": 37,
  "Failed_Groups": 0,
  "Skipped_Groups": 0
}

Step 3: standalone.findDuplicateEmails()

This function uses zoho.crm.getRecords method to fetch all Lead records, 200 per page, and builds an in-memory map of email <> count. It then returns the emails with a count greater than one.
The response from getRecords is a list of record maps. For each record, the function reads the Email field. If the email is already in the map, the count is incremented. If not, it is added with a count of 1. After all pages are processed, only emails with a count greater than 1 are collected into a list and returned as a pipe-separated string, for example:             john@acme.com|jane@corp.com|bob@example.com
The loop stops as soon as a page returns no records, so it only makes as many API calls as there are pages of data. For an org with 160 leads, this is two calls. The loop iterates through a maximum of 50 pages (50 × 200 = 10,000 records). If your org has more than 10,000 leads, records beyond page 50 are never scanned and those duplicates will be missed. See Adapting for your org size for how to handle this.

Converted leads are excluded from the count. A converted lead cannot be merged via the Leads endpoint and would cause a NOT_ALLOWED error in the merge step.
The full function code is available here: findDuplicateEmails

Step 4: standalone.cleanupDuplicateGroup(emailValue)

This function processes one email group from start to finish.

Fetching the records
A COQL query fetches all leads with the given email, ordered by Created_Time ASC:
select id, Created_Time, Company, Phone, Website, Email from Leads where Email = '<emailValue>' order by Created_Time asc limit 200
Ordering by created time matters for the tiebreak in master selection.

Electing the master
Each record is scored: +10 for Company, +10 for Phone, +10 for Website. The highest scorer becomes the master. On a tie, the oldest record wins. It appears first because of ORDER BY Created_Time ASC, and the loop only replaces the master when it finds a strictly higher score.

This scoring logic is specific to this implementation. You can change it based on what "most complete" means for your org. For example, weighting Annual_Revenue or Lead_Score, or simply always preferring the oldest or most recently modified record. See Customizing the master selection and arbitration logic for examples.

Field arbitration and building the merge payload
The Merge Records API retains the master's field values by default. To pull a specific field value from a child record instead, include that field in the child's _fields array in the request body.
The function first scans all records and tracks which child ID holds the best Phone and Website values when the master is missing them:

phoneSourceId   = "";
websiteSourceId = "";

if(ifnull(masterRecord.get("Phone"), "") == "")
{
    for each record in records
    {
        if(record.get("id") != masterId &&
           ifnull(record.get("Phone"), "") != "")
        {
            phoneSourceId = record.get("id");
            break;
        }
    }
}

// same for Website
When building each batch's payload, the function checks whether any child in that batch is one of those source records and adds _fields accordingly:

for each childId in batch
{
    childMap = Map();
    childMap.put("id", childId);

    fieldsToTake = List();

    if(childId == phoneSourceId)
    {
        fieldMap = Map();
        fieldMap.put("api_name", "Phone");
        fieldsToTake.add(fieldMap);
    }
    if(childId == websiteSourceId)
    {
        fieldMap = Map();
        fieldMap.put("api_name", "Website");
        fieldsToTake.add(fieldMap);
    }

    if(fieldsToTake.size() > 0) { childMap.put("_fields", fieldsToTake); }

    dataList.add(childMap);
}

This produces different payloads depending on the group. When no arbitration is needed (the master already has Phone and Website), the payload is:
{
    "merge": [{
        "data": [
            { "id": "child_id_1" },
            { "id": "child_id_2" }
        ]
    }]
}

When a child holds a value the master is missing:
{
    "merge": [{
        "data": [
            {
                "id": "child_id_1",
                "_fields": [
                    { "api_name": "Phone" }
                ]
            },
            { "id": "child_id_2" }
        ]
    }]
}

When Phone and Website come from two different children in the same batch:
{
    "merge": [{
        "data": [
            { "id": "child_id_1", "_fields": [{ "api_name": "Phone" }] },
            { "id": "child_id_2", "_fields": [{ "api_name": "Website" }] }
        ]
    }]
}

The Merge API applies those field values from the child to the master. Once the batch containing the source child is processed, the master has the arbitrated values. Subsequent batches need no _fields at all.

If phoneSourceId and websiteSourceId are both empty because the master already has both values, none of the _fields checks fire and every batch uses the plain payload. 

Batching
The Merge API accepts a maximum of two child records per call. Groups with more than two children are batched accordingly, each batch being a separate API call to the same master ID. If a batch fails, groupStatus is set to FAILED and the reason is recorded. The loop continues to process remaining batches. Groups with more than 100 records sharing the same email are skipped for manual review. In our experience, groups of this size are often associated with import or integration issues and may warrant additional validation before merging.

API calls made during a run

Before running this on a large dataset, it helps to have a rough sense of how many API calls will be made. Using the following variables:
R = total number of Lead records in the module
G = number of duplicate email groups found
D = average number of duplicate records per group
The approximate call count is:
      Scan calls   = ceil(R / 200) + 1
      COQL calls   = G
      Merge calls  = G × ceil((D − 1) / 2)

Total API calls ≈ ceil(R / 200) + 1 + G + G × ceil((D − 1) / 2) assuming each duplicate group contains approximately D records.

The scan phase reads 200 records per page and stops on the first empty page. Each duplicate group makes one COQL call to fetch its records, then one merge call per two children. The merge calls dominate for large groups. A group of 17 records, for example, needs 8 merge calls.

Validating with Zylker's data:

We tested the solution across three runs as Zylker's Leads module grew with each import.

Run

R (leads)

G (groups)

Avg. D

Scan calls

COQL calls

Merge calls

Total calls

Time

1

160

10

17

2

10

80

92

48s

2

201

37

~2.4

3

37

26

66

68s

3

521

160

~3.2

4

160

242

406

156s


All three runs were completed with zero failures. Execution time depends on API response latency and group sizes and will vary across runs. 

The full function code is available here: cleanupDuplicateGroup

Is this production ready?

This implementation works well for orgs with up to a few thousand leads and a manageable number of duplicate groups. For larger datasets, the following limitations apply.

Large datasets

The findDuplicateEmails() function caps at 50 pages (10,000 records). If your org exceeds this, records beyond page 50 are silently missed and those duplicate groups will never be processed. The button also runs synchronously, so a large number of duplicate groups will eventually hit the function timeout, terminating the run mid-way with no resume mechanism. See Adapting for your org size for how to address both of these.

Async merges

The Merge API returns SCHEDULED (with status: "success") when a child has more than 1,000 related records. The current code counts this as a success. The master is locked while the background job runs, so clicking the button again before it completes will attempt to re-merge the same children and return NOT_ALLOWED. For orgs where Leads have large activity histories, check explicitly for code == "SCHEDULED", stop processing that group, and poll the Get Merge Status API before retrying.

Locked or in-approval records

These return NOT_ALLOWED and appear in the Failed_Groups count. Unlock them manually and re-run.

Partial success within a group

If a group fails mid-way (for example, a batch succeeds but the next batch returns NOT_ALLOWED), the children already merged are not rolled back. They are permanently merged into the master. The remaining unmerged children still exist in CRM.
Re-running the button after resolving the underlying issue is safe for most failure types. The COQL query fetches only records that currently exist. Already-merged children are gone, so the function finds only the remaining unmerged children and processes them from there.
The exception is an async merge (SCHEDULED response). In that case the children are not yet deleted and the master is locked. Re-running before the async job completes will return NOT_ALLOWED for that group. Wait for the async merge to complete before re-running.

Run timing

Do not run during an active import. The COQL scan reads the module at that moment. If records are being created simultaneously, a group may be partially scanned and incompletely merged.

Adapting for your org size

Over 10,000 leads

Increase the page limit in the findDuplicateEmails() loop. The current ceiling of 50 pages covers 10,000 records. Extend the loop range to cover your actual record count. For example, 60 pages for 12,000 leads. Alternatively, move to the scheduled architecture described below, which processes records in batches and has no ceiling.

Too many groups (function times out)

Button-triggered functions run synchronously. As the number of duplicate groups grows, execution time may become a constraint. In such cases, consider moving to a scheduler-based architecture:
  1. Create a custom module called Dedup Queue with fields for the duplicate email address, processing status (Pending / Completed / Failed / Skipped), master record ID, duplicate count, merged count, and failure reason if any.
  2. Initiate the process with a function that scans for duplicate groups and writes one record per group to the Dedup Queue module with Status: Pending.
  3. A function scheduled every 15 minutes picks up a small batch of pending records, processes them, and updates each status to Completed, Failed, or Skipped.
  4. Once all records in the queue are resolved, send a summary email to the admin with the details.

Customizing the master selection and arbitration logic

The current scoring: +10 for Company, +10 for Phone, +10 for Website. Ties go to the oldest record.
To always prefer the oldest record: remove the scoring loop and use records.get(0) directly. The COQL query already orders by Created_Time ASC.
To prefer the most recently modified record: change order by Created_Time asc to order by Modified_Time desc in the COQL query and use records.get(0).
To weight a field higher, for example to favor records from a specific lead source:

if(ifnull(record.get("Lead_Source"), "") == "Cold Call") { score = score + 15; }

To arbitrate additional fields: the current code covers Phone and Website. To also carry over Annual_Revenue, add a source ID variable in the arbitration phase:

revenueSourceId = "";
if(ifnull(masterRecord.get("Annual_Revenue"), "") == "")
{
    for each record in records
    {
        if(record.get("id") != masterId &&
           ifnull(record.get("Annual_Revenue"), "") != "")
        {
            revenueSourceId = record.get("id");
            break;
        }
    }
}
Then add the field check inside the payload building loop:
if(childId == revenueSourceId)
{
    fieldMap = Map();
    fieldMap.put("api_name", "Annual_Revenue");
    fieldsToTake.add(fieldMap);
}

The Merge API will then carry Annual_Revenue from that child onto the master as part of the merge call itself.

Extending to other modules

Change the module name in the COQL query and the merge endpoint URL. For Accounts, use No_of_Employees, Industry, and Annual_Revenue as scoring fields. For custom modules, the match field does not have to be Email. Use whichever unique identifier your module has, such as a License Number or Order ID.

Preventing duplicates going forward

  1. Make Email a unique field: go to Setup > Modules > Leads > Fields, open the Email field, and enable Unique. Any record with a duplicate email, whether from the UI, an import, or an API call, will be rejected.
  2. Make Phone a unique field: the same option is available on Phone, useful if leads arrive without email addresses.
  3. Configure via API: the Duplicate Check Preferences API lets you enable and configure uniqueness checks programmatically, useful for org setup scripts.
  4. Use Upsert instead of Insert: for integrations creating leads via API, switch to the Upsert Records API with duplicate_check_fields set to Email. An existing record with that email gets updated instead of a new one being created.

Conclusion

In this Kaizen, we built a reusable deduplication framework using COQL, Functions, and the Merge Records API. Along the way, we looked at duplicate discovery, custom master-selection logic, field arbitration, merge execution, performance considerations, and approaches for adapting the solution to different data volumes.
The implementation presented here is intended for historical cleanup scenarios where duplicate groups can be processed within a single function execution. The actual volume that can be processed in one run depends on factors such as the number of duplicate groups, the size of those groups, API response times, and the number of merge operations required. For larger datasets, a queued and scheduled architecture is generally a better fit, allowing duplicate groups to be processed in smaller batches while providing better visibility into progress and error handling.

Have you implemented a different strategy for duplicate management in your CRM? Are there additional master-selection or field-arbitration rules that you'd like to see covered?Would you like to see a follow-up Kaizen covering a production-scale implementation using scheduled processing, queue management, progress tracking, and email notifications?

As always, we'd love to hear your feedback.  Let us know in the comments below.

Happy coding!

Download all the project files here: Project Files


    Access your files securely from anywhere

        Zoho FSM Video Tutorials


              All-in-one knowledge management and training platform for your employees and customers.






                                    Zoho Developer Community




                                                          • Desk Community Learning Series


                                                          • Digest


                                                          • Functions


                                                          • Meetups


                                                          • Kbase


                                                          • Resources


                                                          • Glossary


                                                          • Desk Marketplace


                                                          • MVP Corner


                                                          • Word of the Day


                                                          • Ask the Experts



                                                                    • Sticky Posts

                                                                    • Announcing the new SKILL.md for Zoho CRM and the updated OAS repository!

                                                                      We are introducing a new zoho-crm skill to make working with Zoho CRM Developer tools (like APIs, functions, widgets, client scripts, queries etc) easier and faster, with the help of AI in your preferred AI harness like Claude Code, Codex, Cursor, VSCode
                                                                    • Kaizen #256 - Build an Arrival Readiness Web Tab in Zoho CRM

                                                                      Hi everyone! Welcome back to the Kaizen series! In the post, we discuss a use case in hospitality industry: how an Arrival Readiness web tab widget can be used to let reception staff identify and resolve issues before arrival of guests. Use case In the
                                                                    • 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.
                                                                    • 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
                                                                    • 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


                                                                    Manage your brands on social media



                                                                          Zoho TeamInbox Resources



                                                                              Zoho CRM Plus Resources

                                                                                Zoho Books Resources


                                                                                  Zoho Billing Resources

                                                                                    Zoho Projects Resources


                                                                                      Zoho Sprints Resources


                                                                                        Qntrl Resources


                                                                                          Zoho Creator Resources



                                                                                              Zoho CRM Resources

                                                                                              • CRM Community Learning Series

                                                                                                CRM Community Learning Series


                                                                                              • Kaizen

                                                                                                Kaizen

                                                                                              • Functions

                                                                                                Functions

                                                                                              • Meetups

                                                                                                Meetups

                                                                                              • Kbase

                                                                                                Kbase

                                                                                              • Resources

                                                                                                Resources

                                                                                              • Digest

                                                                                                Digest

                                                                                              • CRM Marketplace

                                                                                                CRM Marketplace

                                                                                              • MVP Corner

                                                                                                MVP Corner









                                                                                                  Design. Discuss. Deliver.

                                                                                                  Create visually engaging stories with Zoho Show.

                                                                                                  Get Started Now


                                                                                                    Zoho Show Resources

                                                                                                      Zoho Writer

                                                                                                      Get Started. Write Away!

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

                                                                                                        Zoho CRM コンテンツ




                                                                                                          Nederlandse Hulpbronnen


                                                                                                              ご検討中の方






                                                                                                                        • Recent Topics

                                                                                                                        • Announcing the new SKILL.md for Zoho CRM and the updated OAS repository!

                                                                                                                          We are introducing a new zoho-crm skill to make working with Zoho CRM Developer tools (like APIs, functions, widgets, client scripts, queries etc) easier and faster, with the help of AI in your preferred AI harness like Claude Code, Codex, Cursor, VSCode
                                                                                                                        • Kaizen #258 - Getting Started with zoho-crm SKILL.md

                                                                                                                          Howdy tech wizards, Welcome to a fresh week of Kaizen. This week, we are taking a look at the zoho-crm SKILL.md, an Agent Skill designed to help AI coding agents work with Zoho CRM’s developer capabilities. What is zoho-crm SKILL.md? The zoho-crm skill
                                                                                                                        • Support Required for Integrating Zoho SalesIQ in Flutter Web

                                                                                                                          Hi Team, I have developed a Flutter application and I am currently using the salesiq_mobilisten: ^6.5.4 package. As per the package documentation ( https://pub.dev/packages/salesiq_mobilisten ), it supports only Android and iOS, and it is working fine
                                                                                                                        • Books is extremely slow again today !

                                                                                                                          Everything is running slowly even with 500mb connection speed
                                                                                                                        • MCP for Zoho Sign is not working

                                                                                                                          I'm using the mcp builder at mcp.zoho.com and selected Zoho Sign. I have created it 4 different times but my other mcp servers are working. However, mcp for zoho sign WILL NOT WORK. It throws a 400 error. I've checked everything. I tried with both Grok
                                                                                                                        • Automate Credit Card Surcharge

                                                                                                                          Is there a way to create an automation that will add a 3.0% credit card surcharge to a subscription whenever a customer pays via credit card?
                                                                                                                        • How to charge Convenience fee OR payment gateway charges to the end client who is paying the invoice?

                                                                                                                          Hello, I am creating this topic after having discussions with various sets of users and have understood that with people moving more and more to digital payments, it is important for the client to enable the "Convenience fee" kind of scenario. I have
                                                                                                                        • How to add a fee based on payment method

                                                                                                                          I currently accept both ACH payments and credit card. I want to add a 3% fee to a number of my subscription plans if the customer chooses to use a credit card (and not ACH/checking). How do I do this? Is there an in-built feature, or would i have to create
                                                                                                                        • Automating CRM backup storage?

                                                                                                                          Hi there, We've recently set up automatic backups for our Zoho CRM account. We were hoping that the backup functionality would not require any manual work on our end, but it seems that we are always required to download the backups ourselves, store them,
                                                                                                                        • Zoho Inventory - Profit Margin Feature - Allow Users to Set Default Cost Price Calculation Method

                                                                                                                          Hi Zoho Inventory Team, I'm working with an automotive parts distributor using Zoho Inventory. They have expressed frustration about having to change the Cost Price Method on every line item they add from the defult "Inventory Valuation Method" to "Item
                                                                                                                        • OpenAI Is Moving to the Responses API: Here's What It Means for SalesIQ

                                                                                                                          OpenAI has deprecated its Assistants API and is moving to the Responses API. If you're using OpenAI Assistants with SalesIQ, you may be wondering if you need to make any changes to your existing setup. You don't. SalesIQ has already taken care of the
                                                                                                                        • Deprecation Notice: OpenAI Assistants API will be shut down on August 26, 2026

                                                                                                                          I recieved this email from openAI what does it means for us that are using the integration and what should we do? Earlier this year, we shared our plan to deprecate the Assistants API once the Responses API reached feature parity. With the launch of Conversations,
                                                                                                                        • Payment for product renewal

                                                                                                                          Good morning, I am requesting your kind assistance to renew my subscription because when I try to make the payment I get this way
                                                                                                                        • All new Address Field in Zoho CRM: maintain structured and accurate address inputs

                                                                                                                          Availability Update: 29 September 2025: It's currently available for all new sign-ups and for existing Zoho CRM orgs which are in the Professional edition exclusively for IN DC users. 2 March 2026: Available to users in all DCs except US and EU DC. 24
                                                                                                                        • API - Available Stock Definitions

                                                                                                                          Okay, Zoho team... your copywriters fell down on the job for this one :) I think these warrant a bit more explanation as to what they include and what they don't.
                                                                                                                        • Feature Request: Add Sort by Cell Color and Text Color functionality

                                                                                                                          Hello Zoho Sheet Development Team, I am writing to suggest a feature enhancement for Zoho Sheet. Currently, the platform supports "Filter by Color," which is incredibly useful. However, there is no native option to "Sort by Color" (by cell fill or text
                                                                                                                        • Zoho Creator to Zoho Writer for prefilled documents...

                                                                                                                          In response to the question about connecting Zoho Creator to Zoho Writer for prefilled documents, I wanted to share a working implementation that demonstrates how to use the record_id parameter with the Zoho Writer Merge API. This allows Writer to automatically
                                                                                                                        • Calendar Year View?

                                                                                                                          Is there a way I can view the calendar in year view? Maybe create a page with a view like this?
                                                                                                                        • Razorpay + Zoho Billing + Zoho Books Integration

                                                                                                                          Please help us set up this integration.
                                                                                                                        • Proyecto SII

                                                                                                                          Buenas tardes amigos de zoho. en mi empresa vamos a implementar el proyecto de emisión de facturas SII pero para poder hacerlo hay que subir un xml, estoy intentando automatizar este proceso pero no se como convertir la factura que retorna books a xml
                                                                                                                        • Automate Workflows at the Subform Level

                                                                                                                          Hello, Enterprise Support Community! We are excited to introduce an enhancement to Workflow Rules that gives you more control over automation within your records. Previously, Workflow Rules could only be configured at the module level, which meant changes
                                                                                                                        • Custom module - change from autonumber to name

                                                                                                                          I fear I know the answer to this already, but thought I'd ask the question. I created a custom module and instead of having a name as being the primary field, I changed it to an auto-number. I didn't realise that all searches would only show this reference.
                                                                                                                        • What is wrong with this sendmail message?

                                                                                                                          I keep getting improper statement errors on the message, but I cannot see a problem. Also, if the message is much longer the whole message turns black instead of being coloured yellow, red and blue. client = Clients[ID == input.Client_Lookup]; sendmail
                                                                                                                        • sales IQ issue on website

                                                                                                                          i integrated the zoho sales IQ code on the website but it is comming in distroted form i am sharing the screenshot below the website is bulit in wix platform
                                                                                                                        • Zoho Creator - Install app from Gallery takes too long

                                                                                                                          I'm trying to install the 'Volunteer Portal' from the app Gallery of Zoho Creator. It has been busy installing the app for over 2 hours now. It might be okay, but how long is something like that supposed to take? I never installed anything from that Gallery
                                                                                                                        • Automate customer follow-ups with Sequences in Bigin

                                                                                                                          Greetings, We hope you're all doing well! We're happy to announce a new feature that we've added to Bigin. Following up with every lead at the right time can be challenging, especially when your team is managing multiple conversations across emails, calls,
                                                                                                                        • How can I load a network into the cliq desktop app?

                                                                                                                          I have both the standard cliq log in for my org and I am part of a cliq network. In the browser I can choose which I log in to. However, in teh desktop app if I log in it will alwasy load my org's cliq. Can I switch this to the network I have create
                                                                                                                        • 4.7.500 Server busy. Please try again later from [136.143.188.52]. (S77719) [SJ1PEPF00001CE2.namprd05.prod.outlook.com 2026-09-04T11:42:24.261Z 08DF0918255760D6]

                                                                                                                          4.7.500 Server busy. Please try again later from [136.143.188.52]. (S77719) [SJ1PEPF00001CE2.namprd05.prod.outlook.com 2026-09-04T11:42:24.261Z 08DF0918255760D6]
                                                                                                                        • Set Up Google Tag Manager for Your Zoho Recruit Career Site

                                                                                                                          Understanding how candidates interact with your career site can help you improve their experience and make better decisions about your recruitment process. With the new Google Tag Manager (GTM) integration in Zoho Recruit, you can connect your career
                                                                                                                        • Gmail users think they've replied to invite when they havent.

                                                                                                                          Hi, I think there's an issue when inviting gmail users to a zoho calendar event. Basically, when an invite from zoho calendar is received by a gmail user, gmail has this functionality where it will render "yes/no/maybe" buttons that, when clicked, they
                                                                                                                        • Translated country names in Address field not sorted alphabetically

                                                                                                                          Hello. I have a form with an address field that includes the country dropdown. The primary form language is English (as is the Zoho Forms account language). The form has been translated into German from the form's Settings > Translation functionality.
                                                                                                                        • Zoho Commerce Microstore to bypass customer portal on spesific items

                                                                                                                          Hi everyone, I’m currently testing the Microstore feature in Zoho Commerce and trying to understand how it behaves with access restrictions. My goal is the following: Even though the customer portal is enabled (and the main store requires users to sign
                                                                                                                        • Calendar Attachments in iOS Mail App

                                                                                                                          It appears that viewing or accessing attachments to a calendar event is not possible in the iOS mail app. Is this correct? The ability to view calendar attachments in the mobile app is vital for me. Is this just a setting I'm missing somewhere?
                                                                                                                        • Zoho Desk API modifiedTimeRange returns HTTP 500 around 2026-03-08T02:00:00.000Z

                                                                                                                          Hello Zoho Support Team, We are experiencing a reproducible HTTP 500 Internal Server Error when querying the Zoho Desk API search endpoint with a specific modifiedTimeRange boundary. ### API Endpoint GET /api/v1/tickets/search ### Reproduction Steps &
                                                                                                                        • Grey border on inserted Sheet on Write document

                                                                                                                          When inserting a Sheet on a Write document, it show an ugly gray border. How to get rid of it?
                                                                                                                        • Send workflow alerts as a single mass email to all recipients

                                                                                                                          Managing workflow notifications becomes easier when everyone needs visibility into who received an alert. With this enhancement, workflow email alerts can now be sent as a single email to all recipients, giving recipients visibility into the other users
                                                                                                                        • Kaizen #253 : Custom Validation for Blueprint to Enforce Mandatory File Uploads and File Extension Compliance Using Client Script

                                                                                                                          Welcome to another exciting Kaizen post on Client Script! Have you ever wanted more control over what gets uploaded to a File or Image field in Zoho CRM, like restricting file types, validating file names, or showing a custom error before an inappropriate
                                                                                                                        • WORK DRIVE CUSTOMIZATION

                                                                                                                          WORK DRIVE CUSTOMIZATION Create folder for every Case by “Contact Name “in Work Drive under Associate Deals Folder Directory: User Work Drive Accounts: Route Directory Associate Cases Case Name, Case Number Client Upload- Shared with contact (for collaboration)
                                                                                                                        • How do I migrate from Office 365 to Zoho Mail?

                                                                                                                          Check out Advik Email Migration Wizard, this software is specially developed to move mailboxes from Office 365 to Zoho Webmail. In addition you can migrate from Gmail, Yahoo, Rediffmail and 80+ webmail servers to ZOHO MAIL. Isn't it amazing? This is an all in one email migration solution. Steps to export emails from Office 365 to Zoho Webmail are as follows; Run Advik Email Migration Tool in your system. Select Office 365 as source and enter its login credentials. Select mailbox folders and choose
                                                                                                                        • 【続々公開】Zoholics Japan 2026 セッション情報を更新しました!

                                                                                                                          ユーザーの皆さま、こんにちは! Zoholics Japan 2026のセッション情報を続々と公開しています! 今年は3つのトラックで、Zohoの最新情報やAI活用、製品アップデート、 活用事例など、多彩なセッションをお届けします。 現在公開中のセッション(一部) ・Zoho CRM 製品アップデート ・Zoho CRM Plus 製品アップデート ・Zoho Community セッション ・Zoho Desk セッション ・中堅・成長企業の人事DX ~AI時代に何から始めるべきか?~ ・Zoho
                                                                                                                        • Next Page