Search all guides

Reference · Tools

Freshworks CRM integration

Manage accounts, contacts, deals, appointments, notes, tasks, sales activities, and search in Freshworks CRM (Freshsales).

Action Marketing v1

The Freshworks CRM node gives your workflows full create, read, update, and delete access to contacts, accounts, deals, tasks, notes, appointments, and sales activities in Freshsales. You can, for example, automatically enrol new form signups as CRM contacts, update a deal stage when a payment clears, or pull a saved deal view into a nightly report. It connects using a Freshworks API key and your account domain.

Works as
Action
Tool name
freshworks_crm
Operations
5 — Create , Delete , Get , Get Many , Update
Parameters
78
Outputs
Output, Error
Credentials
Freshworks CRM API
Official docs
Freshworks CRM docs developers.freshworks.com

What you can build with Freshworks CRM

  • Create a new contact in Freshworks CRM.
  • Get all deals from a Freshworks CRM view.
  • Update an account in Freshworks CRM.
  • Search contacts by email in Freshworks CRM.
  • Create a task assigned to a user in Freshworks CRM.

Overview

Freshworks CRM (formerly Freshsales) is a cloud sales platform for tracking leads, contacts, accounts, deals, appointments, notes, tasks and sales activities. This node gives a workflow full create, read, update and delete access to each of those records, plus cross-entity search and lookup, so you can keep your CRM in step with the rest of your pipeline — enrol new signups as contacts, push closed-won deals forward, file notes against an account, or pull a saved view of deals into a report. It authenticates with an API key and your Freshworks account domain.

Node Type

Action — processes input items and produces output

Input / Output

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool requires Freshworks CRM API credentials. See the Credentials Guide for setup instructions.

Resources

ResourceValue
Accountaccount
Appointmentappointment
Contactcontact
Dealdeal
Notenote
Sales ActivitysalesActivity
Searchsearch
Tasktask

Operations

The available operations depend on the resource you select.

Account

OperationValueDescription
CreatecreateCreate a new account.
DeletedeleteDelete an account.
GetgetRetrieve one account by ID.
Get ManygetAllRetrieve accounts from a saved view.
UpdateupdateUpdate an existing account.

Appointment

OperationValueDescription
CreatecreateCreate a new appointment.
DeletedeleteDelete an appointment.
GetgetRetrieve one appointment by ID.
Get ManygetAllRetrieve appointments.
UpdateupdateUpdate an existing appointment.

Contact

OperationValueDescription
CreatecreateCreate a new contact.
DeletedeleteDelete a contact.
GetgetRetrieve one contact by ID.
Get ManygetAllRetrieve contacts from a saved view.
UpdateupdateUpdate an existing contact.

Deal

OperationValueDescription
CreatecreateCreate a new deal.
DeletedeleteDelete a deal.
GetgetRetrieve one deal by ID.
Get ManygetAllRetrieve deals from a saved view.
UpdateupdateUpdate an existing deal.

Note

OperationValueDescription
CreatecreateAttach a new note to a contact, deal or account.
DeletedeleteDelete a note.
UpdateupdateUpdate an existing note.

Sales Activity

OperationValueDescription
GetgetRetrieve one sales activity by ID.
Get ManygetAllRetrieve sales activities.

Search

OperationValueDescription
QueryquerySearch across entity types for a term.
LookuplookupFind records by an exact field value.

Task

OperationValueDescription
CreatecreateCreate a new task.
DeletedeleteDelete a task.
GetgetRetrieve one task by ID.
Get ManygetAllRetrieve tasks.
UpdateupdateUpdate an existing task.

Parameters

Account: Create

ParameterTypeRequiredDefaultDescription
NamestringYes—Name of the account.
Additional FieldscollectionNo{}Optional account fields to set when the account is created.
— AddressstringNo—Address of the account.
— Annual RevenuenumberNo0Annual revenue of the account.
— Business Type IDstringNo—ID of the business type. Find via GET /selector/business_types.
— CitystringNo—City of the account.
— CountrystringNo—Country of the account.
— FacebookstringNo—Facebook username.
— Industry Type IDstringNo—ID of the industry type. Find via GET /selector/industry_types.
— LinkedInstringNo—LinkedIn account URL or username.
— Number of EmployeesnumberNo0Number of employees.
— Owner ID (owner_id)stringNo—ID of the user the account is assigned to. Find via GET /selector/owners.
— Parent Sales Account IDstringNo—Parent account ID.
— PhonestringNo—Phone number.
— StatestringNo—State.
— Territory IDstringNo—ID of the territory. Find via GET /selector/territories.
— TwitterstringNo—Twitter username.
— WebsitestringNo—Website URL.
— ZipcodestringNo—Zipcode.

