# Zoho CRM

> Manage leads, contacts, accounts, deals, tasks and notes in Zoho CRM, convert leads, and query your CRM data with COQL.

App · CRM Systems · 20 actions. Web page: https://docs.lodol.com/docs/integrations/zoho-crm

## Actions

### Add Zoho CRM note

Attach a note to a lead, contact, account or deal. The note appears in that record's Notes timeline.

**Inputs**

- Record type (`module`, text, required): Module of the record to attach the note to. One of: `Leads`, `Contacts`, `Accounts`, `Deals`.
- Record ID (`record_id`, text, required): Id of the record the note belongs to.
- Note (`note_content`, text, required): The note text.
- Note title (`note_title`, text): Optional title shown above the note.

**Outputs**

- `code` (text)
- `details` (object)
- `id` (text)
- `message` (text)

**Example output**

```json
{
  "code": "SUCCESS",
  "details": {
    "id": "4876876000000378050"
  },
  "id": "4876876000000378050",
  "message": "record added"
}
```

### Convert Zoho CRM lead

Convert a lead into a contact and account, optionally creating a deal. Zoho requires the deal name, closing date and stage whenever a deal is created.

**Inputs**

- Lead ID (`lead_id`, text, required): Zoho lead id, or a lead URL containing one.
- Also create a deal (`create_deal`, true/false): Create a deal as part of the conversion. The deal name, closing date and stage below are then required. Default: `false`.
- Deal name (`deal_name`, text): Name for the new deal.
- Expected closing date (`closing_date`, date): Expected closing date for the new deal.
- Deal stage (`stage`, text): Stage from your org's Deal Stage picklist.
- Pipeline (`pipeline`, text): Pipeline the new deal belongs to. Leave empty unless your org has more than one pipeline -- a single-pipeline org has no Pipeline field at all, so this list is empty there and nothing is needed.
- Assign converted records to (`assign_to_id`, text): Zoho user to own the converted records.

**Outputs**

- `Accounts` (text)
- `Contacts` (text)
- `Deals` (text)

**Example output**

```json
{
  "Accounts": "4876876000000378020",
  "Contacts": "4876876000000378010",
  "Deals": "4876876000000378030"
}
```

### Create Zoho CRM account

Create an account (company). Only the account name is required.

**Inputs**

- Account name (`account_name`, text, required): Company name (Zoho's only mandatory field).
- Phone (`phone`, text): Main phone number.
- Website (`website`, text): Company website.
- Industry (`industry`, text): Industry, e.g. 'Technology'.
- Billing city (`billing_city`, text): Billing address city.
- Billing country (`billing_country`, text): Billing address country.
- Description (`description`, text): Free-text notes stored on the account.
- Owner (`owner_id`, text): Zoho user who should own the account.
- Other fields (`extra_fields`, object): Any further Zoho field API names to set, as an object -- use this for your org's custom fields, e.g. {"Industry": "Retail"}.

**Outputs**

- `code` (text)
- `details` (object)
- `id` (text)
- `message` (text)

**Example output**

```json
{
  "code": "SUCCESS",
  "details": {
    "id": "4876876000000378020"
  },
  "id": "4876876000000378020",
  "message": "record added"
}
```

### Create Zoho CRM contact

Create a contact, optionally linked to an existing account. Only the last name is required.

**Inputs**

- Last name (`last_name`, text, required): Contact's last name (Zoho's only mandatory field).
- First name (`first_name`, text): Contact's first name.
- Email (`email`, text): Contact's email address.
- Phone (`phone`, text): Contact's phone number.
- Title (`title`, text): Job title.
- Account ID (`account_id`, text): Account to link the contact to. Use 'List Zoho CRM records' or 'Search Zoho CRM records' to find its id.
- Description (`description`, text): Free-text notes stored on the contact.
- Owner (`owner_id`, text): Zoho user who should own the contact.
- Other fields (`extra_fields`, object): Any further Zoho field API names to set, as an object -- use this for your org's custom fields, e.g. {"Industry": "Retail"}.

**Outputs**

- `code` (text)
- `details` (object)
- `id` (text)
- `message` (text)

**Example output**

```json
{
  "code": "SUCCESS",
  "details": {
    "id": "4876876000000378010"
  },
  "id": "4876876000000378010",
  "message": "record added"
}
```

### Create Zoho CRM deal

Create a deal. Zoho requires a name, a stage and a closing date; link it to an account or contact to have it show on their record.

**Inputs**

