> ## Documentation Index
> Fetch the complete documentation index at: /help/llms.txt
> Use this file to discover all available pages before exploring further.

# Zoho CRM

> Connect Zoho CRM and Kerux through Make: new Zoho leads start a LinkedIn campaign, and replies update the Zoho lead.

> [!NOTE]
>
> **Pro plan.** Zoho CRM works through trigger URLs and HTTP steps, which are part of Pro and Agency (and the free trial). Anything you already have keeps working on every plan. See [Plans and billing](/help/account/billing.md).

Zoho CRM's API only accepts OAuth tokens that expire after an hour ([Zoho's token docs](https://www.zoho.com/crm/developer/docs/api/v8/token-validity.html)), and Kerux connections hold a fixed key. So Make (or Zapier, or n8n) sits in between and handles Zoho's sign-in.

> [!NOTE]
>
> **How it connects:** through Make, with Make's Zoho CRM app, HTTP app and Webhooks app. Module names below are Make's; check them in your Make account, as Make renames modules now and then.

## 1. New Zoho leads start a LinkedIn campaign

**1. Keep the LinkedIn profile in Zoho**

Kerux needs each person's LinkedIn URL. Add a LinkedIn URL field to Zoho's Leads module if you don't have one.

**2. Copy the Kerux trigger URL**

In Kerux, open the campaign, click **+ Add** on the **Trigger** half of the start box, choose **Incoming webhook (API)**, click **Add**, then **Copy link**.

**3. Build the scenario**

Trigger: **Zoho CRM > Watch records** (module Leads). Action: **HTTP > Make a request**, method POST, the trigger URL, body type Raw, content type JSON:

```json theme={null}
{
  "linkedin_url": "ZOHO_LINKEDIN_FIELD",
  "first_name": "ZOHO_FIRST_NAME",
  "last_name": "ZOHO_LAST_NAME",
  "email": "ZOHO_EMAIL",
  "company": "ZOHO_COMPANY",
  "custom": { "zoho_id": "ZOHO_RECORD_ID" }
}
```

Map the capitals from the Zoho module's output. Kerux answers `202` with `{ "data": { "enrolled": 1, "already_in": 0, "lead_ids": ["..."] } }`.

## 2. Replies update the Zoho lead

**1. Start a second scenario**

**Webhooks > Custom webhook**; copy its address.

**2. Send the contact from Kerux**

A contact who replies leaves the campaign (the **When the contact replies** box). In that box, add **Send to another campaign** and pick a short "Replied: to Zoho" campaign whose **Webhook / HTTP** step POSTs to the Make address:

**3. Update Zoho**

In Make: **Zoho CRM > Update a record** (module Leads) with the id from `zoho_id` (or **Search records** by email first), setting **Lead Status**.

```json theme={null}
{
  "method": "POST",
  "url": "https://hook.make.com/YOUR_WEBHOOK_ID",
  "bodyType": "json",
  "body": {
    "zoho_id": "{{contact.custom.zoho_id}}",
    "email": "{{email | optional}}",
    "status": "Contacted"
  }
}
```

Use the exact address Make shows (its host depends on your Make region).

## Test with one contact

Run the first scenario once with a test Zoho lead and check the person in the campaign. Then, in the follow-up campaign's **Builder**, click **Test** to open **Test on one contact** and check the update in Zoho.

## Common errors

> [accordion] 422 VALIDATION\_FAILED from Kerux
>
> The Zoho lead has no LinkedIn URL, so `linkedin_url` was empty. Add a filter in Make so only leads with one go through.

> [accordion] Make can't find the Zoho record
>
> `zoho_id` wasn't sent when the contact entered Kerux. Search by email instead.

Related: [Trigger URLs and forms](/help/developers/trigger-urls-and-forms.md), [Make](/help/integration-guides/make.md), [Salesforce](/help/integration-guides/salesforce.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.