Zoho CRM

Live

OAUTH 2.0

CRM

CRM & Sales

Zoho CRM gives your agent authenticated access to leads, deals, accounts, and contacts, with every record change attributed to the user who triggered it.

  • Per-user credentials: each call uses the actual user's token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Zoho CRM
agent · Acme Q3
Run
Which deals slipped out of this quarter?
S
zohocrm_v8_deals_list
104ms
CRM agent
5 deals moved out of Q3. $312K total. Three cite budget freeze, two are waiting on security review.
Sources: 5 deals, stage changes since Jul 1
zohocrm
5 deals
18:29
Message Claude...

Tools your agent reaches for on Zoho CRM, scoped per user.

CALL ANY TOOL
Read and update leads, deals, accounts, and contacts, run CRM searches, and manage notes and attachments with the signed-in user's own Zoho permissions.
zohocrm_v8_account_create
Create v8 account
Create a new account (company or organization) in Zoho CRM. Account_Name is required by Zoho for every account.
Parameters
Name
Type
Required
Description
Account_Name
string
Required
The name of the account (company or organization)
Annual_Revenue
number
Optional
The account's annual revenue
Billing_City
string
Optional
The city of the account's billing address
Billing_Code
string
Optional
The postal or ZIP code of the account's billing address
Billing_Country
string
Optional
The country of the account's billing address
Billing_State
string
Optional
The state or province of the account's billing address
Billing_Street
string
Optional
The street address of the account's billing address
Description
string
Optional
Free-form notes about the account
Employees
integer
Optional
The number of employees at the account
Industry
string
Optional
The industry the account operates in
Ownership
string
Optional
The ownership type of the account
Phone
string
Optional
The account's primary phone number
Website
string
Optional
The account's company website
zohocrm_v8_account_delete
Delete v8 account
zohocrm_v8_account_get
Get v8 account
zohocrm_v8_account_search
Search v8 account
zohocrm_v8_account_update
Update v8 account
zohocrm_v8_accounts_list
List v8 accounts
zohocrm_v8_attachment_download
Download v8 attachment
zohocrm_v8_attachment_upload
Upload v8 attachment
zohocrm_v8_bulk_read_job_create
Create v8 bulk read job
zohocrm_v8_campaign_create
Create v8 campaign
zohocrm_v8_campaign_get
Get v8 campaign
zohocrm_v8_contact_update
Update v8 contact
zohocrm_v8_contacts_list
List v8 contacts
zohocrm_v8_deal_contact_role_add
Add v8 deal contact role
zohocrm_v8_deal_contact_role_remove
Remove v8 deal contact role
zohocrm_v8_deal_delete
Delete v8 deal
zohocrm_v8_deal_search
Search v8 deal
zohocrm_v8_lead_create
Create v8 lead
zohocrm_v8_lead_get
Get v8 lead
zohocrm_v8_lead_update
Update v8 lead
zohocrm_v8_leads_list
List v8 leads
zohocrm_v8_meeting_cancel
Cancel v8 meeting
zohocrm_v8_module_describe
V8 module describe
zohocrm_v8_note_delete
Delete v8 note
zohocrm_v8_org_get
Get v8 org
zohocrm_v8_record_create
Create v8 record
zohocrm_v8_record_upsert
Upsert v8 record
zohocrm_v8_records_query
Query v8 records
zohocrm_v8_related_list_get
Get v8 related list
zohocrm_v8_send_mail
V8 send mail

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Zoho CRM tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["zohocrm"], toolNames: [
    "zohocrm_v8_account_create",
    "zohocrm_v8_account_delete",
    "zohocrm_v8_account_get"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Is the Salesforce sync healthy?" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["zohocrm"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Which data sources are connected?" }],
  tools,
});

// Execute the tool call with the user's vaulted Zoho CRM credential
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["zohocrm"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Pull open Zendesk tickets created this week." }],
  tools,
});