- Deal name (`deal_name`, text, required): Name for the deal.
- Stage (`stage`, text, required): Stage from your org's Deal Stage picklist.
- Expected closing date (`closing_date`, date, required): Date the deal is expected to close.
- Amount (`amount`, number): Deal value, in the org's currency. At least 0.
- Account ID (`account_id`, text): Account this deal belongs to.
- Contact ID (`contact_id`, text): Primary contact for this deal.
- Pipeline (`pipeline`, text): Pipeline the deal belongs to. Only required if your org has more than one.
- Description (`description`, text): Free-text notes stored on the deal.
- Owner (`owner_id`, text): Zoho user who should own the deal.
- Other fields (`extra_fields`, object): Any further Zoho field API names to set, as an object -- use this for your org's custom fields, e.g. {"Industry": "Retail"}.

**Outputs**

- `code` (text)
- `details` (object)
- `id` (text)
- `message` (text)

**Example output**

```json
{
  "code": "SUCCESS",
  "details": {
    "id": "4876876000000378030"
  },
  "id": "4876876000000378030",
  "message": "record added"
}
```

### Create Zoho CRM lead

Create a lead. Only the last name is required; Zoho fills the rest of the layout with whatever you supply.

**Inputs**

- Last name (`last_name`, text, required): Lead's last name (Zoho's only mandatory field).
- Company (`company`, text): Company the lead belongs to.
- First name (`first_name`, text): Lead's first name.
- Email (`email`, text): Lead's email address.
- Phone (`phone`, text): Lead's phone number.
- Lead status (`lead_status`, text): Status from your org's Lead Status picklist.
- Lead source (`lead_source`, text): Where the lead came from, e.g. 'Web Download'.
- Description (`description`, text): Free-text notes stored on the lead.
- Owner (`owner_id`, text): Zoho user who should own the lead.
- Other fields (`extra_fields`, object): Any further Zoho field API names to set, as an object -- use this for your org's custom fields, e.g. {"Industry": "Retail"}.

**Outputs**

- `code` (text)
- `details` (object)
- `id` (text)
- `message` (text)

**Example output**

```json
{
  "code": "SUCCESS",
  "details": {
    "Created_Time": "2026-09-03T10:15:00+05:30",
    "Modified_Time": "2026-09-03T10:15:00+05:30",
    "id": "4876876000000378001"
  },
  "id": "4876876000000378001",
  "message": "record added"
}
```

### Create Zoho CRM task

Create a task, optionally attached to a lead, contact, account or deal.

**Inputs**

- Subject (`subject`, text, required): What the task is, e.g. 'Follow up on quote'.
- Status (`status`, text): Task status. One of: `Not Started`, `Deferred`, `In Progress`, `Completed`, `Waiting on someone else`.
- Priority (`priority`, text): Task priority. One of: `High`, `Highest`, `Normal`, `Low`, `Lowest`.
- Due date (`due_date`, date): When the task is due.
- Description (`description`, text): Further detail about the task.
- Related to (module) (`related_module`, text): Module of the record to attach the task to. Required if a related record id is given. One of: `Leads`, `Contacts`, `Accounts`, `Deals`.
- Related record ID (`related_record_id`, text): Id of the record to attach the task to.
- Owner (`owner_id`, text): Zoho user the task is assigned to.

**Outputs**

- `code` (text)
- `details` (object)
- `id` (text)
- `message` (text)

**Example output**

```json
{
  "code": "SUCCESS",
  "details": {
    "id": "4876876000000378040"
  },
  "id": "4876876000000378040",
  "message": "record added"
}
```

### Delete Zoho CRM account

Delete an account. Zoho moves it to the recycle bin, where it can be restored for 60 days.

**Inputs**

- Account ID (`account_id`, text, required): Zoho account id, or an account URL containing one.

**Outputs**

- `code` (text)
- `details` (object)
- `id` (text)
- `message` (text)

**Example output**

```json
{
  "code": "SUCCESS",
  "details": {
    "id": "4876876000000378020"
  },
  "id": "4876876000000378020",
  "message": "record deleted"
}
```

### Delete Zoho CRM contact

Delete a contact. Zoho moves it to the recycle bin, where it can be restored for 60 days.

**Inputs**

- Contact ID (`contact_id`, text, required): Zoho contact id, or a contact URL containing one.

**Outputs**

- `code` (text)
- `details` (object)
- `id` (text)
- `message` (text)

**Example output**

```json
{
  "code": "SUCCESS",
  "details": {
    "id": "4876876000000378010"
  },
  "id": "4876876000000378010",
  "message": "record deleted"
}
```

### Delete Zoho CRM deal

Delete a deal. Zoho moves it to the recycle bin, where it can be restored for 60 days.

**Inputs**

- Deal ID (`deal_id`, text, required): Zoho deal id, or a deal URL containing one.

**Outputs**

- `code` (text)
- `details` (object)
- `id` (text)
- `message` (text)

**Example output**

```json
{
  "code": "SUCCESS",
  "details": {
    "id": "4876876000000378030"
  },
  "id": "4876876000000378030",
  "message": "record deleted"
}
```

### Delete Zoho CRM lead

