TL;DR: Open the audience → Destinations section → pick the tool → map fields → set cadence. Once live, the destination stays in sync with the audience automatically.
Connecting a destination (first-time setup)
The first time you push to a destination, you need to authenticate the integration. From the audience detail page:
- Click
+ Add destination - Pick the destination type — HubSpot, Salesforce, Apollo, Smartlead, custom webhook, others
- OAuth flow opens in a new window — authorize Unstuck Engine to read / write
- Pick the target inside the destination (HubSpot list, Salesforce campaign, Apollo sequence, etc.)
- Map fields (next section)
- Pick sync cadence
- Save and Run
Subsequent audiences using the same destination skip the OAuth step.
Field mapping
Field mapping is the bridge between your audience's fields and the destination's schema. The default mappings are sensible:
Audience field | HubSpot field | Salesforce field | Apollo field
`work_email` | `email` | `Email` | `email`
`first_name` | `firstname` | `FirstName` | `first_name`
`last_name` | `lastname` | `LastName` | `last_name`
`company_name` | `company` | `Company` | `company_name`
`title` | `jobtitle` | `Title` | `title`
`linkedin_url` | `linkedin_url` (custom) | `LinkedIn__c` | `linkedin_url`
`icp_code` | `icp_code` (custom) | `ICP_Code__c` | `tag`
`engagement_stage` | `engagement_stage` (custom) | `Engagement_Stage__c` | `priority`
Override any default by clicking the row → picking a different destination field. Custom mappings save with the audience.
Sync cadence
Three options:
- Real-time — every add / remove / re-rank propagates to the destination immediately (within seconds, subject to destination API rate limits)
- Daily — batched once per day at your workspace's configured time
- Weekly — batched once per week, day configurable
Pick real-time unless the destination is rate-limited or your team uses daily / weekly batches for hygiene reasons.
Overwrite policy
When an audience member already exists in the destination (matched by email or external ID), three options:
- Overwrite — update all mapped fields, even if the destination has a different value
- Append — add Unstuck-specific fields (
icp_code,engagement_stage) but don't touch existing fields - Skip-if-exists — only push net-new records; existing ones stay untouched
Append is the safest default for HubSpot / Salesforce (preserves your team's CRM hygiene). Overwrite is right for Apollo / Smartlead (the audience IS the source of truth for sequencing).
Removal sync
When a member drops out of the audience (their score falls below threshold, signal ages out), the destination behavior depends on the destination:
Destination | On removal
HubSpot list | Removed from the list (other Contact data preserved)
Salesforce campaign | Removed from campaign membership
Apollo sequence | Paused in sequence (not removed — preserves history)
Smartlead | Paused in sequence
Webhook | Sends a removal event
Removal sync is on by default. You can disable it per destination if your downstream workflow shouldn't react to removals.
Multiple destinations
One audience can push to multiple destinations. Common pattern:
- HubSpot — for record-of-truth, CRM hygiene, sales handoff
- Apollo — for the outbound sequence
- Webhook — for a custom internal tool
Each destination has its own field mapping, sync cadence, and overwrite policy. The audience tracks outcomes per-destination (Apollo replies, Smartlead replies, HubSpot meetings booked) and aggregates them in Insights.
Pausing a destination
Pause toggle on the destination row preserves the configuration but stops syncing. Useful when you're triaging a destination issue without touching the audience itself.
Removing a destination
Disconnect removes the integration from this audience. Members already pushed remain in the destination (Unstuck doesn't clean up downstream). Use Disconnect when you're switching tools or sunsetting a workflow.