CRM sync (Revenue Autopilot) is a beta feature. A workspace admin must enable
Beta features, and the workspace needs the Revenue Autopilot add-on
(or Include free on the plan) plus CRM sync capacity limits.
CRM sync imports records from a CRM into Audience on a recurring schedule.
Agents, campaigns, segments, and automations can then use the current contact
attributes without CSV uploads.
Supported CRMs
- HubSpot
- HighLevel
- Salesforce
- Pipedrive
- Close
- Zoho CRM
- Attio
- Keap
- Twenty Cloud and self-hosted Twenty
Twenty Cloud uses https://api.twenty.com. A self-hosted connection requires
the public HTTPS URL of the Twenty server. Private, loopback, link-local, and
cloud-metadata destinations are rejected.
HighLevel Marketplace app setup
Use Sub-account as the target user and add this exact redirect URL under
Advanced Settings → Auth:
The neutral path is intentional: the Marketplace rejects redirect URLs that
contain a HighLevel brand reference.
Select only these scopes:
Add HIGHLEVEL_CLIENT_ID and HIGHLEVEL_CLIENT_SECRET to the platform
environment, and set
HIGHLEVEL_OAUTH_REDIRECT_BASE_URL=https://www.ouraicalling.de. Then use
Automations → Connections → HighLevel → Authorize HighLevel. One OAuth
grant is reused by CRM sync and all HighLevel automation nodes; rotating access
and refresh tokens are updated automatically.
The calendar nodes can list calendars and free slots, then create, update, or
cancel appointments. calendars.write is intentionally not requested because
the integration does not create or modify calendar definitions.
Under Advanced Settings → Webhooks, set this exact Default webhook URL:
Leave each event’s Custom webhook URL empty so it inherits the default.
Enable these events for CRM and appointment automations:
Do not enable unrelated conversation, invoice, product, payment, Voice AI, or
knowledge-base events until a workflow needs them. The endpoint verifies the
current X-GHL-Signature Ed25519 signature and supports the legacy signature
during HighLevel’s transition period.
Create a sync
- Open Automations → Connections and add an API connection for the CRM.
Compatible connections carry the CRM Sync tag in Add Connection.
- Open Audience → CRM Sync.
- Select the connection and CRM object or source.
- Map CRM fields to
name, phone, email, tags, or a custom Audience
attribute such as custom.lifecycle_stage. Assign more than one source
field to the same destination to combine the values.
- Review up to three read-only CRM samples after the mapping.
- Choose the interval and start the sync.
The mapper suggests standard fields and matches existing custom attributes by
name. Choose Custom value for a destination to combine CRM-field chips and
text in the exact order you need. For example, Salutation + First name + Last name can build name; Calling code + Phone number can build phone. At
least phone or email is required so the first CRM record can be matched to
an Audience contact safely.
For national phone numbers, choose a Default phone country such as Germany.
The preview and the real run use the same country-aware parser and store the
result in E.164 form (+49152…). International numbers that already start with
+ or 00 ignore the fallback. If the CRM exposes a separate ISO country
(DE) or calling-code (+49) field, map it before the phone-number field in
the same phone composition. Invalid phone and email combinations are marked
in the read-only preview before anything is saved.
The API and MCP keep the simple mapping shape. A single source remains a bare
field key. Combined values use safe {{field}} tokens with optional literal
text; no code is evaluated:
Map a CRM label or tag field to tags to merge normalized, lowercase tags into
the contact. Existing manual tags remain intact, and imported tags immediately
appear in the Audience tag filter.
The first run imports the selected source. Later runs use the provider cursor
when available; providers without an incremental cursor safely scan the source
again and skip unchanged records. Runs are durable: pagination, retries, and
checkpoints continue after a server restart.
Edit a sync
Use the pencil action on a sync card to update its name, object, source,
interval, phone country, or field mapping, then review the same mapped-data
preview used when creating a sync. Save only keeps the existing schedule.
Save & sync saves the same changes and immediately starts a manual run.
Changing the object, source, or mapping resets the provider cursor so the next
run reapplies the new mapping to existing CRM records.
Identity and conflict behavior
The stable CRM record ID is the primary identity. The platform stores a
workspace-scoped link between that ID and the Audience contact. Email and phone
are used only to find a safe initial match. Ambiguous matches are reported as
conflicts instead of merging unrelated people.
CRM sync never deletes an Audience contact. A full-snapshot run can deactivate
the membership of records no longer present in the selected CRM source. Local
compliance data, including the block list and consent decisions, is never
cleared by CRM data.
Write outcomes back
Use the CRM action nodes in an automation after a call or qualification step.
Each supported CRM includes record search/get, create, and update actions where
the provider API supports them. Use template values such as
{{trigger.call_id}}, {{data.lead.email}}, or output from an earlier node.
CRM webhook trigger nodes can start an automation from provider events.
HighLevel uses the global Marketplace endpoint above; choose the HighLevel
connection and event in the trigger settings. Other CRM providers currently
use the automation-specific webhook URL and secret shown in their trigger.
Public API and MCP
The same operations are available through:
GET|POST /api/v1/crm-syncs
POST /api/v1/crm-syncs/discover
GET|PATCH|DELETE /api/v1/crm-syncs/{id}
GET|POST /api/v1/crm-syncs/{id}/runs
- MCP tools for listing, creating, updating, deleting, and running CRM syncs
API keys need the corresponding automations:read or automations:write
scope. Secrets and provider tokens are never returned.