Hello everyone!
Welcome to this week's post in the
Kaizen Series! This week, we will discuss
GraphQL APIs, a query language that provides an efficient, powerful, and flexible method for fetching and manipulating data from Zoho CRM.
Let us consider the scenario of a large industrial equipment manufacturer, Zylker Manufacturing. They utilize Zoho CRM to streamline their sales processes and customer relationship management. Their sales support team uses a legacy system to manage their activities. When a contact seeks support, the support team must have access to the latest data from Zoho CRM to assist them better. They need:
- details of the contact, such as email, phone, and Account details
- details of the ongoing deals of the contact, including potential revenue and stages .
With GraphQL APIs, with a single API call, you can create custom unified view that combine information from multiple Zoho CRM modules. This allows the support team to view all relevant information in one place, making it easier to manage sales processes and customer interactions. To create the view, metadata of the fields is also required. This structured approach in GraphQL allows Zylker Manufacturing to efficiently aggregate data.
You need to construct a GraphQL query to fetch specific data related to a contact and associated deals, as well as metadata about the fields in the Contacts and Deals modules. Let's break down each part of the query that can achieve this.
1. Fetching Contact and Deal Information
- Records: Records comprises the records from the different Zoho CRM modules.
- Contacts: Specifies that we want to query the records of the Contacts module. The where clause filters the contacts based on their email address.
- _data: This indicates the fields we want to retrieve from the records. In this case:
- Email: Fetches the email of the contact.
- Full_Name: Fetches the full name of the contact.
- Deals__r: Fetches the related deal record of the Contact.
- Expected_Revenue: Fetches the expected revenue from each deal.
- Deal_Name: Fetches the name of each deal.
- Stage: Fetches the current stage of each deal.
|
Records {
_data { Email { value} Full_Name { value} Deals__r { _data { Expected_Revenue { value} Deal_Name { value} Stage { value }}}}}}
|
2. Fetching Metadata for Contacts
- Meta: This fetches the details of the metadata for Contacts module. It uses the alias "contact_meta"
- Modules(filter: { api_name: "Contacts" }): Specifies that we want to fetch the metadata of the Contacts module.
- _data: This indicates the fields we want to retrieve. In this case:
- id: The unique identifier for the module.
- api_name: The API name for the module.
- module_name: The name of the module.
- description: The description of the module.
- plural_label, singular_label: Labels used for the module.
- fields: Retrieves metadata for specific fields within the module. filter: { api_names: ["Last_Name", "Email"] }: Specifies which fields' metadata to retrieve.For each field, it retrieves:
- id: Field identifier.
- api_name: API name for the field.
- display_label: The display name of the field.
- json_type: The data type as represented in JSON.
- data_type: The Zoho CRM data type of the field.
| contact_meta: Meta { Modules(filter: { api_name: "Contacts" }) { _data { id api_name module_name description singular_label plural_label fields(filter: { api_names: ["Last_Name", "Email"] }) { _data { id api_name display_label json_type data_type } } } } }
|
3. Fetching Metadata for Deals
- Meta: This fetches the details of the metadata for Deals module. It uses the alias "deal_meta"
- Modules(filter: { api_name: "Deals" }): Specifies that we want to fetch the metadata of the Deals module.
- _data: This indicates the fields we want to retrieve. In this case:
- id: The unique identifier for the module.
- api_name: The API name for the module.
- module_name: The name of the module.
- description: description of the module.
- plural_label, singular_label: Labels used for the module.
- fields: Retrieves metadata for specific fields within the module.
- filter: api_names: ["Expected_Revenue", "Deal_Name","Stage"] }: Specifies which fields' metadata to retrieve.For each field, it retrieves:
- id: Field identifier.
- api_name: API name for the field.
- display_label: The display name of the field.
- json_type: The data type as represented in JSON.
- data_type: The Zoho CRM data type of the field.
| deal_meta: Meta { Modules(filter: { api_name: "Deals" }) { _data { id api_name module_name description singular_label plural_label fields(filter: { api_names: ["Expected_Revenue", "Deal_Name","Stage"] }) { _data { api_name id display_label json_type data_type } } } } }
|
The complete query will look this:
query {
Records { _data { Email { value } Full_Name { value } Deals__r { _data { Expected_Revenue { value } Deal_Name { value } Stage { value } } } } } } contact_meta: Meta { Modules(filter: { api_name: "Contacts" }) { _data { plural_label id api_name module_name description singular_label fields(filter: { api_names: ["Last_Name", "Email"] }) { _data { id api_name display_label json_type data_type } } } } } deal_meta: Meta { Modules(filter: { api_name: "Deals" }) { _data { plural_label id api_name module_name description singular_label fields( filter: { api_names: ["Expected_Revenue", "Deal_Name", "Stage"] } ) { _data { api_name id display_label json_type data_type } } } } } }
|
If you were to fetch this data using REST APIs, it will involve multiple calls to the
- Query API
- Related Records API
- Modules meta API, and
- Fields meta API.
Using the GraphQL query you can fetch the required data alone in a less round trip time. While constructing a query for your custom requirement, please note that you can query up to three levels of depth (nesting levels of a field) for Records and 7 levels of depth for Metadata.
Constructing GraphQL query using Postman
To construct a GraphQL query in Postman to suit your requirements, type {api_domain}/crm/graphql in the URL box. Postman will automatically fetch the query schema in the schema explorer, which can be used to explore the types of queries that can be made, including what fields are available on each type, what arguments those fields accept, and what other types they return.
Constructing a Zoho CRM GraphQL query in Postman using schema explorer