Account: Delete

ParameterTypeRequiredDefaultDescription
Account IDstringYes—ID of the account.

Account: Get

ParameterTypeRequiredDefaultDescription
Account IDstringYes—ID of the account.

Account: Get Many

ParameterTypeRequiredDefaultDescription
View IDstringYes—ID of a saved account view/filter. Find via GET /sales_accounts/filters.
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)

Account: Update

ParameterTypeRequiredDefaultDescription
Account IDstringYes—ID of the account to update.
Update FieldscollectionNo{}Account fields to change. Supply at least one, or the node reports an error for that item.
— AddressstringNo—Address of the account.
— Annual RevenuenumberNo0Annual revenue of the account.
— Business Type IDstringNo—ID of the business type.
— CitystringNo—City of the account.
— CountrystringNo—Country of the account.
— FacebookstringNo—Facebook username.
— Industry Type IDstringNo—ID of the industry type.
— LinkedInstringNo—LinkedIn username.
— NamestringNo—Name of the account.
— Number of EmployeesnumberNo0Number of employees.
— Owner ID (owner_id)stringNo—ID of the user assigned.
— Parent Sales Account IDstringNo—Parent account ID.
— PhonestringNo—Phone number.
— StatestringNo—State.
— Territory IDstringNo—ID of the territory.
— TwitterstringNo—Twitter username.
— WebsitestringNo—Website URL.
— ZipcodestringNo—Zipcode.

Appointment: Create

ParameterTypeRequiredDefaultDescription
TitlestringYes—Title of the appointment.
Start Date (fromDate)stringYes—Start date/time of the appointment in ISO 8601 format.
End Date (endDate)stringYes—End date/time of the appointment in ISO 8601 format.
AttendeesjsonNo[]JSON array of attendees. Each: { “type”: “contact”|“user”, “contactId”: ”…”, “userId”: ”…” }.
Additional FieldscollectionNo{}Optional appointment fields to set when the appointment is created.
— Creator IDstringNo—ID of the user who created the appointment.
— Is All-DaybooleanNofalseWhether it is an all-day appointment.
— LatitudestringNo—Latitude of the location.
— LocationstringNo—Location of the appointment.
— LongitudestringNo—Longitude of the location.
— Outcome IDstringNo—ID of the outcome. Find via GET /selector/sales_activity_outcomes.
— Target IDstringNo—ID of the target entity.
— Target Type (targetable_type)optionsNoContactType of the entity the appointment is linked to.
Options: Contact, Deal, SalesAccount
— Time ZonestringNo—Timezone for the appointment (e.g. America/New_York).

Appointment: Delete

ParameterTypeRequiredDefaultDescription
Appointment IDstringYes—ID of the appointment.

Appointment: Get

ParameterTypeRequiredDefaultDescription
Appointment IDstringYes—ID of the appointment.

Appointment: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)
FilterscollectionNo{}Narrow the appointments that are returned.
— IncludeoptionsNocreaterRelated records to include with each appointment.
Options: appointment_attendees, creater (Creator), targetable (Target)
— TimeoptionsNoupcomingWhich appointments to return.
Options: past, upcoming

Appointment: Update

ParameterTypeRequiredDefaultDescription
Appointment IDstringYes—ID of the appointment to update.
Update FieldscollectionNo{}Appointment fields to change. Supply at least one, or the node reports an error for that item.
— AttendeesjsonNo[]JSON array of attendees. Each: { “type”: “contact”|“user”, “contactId”: ”…”, “userId”: ”…” }.
— Creator IDstringNo—ID of the creator user.
— End Date (end_date)stringNo—End date/time (ISO 8601).
— Is All-DaybooleanNofalseWhether it is all-day.
— LatitudestringNo—Latitude.
— LocationstringNo—Location.
— LongitudestringNo—Longitude.
— Outcome IDstringNo—Outcome ID.
— Start Date (from_date)stringNo—Start date/time (ISO 8601).
— Target IDstringNo—Target entity ID.
— Target Type (targetable_type)optionsNoContactType of the entity the appointment is linked to.
Options: Contact, Deal, SalesAccount
— Time ZonestringNo—Timezone.
— TitlestringNo—Title.

