What you can connect
| CRM | Status | What it does |
|---|---|---|
| Zoho CRM | Live | Zoho sends each new lead to a Finn webhook URL. Finn adds the lead to an audience. |
| HubSpot | Coming soon | Cannot be connected yet. |
| Salesforce | Coming soon | Cannot be connected yet. |
CRM connections are set up in the dashboard under Settings → Integrations → CRM. There is no API endpoint for them.
Zoho is one-way. Leads come into Finn; Finn does not write call results back to Zoho. To get results into a CRM, see Writing results back.
Connect Zoho CRM
- Go to Settings → Integrations, find ZOHO CRM under CRM and click Connect. The Connect Zoho CRM via webhook dialog opens with a Webhook URL for your workspace. Copy it.
- In Zoho CRM, go to Setup → Automation → Actions → Webhooks and create a webhook. Method POST, Content-Type application/json.
- Paste the Finn webhook URL as the destination.
- Map the body so it sends the fields below.
- Attach the webhook to a Zoho workflow rule, for example on lead creation, so it fires for each new lead.
The URL carries a token for your workspace. Treat it like a password.
The lead payload
{
"name": "John Doe",
"phone_number": "9876543210",
"country_code": "91",
"module_name": "zoho_leads"
}
| Field | Required | Notes |
|---|---|---|
phone_number | yes | Digits only. A value with +, spaces or dashes is rejected. phone or mobile are accepted instead. |
country_code | yes | Digits, without +. |
name | no | The contact's name. full_name is accepted instead. |
module_name | no | The name of the audience the lead goes into. Without it, Finn uses the module Zoho reports in the request headers, then zoho_module. |
duplicates | no | "true" to keep repeat leads for the same phone number. See below. |
What Finn does with a lead
- Finn checks the required fields. A lead that fails is logged with the reason and not added. Zoho still gets a
200response, so a failure only shows up in Finn. - Finn looks for an audience with the same name as
module_name. If there isn't one, it creates it. - Finn appends the lead to that audience.
Duplicates are skipped unless you send "duplicates": "true":
- a lead whose phone number already arrived in the last 10 minutes, or
- a lead whose phone number is already in the audience.
The audience is kept in sync from Zoho, so it is a dynamic audience. Dynamic audiences are dialed from the dashboard with a deployment that re-reads the audience while it runs (Check for new contacts). They cannot be deployed through the API. See outbound-campaigns and api-audiences.
Test the connection
The Zoho dialog has three checks under Test the webhook:
| Button | What it does |
|---|---|
| Check status | Confirms the endpoint is ready. |
| Send sample | Sends a test lead (Finn Test, 9999999999, country code 91) through the endpoint. |
| Verify latest | Checks that a recent webhook arrived with the required fields. |
Once a webhook arrives, the card shows Connected and the time of the last webhook. Send a test from Zoho, then click Verify latest.
Send sample is processed like a real lead. It has no module_name, so it lands in an audience called zoho_module. Remove that contact before you deploy the audience, or the Finn will dial it.
Disconnecting
Disconnect on the Zoho card removes the Zoho connection from Finn. Leads and audiences already in Finn stay.
The webhook in Zoho keeps sending until you delete it there (Setup → Automation → Webhooks). Delete it in Zoho to stop leads arriving.
Writing results back
Finn has no CRM write-back. Use one of these:
- Webhooks. Add an endpoint under Settings → Integrations → Webhooks and receive
call.completedafter each call. It carries the call's final status, the numbers, the duration, the sentiment and your analysis fields. Write to your CRM from your server. See webhooks and webhook-post-call. - The API. Read a call with
GET /api/v1/calls/{call_uuid}. See api-calls.
Define the fields you want in your CRM as post-call analysis fields first. A field you haven't defined isn't in the payload.
What goes wrong
| Symptom | Cause |
|---|---|
| Zoho shows the webhook as sent, but no lead in Finn | A required field is missing or phone_number has non-digit characters. Finn answers 200 either way. Use Verify latest. |
| Leads land in an unexpected audience | module_name is missing or differs between Zoho workflows, so Finn created a separate audience. |
| A repeat lead never appears | Duplicate protection skipped it. Send "duplicates": "true" if you want repeats. |
| Leads keep arriving after you disconnected | The webhook still exists in Zoho. Delete it there. |