Reference · Tools

Freshworks CRM

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.

Node type
Action
Parameters
78
Outputs
Output, Error
Credentials
Freshworks CRM API

Freshworks CRM

Manage accounts, contacts, deals, appointments, notes, tasks, and search 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.

Category: Marketing
Tool Name: freshworks_crm
Version: 1

Appearance: Icon: lucide-CircleDollarSign | Color: #EE5A24

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
NamestringYesName of the account.
Additional FieldscollectionNo{}Optional account fields to set when the account is created.
— AddressstringNoAddress of the account.
— Annual RevenuenumberNo0Annual revenue of the account.
— Business Type IDstringNoID of the business type. Find via GET /selector/business_types.
— CitystringNoCity of the account.
— CountrystringNoCountry of the account.
— FacebookstringNoFacebook username.
— Industry Type IDstringNoID of the industry type. Find via GET /selector/industry_types.
— LinkedInstringNoLinkedIn account URL or username.
— Number of EmployeesnumberNo0Number of employees.
— Owner ID (owner_id)stringNoID of the user the account is assigned to. Find via GET /selector/owners.
— Parent Sales Account IDstringNoParent account ID.
— PhonestringNoPhone number.
— StatestringNoState.
— Territory IDstringNoID of the territory. Find via GET /selector/territories.
— TwitterstringNoTwitter username.
— WebsitestringNoWebsite URL.
— ZipcodestringNoZipcode.

Account: Delete

ParameterTypeRequiredDefaultDescription
Account IDstringYesID of the account.

Account: Get

ParameterTypeRequiredDefaultDescription
Account IDstringYesID of the account.

Account: Get Many

ParameterTypeRequiredDefaultDescription
View IDstringYesID 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 IDstringYesID of the account to update.
Update FieldscollectionNo{}Account fields to change. Supply at least one, or the node reports an error for that item.
— AddressstringNoAddress of the account.
— Annual RevenuenumberNo0Annual revenue of the account.
— Business Type IDstringNoID of the business type.
— CitystringNoCity of the account.
— CountrystringNoCountry of the account.
— FacebookstringNoFacebook username.
— Industry Type IDstringNoID of the industry type.
— LinkedInstringNoLinkedIn username.
— NamestringNoName of the account.
— Number of EmployeesnumberNo0Number of employees.
— Owner ID (owner_id)stringNoID of the user assigned.
— Parent Sales Account IDstringNoParent account ID.
— PhonestringNoPhone number.
— StatestringNoState.
— Territory IDstringNoID of the territory.
— TwitterstringNoTwitter username.
— WebsitestringNoWebsite URL.
— ZipcodestringNoZipcode.

Appointment: Create

ParameterTypeRequiredDefaultDescription
TitlestringYesTitle of the appointment.
Start Date (fromDate)stringYesStart date/time of the appointment in ISO 8601 format.
End Date (endDate)stringYesEnd 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 IDstringNoID of the user who created the appointment.
— Is All-DaybooleanNofalseWhether it is an all-day appointment.
— LatitudestringNoLatitude of the location.
— LocationstringNoLocation of the appointment.
— LongitudestringNoLongitude of the location.
— Outcome IDstringNoID of the outcome. Find via GET /selector/sales_activity_outcomes.
— Target IDstringNoID of the target entity.
— Target Type (targetable_type)optionsNoContactType of the entity the appointment is linked to.
Options: Contact, Deal, SalesAccount
— Time ZonestringNoTimezone for the appointment (e.g. America/New_York).

Appointment: Delete

ParameterTypeRequiredDefaultDescription
Appointment IDstringYesID of the appointment.

Appointment: Get

