Howdy, tech wizards!
This week’s Kaizen explores how Catalyst Solutions in the Zoho CRM Developer Hub help import large volumes of data into Zoho CRM while improving data quality and simplifying the migration process.
Catalyst Solutions provide a library of independent, ready-to-use backend solutions called
CodeLibs. The
CRM Bulk Data Processor CodeLib helps handle complex data operations on large datasets. Following are the key benefits:
- Highly Scalable: Processes large datasets efficiently, supporting up to 200,000 records per API call.
- Automation Made Simple: Automate complex tasks like segmentation, data cleansing and lead scoring with minimal effort.
- Effortless Integration: Comes with pre-configured Catalyst resources such as serverless functions and data stores that integrate directly with Zoho CRM.
Business Scenario
Zylker, a manufacturing company, migrated over 3 lakh Lead records into Zoho CRM from spreadsheets.
Post-migration, the Lead data showed the following inconsistencies and challenges:
- Phone number field did not include country codes, or contained incorrect country codes. This inconsistency made it difficult for sales teams to contact Leads reliably.
- Identifying potential Leads for follow-up required manual effort and marketing team has to run generic campaigns without lead segmentation.
Using workflows before record creation to fix phone numbers for this volume would result in 3 lakh individual workflow executions, which can slow imports and cause partial failures.
Solution Overview
Zylker can use the CRM Bulk Data Processor available in Catalyst Solutions to address these challenges at scale.
The solution works as follows:
- Lead records are fetched in bulk from Zoho CRM using the Bulk Read API.
- The fetched data is temporarily stored to evaluate the priority and quality of each record. Based on this evaluation, the records are also segmented accordingly.
- The Country field value is used to identify and append the correct country code to the phone number.
- The processed records are updated back into Zoho CRM using Bulk Write API.
All operations are executed using pre-configured Catalyst resources provided by the CodeLib. You can explore the
Bulk Data Flow in Catalyst help page to understand how each resource participates in the processing pipeline.
Prerequisites
Before you begin, ensure the following:
1. Log into your Zoho CRM and navigate to Setup > Customization > Modules and Fields > Leads.
Create the following custom Single Line fields to map existing record data in Zoho CRM.
- Last Activity Days
- Web Engagement Score
2. Create the following custom Single Line fields to store the calculated values during bulk processing:
- Lead Score Value
- Lead Segment
- Sales Priority
- Data Quality Status
3. Go to Setup > Developer Hub > Catalyst Solutions > Zoho CRM Bulk Data Processor.
4. Click Go to Catalyst and create a Catalyst account if required.

