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
Why is Zoho Meeting quality so poor?
I've just moved from Office 365 to Zoho Workplace and have been generally really positive about the new platform -- nicely integrated, nice GUI, good and easy-to-understand control and customisation, and at a reasonable price. However, what is going on
App like Miro
Hi all, is there a way to have a interactive whiteboard like in Miro? We want to visualize our processes and workflows in an easy way.
Loan repayment Entry
While receiving loan, i does following steps in My Zoho books. 1. Create "Loan & Advance " Account as Parent Account under Long Term Liabilities. 2. Create another account For Example "Mr. ABC's Loan as Child account under the parent account. Now: In
Quotes module send email reverted back into 2022??
Our Zoho CRM PLUS quotes, sales orders, invoice modules is showing us an email composer from 2022. We cannot send emails and its been a real pain. I tried clicking the new version over there but it doesnt seem to do anything. Any help is welcome. th
Workflow Condition - how do check that a date / time value is in the past?
Hello, I'm got a workflow that runs a function when records reach their 'Effective Date / Time', but sometimes records are created after the 'Effective Date / Time' so I have another workflow that checks for records which needs to be processed immediately.
Pre filling SignForm field values by URL field alias's in Zoho Sign
Hi, Does anyone know if it's possible to pre fill the field values of the SignForm by using field alias's like you can in Zoho forms? To be more specific, I want to be able to change the SignForm URL to include some information like this: Before : https://sign.zoho.eu/signform?form_link=234b4d535f495623920c288fc8538cb9e6db03bbfd44499b63f3e5c48daf78f44bc47f333e2f5072cc1ee74b7332fe18b25c93fab10cb6243278d49c67eacbf30bbe5b6e1cc8c6b2#/
How to Split Payout in Zoho Books (Without Using Journal?)
Hi, I'm trying to properly record payouts in Zoho Books. The issue is that each payout is a combination of sales and expenses (fees). When I try to categorise the payout transaction from the Banking tab, I can only split the transaction using income-type
Payment Schedule
Please add the ability to create a payment schedule. The other options, like retainer invoices or two invoices, do not work for the customer. We invoice a client and need to be able to show them everything they owe in one invoice, and when each payment
Which pricing system do you think would work best for us?
Imagine we’re selling strictly wholesale. We’d rather not publish unit prices; instead, we quote customers case-by-case. To spur larger orders, we’re considering a transparent discount ladder—say: $0 – $999: 0 % $1,000 – $1,999: 5 % $2,000 – $4,999: 10
Can't Remove Payment Gateway
I am getting the error "Settings cannot be cleared as some of the transactions are still in progress." when trying to remove the PayGate payment gateway which I was unable to get working. I am now using paystack and I want to remove Paygate.
Sync specific Zoho Inventory Warehouses to Zoho Commerce
As said in the title, we would want to only sync stock from one warehouse of Zoho Inventory to the Zoho Commerce item stock. We have a 2 warehouses in different countries and the way that Zoho Commerce works (It takes stock from ALL WAREHOUSES EVERYWHERE
Weekly Tips : Automatically clean clutter with Junk cleanup interval
If you regularly receive many unwanted or spam emails, your Spam folder can quickly fill up and start taking up valuable storage space in your Zoho Mail account. Instead of manually clearing it every few days, you might find it helpful to enable automatic
Any solution for getting portal users list in deluge or in widget
Hi Team, Has anyone able to find the solution to get portal users list in deluge or in zoho creator widgets? Thanks, Payal
The Grid is here!
Hey Zoho Forms Community! 👋 We’re thrilled to announce the launch of a feature that’s been on your wishlist for a while: Grids What is Grids? Grids let you place form fields side by side in multiple columns to create a more concise and organized form
Steuerberater der Zoho benutzt in Deutschland
I write in English because the issue is related to German regulations. Wir sind ein Unternehmen, welches aktuell keine Pflicht zur doppelten Buchführung hat. Aktuell bucht unser Steuerberater jeden Beleg, auch unsere Auslagen. Wir würden dies gerne selbst
GraphQL in new Send Webhooks feature
Hello, is it possible to use GraphQL apis in the new Send Webhooks feature?
# 2 Why do we need a billing system when accounting covers billing?
In today's evolving financial tech stack, businesses use a mix of tools to manage their day-to-day operations, from invoicing to full-fledged accounting. While accounting platforms typically come with built-in invoicing features, specialized billing systems
How to insert an Excel/Zoho Sheet table in a chat?
Hello, is there a way to paste an excel/zoho sheet table to a conversation without loosing table lines. I tried to paste a piece of a table and all the columns and rows were gone. How to easily paste a table without a need of sending a file? Katarzy
Mass Update Application Status
How to update application statuses of Multiple Applications at once? Is that possible? If not then why please consider adding it It can save hours of manual work Thats the only Option I see
Free webinar: Streamlining customer service paperwork with the Zoho Sign extension for Zoho Desk
Hi there! Wondering how to bridge the gap between digitized customer service and business paperwork? Attend our free webinar to learn how you can do this by connecting Zoho Sign, our digital signature app, with Zoho Desk, our online customer service help
Mail Search Not Working
Hello, Mail search is not working at all. I've tried Chrome and Mozilla. I can try and search for an exact term, or even an email that is 1st in my email list. All search does is sit and spin, or it comes up with no results. I've also tried it on my android
Cannot Send Email to a Gmail Account
Hello, I have a zoho-hosted email account, alex@chirochannelnetwork.com that has trouble sending to gmail accounts. But not all gmail accounts, only some of them. I've tried to figure this out with clients, and they don't appear to be going into their
Unblock ME
info@pentekykloi.gr Unable to send message;Reason:554 5.1.8 Email Outgoing Blocked. Learn more. I purchase additional storage
Cannot Print Landscape with Zoho Sheet
I am noticing that when using the Zoho Sheet desktop for Mac, that even when selecting landscape as the print option, once you choose "Print", a second system dialog opens that automatically makes the view portrait again, and does not allow printing in
Power of Automation : Enhancing custom date field calculations by excluding Weekends and Holidays
Hello Everyone, A Custom function is a user-written set of code to achieve a specific requirement. Set the required conditions needed as when to trigger using the Workflow rules (be it Tasks / Project) and associate the custom function to it. Requirement:
Stock count by bin location
Is there a configuration to make a stock count by bin or area and not by product. these is useful to manage count by area Regards
Temporary Outage in Zoho Cliq Affecting US Users – July 23, 2025
We experienced a service disruption in Zoho Cliq that impacted core functionality for users in the US region. The issue occurred between Jul 23, 2025, 06:54:00 PM IST and 07:13:13 PM IST, lasting approximately 19 minutes. To restore service stability,
portal.assignUserInProfile - Não esta adicionando
Estou encontrando problema com este comando portal.assignUserInProfile Não esta incluindo o usuário no portal Alguém pode me dizer o que pode ser thisapp.portal.assignUserInProfile("teste@gmail.com","Customer");
CRM emails vs Campaigns
Please help me understand this. I am having a difficult understanding of "Campaigns" sent through CRM (real emails) or Zoho One (blast "potentially junk" emails) This is what I currently think emails sent via CRM are "real" emails sent through linked real personal email accounts and therefore are more likely to get delivered. We use this for critical updates for our "Approved " accounts and certain other preferred statuses emails via Campaigns are sent through the Zoho server (like MailChimp, Campaign
Setting up property management in Zoho Books
Hi, I run a property management business that manages property complexes. There are multiple owners, some owning more than one property on the same complex. My role is to manage the fees they pay for maintenance of common areas, such as the swimming pool
Reverse proxy
We have a web application in the creator platform. When I launch a particular DNS, I would like that DNS to redirect to the web page of the application in creator app. Has anyone achieved it and if yes, please share how to do it.
Still client need to download .exe?
Hello, the client for use zoho assist need everytime download .exe file and launch it?
Splitting a ticket's entire thread
Hi, When you split a ticket it only splits the individual reply that you clicked "Split as new ticket" on. Is it not possible to split the entire ticket thread from that point into the new ticket (every reply from the split point forward)? Or is there
Editing the text on the Help Center home page
Is it possible to edit the "Welcome to Help Center" message anywhere? This one: We'd like to be able to tailor it a little more ourselves.
WHMCS for Zoho Flow
Can we use WHMCS for Zoho flow?
Online meetings through Calendar Booking form with options
This is great to see and particularly for those users who don't have Zoho BOOKINGS. The shame of it all though is that it could have been better. Why do we have to set up separate booking forms for each type of meeting and for each online conferencing
Agents permission per department
Hi Team, can I setup permission for each agent what they can do in each department, for example I want account department agents to only have view access to support department tickets and not allowed to assign or reply to clients. I am sure this would
CRM notes
I want to be able to add notes to a task that do not necessarily get rolled up into an account or contact. For example, I tasks to work on a Court Order for John Doe divorce account. There might be lots of updates (in the form of notes) that employees
Introducing parent-child ticketing in Zoho Desk [Early access]
Hello Zoho Desk users! We have introduced the parent-child ticketing system to help customer service teams ensure efficient resolution of issues involving multiple, related tickets. You can now combine repetitive and interconnected tickets into parent-child
Function #8: Add additional charges to invoices
Here goes one of the highly sought-after custom functions in Zoho Books. If you find yourself needing to apply additional charges to customers on their invoices (say credit card surcharges, or fuel charges applicable to customers from a certain region,
Next Page