Retrieving pipelines in Zoho CRM is straightforward once your OAuth connection is established — you can query the CRM modules API to pull pipeline (deal stage) data directly from your account.
Why this matters
Sales teams rely on pipelines to track deals through each stage of the funnel. If you're building an integration, automating reporting, or using a tool like Beam Help's Zoho AI Pilot Engine, you'll need to fetch pipeline and module data programmatically. Understanding the correct scopes and API flow ensures you get accurate, live data rather than stale snapshots.
Step-by-step
Step 1. Set up your Zoho API credentials by visiting the Zoho API Console and creating a Server-based Application. Note your Client ID and Client Secret — you'll need both to authenticate any API request.[1]
Step 2. When registering your application, make sure you include the scope ZohoCRM.modules.ALL alongside ZohoCRM.settings.ALL and ZohoCRM.users.ALL. The modules scope is what grants access to pipeline and deal-stage data inside Zoho CRM.[1]
Step 3. Set your redirect URI to match exactly what's registered in the API Console. If you're running locally, this is typically http://localhost:8080/api/auth_callback. A mismatch here will cause an OAuth redirect error and block token exchange.[1]
Step 4. Store your credentials securely in a .env file at the project root. The minimum required variables are ZOHOCLIENTID, ZOHOCLIENTSECRET, and your data-centre setting (ZOHO_DC), which defaults to com but can be set to eu, in, com.au, or jp depending on where your Zoho account is hosted.[1]
Step 5. Establish the OAuth connection. Once your server is running, click Connect Zoho CRM in the UI and complete the authorisation flow. The system stores your access token and refresh token so subsequent requests are handled automatically.[2]
Step 6. The connection layer automatically refreshes your access token when it is within 120 seconds of expiry, so long-running pipeline queries won't fail mid-request with a 401 error. This is handled transparently — you don't need to manage token rotation manually.[6]
Step 7. To retrieve pipeline data, issue a natural-language query such as *"show me all deals"* or *"list open opportunities"*. Internally this maps to a search_records call against the Deals module, which contains the pipeline stages for each record.[7]
Step 8. If you want a count of records at each pipeline stage, you can ask *"how many deals do I have"* — this routes to the getrecordcount tool with the Deals module as the parameter, giving you a quick pipeline volume figure.[7]
Step 9. For direct record links, the CRM URL pattern follows https://crm.zoho.{dc}/crm/tab/{Module}/{RecordId}. Substitute your data-centre code and the relevant module name (e.g. Deals) to build deep links into specific pipeline records.[5]
Common pitfalls
- Wrong redirect URI. The redirect URI in your
.envand in the Zoho API Console must be character-for-character identical. Even a trailing slash difference will cause the OAuth callback to fail.[1] - Missing module scope. Omitting
ZohoCRM.modules.ALLfrom your scope list means pipeline and deal-stage endpoints will return permission errors. Always include all three recommended scopes during app registration.[1] - Wrong data centre. If your Zoho account is on the EU or India data centre and
ZOHODCis left ascom, API calls will hit the wrong endpoint and return authentication failures. SetZOHODCto match your account region.[1] - Stale database state. If you encounter unexpected errors after changing credentials or re-authorising, deleting the local SQLite file (
data/zpilot.sqlite) and restarting the server forces a clean state.[2]
What to check
- Confirm that
ZohoCRM.modules.ALLandZohoCRM.settings.ALLare both listed under your application's approved scopes in the Zoho API Console.[1] - Verify that
ZOHO_DCin your.envmatches the data centre shown in your Zoho CRM account URL (e.g.euforcrm.zoho.eu).[1] - After connecting, test the token refresh path by waiting for a near-expiry state or checking that the
zohoconnectionstable is being updated with a freshaccesstokenandtokenexpiresat.[6]
---
*Beam Help is independent expert support for Zoho — we are not official Zoho support, and this guidance is based on our own implementation experience.*