Contact: Create

ParameterTypeRequiredDefaultDescription
First Name (firstName)stringYes—First name of the contact.
Last Name (lastName)stringYes—Last name of the contact.
Email AddressstringYes—Email address of the contact.
Additional FieldscollectionNo{}Optional contact fields to set when the contact is created.
— AddressstringNo—Address.
— Campaign IDstringNo—Campaign ID. Find via GET /selector/campaigns.
— CitystringNo—City.
— Contact Status IDstringNo—Contact status ID. Find via GET /selector/contact_statuses.
— CountrystringNo—Country.
— External IDstringNo—External ID.
— FacebookstringNo—Facebook username.
— Job TitlestringNo—Job title.
— KeywordsstringNo—Keywords.
— Lead Source IDstringNo—Lead source ID.
— Lifecycle Stage IDstringNo—Lifecycle stage ID. Find via GET /selector/lifecycle_stages.
— LinkedInstringNo—LinkedIn.
— MediumstringNo—Medium.
— Mobile NumberstringNo—Mobile number.
— Owner ID (owner_id)stringNo—Owner user ID.
— Sales Account IDsstringNo—Comma-separated sales account IDs. First is marked as primary.
— StatestringNo—State.
— Subscription StatusstringNo—Subscription status.
— Subscription TypesstringNo—Subscription types.
— Territory IDstringNo—Territory ID.
— Time ZonestringNo—Timezone.
— TwitterstringNo—Twitter username.
— Work NumberstringNo—Work phone number.
— ZipcodestringNo—Zipcode.

Contact: Delete

ParameterTypeRequiredDefaultDescription
Contact IDstringYes—ID of the contact.

Contact: Get

ParameterTypeRequiredDefaultDescription
Contact IDstringYes—ID of the contact.

Contact: Get Many

ParameterTypeRequiredDefaultDescription
View IDstringYes—ID of a saved contact view/filter. Find via GET /contacts/filters.
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)

Contact: Update

ParameterTypeRequiredDefaultDescription
Contact IDstringYes—ID of the contact to update.
Update FieldscollectionNo{}Contact fields to change. Supply at least one, or the node reports an error for that item.
— AddressstringNo—Address.
— Campaign IDstringNo—Campaign ID.
— CitystringNo—City.
— Contact Status IDstringNo—Contact status ID.
— CountrystringNo—Country.
— External IDstringNo—External ID.
— FacebookstringNo—Facebook username.
— First Name (first_name)stringNo—First name.
— Job TitlestringNo—Job title.
— KeywordsstringNo—Keywords.
— Last Name (last_name)stringNo—Last name.
— Lead Source IDstringNo—Lead source ID.
— Lifecycle Stage IDstringNo—Lifecycle stage ID.
— LinkedInstringNo—LinkedIn.
— MediumstringNo—Medium.
— Mobile NumberstringNo—Mobile number.
— Owner ID (owner_id)stringNo—Owner user ID.
— Sales Account IDsstringNo—Comma-separated sales account IDs.
— StatestringNo—State.
— Subscription StatusstringNo—Subscription status.
— Subscription TypesstringNo—Subscription types.
— Territory IDstringNo—Territory ID.
— Time ZonestringNo—Timezone.
— TwitterstringNo—Twitter username.
— Work NumberstringNo—Work phone number.
— ZipcodestringNo—Zipcode.

Deal: Create