ParameterTypeRequiredDefaultDescription
Appointment IDstringYesID 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 IDstringYesID 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 IDstringNoID of the creator user.
— End Date (end_date)stringNoEnd date/time (ISO 8601).
— Is All-DaybooleanNofalseWhether it is all-day.
— LatitudestringNoLatitude.
— LocationstringNoLocation.
— LongitudestringNoLongitude.
— Outcome IDstringNoOutcome ID.
— Start Date (from_date)stringNoStart date/time (ISO 8601).
— Target IDstringNoTarget entity ID.
— Target Type (targetable_type)optionsNoContactType of the entity the appointment is linked to.
Options: Contact, Deal, SalesAccount
— Time ZonestringNoTimezone.
— TitlestringNoTitle.

Contact: Create

ParameterTypeRequiredDefaultDescription
First Name (firstName)stringYesFirst name of the contact.
Last Name (lastName)stringYesLast name of the contact.
Email AddressstringYesEmail address of the contact.
Additional FieldscollectionNo{}Optional contact fields to set when the contact is created.
— AddressstringNoAddress.
— Campaign IDstringNoCampaign ID. Find via GET /selector/campaigns.
— CitystringNoCity.
— Contact Status IDstringNoContact status ID. Find via GET /selector/contact_statuses.
— CountrystringNoCountry.
— External IDstringNoExternal ID.
— FacebookstringNoFacebook username.
— Job TitlestringNoJob title.
— KeywordsstringNoKeywords.
— Lead Source IDstringNoLead source ID.
— Lifecycle Stage IDstringNoLifecycle stage ID. Find via GET /selector/lifecycle_stages.
— LinkedInstringNoLinkedIn.
— MediumstringNoMedium.
— Mobile NumberstringNoMobile number.
— Owner ID (owner_id)stringNoOwner user ID.
— Sales Account IDsstringNoComma-separated sales account IDs. First is marked as primary.
— StatestringNoState.
— Subscription StatusstringNoSubscription status.
— Subscription TypesstringNoSubscription types.
— Territory IDstringNoTerritory ID.
— Time ZonestringNoTimezone.
— TwitterstringNoTwitter username.
— Work NumberstringNoWork phone number.
— ZipcodestringNoZipcode.

Contact: Delete

ParameterTypeRequiredDefaultDescription
Contact IDstringYesID of the contact.

Contact: Get

ParameterTypeRequiredDefaultDescription
Contact IDstringYesID of the contact.

Contact: Get Many

ParameterTypeRequiredDefaultDescription
View IDstringYesID 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 IDstringYesID of the contact to update.
Update FieldscollectionNo{}Contact fields to change. Supply at least one, or the node reports an error for that item.
— AddressstringNoAddress.
— Campaign IDstringNoCampaign ID.
— CitystringNoCity.
— Contact Status IDstringNoContact status ID.
— CountrystringNoCountry.
— External IDstringNoExternal ID.
— FacebookstringNoFacebook username.
— First Name (first_name)stringNoFirst name.
— Job TitlestringNoJob title.
— KeywordsstringNoKeywords.
— Last Name (last_name)stringNoLast name.
— Lead Source IDstringNoLead source ID.
— Lifecycle Stage IDstringNoLifecycle stage ID.
— LinkedInstringNoLinkedIn.
— MediumstringNoMedium.
— Mobile NumberstringNoMobile number.
— Owner ID (owner_id)stringNoOwner user ID.
— Sales Account IDsstringNoComma-separated sales account IDs.
— StatestringNoState.
— Subscription StatusstringNoSubscription status.
— Subscription TypesstringNoSubscription types.
— Territory IDstringNoTerritory ID.
— Time ZonestringNoTimezone.
— TwitterstringNoTwitter username.
— Work NumberstringNoWork phone number.
— ZipcodestringNoZipcode.

Deal: Create

