Freshsales is the CRM inside the Freshworks suite, and that shapes the whole setup. The credential is a personal API key you generate for yourself — not an org-level app your admin installs — and the address Anexus talks to is your Freshworks domain, the same one in your browser bar when you're logged in.
Freshsales, Freshworks CRM, Freshsales Suite — same product
Freshworks has renamed this CRM more than once, so older help threads, invoices and screenshots may call it Freshworks CRM or Freshsales Suite. It is the same CRM, and the API key and domain work identically whichever name your account shows. In Anexus the card is simply labelled Freshsales.
Before you start
- A Freshsales plan that exposes the API — that's most paid tiers. If API Settings is missing from your personal settings, your plan or your role is the reason, not a bug.
- You do not need to be an admin. Every Freshsales user gets their own key — and it carries that user's permissions, which is exactly why it matters whose key you use.
- Know which Freshworks product you're looking at. Freshsales is the one with Contacts, Accounts and Deals in the left rail — if you see tickets, you're in Freshdesk.
First value: the Freshworks domain (this is the one that fails)
Most CRM guides tell you to fetch the key first. On Freshsales that's the wrong order: the key is one page and one click, while the domain is genuinely ambiguous, because a single Freshworks login fronts several products that all begin with your company name. Settle the domain and the rest of the setup is uneventful.
Look at the address bar while you're logged in. It reads something like https://yourcompany.myfreshworks.com/crm/sales/…. The part Anexus wants is the host only: yourcompany.myfreshworks.com — no https://, no /crm/sales path, no trailing slash.
yourcompany.freshdesk.com and yourcompany.myfreshworks.com share the same yourcompany prefix, which makes the wrong one look convincingly right. Only the CRM host will authenticate.Higher Freshsales plans can also run a sandbox on its own separate address. A sandbox domain authenticates perfectly and syncs perfectly — into a copy of your CRM that nobody on the sales team ever opens. If your account has one, confirm you copied the production address, not the sandbox one.
Second value: where the Freshsales API key actually lives
It sits in your personal settings, not the admin console — which is why searching Admin Settings never turns it up.
Log in to Freshsales and click your profile avatar in the top-right corner.
Open Settings — your own profile settings, not the admin area.
Select API Settings. Your key is on that page — a long alphanumeric string.
Copy the key and nothing else. Freshsales's developer docs show it wrapped in an Authorization: Token token=… header — that header is for people writing code, not for pasting here.
Putting the two together in Anexus
In Anexus, go to Settings → CRM Integrations → Freshsales → Connect.
Fill in the two fields:
- Subdomain:
yourcompany.myfreshworks.com— host only - API Key: the bare string from API Settings
Click Save & connect. The card switches to its green Connected state, and every contact captured from that moment on syncs on its own.
The connected card also carries a Test button. It is worth a click any time someone in Freshsales has been near API Settings, because a reset there is silent on the Anexus side until the next contact tries to sync.
Where a captured contact lands, field by field
Freshsales splits your pipeline across three record types: Contacts (the people), Accounts (the companies they belong to) and Deals (the revenue). A contact captured on your Anexus profile becomes a Freshsales Contact.
If you're coming from Freshsales Classic, note that newer Freshsales accounts have no separate Leads object — leads were merged into Contacts and companies into Accounts. So don't go hunting for a Leads list: your card-captured people are in Contacts, and you qualify them there.
One structural detail worth recognising: in Freshsales a company is not a text field on the Contact. It's a separate Account record that Contacts are linked to. The table below lists the fields a captured contact fills in on the Contact record itself.
A wrinkle worth recognising if you ever read Freshsales's API or an export header: the Accounts object is still called sales_accounts under the hood, a survivor of the Classic naming. The UI says Accounts, the data says sales accounts, and both mean the same record.
The Contact record, field by field
What an Anexus captured contact looks like once Freshsales has it:
| Anexus captures | Freshsales field | API name | What to know |
|---|---|---|---|
| First name | First name | first_name | Combined with the last name to form the Contact's display name in every list view. |
| Last name | Last name | last_name | Freshsales sorts and searches its Contacts list on this field. |
email | Freshsales treats email as the unique key on a Contact — two Contacts in one account can't share an address. | ||
| Mobile number (if provided) | Mobile number | mobile_number | Freshsales keeps Mobile number and Work number as two distinct fields — a card capture is a mobile, so look there first. |
| Job title (if provided) | Job title | job_title | Free text in Freshsales, so it works as a filter in views, Workflows and Sales Sequence targeting. |
Only what the person actually filled in comes across — a blank mobile number or job title simply leaves that Freshsales field empty rather than failing the sync.
Turning the sync into follow-up: Workflows, Sequences, Freddy
This is where Freshsales earns its keep once the connection is live. Everything below is configured in Freshsales, not in Anexus:
- Workflows — Freshsales's automation rules can fire on contact creation. Typical uses: reassign the Contact owner, stamp a Lead source, apply a tag, or open a task for whoever should place the call.
- Sales Sequences — Freshsales's built-in outbound email sequences. Enrol newly created Contacts in a "met at an event" sequence and the follow-up goes out without you rewriting it each time. Sequences send through a mailbox connected inside Freshsales, so if nobody has connected one yet, enrolment succeeds and nothing actually sends.
- Contact scoring / Freddy AI — Freshsales scores contacts on engagement and fit. Someone you met at a conference arrives with essentially no engagement history, so expect a low score on day one; it climbs as they open the sequence emails and visit your site. Don't read the first score as a verdict.
- Auto-assignment and Territories — Freshsales can route new Contacts by rule instead of by whoever's key made the call. This is the durable fix for ownership: the rule keeps working when the person behind the key changes jobs.
- Deals — Freshsales does not open a Deal just because a Contact exists. When a captured contact turns into a real opportunity, create the Deal from the contact record so the pipeline stays honest.
Backfilling contacts captured before you connected
Click Sync past contacts on the connected Freshsales card and everything captured before the connection goes over in batches.
Expect a big list to need more than one pass. Freshsales enforces a per-minute API rate limit that scales with your plan, and once a backfill crosses it Freshsales answers with a rate-limit response until the minute rolls over. Contacts refused that way stay pending rather than disappearing: wait a few minutes and click Sync past contacts again to push the rest.
Because email is the unique key on a Freshsales Contact, anyone already in Freshsales under the same address won't be duplicated — Freshsales refuses the second one and the card shows Freshsales's own reason.
When Freshsales pushes back
Freshsales failures cluster into six recognisable shapes. Several of them are about which Freshworks address or whose Freshsales login you used, not about the key being wrong.
"Freshsales rejected the credentials"
Work through these in order — check the domain before you suspect the key:
- The domain is host only — no
https://, no/crm/sales, no trailing slash. - It is the CRM host, not
yourcompany.freshdesk.com. - The key is the bare string. If what you pasted begins with
Token token=, you copied the example header from the API docs — trim it back to the key. - The key may simply have been reset. API Settings has a Reset control, and anyone who clicks it invalidates the previous key instantly — including the one you already connected.
The sync reports success, but nobody can find the Contacts
This is the most Freshsales-specific failure of the lot, and nothing is broken. Freshsales list Views are filtered, and the default landing view is usually an ownership-filtered one such as My Contacts. If the API key belongs to a shared integration login, the records exist and are simply owned by that user, so a rep sitting on My Contacts sees an empty screen. Switch to All Contacts, sort by created date, and they are all there.
If All Contacts is genuinely empty too, check the domain again: a sandbox address, or the address of a second Freshworks account someone opened for a trial, will accept everything and show you nothing where you're looking.
It worked for months, then stopped — and nobody touched Anexus
On Freshsales the usual cause is the person, not the key. A Freshsales API key belongs to a user, so deactivating or deleting that user takes the key down with them — which is what happens the week a rep leaves. Reconnect with a key generated by a user who is staying, ideally a shared operations login.
Every captured Contact belongs to the same rep
That's Freshsales working as designed: it stamps the Contact owner as the user whose API key made the call. Two ways out. Generate the key from the Freshsales login of the person who should own them — or, better for a team, leave the key alone and reassign on the Freshsales side with a Workflow or an auto-assignment/territory rule, which keeps working when people change roles.
A contact was rejected over a field you can't even see
A Freshsales admin can mark fields as required on the Contact — including custom fields that exist on no other CRM. If a required field has no value, Freshsales refuses to create the record and the sync card shows Freshsales's own validation message naming the field. Fix it in Freshsales: make the field optional, or give it a default value, then retry with Sync past contacts.
There is no API Settings page in your Freshsales
Two causes, both on the Freshsales side: your plan may not expose the API, or your Freshsales role may not permit API access. Ask a Freshsales admin to check the role first — it's the cheaper fix — and generate the key from an account with a fuller role if not.
Key lifecycle: resetting, rotating, disconnecting
In Anexus, Disconnect stops the sync. On the Freshsales side, API Settings → Reset issues a new key and invalidates the old one the moment you click it — there is no overlap window and no second key living alongside the first. Plan on reconnecting Anexus with the new key straight afterwards, then press Test, and check anything else that was using that same key.
A Freshsales API key can't be scoped down: it carries the full permissions of the user who owns it, and there is no read-only or contacts-only variant. That is the strongest argument for generating it from a dedicated integration user rather than from your own login.
Disconnecting never removes Contacts that already reached Freshsales. Anexus stops pushing; the records stay where they are, keep their owner, and stay in whatever Sequence they were enrolled in.
What's next
- Back to all CRM integrations
- Managing contacts and leads in Anexus — the Mini CRM that keeps its own copy alongside Freshsales
- Security and privacy — how your Freshsales API key is stored