ParameterTypeRequiredDefaultDescription
NamestringYes—Name of the deal.
AmountnumberYes0Value of the deal.
Additional FieldscollectionNo{}Optional deal fields to set when the deal is created.
— Base Currency AmountnumberNo0Value in base currency.
— Campaign IDstringNo—Campaign ID.
— Currency IDstringNo—Currency ID. Find via GET /selector/currencies.
— Deal Payment Status IDstringNo—Payment status ID. Find via GET /selector/deal_payment_statuses.
— Deal Pipeline IDstringNo—Pipeline ID. Find via GET /selector/deal_pipelines.
— Deal Product IDstringNo—Product ID. Find via GET /selector/deal_products.
— Deal Reason IDstringNo—Reason ID (for lost deals). Find via GET /selector/deal_reasons.
— Deal Stage IDstringNo—Stage ID. Find via GET /selector/deal_stages.
— Deal Type IDstringNo—Type ID. Find via GET /selector/deal_types.
— Lead Source IDstringNo—Lead source ID.
— Owner ID (owner_id)stringNo—Owner user ID.
— ProbabilitynumberNo0Probability 0-100.
— Sales Account IDstringNo—Sales account ID.
— Territory IDstringNo—Territory ID.

Deal: Delete

ParameterTypeRequiredDefaultDescription
Deal IDstringYes—ID of the deal.

Deal: Get

ParameterTypeRequiredDefaultDescription
Deal IDstringYes—ID of the deal.

Deal: Get Many

ParameterTypeRequiredDefaultDescription
View IDstringYes—ID of a saved deal view/filter. Find via GET /deals/filters.
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)

Deal: Update

ParameterTypeRequiredDefaultDescription
Deal IDstringYes—ID of the deal to update.
Update FieldscollectionNo{}Deal fields to change. Supply at least one, or the node reports an error for that item.
— AmountnumberNo0Value of the deal.
— Base Currency AmountnumberNo0Value in base currency.
— Campaign IDstringNo—Campaign ID.
— Currency IDstringNo—Currency ID.
— Deal Payment Status IDstringNo—Payment status ID.
— Deal Pipeline IDstringNo—Pipeline ID.
— Deal Product IDstringNo—Product ID.
— Deal Reason IDstringNo—Reason ID.
— Deal Stage IDstringNo—Stage ID.
— Deal Type IDstringNo—Type ID.
— Lead Source IDstringNo—Lead source ID.
— NamestringNo—Name of the deal.
— Owner ID (owner_id)stringNo—Owner user ID.
— ProbabilitynumberNo0Probability 0-100.
— Sales Account IDstringNo—Sales account ID.
— Territory IDstringNo—Territory ID.

Note: Create

ParameterTypeRequiredDefaultDescription
ContentstringYes—Content of the note.
Target Type (targetableType)optionsYesContactType of the entity for which the note is created.
Options: Contact, Deal, SalesAccount
Target IDstringYes—ID of the entity for which the note is created.

Note: Delete

ParameterTypeRequiredDefaultDescription
Note IDstringYes—ID of the note to delete.

Note: Update

ParameterTypeRequiredDefaultDescription
Note IDstringYes—ID of the note to update.
Update FieldscollectionNo{}Note fields to change. Supply at least one, or the node reports an error for that item.
— ContentstringNo—Content of the note.
— Target IDstringNo—Target entity ID.
— Target Type (targetable_type)optionsNoContactTarget entity type.
Options: Contact, Deal, SalesAccount

Sales Activity: Get

ParameterTypeRequiredDefaultDescription
Sales Activity IDstringYes—ID of the sales activity.

Sales Activity: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)

Search: Query

ParameterTypeRequiredDefaultDescription
Search TermstringYes—Term used for searching entities.
Search on EntitiesstringYes—Comma-separated entity types to search: contact, deal, sales_account, user.
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo25Max number of results to return. (shown when Return All is false)

Search: Lookup

ParameterTypeRequiredDefaultDescription
Search FieldoptionsYesemailField to search against.
Options: email, name, customField
Field ValuestringYes—Value to search for. (shown when Search Field is email, name)
Custom Field NamestringYes—Name of the custom field to search against. (shown when Search Field is customField)
Custom Field ValuestringYes—Value of the custom field to search for. (shown when Search Field is customField)
OptionscollectionNo{}Extra options for the lookup.
— EntitiesstringNo—Comma-separated entity types: contact, deal, sales_account.

Task: Create

ParameterTypeRequiredDefaultDescription
TitlestringYes—Title of the task.
Due DatestringYes—Due date/time in ISO 8601 format.
Owner ID (ownerId)stringYes—ID of the user the task is assigned to. Find via GET /selector/owners.
Target Type (targetableType)optionsYesContactType of entity for the task.
Options: Contact, Deal, SalesAccount
Target IDstringYes—ID of the target entity.
Additional FieldscollectionNo{}Optional task fields to set when the task is created.
— Creator IDstringNo—ID of the user who created the task.
— Outcome IDstringNo—Outcome ID.
— Task Type IDstringNo—Task type ID.

