Skip to main content

Freshsales integration

Run contact, deal, quote, and pipeline automations on behalf of your clients' Freshsales CRM accounts.

What it does

The Freshsales integration lets you run sales-ops automations on behalf of any client running Freshworks CRM. Connect a Freshsales account once, then read and write contacts, accounts, deals, tasks, appointments, sales activities, marketing lists, CPQ products and quote documents, and custom modules. Freshsales events reach your workflow either instantly, through a Freshsales Workflow webhook, or on a schedule, through polling triggers that need no setup inside Freshsales.

Connect a Freshsales account

  1. In TaskJuice, open the workflow editor, add a Freshsales node, and choose Add connection on the node.
  2. Enter your client's Freshsales bundle subdomain: the part before .myfreshworks.com in their CRM URL, for example acme for acme.myfreshworks.com.
  3. In Freshsales, open Profile (top right), Settings, API Settings on the user account TaskJuice should act as. Copy the API key and paste it into the Freshsales API Key field.

The connection acts as that Freshsales user and inherits their record permissions. Rotate or revoke the key from the same API Settings page at any time. TaskJuice sends it as Authorization: Token token=<api_key> on every outbound request.

API access requires the Growth plan or higher. The Free plan exposes neither the API nor Workflows.

Triggers

Instant triggers (Freshsales Workflow webhook)

  • freshsales/contact-created. Triggers when a new Freshsales contact is created.
  • freshsales/deal-stage-changed. Triggers when a Freshsales deal moves to a new stage.

Both instant triggers verify the inbound POST against a shared-secret header. In Freshsales, open Admin Settings, Workflows, create a workflow on the Contact module (for create events) or the Deal module (for stage updates), set the action to Trigger Webhook, point it at the TaskJuice incoming webhook URL, and add the shared secret to the Authorization header field. Configure the JSON payload to include a top-level entity object holding the placeholders downstream steps should see.

Freshsales Workflows need the Growth plan or higher. On lower plans, use the polling triggers below, which need no Freshsales-side configuration.

Polling triggers

  • freshsales/new-contact-polling. Polls a saved Freshsales contact view sorted by creation date, newest first, and emits one activation per cycle.
  • freshsales/contact-updated. Polls a saved Freshsales contact view sorted by last-modified date, newest first, and emits one activation per cycle.
  • freshsales/new-account. Polls a saved Freshsales account view sorted by creation date, newest first, and emits one activation per cycle.
  • freshsales/account-updated. Polls a saved Freshsales account view sorted by last-modified date, newest first, and emits one activation per cycle.
  • freshsales/new-deal. Polls a saved Freshsales deal view sorted by creation date, newest first, and emits one activation per cycle.
  • freshsales/deal-updated. Polls a saved Freshsales deal view sorted by last-modified date, newest first, and emits one activation per cycle.
  • freshsales/new-task. Polls the open Freshsales tasks and emits one activation per cycle. Only tasks created after the workflow is first published fire, judged by the task's own creation date, so reopening or rescheduling an older task does not fire it.
  • freshsales/new-appointment. Polls the open Freshsales appointments and emits one activation per cycle. Only appointments created after the workflow is first published fire, judged by the appointment's own creation date, so rescheduling an older appointment does not fire it.
  • freshsales/new-sales-activity. Polls the Freshsales sales activities feed and emits one activation per cycle. Only activities created after the workflow is first published fire, judged by the activity's own creation date.
  • freshsales/contacts-added-to-list. Polls the members of one Freshsales marketing list and emits one activation per cycle.

Each polling trigger emits one activation per cycle with the newly seen records wrapped in an items array. Add a Loop node set to items to act on each record individually, or read the array directly for digest-style workflows.

Actions

Contacts

  • freshsales/add-contacts-to-list. Adds Freshsales contacts to a marketing list.
  • freshsales/bulk-assign-contact-owner. Assigns one owner to several contacts in a single call.
  • freshsales/bulk-delete-contacts. Deletes several contacts in one call.
  • freshsales/bulk-upsert-contacts. Creates or updates up to 100 contacts in one background job.
  • freshsales/clone-contact. Clones an existing Freshsales contact, optionally overriding fields on the copy.
  • freshsales/create-contact. Creates a new contact in the Freshsales account.
  • freshsales/delete-contact. Deletes a Freshsales contact.
  • freshsales/filtered-search-contacts. Finds Freshsales contacts that exactly match a filter rule, for example every contact with a given email address.
  • freshsales/forget-contact. Permanently deletes a contact and all of its associated data.
  • freshsales/get-contact. Retrieves a single Freshsales contact by ID.
  • freshsales/list-contact-activities. Returns the activity timeline for a contact.
  • freshsales/list-contact-fields. Returns every contact field, including custom fields, so downstream steps can map values by name.
  • freshsales/list-contacts. Lists Freshsales contacts in a saved view.
  • freshsales/list-contacts-in-view. Lists the contacts in a saved Freshsales contact view, newest page first, paginated 25 per page.
  • freshsales/move-contacts-between-lists. Moves contacts out of one marketing list and into another.
  • freshsales/remove-contacts-from-list. Removes Freshsales contacts from a marketing list.
  • freshsales/update-contact. Updates an existing Freshsales contact.
  • freshsales/update-contact-team. Adds, updates, or removes team members on a contact.
  • freshsales/upsert-contact. Creates a Freshsales contact, or updates the existing one that matches the unique identifier field.