6. Create a new folder on your local system, which will act as a local project directory. Use the following command:
7. Navigate to the project folder in your terminal and execute the following command:
8. Follow the prompts to select and initialize your desired project from the Catalyst console.
When prompted to choose a feature, press Enter and proceed without choosing any feature.
9. Run the following command to install the CRM Bulk Data Processor CodeLib.
Step 1: Create a Cron Job
1. Open the Catalyst Console and navigate to the same project in which you have installed the CRM Bulk Data Processor CodeLib.
2. Go to Cloud Scale > Triggers > Cron and click Create Cron.
3. Fill in the following details:
- Provide a Name and Description for the cron job.
- Select Function and choose BulkJobScheduler from the dropdown in the Target Function field.
- Enter the following parameters and values:
MODULES -> Leads
FIELDS_TO_BE_PROCESSED -> Last_Name, Company, Mobile, Country, Designation, No_of_Employees, Web_Engagement_Score, Lead_Score_Value, Lead_Segment, Sales_Priority, Data_Quality_Status
Use GET Modules Metadata API and GET Fields Metadata API to get the API names of the required module and fields.
- Choose the Schedule Type as One Time for our use case.
Step 2: Configure Zoho CRM API Credentials
2. Generate a Grant Token with the following scopes:
- ZohoFiles.files.ALL
- ZohoCRM.bulk.ALL
- ZohoCRM.modules.ALL
- ZohoCRM.settings.ALL
- ZohoCRM.org.ALL
3. Follow the
OAuth Help Section for a step-by-step guide to generate Access and Refresh tokens for your Zoho CRM organization.
Store all the API credentials securely for later use.
4. To allow Catalyst to access Zoho CRM data, configure the stored API credentials as environment variables in the catalyst-config.json file within the BulkDataProcessor function.
These environment variables are used by
Catalyst Connectors to create access tokens for establishing secure connection between Zoho CRM and Catalyst.
Step 3: Add Business Logic
1. Go to com.processor.record.ZCRMRecordsProcessorImpl.java file of the BulkDataProcessor in the functions directory.
2. Override the ZCRMRecordsProcessor method with the business logic.
The complete code sample for this use case is available on
GitHub for reference.
Following is the major custom logic used here:
Phone Number Normalization:
This can be implemented in two stages, Country standardization and Phone Number formatting.
For country standardization, CountryStandardizerUtil maps different variations of the Country field in records to a single standardized country identifier. These variations may include,
- Country Names (India, Unites States, United Kingdom)
- Abbreviations (Ind, IN, USA, US, UK)
- Calling Codes (+91, +1, +44)
With this, we can ensure different interpretations of the same country are interpreted consistently during the process.
Once the country is standardized, Phone Numbers are formatted to E.164 format in the PhoneNormalizerUtil.
It removes all non-numeric characters and converts the Phone input to E.164 format with the respective country codes.
public class PhoneNormalizerUtil { private static final Pattern NON_DIGIT = Pattern.compile("[^0-9]"); public static Optional<String> normalizeToE164(String rawPhone, String countryCode) { if (rawPhone == null || rawPhone.trim().isEmpty()) { return Optional.empty(); } String digits = NON_DIGIT.matcher(rawPhone).replaceAll(""); if (rawPhone.startsWith("+") && digits.length() >= 10) { return Optional.of("+" + digits); } switch (countryCode) { case "IN": return normalizeIndia(digits); case "US": return normalizeUS(digits); case "UK": return normalizeUK(digits); default: return Optional.empty(); } } private static Optional<String> normalizeIndia(String digits) { if (digits.length() == 10) { return Optional.of("+91" + digits); } if (digits.startsWith("91") && digits.length() == 12) { return Optional.of("+" + digits); } return Optional.empty(); } private static Optional<String> normalizeUS(String digits) { if (digits.length() == 10) { return Optional.of("+1" + digits); } if (digits.startsWith("1") && digits.length() == 11) { return Optional.of("+" + digits); } return Optional.empty(); } private static Optional<String> normalizeUK(String digits) { if (digits.startsWith("44") && digits.length() == 12) { return Optional.of("+" + digits); } if (digits.length() == 10) { return Optional.of("+44" + digits); } return Optional.empty(); }
} |
Lead Priority and Segmentation
The lead priority is calculated using the Title, No of employees, Last Activity Days and Web Engagement Score fields in the record.
Each field value contributes a predefined number of points:
- If the job title indicates a senior role such as CEO, CTO, Director, or VP, 25 points are added.
- If the company size is 200 employees or more, 20 points are added.
- If the Lead has been active within the last 7 days, 15 points are added.
- If the web engagement score is 70 or higher, 10 points are added.
The sum of all applicable factors is returned as an integer and based on this score the lead's priority and segmentation is assigned as follows:
- High (Hot): score ≥ 70
- Medium (Warm): score ≥ 40
- Low (Cold): score < 40
public static int calculateLeadScore( String jobTitle, Integer companySize, Integer lastActivityDays, Integer webEngagementScore) { int score = 0; // Decision Maker if (jobTitle != null) { String title = jobTitle.toLowerCase(); if (title.contains("ceo") || title.contains("cto") || title.contains("director") || title.contains("vp")) { score += 25; } } // Company Size if (companySize != null && companySize >= 200) { score += 20; } // Recency if (lastActivityDays != null && lastActivityDays <= 7) { score += 15; } // Engagement if (webEngagementScore != null && webEngagementScore >= 70) { score += 10; } return score; } public static String deriveSegment(int score) { if (score >= 70) return "Hot"; if (score >= 40) return "Warm"; return "Cold"; } public static String derivePriority(String segment) { switch (segment) { case "Hot": return "High"; case "Warm": return "Medium"; default: return "Low"; } }
|
Lead Quality:
Lead quality is evaluated based on the validity of the Mobile and Country fields in the records.
- Clean: Both field values are valid.
- Critical: Both field values are invalid.
- Needs Review: Only one of the field values is invalid.

Write Back to Records:
The processed data is written back to Zoho CRM as follows:
- Mobile: Formatted phone numbers.
- Lead Score: Total score calculated from all applicable fields.
- Lead Segment: Segment derived from the lead score.
- Sales Priority: Priority assigned based on the lead segment.
- Data Quality Status: Overall quality of the Lead record.
if (normalizedMobile.isPresent()) { data.put("Mobile", normalizedMobile.get()); } data.put("Lead_Score", leadScore); data.put("Lead_Segment", leadSegment); data.put("Sales_Priority", salesPriority); data.put("Data_Quality_Status", dataQualityStatus); }
|
Step 4: Deploy to Development
You can find the complete code sample on
GitHub for reference.
Try it Out!
With the changes deployed to the Development environment, let us now test the solution.
We hope this Kaizen helps you import large volumes of data into Zoho CRM while improving data quality and lead intelligence using the CRM Bulk Data Processor.
Have questions or suggestions? Drop them in the comments or write to us at
support@zohocrm.com.
We will circle back to you next Friday with another interesting topic.
On to Better Building!
--------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------
Recent Topics
#9 Win the Job First
For many businesses, the first document that goes out isn't an invoice. It's a document that creates ample space to negotiate, discuss requirements, align expectations, and ultimately win the deal. The whole of the business world calls it a Quote or,
Add Video link to interview record
Hi Team, we are having team members consistently go to the interview record to find the link for their upcoming meeting and have been confused that they have not been able to find them. When the interview is created can you please upload the link to the
How Can AI Agents Improve E-commerce Operations Efficiency?
I’ve been thinking about this question recently: as e-commerce operations become more complex, can we use AI Agents to improve daily efficiency? Many e-commerce teams need to handle product management, order follow-up, inventory checks, customer replies,
Is it possible to create a meeting in Zoho Crm which automatically creates a Google Meet link?
We are using Google's own "Zoho CRM for Google" integration and also Zoho's "Google Apps Sync" tools, but none of them provide us with the ability to create a meeting in Zoho CRM that then adds a Google Meet link into the meeting. Is this something that
Export Zoho Books Invoice - PDF API
How to Download Zoho Books PDF Files Using Zoho Books API -------------------------------------------------------------------------------------- Hello everyone! If you are looking for a way to download Zoho Books PDF files using the Zoho Books API, you've
OAuth integration issues
I'm experiencing persistent OAuth errors when trying to connect Make with Zoho API. I've tried multiple approaches but keep encountering the following issues: First error: 'Invalid Redirect Uri - Redirect URI passed does not match with the one configured'
Marketing Automation/Campaigns confusion questions and integrations
I am pulling my hair out yet AGAIN due to the lack of true integration between zoho apps - Why can't we use Campaigns and Marketing Automation at the same time? if they are truely seperate apps, then we should be able to use both for what they were intended,
Tip #75- Exploring Technician Console: Power Options- 'Insider Insights'
Hello Zoho Assist Community! Welcome to the very first community post of June, and we are kicking things off with a feature that gives technicians complete control over a remote machine without ever leaving their session: Power Options. What are Power
Windows agent 2026_M07 release notes
Agent Version: 2026.4.15.0 Release date: 1 June, 2026 Issue fix: Streamlined overall process flow and fixed bugs that delayed or prevented proper functioning of Task Scheduler feature. Enhancements to Multi Monitor view under varying network load scenarios.
Show Categories Directly When Clicking the Knowledge Base Button in SalesIQ Chat Widget
Hi Zoho SalesIQ Team, I would like to submit a feature request regarding the behavior of the Knowledge Base button in the SalesIQ chat widget. Current Behavior: When a visitor clicks the Knowledge Base (KB) button in the chat widget, they are first taken
What is MCP and How Does It Connect to Zoho Invoice?
If you've ever wished you could just tell your invoicing software what to do, without clicking through menus, pulling up reports manually, or switching tabs every five minutes, that's exactly what the Zoho MCP server is built for. MCP stands for Model
Facebook won't connect
Good morning, Whilst I'm sure its something I've done wrong along the line I'm trying to connect a Facebook account to Zoho Social Upon entering the username and password the 'Connect Facebook' button appears to do some work then stops without any connection being established I've checked the business integrations on Facebook and Zoho is not appearing at all Can you help me with this at all? Kind Regards Daniel Evans Home Inventories
Empowered Custom Views: Cross-Module Criteria Now Supported in Zoho CRM
Hello everyone, We’re excited to introduce cross-module criteria support in custom views! Custom views provide personalized perspectives on your data and that you can save for future use. You can share these views with all users or specific individuals
How to publish Zoho form
I have created zoho form with various fields. I now want to publish the same and share the link so that I can start collecting response. Please guide me for the same.
Tabular View Report | Scale To Fit Screen
Please add the option to scale Tabular View reports to fit the screen. I constantly have to adjust the column size of Tabular View reports to fit various screen sizes and it just looks messy. You can see in the screenshot below there is a blank gap after
What's New in Zoho POS - May 2026
Hello everyone, Welcome to Zoho POS’s monthly update, where we share our latest feature updates, enhancements, events, and more. Let’s take a look at how May went. Introducing the new Settings page with enhanced search The Settings page has been revamped
Mapbox map embed in Zoho webpage
The mapbox map is not showing in Zoho webpage. the code was running fine other webpage.
DYK 6 - Task Assignment from the Workload Report
Did You Know tasks can be assigned from the Workload Report? As projects evolve, tasks pile up and distributing them equally among team members becomes a balancing act. Identifying over-allocated and underutilised members gets complicated when task assignment
Mise à jour de Zoho Books – France
Chers clients, Merci pour votre patience et votre soutien continu. Avec les évolutions réglementaires à venir en France nous introduisons de nouvelles fonctionnalités dans Zoho Books pour les clients français. Ces mises à jour ont été conçues pour répondre
Building extensions #3: Zoho Sprints developer platform features and capabilities
Hello all! We're thrilled to connect with you in another post in our Building extensions series. We've explored concepts in building, testing, publishing, and sharing extensions for Zoho Sprints. If you missed any of this, take a look at our other posts.
How do create a validation rule / function to check datetime field is within Business Hours?
I've got a field called Scheduled_Time. People keep accidently inputting 2am when they mean 2pm. Realistically this field is never going to be before 7am or after 9pm. I'd like to add validation rule to the field (which is a datetime field). Using the
Experience effortless record management in CRM For Everyone with the all-new Grid View!
Hello Everyone, Hope you are well! As part of our ongoing series of feature announcements for Zoho CRM For Everyone, we’re excited to bring you another type of module view : Grid View. In addition to Kanban view, List view, Canvas view, Chart view and
Schedule from AI with Zoho Bookings MCP Server
Greetings from the Zoho Bookings team! We’re excited to introduce the Zoho Bookings MCP (Model Context Protocol) Server integration, a powerful new way to bring AI-driven automation into your scheduling workflows. With MCP, you can connect Zoho Bookings
Zoho Projects > Zoho Analytics - where are 'Work Hours' ?
I'm trying to replicate the forecasting calculations and need to find 'Work Hours' as a key component. Such as: Planned Cost - The product of work hours and its cost per hour I've been able to track Work Hours to the Task screen and when you expand it
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
Free Webinar Alert! Cliq in Zoho Workplace: Collaborate and Communicate Smarter
Hello Zoho Community! Looking for a better way to keep your teams connected and conversations organized? We’ve got a webinar you won’t want to miss. Join our webinar on "Zoho Cliq in Zoho Workplace" and discover how smarter communication can improve collaboration
Upcoming webinar: Getting started with Zoho LandingPage
Building your first landing page? We’ll help you get started. A landing page is more than just a place to send your visitors—it’s where your campaigns generate leads, drive actions, and create meaningful customer interactions. Join our monthly Getting
Native QuickBooks integration for Zoho CRM: Connecting sales and finance
Greetings, I hope all of you are doing well. We're excited to announce Zoho CRM's integration with QuickBooks Web, which is designed to synchronize your CRM data with your QuickBooks accounting records and bridge the gap between sales and finance. This
Create Tasklist with Tasklist Template using API v3
In the old API, we could mention the parameter 'task_template_id' when creating a tasklist via API to apply a tasklist template: https://www.zoho.com/projects/help/rest-api/tasklists-api.html#create-tasklist In API v3 there does not seem to be a way to
Restoring deleted files
Hi I have been using zoho writer app personal account from last 7 months and made number of documents for educational purposes. I deleted the writer app by mistake and I lost all the documents.I reinstalled the app but the documents are not restored even
Unable to mass update a specific field
Hi there, I want to mass update a field on zoho crm but im not able to as it doesnt show up. procurement list is a lookup field
Introducing Databridge | Securely connect your private systems with Creator apps
Hello everyone, Enterprises today rely on a mix of privately hosted databases and cloud applications to run their everyday operations. But connecting these two worlds has always been a challenge - one that often forces teams to choose between accessibility
Folders for CRM Dashboards
Implement ability to create folders to store dashboards within. Example useful for case such as individual sales persons dashboards grouped by year into folders.
[Webinar] Solving business challenges: Customizing Writer for your business requirements
Hi Zoho Writer users, Every organization has unique branding, formatting standards, and workflow requirements. Yet most teams work with default settings, manually applying fonts, recreating templates, and adjusting preferences for every document—wasting
Latest updates to Zia in Office Integrator
Hello Zoho Office Integrator users! We’re pleased to share exciting updates to the proofing capabilities of Zia, our AI-driven writing assistant, in Office Integrator. With these updates, you can now get spell and grammar check in Brazilian Portuguese,
The latest enhancements to Bigin
Greetings, I hope all of you are doing well. We're happy to announce three recent enhancements we've made to Bigin. We'll go over each one in detail. Bigin integration with Zoho LandingPage You now have the ability to connect Bigin with Zoho LandingPage.
What’s New in Zoho Inventory — Latest Features, Integrations & Updates | December 2025
Zoho Inventory has evolved significantly over the past months, bringing you smarter, faster, and more connected tools to streamline your operations. Whether you’re managing multichannel sales, complex fulfillment workflows, or fast-moving stock, our newest
Best practice for tracking the sending of samples or catalogues
Hi, My company sells leather and fabric for interiors- sofas, chairs, curtains etc. Our clients are all interior designers, architects or furniture manufacturers. What is the best way to track what samples/catalogues we have sent? If the project is fairly certain, for example, for a specific hotel renovation, then we'll track this as an opportunity, as the project has a definite date, budget and is sure to happen (we may of course lose the project, but we want to bid for it). If the designer just
AIRPORT TRANSFER BOOKING SYSTHEM
Hi guys i just start using zoho creator to manage my transportation booking management company. I have built two booking forms, one that i'll embeded in the website and one for the registered companies. 1st problem: don't know how to auto fill corporate customers details from contacts list to the booking companies booking form . need help!!
Marketer's Space: Re-engage your Audience with WhatsApp Journeys
Hello Marketers, Welcome back to another post in Marketers' Space! We’re continuing our WhatsApp Journeys series, diving into strategies that ensure your marketing efforts don’t go unnoticed. So, you drafted an email with personalization, a compelling
Next Page