Update 25th Sep 2024:
GraphQL APIs are now open across all DCs including IN DC for Enterprise, Zoho One Enterprise, CRM Plus and Ultimate edition orgs. Please note that GraphQL APIs are not available for Trial Edition of these editions.
We hope you found this post useful. We will meet you next week with another interesting topic!
If you have any questions, let us know in the comment section or reach out to us directly at
support@zohocrm.com.
Recent Topics
Automatisez efficacement avec le nouveau concepteur de workflows flexibles
Auparavant, l'automatisation dans les modèles de fusion de Writer se limitait à des actions simples comme « fusionner et stocker », « fusionner et envoyer par e-mail » ou « fusionner et envoyer pour signature ». En revanche, il était jusqu’à présent impossible
More context, fewer tabs: View lookup modules' data within a CRM Canvas page
Hello everyone, How often do your users juggle multiple browser tabs just to piece together the full context of a record? This update can make their lives easier. You can now add lookup modules' fields to a Canvas detail view page and a Canvas list view
On click of the Blueprint transition (Qualified or Not Qualified), the 'Convert' option should be enabled in the Lead module.
On click of the Blueprint transition (Qualified or Not Qualified), the 'Convert' option should be enabled in the Lead module. console.clear(); let convertButton = ZDK.Page.getButton('convert'); let leadStatus = ZDK.Page.getField('Lead_Stage').getValue();
Show all items making up the composite item in transactions
Dear Zoho, Currently, when we select a composite item in Zoho Inventory for a transaction, we do not receive a breakdown of the individual items that make up the composite. This makes it challenging for our team to accurately pick, pack, and ship the
Custom Roles & Granular Permission Control in Zoho SalesIQ
Hello Zoho SalesIQ Team, We appreciate the functionalities offered by Zoho SalesIQ, but we would like to request a crucial enhancement regarding user roles and permissions. Current Issue: At present, Zoho SalesIQ provides fixed roles—Admin, Supervisor,
Condition to skip recipient signature
Is there a way, alone or with a Zoho Form integration, to skip a recipient signature when a condition is set? This happens because in this template, not always all the recipients need to sign it. Sometimes its just a few. We are using a Zoho Form integration
How to filter emails by Reply-to field?
I receive a very particular newsletter from an association A registered on a website W (that is used by many associations), and the emails fields are not great: the From just contains the generic website's W's email, while A is only mentioned in the Reply-to
Wich version of Backstage is included in Zoho One
Hello I am in the event business and i am considering Zoho One to replace my current tools. I will need Backstage to manage my events but I am wondering wich version of backstage will I get if I subscribe to Zoho One. Thank you Guillaume
How to restore deleted campaigns?
I accidentally deleted my first campaign that went out today (08/21/18). How do I restore it?
Organize and Clone Task Custom Views
We have rolled out two new enhancements to task custom views: Custom View Groups and Custom View Clone. Custom View Groups Similar to predefined view groups, we have introduced groups for custom views to help organize and categorize them. My Custom Views:
Kits: Option to Hide Associate Items on Documents
The new Kit type of Composite Item is very helpful, and we're already using it in several different ways. One problem is that there seems to be no way to hide the components on some documents, including Package Slips. There is an option given in settings
Zoho Books CREDIT LIMIT is completely USELESS due to a BUG!!! Please fix it ASAP!!
Credit Limit should not be taken into account if payment terms on the Invoice are without credit. If selected Credit 0 days (Prepayment) why in this world would a notification pop up saying credit limit is exceeded and not allowing to create an invoice?
Is it possible to adjust the web browser tab title (when a ZoHo Desk ticket is opened)
Hi All, When I open a ZoHo Desk ticket in a web browser, the tab title (text that appears at the top of the browser tab) uses the logic: *company icon picture* (xxxx) #ticket number - company name See below (highlighted in red) for reference. Company
Configure ChatGPT in Zoho Cliq | Now with GPT-4!
Updated for GPT-4 Support: The post and scripts has been revised to take advantage of the new GPT-4 model's capabilities. Please use the updated version for enhanced performance and accuracy. If you have been on the internet for the past few months, you
Have completed Zoho Sign documents attach automatically to contact and/or account
Hello, Just used ZohoSign for the first time to get an e-signature on an important document. Setting up the template was nice and easy and configuring the request to go to the right people and training a member of staff was also very easy. HOWEVER Why
Using email "importance" as workflow-criteria
I'd like to set up a workflow that triggers if an incoming email has been flagged as "high importance" but I'm not seeing any way to do that. Hopefully I'm just missing something obvious...?
Update Lead Status in Zoho CRM When a Meeting is Booked via Microsoft Bookings
Hi everyone, I’m trying to streamline our lead management process and would like to automatically update the Lead Status in Zoho CRM whenever a meeting is booked through Microsoft Bookings. Has anyone successfully implemented this kind of integration
Kaizen #199: FAQs on Multi-Select Lookup (MxN) Field in Zoho CRM
Nearing 200th Kaizen Post – We want to hear from you! Do you have any questions, suggestions, or topics you would like us to cover in future posts? Your insights and suggestions help us shape future content and make this series better for everyone. Got
Zoho Desk Android app update: Enhanced UI of the History tab.
Hello everyone! In the latest Android version(v2.9.10) of the Zoho Desk mobile app, we enhanced the UI of the 'History' tab within a ticket. Also, we have introduced a filter option to easily search the history based on the actions performed on the ticket.
Is Zoho Marketing Plus part of Zoho One?
Hi, Is the new fancy Zoho Marketing Plus part of the Zoho One package? Is there any benefit in using this rather than the standalone products? Many thanks Jon
Is it possible to Bulk Update 'Product Name' in Zoho Desk?
Is it possible to Bulk Update 'Product Name' in Zoho Desk? I cannot see that option now. Kindly help how we can do it.
Change visable Subform fields
I have a form with 4 subforms in it. I added another field to each of the subforms in my main form. Now, how do I update the subforms to show the new fields that I added?
Trial Extenstion/ 2nd Go!
Hi, Recently trialed FSM bit didnt get a chance to try out the most recent features is it possible to get another trial to try the new features and see if I can make it work for me?
Weekly Tips : Take Control of Your Sent Emails using Outbox Delay
Ever clicked “Send” on an email, then instantly realized you forgot something—like a file, an attachment, or even made a small typo? It happens more often than you'd think. Wouldn’t it be helpful if your email waited a little before actually going out?
Format of data after export to spreadsheet
Dear Zoho, can you explain to me what is the point of a report exporting to XLSX if the format of the amounts that will be created there is in text format and not suitable for anything? Why do I need data in a sheet with which nothing more can be do
Customer Payment
Seprate voucher required for cash and bank .You can not authorized any one to enter cash payment .In statement clearly shown is it bank receipt or cash recipt .
how to add previous month purchase bill and claim ITC
Hello we have a unclaimed ITC bill of April (we didn't claim it in may as seller didn't uploaded his gstr1 ) when we trying to file gstr 3b in june month we noticed the bill has been uploaded (april bill) .how to change the filing month of that april
Deluge security enhancements
Hello everyone, At Deluge, security is a top priority, and we're continuously working to enhance the platform's safety and reliability. As part of our ongoing commitment to secure coding and industry best practices, we're rolling out key updates to how
How do I set users up to only send emails using org emails?
We run marketing campaigns for multiple clients and strictly send emails using the official organization addresses provided by each client. However, we've encountered several instances where users unintentionally send emails from their own company accounts—a
open multiple notes at a time.
Hey there, New to Notebook and liking it, but one thing that's really a bother is not being able to open more than one note at a time, either in a new window or in a new tab. Often times, I like to copy/paste from one note to another or compare drafts
Let’s Talk Recruit: Forms that think before you do!
Welcome back to our Let's Talk Recruit series. In our previous post, we shared highlights from our community meetups held across India. This time, we’re talking about something that often gets overlooked but makes a huge difference once you set it up
PEPPOL Support Needed for Zoho Books in Europe
I'm reaching out to discuss the urgent need for PEPPOL support in Zoho Books for European users. With Belgium mandating B2B e-invoicing via PEPPOL starting in 2026, many of us are struggling to manage invoices without this integration. While Zoho Books
Allow Equity Accounts to be Used for Expenses
Currently, when entering an Expense or Bill, the Expense Account (account to be debited) allows for accounts in any of these categories to be chosen: COGS Expense Other Current Liability Fixed Asset Other Current Asset Noticeably missing are Equity Accounts.
メール一括配信の未送信のメールについて知りたい
メール一括配信の後の、未送信のメールの数は添付のようにシステムから連絡がくるのですが それらの対象者を知りたい。レポートなど一覧で知りたい。 また配信対象者なのに(担当者、リード)の メールの履歴に配信したメールの件名でさえ表示されないのはどう理解したらよいのか知りたいです。 また、これらの人をレポートで一覧で出す方法を教えてください。把握したいためです。
How do I add the time zone for the each recipient/subscriber
Hi, I've read that Zoho allows for emails to be sent at a certain time based on the recipient's time zone. How do I add the time zone for the each recipient/subscriber? Thanks!
Zoho Formsから獲得した見込み客をSaleIQでトラッキングし、そのトラッキング情報をCRMに集約することは可能でしょうか?
Zoho formsを活用しています。 Zoho CRM、Zoho SalesIQと連携するよう設定しており、Zoho formsから獲得した見込み客の情報はCRMに連携されるのですが、トラッキング情報はZoho CRMの見込み客データ内の 関連リスト 訪問-Zoho salesIQ にデータが反映されません。※添付画像参照ください 考えられる原因や対策などありましたら教えていただけないでしょうか。 よろしくお願い致します。
Find and Merge Duplicates to trigger webhook
My sales team uses the Find and Merge Duplicates feature often to cleanup records in the CRM. We use webhooks to signal to our internal tools database when new Contacts are created, updated, or deleted, in order to keep our DB in sync with Zoho CRM. However,
Marketer’s Space: Using Zoho CRM Data for Dynamic Content and Personalization in Zoho Campaigns
Hello Marketers! Welcome back to Marketer’s Space. Do you want to send emails or SMS that feel less like mass messages and more like one-on-one conversations? By integrating Zoho CRM with Zoho Campaigns, you can pull in rich customer data and use it to
Add Attendees to Session months before the Event
I need to manually add Attendees to Sessions right away for an event that's taking place in 6 months so that the Speaker can communicate with them in advance of the event. How can this be done?
Override Auto Number field?
We are preparing to migrate from Salesforce. In Salesforce, we auto-generate a unique number on our Opportunities (Potentials). If the Opportunity results in a contract, we use that unique number as the Contract number. There are some situations where
Next Page