Accounts

  • freshsales/bulk-delete-sales-accounts. Deletes several accounts in one call.
  • freshsales/bulk-upsert-sales-accounts. Creates or updates up to 100 accounts in one background job.
  • freshsales/clone-sales-account. Clones an existing Freshsales account, optionally overriding fields on the copy.
  • freshsales/create-sales-account. Creates a new sales account (company) in Freshsales.
  • freshsales/delete-sales-account. Deletes a Freshsales account.
  • freshsales/forget-sales-account. Permanently deletes an account and all of its associated data.
  • freshsales/get-sales-account. Fetches a single Freshsales account by ID, optionally embedding related records.
  • freshsales/list-sales-account-fields. Returns every account field, including custom fields.
  • freshsales/list-sales-accounts. Lists the accounts in a saved Freshsales account view, paginated 25 per page.
  • freshsales/update-sales-account. Updates an existing Freshsales account.
  • freshsales/update-sales-account-team. Adds, updates, or removes team members on an account.
  • freshsales/upsert-sales-account. Creates an account, or updates the existing one that matches the unique identifier.

Deals

  • freshsales/bulk-delete-deals. Deletes several deals in one call.
  • freshsales/bulk-upsert-deals. Creates or updates up to 100 deals in one background job.
  • freshsales/clone-deal. Clones an existing Freshsales deal, optionally overriding fields on the copy.
  • freshsales/create-deal. Creates a new deal in the Freshsales pipeline.
  • freshsales/delete-deal. Deletes a Freshsales deal.
  • freshsales/forget-deal. Permanently deletes a deal and all of its associated data.
  • freshsales/get-deal. Fetches a single Freshsales deal by ID, optionally embedding related records.
  • freshsales/list-deal-fields. Returns every deal field, including custom fields.
  • freshsales/list-deals. Lists the deals in a saved Freshsales deal view, paginated 25 per page.
  • freshsales/set-deal-products. Adds, edits, or removes the products attached to a deal.
  • freshsales/update-deal. Updates an existing Freshsales deal, including moving it to another stage.
  • freshsales/update-deal-team. Adds, updates, or removes team members on a deal.
  • freshsales/upsert-deal. Creates a deal, or updates the existing one that matches the unique identifier.

Notes and tasks

  • freshsales/create-note. Adds a note to a Freshsales contact, account, or deal.
  • freshsales/create-task. Creates a new task in Freshsales, linked to a targetable (contact, sales account, or deal).
  • freshsales/delete-note. Deletes a Freshsales note.
  • freshsales/delete-task. Deletes a Freshsales task.
  • freshsales/get-task. Fetches a single Freshsales task by ID, optionally embedding collaborators and the related record.
  • freshsales/list-tasks. Lists Freshsales tasks matching a single filter.
  • freshsales/update-note. Rewrites the body of an existing Freshsales note.
  • freshsales/update-task. Updates a Freshsales task.

Appointments and activities

  • freshsales/create-appointment. Books a Freshsales appointment against a contact, account, or deal, with optional attendees.
  • freshsales/create-call-log. Records a manual call log against an existing contact, optionally with a note.
  • freshsales/create-sales-activity. Logs a Freshsales sales activity against a contact, account, or deal.
  • freshsales/delete-appointment. Deletes a Freshsales appointment.
  • freshsales/delete-sales-activity. Deletes a Freshsales sales activity.
  • freshsales/get-appointment. Fetches a single Freshsales appointment by ID.
  • freshsales/get-sales-activity. Fetches a single Freshsales sales activity by ID.
  • freshsales/list-appointments. Lists Freshsales appointments matching a single filter.
  • freshsales/list-sales-activities. Lists Freshsales sales activities, paginated.
  • freshsales/list-sales-activity-fields. Returns every sales activity field, including custom fields.
  • freshsales/update-appointment. Updates an existing Freshsales appointment.
  • freshsales/update-sales-activity. Updates an existing Freshsales sales activity.

Marketing lists

  • freshsales/create-marketing-list. Creates a marketing list your clients can segment contacts into.
  • freshsales/list-contacts-in-marketing-list. Lists the contacts that belong to a Freshsales marketing list, paginated 25 per page.
  • freshsales/list-marketing-lists. Lists every Freshsales marketing list in the account.
  • freshsales/update-marketing-list. Renames an existing marketing list.
  • freshsales/lookup-record. Finds Freshsales records that exactly match one field value, for example a contact by email address.
  • freshsales/search-records. Searches Freshsales for records whose name or email matches a query.

