Skip to main content

Tools and integrations

CRM integrations

Writing call outcomes into your system of record.

What CRM sync does

Connecting a CRM gives you two directions of data flow:

DirectionWhat happens
PullCRM lists become Finn audiences, so you do not upload CSVs by hand
PushCompleted calls are written back as engagement records, and post-call analysis fields become property updates

Both directions are configured in the dashboard under Settings → Integrations. There is no API endpoint for creating or editing a CRM connection. If you need programmatic outcome delivery, use webhooks instead.

Supported CRMs

CRMAuth methodNotes
HubSpotOAuthList selection, sync schedule, field mapping
SalesforceOAuthProduction or Sandbox, custom objects supported
PipedriveAPI tokenToken generated inside Pipedrive

HubSpot

  1. Go to Settings → Integrations → HubSpot → Connect.
  2. Authorize in HubSpot. You return to Finn with a Connected badge.
  3. Click Choose Lists and tick the HubSpot lists you want as audiences.
  4. Set a sync schedule. Every 15 minutes suits active campaigns. Daily suits slower lists.
  5. Map fields. Tell Finn which HubSpot property holds the name, the phone number, and the country code. Map extra properties to custom fields if the agent needs them mid-call.
  6. Enable Outcome Sync to write results back. You can turn this on later from the same screen.

With Outcome Sync on, each completed call becomes a HubSpot engagement and each analysis field becomes a property update. Which fields exist depends on what you defined in post-call analysis. If a field is not defined there, nothing is written for it, and the CRM record will look empty even though the call succeeded.

Salesforce

The flow matches HubSpot with three differences.

  • The setup flow asks whether to connect Production or Sandbox. Picking the wrong one is the most common cause of "the records are not appearing" reports. Sandbox writes land in Sandbox.
  • The connecting user needs API Enabled plus read/write on Leads, Contacts, and any custom objects you intend to map. Without API Enabled, the OAuth handshake completes and every subsequent write fails.
  • Custom objects are supported. If your process tracks calls on a custom object rather than Lead or Contact, map to that object during field mapping.

Pipedrive

Pipedrive uses an API token rather than OAuth.

  1. In Pipedrive, go to Settings → Personal preferences → API → Generate token.
  2. Paste the token into Settings → Integrations → Pipedrive.
  3. Complete list selection, sync schedule, and field mapping as with HubSpot.

The token belongs to the Pipedrive user who generated it. If that user is deactivated, the token stops working and the integration tile moves to Needs attention.

Field mapping and what breaks

Mapping is where most CRM setups go wrong. Points to check:

ProblemSymptomCause
Country code not mappedCalls fail to dial or dial the wrong countryFinn cannot infer country from a bare local number
Phone property holds a formatted stringNumbers rejectedThe value needs to be dialable, not decorated
Analysis field renamed after mappingWrites stop for that fieldThe mapping points at the old name
List membership changes between syncsContacts appear or vanish from the audienceAudiences follow the CRM list, not a snapshot

See agent variables for how mapped fields reach the conversation, and audiences for what an audience record looks like once synced.

If your CRM is not listed

Two options.

Use the webhook integration and receive call.analyzed on your own endpoint, then write to your CRM yourself. The payload includes the contact, the transcript, the post-call analysis object, and sentiment. See post-call webhook and webhook events.

Or bridge through Zapier, Make, or n8n using the webhook as the trigger source. This adds a hop, so delivery latency and failure handling become that tool's responsibility rather than Finn's retry behaviour described in webhook retries.

Disconnecting

Every connection is reversible from the same tile you used to connect it. Disconnecting stops future syncs in both directions. It does not remove records already written into your CRM, and it does not delete audiences already imported. Deployments still referencing a disconnected CRM's audience keep the last synced contact set.

Not yet settled

The CRM connection surface is dashboard-only at present. There is no documented endpoint for reading or changing mapping configuration, and no documented per-CRM rate limit or sync-failure retry window. If you need those guarantees, drive outcome delivery through webhooks, where the retry behaviour is documented.