zohoInteract with Zoho CRM, Projects, and Meeting APIs. Use when managing deals, contacts, leads, tasks, projects, milestones, meeting recordings, or any Zoho wo...
Made by Zone 99 ยท GitHub ยท Contribute
Use the zoho CLI wrapper โ it handles OAuth token refresh and caching automatically.
zoho help # Show all commands
zoho token # Print current access token (auto-refreshes)
https://localhosthttps://localhost/callback (or any URL you control โ you only need it once to grab the code)Build this URL and open it in your browser (replace the placeholders):
https://accounts.zoho.com/oauth/v2/auth
?response_type=code
&client_id=YOUR_CLIENT_ID
&scope=ZohoCRM.modules.ALL,ZohoCRM.settings.ALL,ZohoProjects.projects.ALL,ZohoProjects.tasks.ALL,ZohoMeeting.recording.READ,ZohoMeeting.meeting.READ,ZohoMeeting.meetinguds.READ,ZohoFiles.files.READ
&redirect_uri=https://localhost/callback
&access_type=offline
&prompt=consent
Important: Use the accounts URL matching your datacenter:
| Region | Accounts URL |
|--------|-------------|
| US | https://accounts.zoho.com |
| EU | https://accounts.zoho.eu |
| IN | https://accounts.zoho.in |
| AU | https://accounts.zoho.com.au |
| JP | https://accounts.zoho.jp |
| UK | https://accounts.zoho.uk |
| CA | https://accounts.zohocloud.ca |
| SA | https://accounts.zoho.sa |
After granting access, you'll be redirected to something like:
https://localhost/callback?code=1000.abc123...&location=us&accounts-server=https://accounts.zoho.com
Copy the code parameter value. This code expires in 2 minutes โ move to Step 3 immediately.
Run this curl command (replace placeholders):
curl -X POST "https://accounts.zoho.com/oauth/v2/token" \
-d "client_id=YOUR_CLIENT_ID" \
-d "client_secret=YOUR_CLIENT_SECRET" \
-d "grant_type=authorization_code" \
-d "redirect_uri=https://localhost/callback" \
-d "code=PASTE_CODE_FROM_STEP_2"
Response:
{
"access_token": "1000.xxxx.yyyy",
"refresh_token": "1000.xxxx.zzzz",
"api_domain": "https://www.zohoapis.com",
"token_type": "Bearer",
"expires_in": 3600
}
Save the refresh_token โ this is your long-lived credential. The access token expires in 1 hour, but the CLI auto-refreshes it using the refresh token.
CRM/Projects Org ID:
# After setting up .env with client_id, client_secret, refresh_token:
zoho raw GET /crm/v7/org | jq '.org[0].id'
Meeting Org ID:
Log into Zoho Meeting โ Admin Settings โ look for the Organization ID in the URL or settings page. It's different from the CRM org ID.
Create .env in the skill directory:
ZOHO_CLIENT_ID=1000.XXXXXXXXXXXXXXXXXXXXXXXXX
ZOHO_CLIENT_SECRET=your_client_secret_here
ZOHO_REFRESH_TOKEN=1000.your_refresh_token_here
ZOHO_ORG_ID=123456789 # CRM/Projects org ID
ZOHO_MEETING_ORG_ID=987654321 # Meeting org ID (different from CRM)
ZOHO_CRM_DOMAIN=https://www.zohoapis.com
ZOHO_PROJECTS_DOMAIN=https://projectsapi.zoho.com/restapi
ZOHO_MEETING_DOMAIN=https://meeting.zoho.com
ZOHO_ACCOUNTS_URL=https://accounts.zoho.com
Adjust the domain URLs if you're on a non-US datacenter (e.g..eu,.in,.com.au).
| Scope | Used For |
|-------|----------|
| ZohoCRM.modules.ALL | Read/write CRM records (Deals, Contacts, Leads, etc.) |
| ZohoCRM.settings.ALL | Read CRM field definitions and org settings |
| ZohoProjects.projects.ALL | Read/write projects |
| ZohoProjects.tasks.ALL | Read/write tasks, milestones, bugs, timelogs |
| ZohoMeeting.recording.READ | List and access meeting recordings |
| ZohoMeeting.meeting.READ | List meetings and session details |
| ZohoMeeting.meetinguds.READ | Download recording files |
| ZohoFiles.files.READ | Download files (recordings, transcripts) |
You can request fewer scopes if you only need CRM or only need Meeting. The authorization URL scope parameter is comma-separated.
# List records from any module
zoho crm list Deals
zoho crm list Deals "page=1&per_page=5&sort_by=Created_Time&sort_order=desc"
zoho crm list Contacts
zoho crm list Leads
# Get a specific record
zoho crm get Deals 1234567890
# Search with criteria
zoho crm search Deals "(Stage:equals:Closed Won)"
zoho crm search Contacts "(Email:contains:@acme.com)"
zoho crm search Leads "(Lead_Source:equals:Web)"
# Create a record
zoho crm create Contacts '{"data":[{"Last_Name":"Smith","First_Name":"John","Email":"j@co.com"}]}'
zoho crm create Deals '{"data":[{"Deal_Name":"New Project","Stage":"Qualification","Amount":50000}]}'
# Update a record
zoho crm update Deals 1234567890 '{"data":[{"Stage":"Closed Won"}]}'
# Delete a record
zoho crm delete Deals 1234567890
Leads, Contacts, Accounts, Deals, Tasks, Events, Calls, Notes, Products, Quotes, Sales_Orders, Purchase_Orders, Invoices
equals, not_equal, starts_with, contains, not_contains, in, not_in, between, greater_than, less_than
# List all projects
zoho proj list
# Get project details
zoho proj get 12345678
# Tasks
zoho proj tasks 12345678
zoho proj create-task 12345678 "name=Fix+login+bug&priority=High&start_date=01-27-2026"
zoho proj update-task 12345678 98765432 "percent_complete=50"
# Other
zoho proj milestones 12345678
zoho proj tasklists 12345678
zoho proj bugs 12345678
zoho proj timelogs 12345678
name, start_date (MM-DD-YYYY), end_date, priority (None/Low/Medium/High), owner, description, tasklist_id, percent_complete
# List all recordings
zoho meeting recordings
zoho meeting recordings | jq '[.recordings[] | {topic, sDate, sTime, durationInMins, erecordingId}]'
# Download a recording (use downloadUrl from recordings list)
zoho meeting download "https://files-accl.zohopublic.com/public?event-id=..." output.mp4
# List meetings/sessions
zoho meeting list
zoho meeting list "fromDate=2026-01-01T00:00:00Z&toDate=2026-01-31T23:59:59Z"
# Get meeting details
zoho meeting get 1066944216
Key fields from zoho meeting recordings:
erecordingId โ encrypted recording ID (use for dedup/tracking)topic โ meeting titlesDate, sTime โ start date/time (human-readable)startTimeinMs โ start time as epoch ms (use for date filtering)durationInMins โ recording durationdownloadUrl / publicDownloadUrl โ MP4 download URLtranscriptionDownloadUrl โ Zoho-generated transcript (if available)summaryDownloadUrl โ Zoho-generated summary (if available)fileSize / fileSizeInMB โ recording file sizestatus โ e.g. UPLOADEDmeetingKey โ meeting identifiercreatorName โ who started the recordingFor automated standup/meeting summarization:
# 1. List recordings, filter by today's date (epoch ms)
zoho meeting recordings | jq --argjson start "$START_MS" --argjson end "$END_MS" \
'[.recordings[] | select(.startTimeinMs >= $start and .startTimeinMs <= $end)]'
# 2. Download recording
zoho meeting download "$DOWNLOAD_URL" /tmp/recording.mp4
# 3. Extract audio
ffmpeg -i /tmp/recording.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 /tmp/audio.wav -y
# 4. Transcribe via Gemini Flash API (great for Arabic + English mix)
# See scripts/standup-summarizer.sh for full implementation
# 5. Summarize transcript with Claude/GPT
# 6. Clean up temp files
A complete standup summarizer script is included at scripts/standup-summarizer.sh.
For anything not covered by subcommands:
# CRM endpoints
zoho raw GET /crm/v7/settings/fields?module=Deals
zoho raw GET /crm/v7/org
# Meeting endpoints
zoho raw GET "https://meeting.zoho.com/meeting/api/v2/{zsoid}/recordings.json"
# Custom modules
zoho raw GET /crm/v7/Custom_Module
zoho crm list Deals "sort_by=Created_Time&sort_order=desc&per_page=10" | jq '.data[] | {Deal_Name, Stage, Amount, Closing_Date}'
zoho proj list | jq '.projects[] | {name, status, id: .id_string}'
zoho proj tasks <project_id> | jq '.tasks[] | {name, status: .status.name, percent_complete, priority}'
zoho proj create-task <project_id> "name=Task+description&priority=High&start_date=MM-DD-YYYY&end_date=MM-DD-YYYY"
# Quick list of recent recordings
zoho meeting recordings | jq '[.recordings[:5] | .[] | {topic, sDate, sTime, durationInMins, fileSize}]'
# Download latest recording
URL=$(zoho meeting recordings | jq -r '.recordings[0].downloadUrl')
zoho meeting download "$URL" /tmp/latest.mp4
Generated Mar 1, 2026
A sales team uses the Zoho skill to track deals through their pipeline stages, from initial contact to closed-won. They can quickly search for deals by stage, update deal values, and monitor performance metrics. This helps sales managers forecast revenue and identify bottlenecks in the sales process.
A marketing agency uses the skill to manage client contacts and leads from various sources like web forms or events. They can create new contact records, segment contacts by email domain, and track communication history. This ensures personalized follow-ups and improves client retention rates.
A software development team uses the Zoho skill to manage project tasks, milestones, and bugs across multiple projects. They can assign tasks to team members, set deadlines, and track progress in real-time. This streamlines collaboration and helps meet project delivery timelines.
A consulting firm uses the skill to access and download meeting recordings for client sessions or internal standups. They can list recordings by date, review transcripts, and share key insights with stakeholders. This aids in compliance documentation and training material creation.
A real estate agency uses the skill to qualify leads based on source and interest level, such as web inquiries or referrals. They can search leads by criteria like lead source, create follow-up tasks, and move qualified leads to the deals module. This automates the initial sales funnel and improves conversion rates.
A SaaS company uses the Zoho skill to manage customer deals and track recurring revenue from subscriptions. They can monitor deal stages for upsells or renewals and analyze customer data to reduce churn. This supports scalable revenue growth through automated CRM workflows.
A digital agency uses the skill to manage client projects, tasks, and billing milestones. They can track project progress, allocate resources, and generate reports for client reviews. This enables efficient service delivery and transparent client communication.
An e-commerce business uses the skill to handle leads from website inquiries and manage deals for bulk orders. They can segment contacts by purchase history and automate follow-up tasks for cart abandonment. This drives repeat sales and enhances customer loyalty.
๐ฌ Integration Tip
Ensure you set the correct Zoho accounts URL for your datacenter region (e.g., .eu for Europe) to avoid authentication errors, and use the refresh token for long-term access as access tokens expire hourly.
HubSpot CRM and CMS API integration for contacts, companies, deals, owners, and content management.
Partnership outreach, market research, competitor analysis, and proposal generation. Transform your AI agent into a strategic business development partner that identifies and cultivates growth opportunities.
CRM integration, lead tracking, outreach automation, and pipeline management. Transform your AI agent into a sales assistant that never lets leads slip through the cracks.
Manage Zhihu AI Bot to publish, like/unlike, comment, delete comments, and fetch ring or comment details using Zhihu API credentials.
ActiveCampaign CRM integration for lead management, deal tracking, and email automation. Use for syncing demo leads, managing clinic sales pipeline, and triggering follow-up sequences.
Query and analyze brand mentions from Octolens API. Use when the user wants to fetch mentions, track keywords, filter by source platforms (Twitter, Reddit, GitHub, LinkedIn, etc.), sentiment analysis, or analyze social media engagement. Supports complex filtering with AND/OR logic, date ranges, follower counts, and bookmarks.