Kaizen #199: FAQs on Multi-Select Lookup (MxN) Field in Zoho CRM

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. 

Hey everybody!!!
Welcome back to another post in the Kaizen series!
In this post, we will address some of the most frequently asked questions about the Multi-Select Lookup(MxN) field from the Zoho CRM developer community forum.

1. What is a Multi-select lookup field?

A multi-select lookup field in Zoho CRM lets you create a many-to-many relationship between two modules. This means a record in one module can be linked to multiple records in another module and vice versa.
For example, using an multi-select lookup field, you can associate multiple skills with an employee.

2. How does the Mutli-Select Lookup relationship work?

When you create a Multi-Select Lookup between two modules, for example, Employees and Skills, Zoho CRM automatically creates a hidden linking module, which is also known as an MxN module. This module stores the associations between records in the two modules, enabling you to track and manage many-to-many relationships.

For instance, if you link Employees and Skills, a linking module named EmpXSkills will be created.

This linking module is accessible only via API.

Backend Flow of multi-select lookup Relationship



In the linking module, two lookup fields (lookup fields with api names - Employees and Skills) will be created. The lookup fields, one pointing to Employees and the other pointing to Skills from the linking module, establish a connection between the linking module and its associated module.

Why you cannot use a lookup field for this use case? 
In Zoho CRM, a lookup field creates a one-to-many relationship between two modules i.e. one record in the source module can be linked to only one record in the target module.

Example :
If you create a lookup field for Skills in the Employees module, each employee can be linked to only one skill. So, use a multi-select lookup field instead of a lookup field when you need to represent complex relationships like one employee - many skills and one skill - many employees.

3. How to create a multi-select Lookup field using Zoho CRM APIs?

To create a Multi-Select lookup field between two modules using Zoho CRM APIs, follow these steps:

Step 1: Identify the Module API Name
Before creating the field, you should know the API names of the Employees and Skills modules. For that, use the Get Module Metadata API.  

Request URL  : {{api-domain}}/crm/v8/settings/modules
Request method : GET



Now, search for the Employees module in the response and note its API name.

Step 2: Use the Create Custom Fields API

To establish a many-to-many relationship between two modules, in our case, Employees and Skills, you need to create a custom field of type multi-select lookup in the Employees module (parent module).  Here, we will associate multiple skills to an employee.

This custom field requires:
  • The related module you want to link to - Skills.
  • A display field from the related module
  • The linking module (EmpXSkills), which stores the actual associations.
Use the Create Custom Fields API to create custom fields.

Request URL : {{api_domain}}/crm/v8/settings/fields?module=Employees
Request method : POST

Sample input :



{
    "fields": [
        {
            "field_label": "Skills", //Name of the field in your module
            "data_type": "multiselectlookup", //Type of the field
            "multiselectlookup": { //This JSON object contains the multi-select lookup relationship details

                "connected_details": { //Details about the module and field you want to link
                    "module": {
                        "api_name": "Skills" //API name of the related module
                    },
                    "field": {
                        "field_label": "Skills" //The field in the related module to display
                    }
                },
                "linking_details": { //Details about the junction or linking module that manages the many-to-many relationship
                    "module": {
                        "plural_label": "EmpXSkills" //Plural label of the junction module
                    }
                }
            }
        }
    ]
}


4. How Do You Find the Linking Module and Field API Names?

To know the API name of the linking module:
Use the Get Modules API and search for "generated_type" : "linking" in the response to identify MxN modules. In our case, EmpXSkills.

Request URL : {{api_domain}}/crm/v8/settings/modules
Request method : GET



To know the field API names in the linking module:
Use the Get Fields Metadata API to retrieve the API names of lookup fields within the linking module.

Request URL : {{api_domain}}/crm/v8/settings/fields?module=EmpXSkills
Request method : GET

5. How do I associate records via a multi-select lookup field using the Insert Records API in Zoho CRM?

To associate records using a multi-select lookup field, you must provide the record IDs from the related module. The association is made through the linking module.

Example :
Associating multiple skills with an employee using the multi-select lookup field.

Request URL : {{api-domain}}/crm/v8/Employees
Request method : POST

Sample input :