Delete a lead. Zoho moves it to the recycle bin, where it can be restored for 60 days.

**Inputs**

- Lead ID (`lead_id`, text, required): Zoho lead id, or a lead URL containing one.

**Outputs**

- `code` (text)
- `details` (object)
- `id` (text)
- `message` (text)

**Example output**

```json
{
  "code": "SUCCESS",
  "details": {
    "id": "4876876000000378001"
  },
  "id": "4876876000000378001",
  "message": "record deleted"
}
```

### Delete Zoho CRM task

Delete a task. Zoho moves it to the recycle bin, where it can be restored for 60 days.

**Inputs**

- Task ID (`task_id`, text, required): Zoho task id, or a task URL containing one.

**Outputs**

- `code` (text)
- `details` (object)
- `id` (text)
- `message` (text)

**Example output**

```json
{
  "code": "SUCCESS",
  "details": {
    "id": "4876876000000378040"
  },
  "id": "4876876000000378040",
  "message": "record deleted"
}
```

### Get Zoho CRM record

Fetch one record by id from any core module. Reads go straight to the record store, so this sees a record the instant it is created, unlike search, which waits on Zoho's index.

**Inputs**

- Record type (`module`, text, required): Module to read from. One of: `Leads`, `Contacts`, `Accounts`, `Deals`, `Tasks`.
- Record ID (`record_id`, text, required): Zoho record id, or a record URL containing one.

**Outputs**

- `Amount` (number)
- `Billing_City` (text)
- `Billing_Country` (text)
- `Closing_Date` (text)
- `Company` (text)
- `Created_Time` (text)
- `Deal_Name` (text)
- `Description` (text)
- `Due_Date` (text)
- `Email` (text)
- `First_Name` (text)
- `Full_Name` (text)
- `Industry` (text)
- `Last_Name` (text)
- `Lead_Source` (text)
- `Lead_Status` (text)
- `Modified_Time` (text)
- `Owner` (object)
- `Phone` (text)
- `Pipeline` (text)
- `Priority` (text)
- `Probability` (number)
- `Stage` (text)
- `Status` (text)
- `Subject` (text)
- `Title` (text)
- `Website` (text)
- `id` (text)

**Example output**

```json
{
  "Company": "Northwind Traders",
  "Email": "dana@example.com",
  "First_Name": "Dana",
  "Full_Name": "Dana Ramirez",
  "Last_Name": "Ramirez",
  "Lead_Status": "Not Contacted",
  "Owner": {
    "email": "sam@example.com",
    "id": "4876876000000123001",
    "name": "Sam Patel"
  },
  "id": "4876876000000378001"
}
```

### List Zoho CRM notes

List the notes attached to one record.

**Inputs**

- Record type (`module`, text, required): Module the record belongs to. One of: `Leads`, `Contacts`, `Accounts`, `Deals`.
- Record ID (`record_id`, text, required): Id of the record whose notes to list.
- Maximum records (`limit`, number): How many records to return (1-200). From 1 to 200. Default: `20`.

**Outputs**: Response envelope; the records are in the "results" field and the paging block in "info".

- `info` (object)
- `results` (list)

**Example output**

```json
{
  "info": {
    "count": 1,
    "more_records": false
  },
  "results": [
    {
      "Created_Time": "2026-09-03T10:20:00+05:30",
      "Modified_Time": "2026-09-03T10:20:00+05:30",
      "Note_Content": "Asked for a follow-up next quarter.",
      "Note_Title": "Call summary",
      "Owner": {
        "email": "dana@example.com",
        "id": "4876876000000317001",
        "name": "Dana Reed"
      },
      "Parent_Id": {
        "id": "4876876000000378001",
        "name": "Ramirez"
      },
      "id": "4876876000000378050"
    }
  ]
}
```

### List Zoho CRM records

List records from a module, most recently created first.

**Inputs**

- Record type (`module`, text, required): Module to list. One of: `Leads`, `Contacts`, `Accounts`, `Deals`, `Tasks`.
- Maximum records (`limit`, number): How many records to return (1-200). From 1 to 200. Default: `20`.

**Outputs**: Response envelope; the records are in the "results" field and the paging block in "info".

- `info` (object)
- `results` (list)

**Example output**

```json
{
  "info": {
    "count": 1,
    "more_records": false,
    "page": 1,
    "per_page": 20
  },
  "results": [
    {
      "Company": "Northwind Traders",
      "Email": "dana@example.com",
      "Last_Name": "Ramirez",
      "id": "4876876000000378001"
    }
  ]
}
```

### Query Zoho CRM records

Run a COQL SELECT against your CRM data. Reads the record store directly, so it sees records the moment they are written, which is the reliable way to look one up right after creating it.

**Inputs**