ParameterTypeRequiredDefaultDescription
NamestringYesName 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 IDstringNoCampaign ID.
— Currency IDstringNoCurrency ID. Find via GET /selector/currencies.
— Deal Payment Status IDstringNoPayment status ID. Find via GET /selector/deal_payment_statuses.
— Deal Pipeline IDstringNoPipeline ID. Find via GET /selector/deal_pipelines.
— Deal Product IDstringNoProduct ID. Find via GET /selector/deal_products.
— Deal Reason IDstringNoReason ID (for lost deals). Find via GET /selector/deal_reasons.
— Deal Stage IDstringNoStage ID. Find via GET /selector/deal_stages.
— Deal Type IDstringNoType ID. Find via GET /selector/deal_types.
— Lead Source IDstringNoLead source ID.
— Owner ID (owner_id)stringNoOwner user ID.
— ProbabilitynumberNo0Probability 0-100.
— Sales Account IDstringNoSales account ID.
— Territory IDstringNoTerritory ID.

Deal: Delete

ParameterTypeRequiredDefaultDescription
Deal IDstringYesID of the deal.

Deal: Get

ParameterTypeRequiredDefaultDescription
Deal IDstringYesID of the deal.

Deal: Get Many

ParameterTypeRequiredDefaultDescription
View IDstringYesID 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 IDstringYesID 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 IDstringNoCampaign ID.
— Currency IDstringNoCurrency ID.
— Deal Payment Status IDstringNoPayment status ID.
— Deal Pipeline IDstringNoPipeline ID.
— Deal Product IDstringNoProduct ID.
— Deal Reason IDstringNoReason ID.
— Deal Stage IDstringNoStage ID.
— Deal Type IDstringNoType ID.
— Lead Source IDstringNoLead source ID.
— NamestringNoName of the deal.
— Owner ID (owner_id)stringNoOwner user ID.
— ProbabilitynumberNo0Probability 0-100.
— Sales Account IDstringNoSales account ID.
— Territory IDstringNoTerritory ID.

Note: Create

ParameterTypeRequiredDefaultDescription
ContentstringYesContent of the note.
Target Type (targetableType)optionsYesContactType of the entity for which the note is created.
Options: Contact, Deal, SalesAccount
Target IDstringYesID of the entity for which the note is created.

Note: Delete

ParameterTypeRequiredDefaultDescription
Note IDstringYesID of the note to delete.

Note: Update

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

Sales Activity: Get

ParameterTypeRequiredDefaultDescription
Sales Activity IDstringYesID 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 TermstringYesTerm used for searching entities.
Search on EntitiesstringYesComma-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 ValuestringYesValue to search for. (shown when Search Field is email, name)
Custom Field NamestringYesName of the custom field to search against. (shown when Search Field is customField)
Custom Field ValuestringYesValue of the custom field to search for. (shown when Search Field is customField)
OptionscollectionNo{}Extra options for the lookup.
— EntitiesstringNoComma-separated entity types: contact, deal, sales_account.

Task: Create

ParameterTypeRequiredDefaultDescription
TitlestringYesTitle of the task.
Due DatestringYesDue date/time in ISO 8601 format.
Owner ID (ownerId)stringYesID 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 IDstringYesID of the target entity.
Additional FieldscollectionNo{}Optional task fields to set when the task is created.
— Creator IDstringNoID of the user who created the task.
— Outcome IDstringNoOutcome ID.
— Task Type IDstringNoTask type ID.

Task: Delete

ParameterTypeRequiredDefaultDescription
Task IDstringYesID of the task.

Task: Get

ParameterTypeRequiredDefaultDescription
Task IDstringYesID 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 IDstringYesID 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 IDstringNoCreator user ID.
— Due DatestringNoDue date/time (ISO 8601).
— Outcome IDstringNoOutcome ID.
— Owner ID (owner_id)stringNoOwner user ID.
— Target IDstringNoTarget entity ID.
— Target Type (targetable_type)optionsNoContactTarget entity type.
Options: Contact, Deal, SalesAccount
— Task Type IDstringNoTask type ID.
— TitlestringNoTitle 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.

Usage Examples

  • 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

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

Manage CRM data (accounts, contacts, deals, tasks, etc.) in Freshworks CRM via its REST API.

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 the Freshworks CRM node

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 updated . Spotted something wrong? Tell us.