{
  "data": [
    {
      "Name": "Patricia",
      "Email": "patricia@mail.com",
      "Position": "Marketing Specialist",
      "Year_of_Experience": 5,
      "Skills": [   // API name of the multi-select lookup field in the Employees module
        {
          "Skills": { // API name of the lookup field in the linking module pointing to the Skills module
            "name": "Marketing",
            "id": "5725767000002149427"  //ID from the Skills module are mandatory to establish the link
          }
        },
        {
          "Skills": {
            "name": "Social Media Marketing",
            "id": "5725767000002149476"
          }
        }
      ]
    }
  ]
}



6. How do I associate an Employee's skills using the linking module in Zoho CRM?

To establish a relationship between the Employees and Skills modules through the linking module, use the Insert Records API to create a record in the linking module, EmpXSkills.

To do this,
  • Use the appropriate lookup field API names to reference the parent module.
  • You must need the record IDs from both the Employees and Skills modules to create the associations.
Request URL : {{api-domain}}/crm/v8/EmpXSkills
Request method : POST

Sample input :


{
  "data": [
    {
      "Name": "Patricia",
      "Employees": {
        "id": "5725767000002161001"  // Record ID from the Employees module
      },
      "Skills": {
        "id": "5725767000002149476"  // Record ID from the Skills module
      }
    }
  ]
}



7. When should I use create/update operations in the Employees module vs the EmpXSkills module?

                Employees Module

               EmpXSkills (linking) Module

Use when you want to create or update an Employee and associate Skills using the Multi-select Lookup field.

Use when you want to create or remove associations between existing Employee and Skill records without modifying the actual Employee or Skill data.

Creating a new employee and assigning their skills at once.

Managing relationships between existing records i.e., linking and unlinking skills to employees.


8. How to update a record in the linking module?

To update a record in the linking module, use the Update Records API.
Request URL : {{api-domain}}/crm/v8/EmpXSkills/5725767000006269044
Request method : PUT

Sample input :


{
    "data": [
        {
            "Skills": {
                "name": "Marketing",
                "id": "5725767000002170035" //Associating another skill with the employee 
            }
        }
    ]
}

In the above sample, we have replaced an existing skill associated with an employee with another Skill in the linking module.This is done by updating the Skills lookup field in the EmpXSkills record.

Please note that in the linking module, Skills is a lookup field, so you can associate only one skill per linking record. But in the Employees module, Skills is a multi-select lookup field, so an employee can be associated with multiple skills.

9. How to unlink records from the parent module as well as the linking module?

Unlink the associated records from the parent module:

Using the Update records API, you can remove an associated skill from an employee, use the "_delete": null key within the multi-select lookup field in the Employee record update.

Request URL : {{api-domain}}/crm/v8/Employees/5725767000006269044
Request method : PUT

Sample input :

{
"data": [
        {
            "Skills": [
               {
                    "Skills": {
                        "name": "Marketing", 
                        "id": "5725767000002170035" // The Skill record you want to unlink
                    },
                    "id": "5725767000007228047", //record ID - The record created in the linking module for the employee with the Marketing skill
                    "_delete" : null 
                }
            ]
        }
    ]
}



Replace an associated record from the linking module:

Use the Update Records API to replace an existing association in the linking module.

Request URL : {{api-domain}}/crm/v8/EmpXSkills/5725767000007228035
Request method : PUT

Sample input :


{
    "data": [
        {
            "Skills": {
                "name": "Java",
                "id": "5725767000005259075" //replacing a new skill 
            }
        }
    ]
}

In the above sample, we have replaced the existing skill with Java.

10. Why am I seeing the error "DUPLICATE_LINKING_DATA"  in the Update Records API

This error occurs when you try to associate records with the parent record that are already linked with the Multi-select lookup field. To resolve this, check the records you are trying to link and make sure your association is only with records that are not already linked.

Know your existing linked records:

Before the Update Records API, use the Get Related Records Data API and search for the multi-select lookup field. In our case, Skills is the multi-select lookup field created in the Employees module. This will return all records already associated.

Example :


The response returns all Skills already linked with that Employee.

Using this way, compare the IDs from the API response with the new records you are about to link, and only proceed with non-duplicate IDs. This avoids duplicate entries and prevents the "DUPLICATE_LINKING_DATA" error.

11. What happens if I delete a record in the linking module?

When you delete a record in the linking module, it only removes the association between the related records in the Employees and Skills modules.

Note :
  • Deleting a linking module record removes only the relationship between two records from the Employees and Skills modules.
  • Deleting an Employee or Skill record deletes all corresponding entries in the linking module as well.

