---
title: "Freshsales API: pricing, rate limits & MCP | ONEGTMLAB"
description: "Freshsales API: Freshworks' sales CRM with a REST API for contacts, sales accounts, deals, activities and custom modules, including single and bulk…"
canonical: https://www.onegtmlab.dev/tool-directory/crm/freshsales
---

# Freshsales API: pricing, rate limits & MCP | ONEGTMLAB

[](/)

[

Book a call

](/book)

![](/_astro/freshsales.Cr-B_BIS_2596yw.webp)

API review

# Freshsales API review

Freshworks' sales CRM with a REST API for contacts, sales accounts, deals, activities and custom modules, including single and bulk upsert by a unique identifier (100 per bulk call, async job status), behind a strict 1,000 requests/hour account limit. Best for freshworks-stack clients that want contacts/accounts/deals kept in sync.

Verified 25 Oct 2026 · 7 endpoints listed

[

See pricing

](#pricing)[

Freshsales API docs

](https://developers.freshworks.com/crm/api/)

At a glance

Category

CRM

Pricing model

Per seat

Free tier

Free plan $0 for up to 3 users, WITHOUT API access (shown on the pricing-compare…

Entry price

$9/mo, billed annually Growth

Auth

API key

Official MCP

No official server

Best for

Freshworks-stack clients that want contacts/accounts/deals kept in sync

[freshworks.com ↗](https://www.freshworks.com/crm/sales/)[Pricing page ↗](https://www.freshworks.com/crm/pricing/)

## What a call costs

The actions you pay for, as Freshsales prices them.

Action

Cost

Per

Branded documents add-on

$19 (INR ₹1,299)

per user/month

Freddy AI Agent

$49 (INR ₹4,299)

per 100 sessions

## Pricing, plan by plan

US dollars, as Freshsales's pricing page shows them on 25 Oct 2026. Monthly and annual billing are shown apart.

Free tier Free plan $0 for up to 3 users, WITHOUT API access (shown on the pricing-compare page, not on the main pricing page). Paid plans: 21-day free trial on Enterprise, no card, phone optional (our signup 2026-10-25)

### Free

$0

Free

up to 3 users

No API

### Growth

$11/mo

billed monthly

$9/mo

billed annually

per user/month; API 1,000 requests/account/hour; 20 workflows; INR from our Indian IP: ₹899 monthly / ₹749 annual

API included

### Pro

$47/mo

billed monthly

$39/mo

billed annually

per user/month; API 2,000 requests/account/hour; 50 workflows; INR: ₹3,889 monthly / ₹3,239 annual

API included

### Enterprise

$71/mo

billed monthly

$59/mo

billed annually

per user/month; API 5,000 requests/account/hour (extendable); 100 workflows; custom modules; auto profile enrichment; INR: ₹5,879 monthly / ₹4,899 annual

API included

## Rate limits

Per-account hourly API cap that depends on the plan: Growth 1,000, Pro 2,000, Enterprise 5,000 requests/hour (in-app Plans and Billing 'API Access' row, 2026-10-25); Enterprise also lists an 'Extendable API rate limit' (pricing-compare).

Limit

Free

Growth

Pro

Enterprise

Note

no API access (pricing-compare)

–

–

extendable

Per Hour

–

1,000

2,000

5,000

More on limitsLess

The API reference's 429 text still says a flat 1,000 requests/hour per account. Bulk upsert: 100 entities per request and max 10 concurrent in-progress jobs. Trials run on Enterprise, so trial-time tests see 5,000/hour.

## How to get an API key

Freshsales uses API key. The steps below follow Freshsales's own docs.

1.  Create a Freshsales account. API access starts on the Growth plan.
2.  Docs: Settings > API Settings tab > 'Your API key'. Live app (2026-10-25): Personal Settings > API (/crm/sales/personal-settings/api-settings); the key is only shown after ticking a visible reCAPTCHA 'I'm not a robot' checkbox
3.  Send it with every request: header: Authorization: Token token=<API key>.
4.  Make a first call: Create or update one contact matched on a unique identifier. Keep the key in an environment variable, never in the command.
    
    ```
    curl -X POST "https://{domain}.myfreshworks.com/crm/sales/api/contacts/upsert" \
      -H "Authorization: Token token=$FRESHSALES_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{}'
    ```
    

## Where the docs live

What

Where

Documentation

[developers.freshworks.com/crm/api](https://developers.freshworks.com/crm/api/)

API reference

[developers.freshworks.com/crm/api](https://developers.freshworks.com/crm/api/)

Base URL

`https://{domain}.myfreshworks.com/crm/sales/api`

## Strengths and limits

### Where it fits

-   Freshworks-stack clients that want contacts/accounts/deals kept in sync
-   Idempotent writes: /upsert and /bulk\_upsert by a unique identifier (e.g. emails for contacts, name for accounts)
-   Bulk upserts of up to 100 entities per request (max 10 concurrent bulk jobs)

### Where it falls short

-   High-volume syncs or enrichment loops: the whole account gets 1,000 (Growth) / 2,000 (Pro) / 5,000 (Enterprise) API requests per hour; the Free plan has no API
-   Event-driven integrations needing API-managed webhooks (none in the API reference)
-   Agent/MCP access to CRM data (Freshworks' only MCP is a developer server for custom-app submission)

### Worth knowing

-   The hourly API budget is per account and shared by every integration: 1,000 (Growth), 2,000 (Pro), 5,000 (Enterprise) per the in-app plans page; the API reference still says 1,000 for everyone. Trials run on Enterprise, so a trial test overstates what a Growth customer gets.
-   Bulk upsert records are {"<identifier field>": "<value>", "data": {...}} with exactly one identifier each (not a nested unique\_identifier object), and run async; check /job\_statuses before assuming success. Source: [developers.freshworks.com/crm/api](https://developers.freshworks.com/crm/api/#bulk_upsert_contact)
-   Account upsert examples match on name, so 'Acme' and 'Acme Inc' become two accounts unless you pick a better unique field. Source: [developers.freshworks.com/crm/api](https://developers.freshworks.com/crm/api/#upsert_an_account)
-   The reference is one 1.4 MB single-page app; some sample URLs in it are malformed (e.g. 'apicontacts'). Observed 2026-10-25.
-   Upsert by 'email' is deprecated and rejected; use 'emails'. When several records match, upsert errors and returns the ids to merge instead of picking one. Source: [developers.freshworks.com/crm/api](https://developers.freshworks.com/crm/api/#upsert_a_contact)

4 moreShow fewer

-   The Free plan (up to 3 users) appears only on the pricing-compare page and has no API access; the main pricing page shows only Growth/Pro/Enterprise. Source: [freshworks.com/crm/pricing-compare](https://www.freshworks.com/crm/pricing-compare/)
-   The pricing page geo-switches to INR with JavaScript from an Indian IP; the server HTML and the archive.org snapshot carry the USD figures.
-   The API key screen is gated by a visible reCAPTCHA checkbox, so key retrieval cannot be scripted.
-   Base URL check: docs write paths as /api/<resource> under [&lt;domain&gt;.myfreshworks.com/crm/sales](https://&lt;domain&gt;.myfreshworks.com/crm/sales); this record keeps /api in base\_url and omits it from paths, so nothing is doubled. Source: [developers.freshworks.com/crm/api](https://developers.freshworks.com/crm/api/)

## Who should use it

Use Freshsales for

Freshworks-stack clients that want contacts/accounts/deals kept in sync

Look elsewhere for

High-volume syncs or enrichment loops: the whole account gets 1,000 (Growth) / 2,000 (Pro) / 5,000 (Enterprise) API requests per hour; the Free plan has no API

## If Freshsales is not the answer

Other CRM tools in this directory, each with its own review.

[

![](/_astro/attio.CoO4UDxn_Zx1tGp.webp)

Attio

CRM

Free planOfficial MCP

Best for start-ups and agencies wanting a free/cheap CRM with API, webhooks and MCP on every plan.

Attio API review →](/tool-directory/crm/attio)[

![](/_astro/close.BGAid65p.svg)

Close

CRM

From $9/moOfficial MCP

Best for inside-sales teams that call and email from the CRM.

Close API review →](/tool-directory/crm/close)[

![](/_astro/copper.CFmJ3qY-.svg)

Copper

CRM

From $23/mo

Best for google Workspace teams that want a simple CRM inside Gmail.

Copper API review →](/tool-directory/crm/copper)

## Before you build

Four things to settle first, each read off Freshsales's own pages.

-   **Confirm the API is on your plan**API access starts on the Growth plan. Free tier: Free plan $0 for up to 3 users, WITHOUT API access (shown on the pricing-compare page, not on the main pricing page).
    
-   **Keep the key out of your code**API key. It is sent as: header: Authorization: Token token=<API key>.
    
-   **Design around the rate limit**Per-account hourly API cap that depends on the plan: Growth 1,000, Pro 2,000, Enterprise 5,000 requests/hour (in-app Plans and Billing 'API Access' row, 2026-10-25); Enterprise also lists an 'Extendable API rate limit' (pricing-compare).
    
-   **Know the catch before you scale**The hourly API budget is per account and shared by every integration: 1,000 (Growth), 2,000 (Pro), 5,000 (Enterprise) per the in-app plans page; the API reference still says 1,000 for everyone. Trials run on Enterprise, so a trial test overstates what a Growth customer gets.
    

## Want us to build it for you?

Tell us what you want Freshsales to do in your stack. We will show you how we would wire it into your data, outbound or CRM, and what we would check first.

[

Book a call

](/book)[

See case studies

](/case-studies)

Read from [freshworks.com/crm/pricing](https://www.freshworks.com/crm/pricing/), [developers.freshworks.com/crm/api](https://developers.freshworks.com/crm/api/) and [developers.freshworks.com/crm/api](https://developers.freshworks.com/crm/api/#authentication). Verified 25 Oct 2026.

All 7 endpointsFor developers: method, path, what it does and what it costs.

**Base URL:** `https://{domain}.myfreshworks.com/crm/sales/api`

**Bulk and async:** bulk\_upsert for contacts, sales\_accounts and deals: 100 entities per request, max 10 concurrent in-progress jobs, async with job\_statuses; also bulk assign owner and bulk delete. Source: [developers.freshworks.com/crm/api](https://developers.freshworks.com/crm/api/)

Filter endpoints

7 endpoints

Method

Path

What it does

Cost

POST

`/contacts/upsert`

Create or update one contact matched on a unique identifier

none

POSTasync

`/contacts/bulk_upsert`

Bulk create/update contacts by unique identifier

none

POST

`/sales_accounts/upsert`

Create or update one account (e.g. unique\_identifier name)

none

POSTasync

`/sales_accounts/bulk_upsert`

Bulk upsert accounts

none

POSTasync

`/deals/bulk_upsert`

Bulk upsert deals

none

GET

`/job_statuses/{id}`

Status of an async bulk upsert job (bulk upsert jobs only)

none

POST

`/contacts`

Create a contact

none

[](/)

© 2026 ONEGTMLAB Private Limited. All rights reserved.

COMPANY

[

Why Us

](/#why-us)[

Process

](/#timeline)[

Blogs

](/blogs)[

About

](/about)[

Clients

](/clients)[

Free resources

](/free-resources)[

Newsletter

](/newsletter)

Services

[

GTM Engineering

](/ai-gtm-engineering)[

Account-Based Marketing

](/services/account-based-marketing)[

Paid Media

](/services/paid-media)[

Content Engineering

](/linkedin-personal-branding)[

RevOps

](/services/revops)[

SEO, AEO & GEO

](/services/seo-aeo-geo)[

All services

](/services)

![](/_astro/wordmark-3d.CMEfGdYr.svg)
