Kaizen 225 - Making Query-based Custom Related Lists Actionable with Lookups and Links

Kaizen 225 - Making Query-based Custom Related Lists Actionable with Lookups and Links


Hello everyone!
Welcome back to another post in the Kaizen series!

This week, we will discuss an exciting enhancement in Queries in Zoho CRM.

In Kaizen #190, we discussed how Queries bridge gaps where native related lists fall short and power custom related lists to present relevant and contextual information right alongside the CRM records. With Queries in related lists, you can dynamically fetch data from other modules, external services, or custom integrations, at runtime!

To take it up a notch, you can now use Queries and make custom related lists actionable with lookups and links!
This is super helpful when a record needs context across multiple related modules and the user experience must still remain intuitive and navigable.

This Kaizen explains a practical use case built using a Module-type Query, and explains how the serializer’s lookup and href support turns a static list into an actionable workspace.

Use case

Fetch Deals related to a Contact that are actively in negotiation or proposal stages, with account context preserved.

Business problem

Zoho CRM’s native related lists already provide a strong baseline experience.
For example, in the Deals related list on a Contact record, both Deal Name and Account Name are rendered as clickable lookups, but they show all related records, apply minimal filtering, and offer limited control over actions and presentation.

However, with Queries, you can precisely control which records appear, decide how navigation should work, introduce contextual actions alongside native navigation.

So, here's the requirement we will try to solve today.
From a Contact record, I want to see
  1. Only active Deals whose Stage is Proposal/Price Quote or Review/Negotiation.
  2. With Deal navigation preserved
  3. With intentional account-level actions, not just navigation

In short, I want the query to show me the Deals in these stages that this Contact is currently involved with and let me quickly research the associated Account externally.

Why a Module-type query?

This scenario requires
  1. Filtering Deals by Stage
  2. Selecting a focused set of fields
  3. Embedding the result as a related list on Contacts

Query configuration

Follow the steps in the help document to create a module-type query.
The following image offers a glimpse of the query.

Serializer - where the difference happens

The serializer is not used to recreate native behavior, but to redefine intent of displaying the Deal as an explicit lookup and the Account as a contextual action.
Here is the serializer code used in this example.
return result.map(record => ({
...record,
Deal_Name: {
id: record.id,
name: record.Deal_Name,
module: "Deals"
},
"Account_Name.Account_Name": {
id: record.id,
name: record["Account_Name.Account_Name"],
module: "Accounts"
},
Link: {
label: "Search Account on Google",
}
}));

Follow the steps in this Kaizen post to create a custom related list and associate it with a query.

The output


You can see that the related list Deals in Proposal and Negotiation has clickable Deal and Account lookups, and a link to search by the Account Name on Google, while the default Deals related list includes all Deals associated with this contact.

This approach is especially useful when you need filtered or curated views, introduce non-CRM actions, reduce click depth, and want the UI to guide user behavior subtly without peeling them away from the interface they are used to.

The design rule is to

  1. Use lookups when the destination is inside CRM
  2. Use href when the action is external or exploratory. Eg: open external systems, launch contextual research, pass params to external tools, etc.

Summary

By combining module-type queries for precise data selection, serializer lookups for native navigation, and serializer links for contextual actions, you can create related lists that are purpose-built, not generic.

That distinction is what makes Queries and serializers a powerful extension point in Zoho CRM.


We hope you found this post useful. Let us know your thoughts in comments or at support@zohocrm.com.
See you next week!

Cheers!

===============================================================================



    • Sticky Posts

    • Kaizen #226: Using ZRC in Client Script

      Hello everyone! Welcome to another week of Kaizen. In today's post, lets see what is ZRC (Zoho Request Client) and how we can use ZRC methods in Client Script to get inputs from a Salesperson and update the Lead status with a single button click. In this
    • Kaizen #222 - Client Script Support for Notes Related List

      Hello everyone! Welcome to another week of Kaizen. The final Kaizen post of the year 2025 is here! With the new Client Script support for the Notes Related List, you can validate, enrich, and manage notes across modules. In this post, we’ll explore how
    • Kaizen #217 - Actions APIs : Tasks

      Welcome to another week of Kaizen! In last week's post we discussed Email Notifications APIs which act as the link between your Workflow automations and you. We have discussed how Zylker Cloud Services uses Email Notifications API in their custom dashboard.
    • Kaizen #216 - Actions APIs : Email Notifications

      Welcome to another week of Kaizen! For the last three weeks, we have been discussing Zylker's workflows. We successfully updated a dormant workflow, built a new one from the ground up and more. But our work is not finished—these automated processes are
    • Kaizen #152 - Client Script Support for the new Canvas Record Forms

      Hello everyone! Have you ever wanted to trigger actions on click of a canvas button, icon, or text mandatory forms in Create/Edit and Clone Pages? Have you ever wanted to control how elements behave on the new Canvas Record Forms? This can be achieved

    Nederlandse Hulpbronnen