- COQL query (`select_query`, text, required): A COQL SELECT statement. Column and module names are Zoho field API names.
- Maximum rows (`limit`, number): Row cap, appended as a LIMIT when the query has none (1-2000; Zoho defaults to 200). From 1 to 2000. Default: `200`.

**Outputs**: Response envelope; the records are in the "results" field and the paging block in "info".

- `info` (object)
- `results` (list)

**Example output**

```json
{
  "info": {
    "count": 1,
    "more_records": false
  },
  "results": [
    {
      "Email": "dana@example.com",
      "Last_Name": "Ramirez",
      "id": "4876876000000378010"
    }
  ]
}
```

### Search Zoho CRM records

Find records by email, phone, free text, or a criteria expression. Zoho's search index lags writes by a short while, so a record created seconds ago may not appear yet: use 'Query Zoho CRM records' when you need one immediately.

**Inputs**

- Record type (`module`, text, required): Module to search. One of: `Leads`, `Contacts`, `Accounts`, `Deals`, `Tasks`.
- Search by (`search_by`, text, required): Which kind of search to run. One of: `email` (Email address), `phone` (Phone number), `word` (Any text (global search)), `criteria` (Criteria expression).
- Search for (`value`, text, required): The value to look for. With 'Criteria expression', use Zoho's syntax, e.g. (Last_Name:equals:Smith)and(Email:starts_with:qa).
- Maximum records (`limit`, number): How many records to return (1-200). From 1 to 200. Default: `20`.

**Outputs**: Response envelope; the records are in the "results" field and the paging block in "info".

- `info` (object)
- `results` (list)

**Example output**

```json
{
  "info": {
    "count": 1,
    "more_records": false
  },
  "results": [
    {
      "Email": "dana@example.com",
      "Last_Name": "Ramirez",
      "id": "4876876000000378010"
    }
  ]
}
```

### Update Zoho CRM contact

Update fields on an existing contact. Supply the contact id and at least one field to change.

**Inputs**

- Contact ID (`contact_id`, text, required): Zoho contact id, or a contact URL containing one.
- Last name (`last_name`, text): New last name.
- First name (`first_name`, text): New first name.
- Email (`email`, text): New email address.
- Phone (`phone`, text): New phone number.
- Title (`title`, text): New job title.
- Description (`description`, text): Replacement description text.
- Owner (`owner_id`, text): Reassign the contact to this Zoho user.
- Other fields (`extra_fields`, object): Any further Zoho field API names to set, as an object -- use this for your org's custom fields, e.g. {"Industry": "Retail"}.

**Outputs**

- `code` (text)
- `details` (object)
- `id` (text)
- `message` (text)

**Example output**

```json
{
  "code": "SUCCESS",
  "details": {
    "id": "4876876000000378010"
  },
  "id": "4876876000000378010",
  "message": "record updated"
}
```

### Update Zoho CRM deal

Update a deal, most often to advance its stage. Supply the deal id and at least one field to change.

**Inputs**

- Deal ID (`deal_id`, text, required): Zoho deal id, or a deal URL containing one.
- Deal name (`deal_name`, text): New deal name.
- Stage (`stage`, text): New stage from your org's Deal Stage picklist.
- Expected closing date (`closing_date`, date): New expected closing date.
- Amount (`amount`, number): New deal value. At least 0.
- Description (`description`, text): Replacement description text.
- Owner (`owner_id`, text): Reassign the deal to this Zoho user.
- Other fields (`extra_fields`, object): Any further Zoho field API names to set, as an object -- use this for your org's custom fields, e.g. {"Industry": "Retail"}.

**Outputs**

- `code` (text)
- `details` (object)
- `id` (text)
- `message` (text)

**Example output**

```json
{
  "code": "SUCCESS",
  "details": {
    "id": "4876876000000378030"
  },
  "id": "4876876000000378030",
  "message": "record updated"
}
```

### Update Zoho CRM lead

Update fields on an existing lead. Supply the lead id and at least one field to change.

**Inputs**

- Lead ID (`lead_id`, text, required): Zoho lead id, or a lead URL containing one.
- Last name (`last_name`, text): New last name.
- Company (`company`, text): New company.
- Email (`email`, text): New email address.
- Phone (`phone`, text): New phone number.
- Lead status (`lead_status`, text): New status from your org's Lead Status picklist.
- Description (`description`, text): Replacement description text.
- Owner (`owner_id`, text): Reassign the lead to this Zoho user.
- Other fields (`extra_fields`, object): Any further Zoho field API names to set, as an object -- use this for your org's custom fields, e.g. {"Industry": "Retail"}.

**Outputs**

- `code` (text)
- `details` (object)
- `id` (text)
- `message` (text)

**Example output**

```json
{
  "code": "SUCCESS",
  "details": {
    "id": "4876876000000378001"
  },
  "id": "4876876000000378001",
  "message": "record updated"
}
```