12. How do I query linked records?

Use the COQL API to query multi-select lookup data by specifying the corresponding linking module's API name directly in your query. The linking module is treated as a separate module in Zoho CRM, so you can retrieve associated records by querying it like any other module.

Sample query :


{
  "select_query": "select Skills.Name as skill, Employees.Name as employee from EmpXSkills where Skills.Name like '%Marketing%'"
}


Use the Get Module Metadata API to know the linking module's API name.

13. How do I export multi-select lookup records using the Bulk Read API?

To export multi-select lookup data, linking module records efficiently, use the Bulk Read API with the linking module’s API name.

Request method : POST

Sample Request :


{
    "callback": {
        "method": "post"
    },
    "query": {
        "module": {
            "api_name": "EmpXSkills" //API name of the linking module
        },
        "fields": [
            "Employees.Name",
            "Employees.Year_of_Experience",
            "Skills.Name"
        ],
        "criteria": {
            "group": [
                {
                    "field": {
                        "api_name": "Employees.Year_of_Experience" 
                    },
                    "comparator": "greater_than",
                    "value": "4"
                },
                {
                    "field": {
                        "api_name": "Skills.Name"
                    },
                    "comparator": "contains",
                    "value": "Social"
                }
            ],
            "group_operator": "AND"
        }
    }
}


14. Can I import my linking module's data using the Bulk Write API?

Yes. Like the Leads and Contacts modules, you can also import linking module's data into Zoho CRM using the Bulk Write API by directly specifying the linking module’s API name.

If you are importing data that involves both a parent module, Employees and its associated MxN linking module, follow these steps:

1. Create separate CSV files:
  • One for the parent module - Employees
  • One for the linking module - EmpXSkills
2. Zip the files into a single ZIP file.
3. Upload the ZIP in a single Bulk Write API request.
4. Ensure accurate field mappings are provided in the API request body.

Refer to Kaizen #131 - Bulk Write for parent-child records using Scala SDK for more details on handling parent-child records.


15. Can I receive notifications if a multi-select lookup field in a module is modified or updated?

Yes, you can receive notifications when a MxN field is updated using the Notification API. To enable instant notifications for actions performed in a module, use the respective API names of the linking module in the input body.

Request method : POST

Sample input :


{
    "watch": [
        {
            "channel_id": "10000",
            "events": [
                "EmpXSkills.all"  //EmpXSkills represents the API name of the linking module
            ],
            "return_affected_field_values": true  
        }
    ]
}


16. Can I use criteria-based filtering when accessing multi-select lookup data using the Search API?

Yes, you can filter multi-select lookup data using the criteria parameter in the Search API's URL.

Here is an example that fetches records from the EmpXSkills linking module.

Request URL : {{api-name}}/crm/v8/EmpXSkills/search?criteria=((Secondary_Email:equals:patricia@mail.com)and(Skills:equals:Content_Marketing))
Request method : GET

Sample response :



                                                                                                                               x-----------------------------x


We trust that this post meets your needs and is helpful. Let us know your thoughts in the comment section or reach out to us at support@zohocrm.com 

Stay tuned for more insights in our upcoming Kaizen posts!