// Tool call runs with the user's vaulted Zoho CRM credential
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["zohocrm"] }, pageSize: 100,
});

const agent = new Agent({
  name: "zohocrm_agent",
  model: "gemini-2.5-pro",
  instruction: "Work with Zoho CRM for the signed-in user.",
  tools,
});

await agent.run("What auth does the Shopify connector need?");
Try these prompts
Paste any prompt into your agent to get started.
Pipeline
Copy the prompt
Copied
Which deals slipped out of this quarter and why?
Copy the prompt
Copied
List my open deals sorted by close date.
Copy the prompt
Copied
Update the stage on this deal and log a note.
Records
Copy the prompt
Copied
Search accounts matching this domain.
Copy the prompt
Copied
Create a contact and link it to the right account.
Copy the prompt
Copied
Show me the notes on this lead from the last month.
Hygiene
Copy the prompt
Copied
Which leads have no owner assigned?
Copy the prompt
Copied
Find duplicate accounts by name.
Copy the prompt
Copied
List the attachments on this deal.
SEE HOW AUTH WORKS
Your users connect Zoho CRM once. Their credentials stay vaulted, every call is scope checked, and every record change is logged.
1
Authorize
Your user connects
Zoho CRM
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Zoho CRM
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Zoho CRM
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Zoho CRM
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other connectors.
GTM and RevOps Teams
CRM AI agent
Reads the Granola transcript after every call, extracts next steps and updates the HubSpot record, drafts the follow-up in Gmail, and confirms in Slack, all on the rep's own delegated OAuth.
GTM and RevOps Teams
Deal intelligence agent
Pulls recent Gong calls, scores deal risk with an LLM, cross-references the record in Attio, and DMs each owner their at-risk deals in Slack. Every read is scoped to that rep's own access.
GTM and RevOps Teams
Outbound prospecting agent
Searches Apollo for prospects matching your ICP, scores and ranks them, drafts personalized outreach in Gmail, and logs every send to Google Sheets. Mail goes out as the rep, not from a shared inbox.
GTM and RevOps Teams
Deal room sync
Pulls opportunity context from Salesforce, captures key decisions from Slack, and syncs a running summary to the deal room doc in Google Drive, but only when the deal actually changed.
Test other agents
See the same per-user auth pattern across other connectors.
GTM
CRM AI agent
Turn each Granola call transcript into a HubSpot record update, a drafted Gmail follow-up, and a Slack recap.
SALES
Deal intelligence agent
Score Gong call risk with an LLM, cross-reference the Attio record, and DM each owner their at-risk deals in Slack.
SALES
Outbound prospecting agent
Search Apollo for ICP matches, rank them, draft personalised Gmail outreach, and log every send to Google Sheets.
GTM
Deal room sync agent
Pull opportunity context from Salesforce, capture decisions from Slack, and keep the Google Drive deal room doc current.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Zoho CRM token looks fine in a demo. In production every action looks like one service account, and you cannot tell who wired a source or ran a query. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Zoho CRM today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Do Zoho sharing rules still apply to the agent?
Yes. The agent uses the triggering user's own credential, so Zoho's own record sharing and profile permissions apply unchanged.
Can I allow reads but block writes?
Yes. Scope the connection to the get, list, and search tools. Create, update, and delete stay unavailable and the check runs before the API call.
How many Zoho CRM tools are available?
89 across leads, deals, accounts, contacts, notes, attachments, and search. The page shows a representative 30.
Which API version does this target?
Zoho CRM v8. Tool names carry the version so an upgrade does not silently change behaviour.
How is multi-tenancy handled?
Credentials are namespaced per tenant and per user, so one customer's agent can never resolve another customer's Zoho token.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""zohocrm"": {
""url"": ""https://mcp.scalekit.com/zohocrm"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.zohocrm]
url = ""https://mcp.scalekit.com/zohocrm""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""zohocrm"": {
""url"": ""https://mcp.scalekit.com/zohocrm"",
""type"": ""http""
}
}
}