{"id":2279,"date":"2026-06-16T10:00:00","date_gmt":"2026-06-16T10:00:00","guid":{"rendered":"https:\/\/aaxonix.com\/resources\/?p=2279"},"modified":"2026-04-11T18:45:43","modified_gmt":"2026-04-11T18:45:43","slug":"zoho-crm-clevertap-integration-india","status":"publish","type":"post","link":"https:\/\/aaxonix.com\/resources\/zoho-crm-clevertap-integration-india\/","title":{"rendered":"Zoho CRM + CleverTap: Sync CRM Data for Indian Mobile App Engagement"},"content":{"rendered":"<style>\n.aax-post{font-family:'Poppins',sans-serif;color:#1a2332;max-width:820px;margin:0 auto;line-height:1.75}\n.aax-post h2{font-size:1.55rem;font-weight:600;margin:2.5rem 0 .9rem;color:#0a1628}\n.aax-post h3{font-size:1.15rem;font-weight:600;margin:1.8rem 0 .6rem;color:#1a2332}\n.aax-post p{margin:0 0 1.1rem}\n.aax-post ul,.aax-post ol{margin:0 0 1.1rem;padding-left:1.5rem}\n.aax-post li{margin-bottom:.45rem}\n.aax-post table{width:100%;border-collapse:collapse;margin:1.5rem 0;font-size:.93rem}\n.aax-post th{background:#0a1628;color:#fff;padding:.6rem 1rem;text-align:left}\n.aax-post td{padding:.55rem 1rem;border-bottom:1px solid #e8edf4}\n.aax-post tr:nth-child(even) td{background:#f5f7fb}\n.aax-post .faq-section{background:#f5f7fb;border-radius:10px;padding:1.8rem 2rem;margin:2.5rem 0}\n.aax-post .faq-item{margin-bottom:1.2rem;border-bottom:1px solid #e0e6ef;padding-bottom:1.2rem}\n.aax-post .faq-item:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}\n.aax-post .faq-question{font-weight:600;color:#0a1628;margin-bottom:.5rem}\n.aax-post .faq-answer{color:#3a4a5c;line-height:1.65}\n.aax-post .aax-cta{background:linear-gradient(135deg,#0a1628 0%,#1a3a5c 100%);border-radius:12px;padding:1.8rem 2rem;margin:2.5rem 0;text-align:center}\n.aax-post .aax-cta p{color:#e8edf4;margin:0 0 1.2rem;font-size:1.05rem}\n.aax-post .aax-cta a{display:inline-block;background:#fff;color:#0a1628;font-weight:600;padding:.65rem 1.6rem;border-radius:6px;text-decoration:none;font-size:.95rem}\n<\/style>\n<div class=\"sp-toc-wrap\"><nav class=\"sp-blog-toc\" id=\"spBlogToc\" style=\"display:none\">\n  <h4><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\"\/><line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\"\/><line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\"\/><line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\"\/><line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\"\/><line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\"\/><\/svg> On this page<\/h4>\n  <ol class=\"sp-toc-list\" id=\"spTocList\"><\/ol>\n<\/nav><\/div>\n<div class=\"aax-post\">\n\n<p>India&#8217;s mobile-first economy has created a unique challenge for growth teams: your best user data lives in Zoho CRM, but the tools that actually reach users on their phones are platforms like CleverTap. When these two systems operate in isolation, you end up sending push notifications to users who already converted, missing lifecycle triggers from CRM deal activity, and building segments that are weeks out of date.<\/p>\n\n<p>A properly configured Zoho CRM and CleverTap integration closes that gap. CRM profile changes push to CleverTap within seconds. Deal stage transitions become CleverTap events that trigger campaigns automatically. And your mobile engagement becomes genuinely lifecycle-aware rather than just behaviour-based.<\/p>\n\n<p>This guide covers the full integration architecture: profile sync via CleverTap&#8217;s upload API, webhook-based event triggers from Zoho CRM workflows, identity mapping for Indian mobile users, handling duplicate profiles, and building lifecycle campaigns that respond to CRM activity in real time. Examples throughout draw from Indian fintech apps, edtech platforms, and D2C brands.<\/p>\n\n<h2>Why Zoho CRM and CleverTap Need to Talk<\/h2>\n\n<p>CleverTap is built around behavioural data: what users do inside your app. It tracks sessions, events, funnels, and cohorts with precision. But it has no visibility into what happens outside the app: sales calls, support tickets, offline purchases, loan applications, or subscription upgrades handled by your sales team.<\/p>\n\n<p>Zoho CRM holds exactly that context. A fintech app&#8217;s sales team closes an SIP upgrade for a user. An edtech platform&#8217;s counsellor converts a free-trial lead to a paid batch. A D2C brand&#8217;s operations team marks a high-value customer as VIP after a bulk order. None of this appears in CleverTap unless you pipe it there.<\/p>\n\n<p>The reverse is equally valuable. When a user triggers a significant in-app event such as completing KYC, finishing a course module, or making a third purchase, that signal should update the CRM Contact record so sales and support teams see it. Without integration, these two data streams never meet.<\/p>\n\n<p>The integration unlocks several high-value use cases for Indian mobile apps:<\/p>\n<ul>\n  <li>Trigger a CleverTap push notification the moment a Zoho CRM Deal is marked Won, prompting the user to complete onboarding.<\/li>\n  <li>Update a CleverTap user profile with CRM subscription tier so campaigns can exclude active subscribers from acquisition flows.<\/li>\n  <li>Fire a CleverTap in-app message when a CRM Contact&#8217;s loan approval status changes, surfacing next steps inside the app.<\/li>\n  <li>Suppress push notifications to users whose CRM records show a pending support escalation.<\/li>\n<\/ul>\n\n<p>For Indian apps in particular, where WhatsApp, SMS, and push channels compete for attention, having CRM context in CleverTap helps you choose the right channel at the right moment rather than blasting all channels simultaneously.<\/p>\n\n<h2>Integration Architecture: Three Data Flows<\/h2>\n\n<p>A complete Zoho CRM and CleverTap integration covers three directional data flows. Understanding which flow handles which use case prevents overengineering and clarifies where to build each component.<\/p>\n\n<h3>Flow 1: CRM Profile to CleverTap User Profile<\/h3>\n<p>This flow keeps CleverTap user profiles in sync with CRM Contact and Lead records. When a Contact is created or updated in Zoho CRM, a workflow triggers a Deluge function that calls CleverTap&#8217;s <code>\/1\/upload<\/code> endpoint with profile data. This is a one-way push: CRM is the source of truth for user attributes like subscription plan, city, account manager, and segment.<\/p>\n\n<h3>Flow 2: CRM Events to CleverTap Events<\/h3>\n<p>This flow converts CRM activity into CleverTap events. A Deal moving from Proposal to Won, a Contact&#8217;s KYC status changing, or a support case being resolved becomes a CleverTap event with properties. Campaign builders can then use these events in journeys, segments, and triggers without any manual data export.<\/p>\n\n<h3>Flow 3: CleverTap Events to CRM Records<\/h3>\n<p>This reverse flow uses CleverTap&#8217;s webhook export feature to update CRM records when critical in-app events occur. App uninstalls, subscription cancellations, and purchase completions are examples of events that should update the Contact&#8217;s lifecycle stage or add activity notes in Zoho CRM. This flow is covered in more detail in the <a href=\"https:\/\/aaxonix.com\/resources\/zoho-crm-api-webhooks-india\/\" class=\"sp-content-link\">Zoho CRM webhooks<\/a> guide.<\/p>\n\n<h2>Setting Up CleverTap&#8217;s Profile Upload API<\/h2>\n\n<p>CleverTap exposes a REST API at <code>https:\/\/api.clevertap.com\/1\/upload<\/code> that accepts user profile data in JSON format. Before building the Zoho integration, verify your CleverTap account credentials: you need the Account ID and Passcode from the CleverTap dashboard under Settings &gt; Integration &gt; API Credentials.<\/p>\n\n<h3>Profile Upload Payload Structure<\/h3>\n\n<p>A profile upload request sends an array of user objects. Each object must include an <code>identity<\/code> field and a <code>profileData<\/code> object. For Indian mobile apps, use the user&#8217;s mobile number in E.164 format as the identity wherever possible since email registration rates are lower in India&#8217;s mobile-first market.<\/p>\n\n<pre><code>{\n  \"d\": [\n    {\n      \"identity\": \"+919876543210\",\n      \"type\": \"profile\",\n      \"profileData\": {\n        \"Name\": \"Rahul Sharma\",\n        \"Email\": \"rahul.sharma@email.com\",\n        \"Phone\": \"+919876543210\",\n        \"City\": \"Bengaluru\",\n        \"crm_lead_id\": \"8123456\",\n        \"crm_account_type\": \"Premium\",\n        \"crm_deal_stage\": \"Onboarding\",\n        \"subscription_plan\": \"Pro\",\n        \"subscription_value_inr\": 2999\n      }\n    }\n  ]\n}<\/code><\/pre>\n\n<p>The <code>identity<\/code> value is how CleverTap links this profile update to an existing app user. The CleverTap SDK must set the same identity value on first app launch (typically done when the user registers or logs in). If the identities do not match, CleverTap creates a new anonymous profile rather than updating the existing one.<\/p>\n\n<h3>Deluge Function for Profile Upload<\/h3>\n\n<p>In Zoho CRM, create a Deluge function that constructs and sends this payload. Attach it to a workflow triggered on Contact create or update.<\/p>\n\n<pre><code>\/\/ Zoho CRM Deluge: Push Contact profile to CleverTap\nct_account_id = \"YOUR_CT_ACCOUNT_ID\";\nct_passcode = \"YOUR_CT_PASSCODE\";\n\ncontact_phone = input.get(\"Mobile\");\ncontact_name = input.get(\"Full Name\");\ncontact_email = input.get(\"Email\");\ncontact_city = input.get(\"Mailing City\");\ncontact_id = input.get(\"id\");\nsubscription_plan = input.get(\"Subscription_Plan\");\n\nprofile_data = Map();\nprofile_data.put(\"Name\", contact_name);\nprofile_data.put(\"Email\", contact_email);\nprofile_data.put(\"Phone\", contact_phone);\nprofile_data.put(\"City\", contact_city);\nprofile_data.put(\"crm_contact_id\", contact_id.toString());\nprofile_data.put(\"subscription_plan\", subscription_plan);\n\nuser_obj = Map();\nuser_obj.put(\"identity\", contact_phone);\nuser_obj.put(\"type\", \"profile\");\nuser_obj.put(\"profileData\", profile_data);\n\npayload = Map();\npayload.put(\"d\", list(user_obj));\n\nheaders = Map();\nheaders.put(\"X-CleverTap-Account-Id\", ct_account_id);\nheaders.put(\"X-CleverTap-Passcode\", ct_passcode);\nheaders.put(\"Content-Type\", \"application\/json\");\n\nresponse = invokeurl\n[\n    url: \"https:\/\/api.clevertap.com\/1\/upload\"\n    type: POST\n    parameters: payload.toString()\n    headers: headers\n];\ninfo response;<\/code><\/pre>\n\n<p>This function runs every time a Contact record is modified in Zoho CRM. For bulk updates, CleverTap&#8217;s upload API accepts up to 100 user objects per request, so you can batch records if running initial historical syncs through a scheduled Deluge function.<\/p>\n\n<h2>Mapping Zoho CRM Deal Stages to CleverTap Events<\/h2>\n\n<p>Deal stage transitions carry rich lifecycle meaning. In a fintech app&#8217;s Zoho CRM, a Deal moving from Document Collection to Credit Assessment signals that a user is mid-way through loan application. That&#8217;s the right moment to trigger a CleverTap in-app message encouraging completion, not a generic re-engagement push.<\/p>\n\n<p>Configure a separate Zoho CRM workflow on the Deal module that fires when the Stage field changes. The Deluge function for this flow calls CleverTap&#8217;s event upload endpoint.<\/p>\n\n<h3>Event Upload Payload<\/h3>\n\n<pre><code>{\n  \"d\": [\n    {\n      \"identity\": \"+919876543210\",\n      \"type\": \"event\",\n      \"evtName\": \"Deal Stage Changed\",\n      \"evtData\": {\n        \"stage_name\": \"Credit Assessment\",\n        \"previous_stage\": \"Document Collection\",\n        \"deal_value_inr\": 250000,\n        \"product_category\": \"Personal Loan\",\n        \"deal_id\": \"9834512\",\n        \"account_manager\": \"Priya Nair\"\n      }\n    }\n  ]\n}<\/code><\/pre>\n\n<p>Once this event flows into CleverTap, campaign builders can create journeys that trigger specific messages based on <code>stage_name<\/code>. A user reaching Credit Assessment gets a reassurance message. A user reaching Disbursed gets an onboarding sequence. The trigger is CRM-sourced, but the delivery is fully automated through CleverTap&#8217;s journey builder.<\/p>\n\n<p>For edtech platforms, the equivalent events might be Counsellor Assigned, Demo Scheduled, Batch Enrolled, and EMI Activated. Each stage change in Zoho CRM fires an event to CleverTap, enabling stage-specific in-app content and push sequences without manual segment exports.<\/p>\n\n<p>This is the same lifecycle event model that powers effective <a href=\"https:\/\/aaxonix.com\/resources\/zoho-campaigns-shopify-integration\/\" class=\"sp-content-link\">lifecycle email campaigns<\/a>, applied to push and in-app channels instead.<\/p>\n\n<h2>User Identity Mapping for Indian Mobile Apps<\/h2>\n\n<p>Identity mapping is the most operationally critical part of this integration. If CleverTap cannot match an uploaded profile to an existing app user, the profile update creates a new anonymous record and your campaign targeting breaks.<\/p>\n\n<h3>Phone vs Email as Identity<\/h3>\n\n<p>In India, mobile-first apps typically have higher phone number registration rates than email. For apps where users log in with an OTP on their mobile number, phone in E.164 format is the most reliable identity field. For B2B SaaS apps and edtech platforms where users register with work or personal email, email is preferable.<\/p>\n\n<p>The rule is simple: use whichever field your app&#8217;s CleverTap SDK sets as identity at login. Check your iOS and Android SDK integration to confirm which field is passed to <code>CleverTap.setMultiValuesForKey(\"identity\", ...)<\/code>. Your Deluge function must use the same field.<\/p>\n\n<h3>Handling Missing or Malformed Phone Numbers<\/h3>\n\n<p>Zoho CRM Contact records often contain phone numbers without country codes, with spaces, or with local formatting like 098765 43210. Before using a phone number as a CleverTap identity, the Deluge function should normalise it.<\/p>\n\n<pre><code>\/\/ Normalise Indian phone number to E.164\nraw_phone = input.get(\"Mobile\");\nclean_phone = raw_phone.replaceAll(\" \", \"\").replaceAll(\"-\", \"\").replaceAll(\"(\", \"\").replaceAll(\")\", \"\");\nif (clean_phone.startsWith(\"0\")) {\n    clean_phone = \"+91\" + clean_phone.substring(1);\n} else if (!clean_phone.startsWith(\"+\")) {\n    clean_phone = \"+91\" + clean_phone;\n}\nidentity = clean_phone;<\/code><\/pre>\n\n<p>If neither a valid phone nor email is available on the CRM record, skip the CleverTap push and log the contact ID for manual review. Pushing records without a reliable identity creates orphaned profiles that pollute your CleverTap data.<\/p>\n\n<h3>Identity Merge for Returning Users<\/h3>\n\n<p>Indian apps with high uninstall and reinstall rates often end up with users having multiple device IDs in CleverTap. When a user reinstalls and logs in again, CleverTap should automatically merge the anonymous install profile with the identified profile if the SDK is configured correctly. Ensure your mobile developers have enabled the <code>onUserLogin<\/code> call in the CleverTap SDK during login, which triggers CleverTap&#8217;s internal identity resolution.<\/p>\n\n<p>On the CRM side, if you detect that a Contact has two CleverTap identities (for example, because they registered with both email and phone at different times), you can use CleverTap&#8217;s merge profiles API to consolidate them, passing the confirmed CRM phone as the canonical identity.<\/p>\n\n<h2>CRM Workflow to Push Notification Automation<\/h2>\n\n<p>One of the highest-value use cases for this integration is triggering push notifications directly from <a href=\"https:\/\/aaxonix.com\/resources\/zoho-crm-automation-guide\/\" class=\"sp-content-link\">Zoho CRM workflow automation<\/a>. Instead of scheduling broadcast campaigns or manually exporting segments, CRM events fire targeted notifications automatically.<\/p>\n\n<h3>Example: Loan Approval Notification for Fintech Apps<\/h3>\n\n<p>When a loan application Deal in Zoho CRM moves to the Approved stage, the workflow fires a Deluge function that pushes a CleverTap event. The CleverTap journey builder has a trigger configured on the <code>Deal Stage Changed<\/code> event where <code>stage_name = \"Approved\"<\/code>. Within seconds of the CRM update, the user receives a push notification: &#8220;Your loan of Rs 2,50,000 is approved. Open the app to complete disbursement.&#8221;<\/p>\n\n<p>The notification is personalised with deal value from the CleverTap event properties. No manual segment export, no overnight batch job, no risk of notifying users before their approval is confirmed in the CRM.<\/p>\n\n<h3>Example: Course Seat Confirmation for Edtech Apps<\/h3>\n\n<p>An edtech platform&#8217;s counsellor marks a Deal as Enrolled in Zoho CRM after collecting the first EMI. The workflow triggers a CleverTap event <code>Enrollment Confirmed<\/code> with properties including <code>course_name<\/code>, <code>batch_start_date<\/code>, and <code>mentor_name<\/code>. CleverTap sends a personalised in-app message on the user&#8217;s next app open, along with a push notification with the batch start date.<\/p>\n\n<p>This replaces a manual process where counsellors would inform the marketing team to send confirmation messages, a process that often had delays of hours or days.<\/p>\n\n<h3>Suppression: Avoiding Notifications During Active Support Cases<\/h3>\n\n<p>Equally important is using CRM data to suppress notifications. When a Contact in Zoho CRM has an open high-priority support ticket, the CRM workflow should push a profile update to CleverTap setting a custom property <code>has_open_escalation: true<\/code>. Campaign builders in CleverTap can then exclude users with this property from promotional and re-engagement campaigns until the ticket is resolved.<\/p>\n\n<p>When the support case closes, the CRM workflow updates the profile to <code>has_open_escalation: false<\/code>, and the user re-enters eligible audiences automatically.<\/p>\n\n<h2>Data Sync Frequency and Handling Duplicate Profiles<\/h2>\n\n<p>Running profile sync on every CRM record save is reliable but can generate a high volume of API calls for large databases. Plan your sync strategy based on your CleverTap plan&#8217;s API rate limits and the actual frequency of meaningful profile changes.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Sync Trigger<\/th>\n      <th>Recommended Approach<\/th>\n      <th>CleverTap API Calls<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Contact created<\/td>\n      <td>Immediate workflow trigger<\/td>\n      <td>1 per new contact<\/td>\n    <\/tr>\n    <tr>\n      <td>Key field changed (plan, tier, city)<\/td>\n      <td>Conditional workflow: fire only when these fields change<\/td>\n      <td>Moderate<\/td>\n    <\/tr>\n    <tr>\n      <td>Any field changed<\/td>\n      <td>Avoid for large databases; use conditional logic<\/td>\n      <td>High<\/td>\n    <\/tr>\n    <tr>\n      <td>Deal stage changed<\/td>\n      <td>Immediate workflow trigger, send as event not profile<\/td>\n      <td>1 per stage change<\/td>\n    <\/tr>\n    <tr>\n      <td>Full database resync<\/td>\n      <td>Scheduled Deluge function, batch 100 records per call, run nightly<\/td>\n      <td>Total contacts \/ 100<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<p>For the initial historical sync when you first set up the integration, use a Zoho CRM scheduled function that queries all active Contacts in batches of 100 and posts each batch to CleverTap&#8217;s upload endpoint. Monitor the function&#8217;s execution log for failed batches and retry with exponential backoff.<\/p>\n\n<h3>Detecting and Resolving Duplicate Profiles<\/h3>\n\n<p>Duplicate CleverTap profiles occur when the same user is uploaded with different identity values at different times: once with phone, once with email, once as anonymous. Before pushing a profile, your Deluge function can call CleverTap&#8217;s profile lookup endpoint to check if a profile with that identity already exists.<\/p>\n\n<pre><code>\/\/ Check if CleverTap profile exists before upload\nlookup_url = \"https:\/\/api.clevertap.com\/1\/profiles.json?email=\" + contact_email;\nheaders = Map();\nheaders.put(\"X-CleverTap-Account-Id\", ct_account_id);\nheaders.put(\"X-CleverTap-Passcode\", ct_passcode);\n\nexisting = invokeurl\n[\n    url: lookup_url\n    type: GET\n    headers: headers\n];\n\nif (existing.get(\"status\") == \"success\" && existing.get(\"count\") > 0) {\n    \/\/ Profile exists: send update only\n    \/\/ Use existing identity from the response\n    existing_identity = existing.get(\"records\").get(0).get(\"identity\");\n    user_obj.put(\"identity\", existing_identity);\n}<\/code><\/pre>\n\n<p>For merging already-duplicated profiles, CleverTap&#8217;s merge API requires an Enterprise plan feature. As a practical alternative, ensure all new uploads consistently use the same identity field (phone number) to prevent new duplicates from forming, and address existing duplicates through CleverTap&#8217;s dashboard merge tool.<\/p>\n\n<p>Connecting CRM data to <a href=\"https:\/\/aaxonix.com\/resources\/zoho-marketing-automation-facebook-ads-integration\/\" class=\"sp-content-link\">mobile marketing automation<\/a> platforms like CleverTap requires the same identity discipline that governs Facebook Custom Audience matching: the quality of your outcomes depends entirely on how reliably you can match records across systems.<\/p>\n\n<h2>Building Lifecycle Campaigns with CRM-Sourced Segments<\/h2>\n\n<p>With CRM profile properties flowing into CleverTap, your segment builder gains access to a much richer set of attributes than behavioural data alone provides. You can now build segments that combine what users did in the app with what they are in the CRM.<\/p>\n\n<h3>Segment Examples for Indian Apps<\/h3>\n\n<p><strong>High-intent inactive fintech users:<\/strong> CRM property <code>crm_deal_stage = \"Document Submitted\"<\/code> AND CleverTap event <code>App Session<\/code> not done in the last 7 days. These users have expressed strong intent (they submitted documents) but have gone cold. A targeted push with a specific CTA (&#8220;Your application is waiting&#8221;) outperforms a generic re-engagement broadcast.<\/p>\n\n<p><strong>D2C repeat purchase candidates:<\/strong> CRM property <code>crm_account_type = \"VIP\"<\/code> AND CleverTap event <code>Product Viewed<\/code> done in the last 3 days but <code>Order Placed<\/code> not done in the last 3 days. VIP customers browsing but not converting get a personalised in-app nudge with a limited-time offer or a free shipping prompt.<\/p>\n\n<p><strong>Edtech upsell segment:<\/strong> CRM property <code>subscription_plan = \"Basic\"<\/code> AND CleverTap event <code>Course Completed<\/code> done at least once. Users who finished a course on the basic plan and whose CRM record shows no sales activity in the last 14 days are strong upsell candidates. A CleverTap journey sends an in-app message with a batch upgrade offer, followed by a push notification 48 hours later if there is no conversion.<\/p>\n\n<h3>Journey Architecture for CRM-Triggered Campaigns<\/h3>\n\n<p>The most reliable journey architecture for CRM-triggered campaigns uses CleverTap&#8217;s API-triggered campaign feature rather than behavioural event triggers. Instead of waiting for CleverTap to detect an event, the Zoho CRM Deluge function directly calls CleverTap&#8217;s campaign trigger API, specifying the campaign ID and the user identity.<\/p>\n\n<p>This approach has lower latency (the notification fires within seconds of the CRM action) and is more reliable for low-frequency, high-stakes events like loan approvals or order confirmations where timing matters. For <a href=\"https:\/\/aaxonix.com\/resources\/zoho-salesiq-chatgpt-integration-chatbot\/\" class=\"sp-content-link\">AI-powered engagement<\/a> flows that respond to intent signals, the event-based journey model works well because latency is less critical.<\/p>\n\n<h2>Practical Setup Checklist<\/h2>\n\n<p>Use this checklist when deploying the integration for an Indian mobile app:<\/p>\n\n<ul>\n  <li>Confirm CleverTap Account ID and Passcode from Settings &gt; Integration.<\/li>\n  <li>Verify which field (phone or email) your mobile SDK uses as identity at login.<\/li>\n  <li>Create a custom Zoho CRM field <code>CleverTap Identity<\/code> on the Contact module to store the confirmed identity value for debugging.<\/li>\n  <li>Build the Deluge profile upload function and test with a single Contact record before attaching to the workflow.<\/li>\n  <li>Set up the Deal stage change workflow and verify that CleverTap events appear in the Event Explorer within 60 seconds of a stage update.<\/li>\n  <li>Configure phone number normalisation logic for Indian numbers, covering 10-digit numbers, numbers with +91, and numbers with leading 0.<\/li>\n  <li>Run the initial historical sync in a test environment with 10 records before executing against your full Contact database.<\/li>\n  <li>Set up error logging in the Deluge function: write failed API calls to a Zoho CRM custom module or a Zoho Cliq channel for visibility.<\/li>\n  <li>Test profile merge behaviour by uploading the same identity twice with different profile data and confirming CleverTap shows the updated values rather than creating a duplicate.<\/li>\n  <li>Validate that CleverTap campaign suppression logic correctly excludes users with <code>has_open_escalation: true<\/code> before going live.<\/li>\n<\/ul>\n\n<p>For a full overview of all available options, explore our <a href=\"https:\/\/aaxonix.com\/resources\/zoho-integrations-complete-guide\/\" class=\"sp-content-link\">complete guide to Zoho integrations<\/a>.<\/p>\n<div class=\"faq-section\">\n  <h2>Frequently Asked Questions<\/h2>\n\n  <div class=\"faq-item\">\n    <div class=\"faq-question\">Can Zoho CRM push user profile data to CleverTap in real time?<\/div>\n    <div class=\"faq-answer\">Yes. Using Zoho CRM workflows, you can trigger a Deluge function whenever a Contact or Lead record is created or updated. The function calls CleverTap&#8217;s \/1\/upload endpoint with the profile data. This updates or creates the user profile in CleverTap within seconds of the CRM record change, making it effectively real time for most use cases.<\/div>\n  <\/div>\n\n  <div class=\"faq-item\">\n    <div class=\"faq-question\">How do I map Zoho CRM deal stages to CleverTap events?<\/div>\n    <div class=\"faq-answer\">Configure a Zoho CRM workflow that fires when a Deal&#8217;s Stage field changes. The associated Deluge function calls CleverTap&#8217;s event upload endpoint, sending an event named &#8220;Deal Stage Changed&#8221; with properties like stage_name, deal_value_inr, and product_category. CleverTap can then trigger campaigns, journeys, or segments based on these events without any manual data export.<\/div>\n  <\/div>\n\n  <div class=\"faq-item\">\n    <div class=\"faq-question\">What is the CleverTap identity field and how does it relate to CRM records?<\/div>\n    <div class=\"faq-answer\">CleverTap uses &#8220;identity&#8221; as its unique user identifier. For Indian mobile apps, map this to the mobile number stored in Zoho CRM, formatted in E.164 (e.g., +919876543210). This must match the identity your mobile SDK sets at user login. If the identities do not match, CleverTap creates a new anonymous profile instead of updating the existing user, breaking campaign targeting.<\/div>\n  <\/div>\n\n  <div class=\"faq-item\">\n    <div class=\"faq-question\">Can CleverTap events update Zoho CRM records?<\/div>\n    <div class=\"faq-answer\">Yes. CleverTap&#8217;s webhook export feature (available on Growth and Enterprise plans) fires a webhook when specified events occur, such as App Uninstall or Subscription Cancelled. Configure this webhook to call a Zoho CRM endpoint or Zoho Flow trigger that updates the matching Contact&#8217;s lifecycle stage or adds an activity note, keeping your sales team informed of critical user actions.<\/div>\n  <\/div>\n\n  <div class=\"faq-item\">\n    <div class=\"faq-question\">How do I handle duplicate profiles between Zoho CRM and CleverTap?<\/div>\n    <div class=\"faq-answer\">Before uploading, your Deluge function can call CleverTap&#8217;s profile lookup endpoint to check if a profile with that identity already exists. If it does, send an update using the same identity rather than creating a new one. For merging existing duplicate CleverTap profiles, CleverTap&#8217;s identity merge API (Enterprise plan) consolidates records using the confirmed CRM phone number or email as the canonical identity. The best prevention is consistent identity field usage across all upload functions from day one.<\/div>\n  <\/div>\n<\/div>\n\n<div class=\"aax-cta\">\n  <p>Building a CRM + CleverTap stack for your Indian mobile app? Aaxonix helps product and growth teams connect their tech stack.<\/p>\n  <a href=\"https:\/\/aaxonix.com\/contact\/\">Talk to the Aaxonix Team<\/a>\n<\/div>\n\n<\/div>","protected":false},"excerpt":{"rendered":"<p>On this page India&#8217;s mobile-first economy has created a unique challenge for growth teams: your best user data lives in Zoho CRM,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[621,488,7,622,623,10],"class_list":["post-2279","post","type-post","status-publish","format-standard","hentry","category-blog","tag-clevertap","tag-crm-integration","tag-india","tag-mobile-engagement","tag-push-notifications","tag-zoho-crm"],"_links":{"self":[{"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/posts\/2279","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/comments?post=2279"}],"version-history":[{"count":2,"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/posts\/2279\/revisions"}],"predecessor-version":[{"id":2676,"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/posts\/2279\/revisions\/2676"}],"wp:attachment":[{"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/media?parent=2279"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/categories?post=2279"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aaxonix.com\/resources\/wp-json\/wp\/v2\/tags?post=2279"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}