Task: Delete

ParameterTypeRequiredDefaultDescription
Task IDstringYes—ID of the task.

Task: Get

ParameterTypeRequiredDefaultDescription
Task IDstringYes—ID of the task.

Task: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)
FilterscollectionNo{}Narrow the tasks that are returned.
— IncludeoptionsNoownerRelated records to include with each task.
Options: owner, targetable (Target), users
— StatusoptionsNoopenWhich tasks to return.
Options: completed, due_today, due_tomorrow, open, overdue

Task: Update

ParameterTypeRequiredDefaultDescription
Task IDstringYes—ID of the task to update.
Update FieldscollectionNo{}Task fields to change. Supply at least one, or the node reports an error for that item.
— Creator IDstringNo—Creator user ID.
— Due DatestringNo—Due date/time (ISO 8601).
— Outcome IDstringNo—Outcome ID.
— Owner ID (owner_id)stringNo—Owner user ID.
— Target IDstringNo—Target entity ID.
— Target Type (targetable_type)optionsNoContactTarget entity type.
Options: Contact, Deal, SalesAccount
— Task Type IDstringNo—Task type ID.
— TitlestringNo—Title of the task.

All Operations

ParameterTypeRequiredDefaultDescription
Max ConcurrencynumberNo10Maximum number of items to process concurrently.

Output Data

Every input item produces exactly one output item — the node never fans out, so a list of 200 deals arrives as one item holding an array, not 200 items. Binary data on the input item is forwarded unchanged.

For single-record operations the API response is merged onto the input item JSON ({ ...itemJson, ...record }), so upstream fields you were carrying stay available alongside the record’s own fields. List operations are the exception: their result replaces the item JSON with items and count.

OperationsWhat lands on the output item
create, get, update on account, appointment, contact, deal, note and task; get on salesActivityThe record’s own fields, merged onto the input item JSON
delete on any resourcesuccess: true, merged onto the input item JSON
getAll on account, appointment, contact, deal, salesActivity and task; query on searchitems (the array of records) and count — these replace the input item JSON
lookup on searchThe lookup response, merged onto the input item JSON

A list result looks like this (each entry trimmed here to a single field):

{
  "count": 2,
  "items": [
    { "name": "Acme Corporation" },
    { "name": "Globex" }
  ]
}

To turn a list into one item per record, put a Split Out node on items immediately after this node. Reference the values downstream by expression, e.g. {{ $json.count }} or {{ $json.items[0].name }}.

A delete leaves only the confirmation flag on top of the incoming JSON:

{
  "success": true
}

Beyond items, count and success, the fields on a record are whatever the Freshworks API returns for that entity — the node unwraps the API’s single-record envelope and puts the record itself on the item. Run the node once and inspect the output before writing downstream expressions against a specific field.

Example Configuration

Create a contact from an upstream signup item:

{
  "type": "freshworks_crm",
  "parameters": {
    "resource": "contact",
    "operation": "create",
    "firstName": "{{ $json.firstName }}",
    "lastName": "{{ $json.lastName }}",
    "emails": "{{ $json.email }}",
    "additionalFields": {
      "job_title": "{{ $json.jobTitle }}",
      "mobile_number": "{{ $json.phone }}",
      "sales_accounts": "{{ $json.accountId }}"
    }
  }
}

Pull the first 50 deals from a saved view:

{
  "type": "freshworks_crm",
  "parameters": {
    "resource": "deal",
    "operation": "getAll",
    "view": "{{ $json.viewId }}",
    "returnAll": false,
    "limit": 50
  }
}

Update an account with enriched firmographics:

{
  "type": "freshworks_crm",
  "parameters": {
    "resource": "account",
    "operation": "update",
    "accountId": "{{ $json.accountId }}",
    "updateFields": {
      "annual_revenue": 2500000,
      "number_of_employees": 120,
      "website": "{{ $json.website }}"
    }
  }
}

Create a follow-up task against a deal and assign it to an owner:

{
  "type": "freshworks_crm",
  "parameters": {
    "resource": "task",
    "operation": "create",
    "title": "Follow up on {{ $json.dealName }}",
    "dueDate": "{{ $json.dueDate }}",
    "ownerId": "{{ $json.ownerId }}",
    "targetableType": "Deal",
    "targetable_id": "{{ $json.dealId }}",
    "additionalFields": {
      "task_type_id": "{{ $json.taskTypeId }}"
    }
  }
}

Fetch every overdue task with its owner record attached:

{
  "type": "freshworks_crm",
  "parameters": {
    "resource": "task",
    "operation": "getAll",
    "returnAll": true,
    "filters": {
      "filter": "overdue",
      "include": "owner"
    }
  }
}

Look a contact up by exact email address before deciding whether to create one:

{
  "type": "freshworks_crm",
  "parameters": {
    "resource": "search",
    "operation": "lookup",
    "searchField": "email",
    "fieldValue": "{{ $json.email }}",
    "options": {
      "entities": "contact"
    }
  }
}

Error Handling

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes failed items to Error output port

Tips

Freshworks CRM manages accounts, contacts, deals, appointments, tasks and notes in a Freshsales account, reads sales activities and searches records. It is the right tool when a workflow must create, update, delete, fetch or list accounts, contacts, deals, appointments or tasks, write or delete a note, read sales activities, or run a search or lookup, rather than another CRM; a note cannot be fetched. It returns the affected or matching records as JSON items, with getAll paging through lists.

Important Notes

  1. Collection parameters are flat objects. Additional Fields, Update Fields, Filters and Options each take a plain object of field name to value — no array wrappers and no placeholder keys around the entries.
  2. Dates are ISO 8601. Give Start Date, End Date and Due Date values such as 2026-01-15T10:00:00Z. Set a Time Zone on the appointment if you need the record stamped to a specific zone.
  3. Relationship fields take IDs, not names. Owner, territory, pipeline, stage, lead source and similar fields expect the ID of the related record in your Freshworks account.
  4. Parameters are scoped to a resource and operation. Changing either one changes which fields the node shows, so pick the resource first and the operation second.
  5. Max Concurrency is your rate-limit lever. Lower it when a large batch of items starts drawing throttling responses from the Freshworks API.
  6. Update Fields cannot be empty. Every update operation fails the item if you supply no fields to change.
  7. Get Many on accounts, contacts and deals needs a View ID. These lists are read through a saved Freshworks view, so create the view in the CRM first and paste its ID into View ID.

Frequently asked questions

What credentials does this node require?

You need a Freshworks CRM API credential, which combines a Freshworks API key with your account domain. Generate the API key inside Freshworks CRM under your profile settings, then enter both values when creating the credential in BusyBot. Without a valid domain, every request will fail to route correctly.

I want to list all deals in a pipeline stage — why does 'Get Many' ask for a View ID?

For accounts, contacts, and deals, the node reads lists through a saved Freshworks view rather than accepting raw filter parameters. You need to create the view inside Freshworks CRM first (filtering by stage, owner, date range, or whatever you need), then copy its ID into the View ID field in BusyBot. There is no way to skip the view step for those three resources.

My update operation is failing with an error even though the record ID is correct. What's wrong?

Update operations require at least one field in the Update Fields object — the node will fail the item if Update Fields is empty. Make sure you are passing a plain object of field-name-to-value pairs (no array wrappers), and that you have included at least one field to change.

How should I format dates for appointments, tasks, and deals?

All date and time fields — including Start Date, End Date, and Due Date — expect ISO 8601 strings such as 2026-01-15T10:00:00Z. If the record needs to be stamped to a timezone other than UTC, set the Time Zone field on the appointment explicitly; otherwise the CRM will interpret the time in its account default zone.

The workflow is hitting Freshworks API rate limits when processing a large batch. How do I control that?

Reduce the Max Concurrency setting on the node. This limits how many parallel requests BusyBot sends to the Freshworks API at once, which slows throughput but prevents throttling errors. Start by lowering it to 1 or 2 when a large batch triggers rate-limit responses, then raise it gradually to find a stable value.

Build with Freshworks CRM

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Freshworks CRM API credentials first.

Open BusyBot

Last reviewed . Spotted something wrong? Tell us.