ACTION_ID: zoho_crm_upsert_record NAME: Zoho: Upsert Record CATEGORY: CRM CREDITS: 0 Create or update a record in any Zoho CRM module. Duplicate-check fields decide whether the call updates an existing record or inserts a new one. PREREQUISITE: Zoho CRM account connection — the user must create it in the Floqer UI (Connections page); an agent cannot. Without it the action fails the row with a connection / authentication error. Confirm it exists before configuring. 1. INPUTS select_module (dynamicDropdown, optional) Select Module. Select the module to interact with(eg: Lead, Contact, Account, etc) enter_the_fields (jsonArrayWithDropDown, optional) Enter the Fields. Enter all the necessary fields for the selected module. duplicate_check_fields (dynamicMultiDropdown, optional) Duplicate Check Fields. If a value for any field selected in this is duplicate, it will update the record, if not it will create a new one 2. OUTPUTS response (string) — Response from the successful request. record_id (string) — ID of the added record 3. HOW TO CONFIGURE Resolve the module first, then the field list for that module: POST .../options/select_module (body: {}) POST .../options/enter_the_fields (body: { "context": { "select_module": "Leads" } }) POST .../options/duplicate_check_fields (body: { "context": { "select_module": "Leads" } }) Configure Action body: { "inputs": { "select_module": "Leads", "enter_the_fields": [ { "name": "Email", "value": "{{person_work_email_waterfall_01ab.work_email}}" }, { "name": "Last_Name", "value": "{{input.last_name}}" }, { "name": "Company", "value": "{{input.company_name}}" } ], "duplicate_check_fields": ["Email"] } } Field-by-field: - select_module Zoho module API name (`Leads`, `Contacts`, `Accounts`, or a custom module). - enter_the_fields `[{name, value}]` against the module's field API names — note Zoho uses `Last_Name`, not `last_name`. - duplicate_check_fields String array. If any listed field matches an existing record, that record is updated; otherwise a new one is created. Omit to always insert. 4. KEY NOTES - Field names are Zoho API names (`Last_Name`, `Account_Name`), not display labels. Always resolve them via Get Action Field Options rather than typing the label you see in the Zoho UI. - `enter_the_fields` and `duplicate_check_fields` both need `select_module` in the request `context` — calling them bare returns a 400 naming the missing key. - With `duplicate_check_fields` empty the action always inserts, which will create duplicates on a re-run. Set it to your natural key (usually `Email`). - Zoho enforces module-level required fields — `Leads` needs `Last_Name`, `Accounts` needs `Account_Name`. Omitting them fails the row. - `record_id` is returned and can be chained into `http_api_call` for anything the action does not cover. 5. WHERE IT FITS IN A WORKFLOW Pattern: zoho_crm_search_records -> zoho_crm_upsert_record. Or go straight to the upsert and let `duplicate_check_fields` do the matching in one call. 6. WHEN TO USE Use zoho_crm_upsert_record to write enriched rows into Zoho CRM with duplicate handling built into the same call. 7. WHEN NOT TO USE Need to read Zoho records rather than write them -> action-detail/zoho_crm_search_records.txt The CRM is Salesforce -> action-detail/salesforce_upsert_record.txt Last updated: 2026-08-03.