TL;DR: Each destination has a per-audience field mapping. Defaults cover the 80% — email, name, company, title. Override the rest for workspace-specific custom fields.
What gets mapped
Unstuck Engine has ~30 fields per Lead and ~25 per Account. Destinations have their own schemas. Mapping declares which Unstuck field populates which destination field for the records this audience pushes.
Three categories of fields:
- Standard — email, first name, last name, company name, title, phone, LinkedIn URL. Default mappings are sensible everywhere.
- Targeting — ICP code, Persona code, ICP score, Persona score, engagement stage. Often needs custom destination fields (HubSpot custom property, SFDC custom field).
- Signal context — last signal type, last signal at, signals count. Custom field territory.
Editing the mapping
On the audience detail page → Destinations section → row for the destination → click Edit mapping. The drawer shows:
Unstuck field → Destination field
────────────────────────────────────────────────
work_email → email
first_name → firstname
last_name → lastname
company_name → company
title → jobtitle
icp_code → icp_code [custom property]
persona_code → persona_code [custom property]
icp_score → icp_score [custom property]
engagement_stage → engagement_stage [custom property]
last_signal_type → last_signal_type [custom property]
last_signal_at → last_signal_at [custom property]
Click any row to change the destination field. Click + Add mapping to add a row (e.g. push profile_keywords to a HubSpot text-area field).
Creating destination custom fields
For HubSpot / Salesforce, custom fields must exist in the destination before Unstuck Engine can write to them. Two ways:
- Manual — create the field in HubSpot / SFDC settings, then refresh the field list in Unstuck Engine's mapping drawer
- Auto-provision — Unstuck Engine can create the missing custom fields for you. Click
Create missing fieldsin the mapping drawer. Requires the destination integration to have schema-write scope (which the OAuth granted by default for HubSpot; explicit toggle for Salesforce)
The auto-provisioned fields are named with the unstuck_ prefix to make them identifiable:
unstuck_icp_codeunstuck_persona_codeunstuck_engagement_stage- etc.
Mapping behavior on sync
For each member synced:
- Unstuck Engine reads the current value of each mapped field on the record
- POSTs (create) or PATCHes (update) the destination record per the mapping
- The overwrite policy decides whether to overwrite existing destination values (Overwrite / Append / Skip-if-exists)
If a mapped Unstuck field is null on the record, the corresponding destination field is left untouched (not nulled out).
Per-audience mapping vs workspace defaults
You can set workspace-level default mappings per destination (Settings → Destinations → Defaults). These apply to any new audience that connects to the destination without an explicit override.
Per-audience mappings override the defaults. Useful when one audience needs different fields synced (e.g. a high-intent audience syncs unstuck_signal_history for context, while a volume outbound audience doesn't need it).
Field type compatibility
Field types must match between Unstuck and destination:
Unstuck type | Compatible destination types
string | string, text, picklist (if value matches), email, url
number | number, integer, decimal
boolean | boolean, picklist (yes/no)
date | date, datetime
string[] | multi-select picklist, text (comma-joined)
Type mismatches show as warnings in the mapping drawer. Most are auto-coerced (number → string is fine); some are blocked (string → boolean requires explicit mapping).