Other FAQs in the Kaizen series :


      • Recent Topics

      • Cannot connect to 365 business calendar and Teams, says personal but it is not.

        hi I have a number of users connected to their 365 business accounts. Adding a new user and it thinks hes got 365 personal edition. He does not.... Anyone know what's going on. Trying for days now. Bookings go into his MS calendar but as its thinks its
      • Limited review (/questions) for Bookings 2.0

        Hi all, I'm writing this review of Bookings 2.0 for two reasons: 1) it may be of interest to others, and 2) I'd like to be corrected if I'm wrong on any points. It's a very limited review, i.e. the things that have stood out as relevant, and particularly
      • Zoho Bookings - Reserve with Google

        Does Zoho Bookings plan to to integrate with Reserve with Google?
      • Tip #3: How to change your booking page language

        Displaying your booking page in your target audience's language can greatly increase customer satisfaction. By speaking their language, you will help customers feel more comfortable scheduling with you and create a stronger connection with them. Let's
      • Bigin Android app update: Alerts while creating tasks outside of working days, conflicting events and calls.

        Hello everyone! In the most recent version of the Bigin Android app, we have brought in support to display an alert if task is being scheduled outside of the working days. Also, when scheduling an event or call in the Activities module, a conflict alert
      • Bigin update: Link email messages to pipeline records.

        Hello everyone! In the latest version of the Bigin iOS(v1.11.9) and macOS(1.8.9) app, we have brought in support for an option to link email to pipeline records. This helps you to view emails specific to a deal, especially when a contact is associated
      • Bigin Android app update: Custom buttons and widgets

        Hello everyone! We are excited to introduce custom buttons and widgets on the Bigin Android app. Widgets: A widget is a customizable UI component in Bigin that improves efficiency and user experience. It lets businesses embed components, streamline interactions,
      • Biometric Access Support on Zoho Vault Desktop App

        Is there any plans to add biometric authentication (fingerprint, face recognition) for Vault desktop apps (Windows/macOS) to enhance security and ease of access. I would love to hear other members view on this
      • Zoho Sheet for Desktop

        Does Zoho plans to develop a Desktop version of Sheet that installs on the computer like was done with Writer?
      • Zoho Sheet - Desktop App or Offline

        Since Zoho Docs is now available as a desktop app and offline, when is a realistic ETA for Sheet to have the same functionality?I am surprised this was not laucned at the same time as Docs.
      • Collective-booking event not added to all staff calendars

        We assign two staff to certain events. When the client books this event, it adds it to one staff calendar (the 'organiser') but not the other. How can I ensure all staff assigned to a collective booking get the event in their calendar? (A side note: it
      • Project Management Bulletin: October, 2025

        Every need leads to innovation. Project Management tools were developed out of sheer necessity to drive large projects. With wide usage, the specifications grew precise, and so did the refinement. Over years we’ve crafted one of the best project management
      • Zoho Sheets saying locked when not locked

        Zoho Sheets won't let me add more rows to sheet because it's saying the sheet is locked, but the sheet is not locked. I tried using a different browser but I still have the same issue.
      • Identifying and Merging Accounts with Similar (Non-Exact) Names

        Hello everyone, I’m aware of the built-in deduplication feature in Zoho CRM that allows merging records with exactly matching values for selected fields. However, I’m running into a situation where our migrated data contains multiple variations of the
      • Option for super admin to recover the deleted chats in Zoho Cliq

        Currently, in Zoho Cliq, if a user accidentally deletes their chats, there is no option for the Super Admin to recover or view those deleted messages. I believe it would be helpful if Super Admins had a recovery option, perhaps within a certain time frame,
      • Zoho CRM iOS app updates: the Homepage, Zoho Survey integration, and support for multiple file uploads in subform

        Hello everyone! The Zoho CRM mobile app continues to evolve to bring you a smoother and more powerful CRM-on-the-go experience. We're excited to share some important updates now available in the iOS app. Here's what's new: Homepage support Zoho Survey
      • I am trying to integrate my module in sandbox environment to add data via API

        I went through the documents and tried to setup the API for adding the module via the api but the problem is the token setup is done on "https://accounts.zoho.in/oauth/v2/token" domain and the bulk write is done on "https://content.zohoapis.com/crm/v8/upload"
      • Setting up primary mobile number.

        Hi Sir Earlier I joined IIFL team and got an organizational email of zoho services. Later i quit and now my account is deactivated with IIFL but i am unable to link my mobile number to my own email id with zoho.
      • Zoho sheet for desktop

        Hi is zoho sheets available for desktop version for windows
      • Tables for Europe Datacenter customers?

        It's been over a year now for the launch of Zoho Tables - and still not available für EU DC customers. When will it be available?
      • Guided Conversations - Ticket Creation

        Hi there, Using Guided Conversations to Take Customer Data and apply it into a Support Ticket for internal use, Is there a way to take multiple Textual Variables Inputs (A series of questions), and have the answers all appear in the Description of the
      • How to send certain invoices for Approval based on condition?

        To streamline operations, I need the invoices to go for approval when certain conditions are met. For example, if my staff gives a discount of x amount, it must go for approval. If there is no discount, then the invoice will be approved automatically.
      • Unable to continue payment

        Hi, I want to make a payment for my email subscription, but I cannot proceed with the payment because my NITKU is invalid. In Indonesia, the NITKU consists of 22 digits, but Zoho only provides 20 digits, causing my NITKU to be invalid. Please help me
      • Is there a way to show contact emails in the Account?

        I know I can see the emails I have sent and received on a Contact detail view, but I want to be able to see all the emails that have been sent and received between all an Accounts Contacts on the Account Detail view. That way when I see the Account detail
      • Massive spam pretending to come from our address – is this a Zoho security issue?

        Hi, We’ve been receiving more and more suspicious emails lately — many of them clearly look like scams. But yesterday, we got an email that appeared to be sent from our own address, which was very concerning. We're starting to wonder if this might be
      • Cant recieve mails

        I’m having an issue with my external IMAP account not fetching any emails into Zoho Mail, even though the connection test says “Success”. I can send, if someone sends an email to me. my original directory (home.pl host) recieves it in their portal but
      • Zoho Sheet Autofit Data

        While using Autofit Data function in Zoho Sheets with Devnagri Maratji or Hindi Fonts, a word or a number, it keeps couple of characters outside the right side border.
      • Enhancements to finance suite integrations

        Update on the migration (October 28, 2025): Starting this week (October 29 tentatively), we’ll begin migrating Zoho CRM users to Zoho Books as integration users. This means actions will now run under each user’s own Zoho Books access, instead of the admin’s.
      • Edit 'my' Notes only

        The permissions around Notes should be more granular, and allow to user to be able to edit the notes he created only. The edit Notes permission is useful as it allows the user to correct any mistakes or add information as needed. However, with this same
      • How do I filter contacts by account parameters?

        Need to filter a contact view according to account parameter, eg account type. Without this filter users are overwhelmed with irrelevant contacts. Workaround is to create a custom 'Contact Type' field but this unbearable duplicity as the information already
      • Job Alerts for Candidates

        hi All, I have 2 questions relating to sharing job details with candidates. 1. is there a way to notify candidates that meet certain criteria of current jobs available? eg. I run a candidate search, and identify 50 candidates that might be suitable. Can
      • Add multiple users to a task

        When I´m assigning a task it is almost always related to more than one person. Practical situation: When a client request some improvement the related department opens the task with the situation and people related to it as the client itself, the salesman
      • Enhancing Task Accuracy: Automatically notify the owners upon Task duplication.

        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. The requirement
      • Show/ hide specific field based on user

        Can someone please help me with a client script to achieve the following? I've already tried a couple of different scripts I've found on here (updating to match my details etc...) but none of them seem to work. No errors flagged in the codes, it just
      • Where are Kanban swimlanes

        So i've been playing with Zoho Projects Kanban view a bit more. It appears that task lists are being used as the Kanban columns, which makes sense from the implementation point of view but not the logical one.  Kanban columns are statuses that a task can flow through, while a task list has been a logical way to organize related tasks and relate them to a mislestone. In other words a task in a particular task can go through several stages while remaining in the same task list. After doing some research
      • Tip 19: How to display images in Pages using ZML snippets

        Hi folks, We're back with another tip on how to use Zoho Markup Language (ZML) to create interactive pages in Zoho Creator. You can use ZML snippets to add various kinds of components to your pages and structure them in meaningful ways. That's not all, though—using ZML you can ensure your application is automatically compatible with all kinds of devices without any inconsistencies. We often get questions from users about how to invoke Deluge scripts within ZML code. Here's a simple use case for adding
      • Can zoho swign format block text spacing automatically when prefilled from zoho crm?

        I'm sending zoho sign template from zoho crm, so that zoho crm pre-populates most fields. I have existing pdf documents that i am having signed. I have no ability to change the pdf documents, they are standardized government forms. The problem I am facing
      • Zoho Inventory / Finance Suite - Add feature to prevent duplicate values in Item Unit field

        I've noticed that a client has 2 values the same in the Unit field on edit/create Items. This surprised me as why would you have 2 units with the same name. Please consider adding a feature which prevents this as it seems to serve no purpose.
      • Reference lookup field values in Client script

        hello all, I'm using a "ZDK.Apps.CRM.Products.searchByCriteria" function call, which is returning the matching records correctly; however, one of the fields is a lookup field which I need the associated data. I believe there is a way to get this data
      • In App Auto Refresh/Update Features

        Hi,    I am trying to use Zoho Creator for Restaurant management. While using the android apps, I reliased the apps would not auto refresh if there is new entries i.e new kitchen order ticket (KOT) from other users.   The apps does received notification but would not auto refresh, users required to refresh the apps manually in order to see the new KOT in the apps.    I am wondering why this features is not implemented? Or is this feature being considered to be implemented in the future? With the
      • Next Page