Products and quotes

  • freshsales/bulk-assign-cpq-document-owner. Assigns one owner to several CPQ documents in a single call.
  • freshsales/bulk-assign-product-owner. Assigns one owner to several products in a single call.
  • freshsales/bulk-delete-cpq-documents. Deletes several CPQ documents in one background job.
  • freshsales/bulk-delete-products. Deletes several products in one background job.
  • freshsales/bulk-restore-cpq-documents. Restores several deleted CPQ documents in one background job.
  • freshsales/bulk-restore-products. Restores several deleted products in one background job.
  • freshsales/bulk-update-cpq-documents. Applies the same field changes to several CPQ documents in one background job.
  • freshsales/bulk-update-products. Applies the same field changes to several products in one background job.
  • freshsales/create-cpq-document. Creates a CPQ quote document against a deal, account, or contact.
  • freshsales/create-product. Creates a product in the CPQ product catalogue.
  • freshsales/delete-cpq-document. Deletes a CPQ document.
  • freshsales/delete-product. Deletes a product.
  • freshsales/forget-cpq-document. Permanently deletes a CPQ document and all of its associated data.
  • freshsales/get-cpq-document. Returns one CPQ document, optionally with the products on it.
  • freshsales/get-product. Returns one product, optionally with its configured prices.
  • freshsales/list-cpq-document-products. Returns the products attached to a CPQ document, with their price details.
  • freshsales/restore-cpq-document. Restores a previously deleted CPQ document.
  • freshsales/restore-product. Restores a previously deleted product.
  • freshsales/set-cpq-document-products. Adds, edits, or removes the products on a CPQ document.
  • freshsales/set-product-prices. Adds, edits, or removes the per-currency prices on a product.
  • freshsales/update-cpq-document. Updates the details or stage of a CPQ document.
  • freshsales/update-product. Updates the details of a product.

Files

  • freshsales/create-document-link. Attaches a link to an external file (a Google Doc, a Dropbox share) to a Freshsales contact, account, or deal.
  • freshsales/list-record-files. Returns every file and link attached to a contact.
  • freshsales/upload-file. Uploads a file and attaches it to a contact, account, deal, or product.

Custom modules

  • freshsales/bulk-delete-custom-module-records. Deletes several records from a custom module in one call.
  • freshsales/clone-custom-module-record. Clones a record in a custom module, optionally overriding fields on the copy.
  • freshsales/create-custom-module. Creates a custom module so your clients can track a record type Freshsales does not ship.
  • freshsales/create-custom-module-field. Adds a field to a custom module.
  • freshsales/create-custom-module-record. Creates a record in a custom module.
  • freshsales/delete-custom-module. Deletes a custom module and every record in it.
  • freshsales/delete-custom-module-record. Deletes a record from a custom module.
  • freshsales/forget-custom-module-record. Permanently deletes a custom module record and all of its associated data.
  • freshsales/get-custom-module. Returns the definition of one custom module.
  • freshsales/list-custom-module-fields. Returns every field defined on a custom module.
  • freshsales/list-custom-module-records. Returns the records saved in one view of a custom module.
  • freshsales/list-custom-module-views. Returns the views defined on a custom module, so a later step can list the records in one.
  • freshsales/update-custom-module. Updates a custom module's name, icon, description, or visibility.
  • freshsales/update-custom-module-record. Updates a record in a custom module.

Jobs

  • freshsales/get-job-status. Checks the progress of a bulk upsert job, including per-record failures.

Legacy

  • freshsales/list-leads. Deprecated and non-functional. This endpoint predates the Freshmarketer migration and is not in the current API reference; use the contact actions instead.

Known limitations

  • Freshsales allows 1000 API requests per hour per account. Ten polling triggers at the default 300 second interval use roughly 120 requests per hour; dropping several triggers to a 60 second interval will approach the ceiling. TaskJuice retries 429 responses honoring the Retry-After header.
  • Polling triggers each collect the Freshsales subdomain again in their own configuration, because a polling request template cannot read fields from the connection.
  • Freshsales publishes no webhook management API. Instant triggers are wired by hand in the Freshsales Workflow builder, one workflow per TaskJuice trigger URL, and the delivered body is whatever that workflow's template defines.
  • There is no leads module in the current Freshworks CRM API. Freshsales models leads as contacts with a lifecycle stage, so use the contact actions and the lifecycle_stage_id field.
  • CPQ products and quote documents require a plan that includes CPQ. Marketing list actions and the Contacts Added to Marketing List trigger require a plan that includes marketing lists, which the CRM-only tiers do not. Custom module actions require an account that has custom modules configured. On a plan without them, these actions answer 403.
  • Bulk upsert actions run as background jobs. Chain freshsales/get-job-status to confirm the result rather than reading the immediate response.
  • freshsales/list-contacts and freshsales/list-contacts-in-view do the same thing. List Contacts is the one to use; List Contacts in View is kept only so existing workflows keep resolving.
Was this helpful?