CRM Integration
Connect HubSpot or GoHighLevel to sync contacts, push call data, and automate your sales pipeline.
Wozena integrates directly with your CRM so you can import contacts for campaigns, push call outcomes back after every call, and keep your sales pipeline updated automatically.
Supported CRM platforms
- HubSpot — OAuth 2.0 connection
- GoHighLevel (GHL) — OAuth 2.0 or API key
Coming soon: Salesforce, Pipedrive, Zoho CRM, Close
What the CRM Integration Does
| Feature | Description |
|---|---|
| Contact sync | Pull contacts from CRM lists into Wozena for campaigns |
| Field mapping | Map CRM fields to Wozena contact fields (name, phone, email, company, custom fields) |
| Call data push | After every call, push a call note to the CRM contact with summary, outcome, duration, and sentiment |
| Field updates | Push Wozena contact field changes back to CRM properties |
| Scheduled re-sync | Automatically re-import contacts on a schedule (15 min to 24 hours) |
| DNC propagation | Do-Not-Call status syncs both ways between Wozena and your CRM |
| PCA → CRM push | Push AI-extracted call analysis data (interest level, budget, etc.) directly to CRM fields |
| Deal automation | Create deals/opportunities in CRM via automation rules |
Connecting Your CRM
Navigate to Integrations
Go to Integrations in the sidebar (under Operations). You'll see the CRM Platforms section with HubSpot and GoHighLevel cards.
Click "Connect with OAuth"
Click the Connect with OAuth button on your CRM provider. You'll be redirected to the CRM's authorization screen.
GoHighLevel API Key option
If you prefer to use an API key instead of OAuth for GoHighLevel, click the API Key button and paste your GHL API key. OAuth is recommended for a smoother experience.
Authorize Wozena
On the CRM's consent screen, review the permissions and click Authorize or Allow. Wozena requests access to:
HubSpot permissions:
- Read and write contacts
- Read contact lists
- Read contact field schemas
- Read and write deals
- Create timeline events (call notes)
GoHighLevel permissions:
- Read and write contacts
- Read and write opportunities
- Read location info
Setup Wizard Launches
After authorization, you'll be redirected back to Wozena and the CRM Setup Wizard will launch automatically. This 4-step wizard configures everything.
Setup Wizard
The setup wizard walks you through 4 steps to configure your CRM integration.
Step 1: Select Contact Lists
Choose which contacts to import from your CRM.
- All Contacts — Import every contact from your CRM
- Specific lists — Select individual lists, tags, or segments. Use the search bar to filter if you have many lists.
You must select at least one list or "All Contacts" to proceed.
Large imports
Importing thousands of contacts happens in the background. You'll receive a notification when the import completes. During import, you can continue using Wozena normally.
Step 2: Map Fields (Pull)
Configure how CRM fields translate to Wozena contact fields when importing.
Default mappings are pre-filled:
| CRM Field (HubSpot) | CRM Field (GHL) | Wozena Field |
|---|---|---|
firstname | firstName | Name |
phone | phone | Phone Number |
email | email | |
company | companyName | Company |
Adding custom mappings:
- Click "Add custom mapping" at the bottom
- Select a CRM field from the searchable dropdown (search to filter through 100+ fields)
- Select the target Wozena field, or click "+ Create custom field" to create a new Wozena custom field from the CRM field name
Custom fields
When you create a custom field from the wizard, it's automatically added to your Wozena custom field definitions. You can manage these later in Settings → Custom Fields.
Step 3: Push Settings
Configure what happens after every call — what data gets pushed back to your CRM.
Auto-push toggle: Enable to automatically push call data to CRM after every call. Disabled by default — you must explicitly opt in.
Data to push (when auto-push is on):
| Field | Default | Description |
|---|---|---|
| Call Summary | ✅ On | AI-generated summary of the conversation |
| Outcome | ✅ On | How the call ended (answered, voicemail, no answer, etc.) |
| Duration | ✅ On | Call length in seconds |
| Sentiment | ✅ On | Caller sentiment (Positive / Neutral / Negative) |
| Transcript | ❌ Off | Full conversation transcript — opt-in for compliance |
| Recording URL | ❌ Off | Link to call recording audio — opt-in for compliance |
Compliance note
Transcript and Recording URL are disabled by default because they contain sensitive conversation data. Enable them only if your organization's compliance policies allow sharing call recordings with your CRM provider.
Sync interval: How often Wozena re-imports contacts from your CRM to catch new additions or changes.
| Interval | Best for |
|---|---|
| Every 15 min | Active sales teams needing near-real-time sync |
| Every 30 min | Good balance of freshness and API usage |
| Every hour (default) | Most teams — catches daily changes efficiently |
| Every 6 hours | Low-volume teams |
| Every 24 hours | Minimal sync, lowest API usage |
Step 4: Review & Start Import
Review your configuration:
- Lists selected (with estimated contact count)
- Pull field mappings
- Push settings and sync interval
Click "Start Import" to begin importing contacts in the background. You'll receive a notification when the import completes.
After Setup
Integrations Page
After connecting, your CRM card on the Integrations page shows:
- Connected status with a green indicator
- Settings button — expand to view sync summary and adjust push settings
- Sync Now button — trigger an immediate re-sync of contacts
- Edit setup link — re-launch the setup wizard to modify field mappings
- Disconnect button — remove the CRM connection (imported contacts remain in Wozena)
Imported Contacts
Contacts imported from your CRM appear in the Contacts page with a colored badge:
- 🟠 HubSpot badge for HubSpot-imported contacts
- 🟢 GHL badge for GoHighLevel-imported contacts
Each imported contact retains a link to their CRM record, enabling push-back after calls.
Using CRM Contacts in Campaigns
When creating a new campaign, the Contacts step has three tabs:
| Tab | Description |
|---|---|
| Upload CSV | Upload a CSV file with phone numbers |
| Select from Contacts | Pick from your existing Wozena contacts |
| Import from CRM | Use contacts imported from your CRM |
Import from CRM tab
If you have previously imported CRM contacts, you'll see a card:
"X HubSpot contacts ready" Previously imported from your CRM and available to use. [Use these contacts]
Click "Use these contacts" to select all CRM-imported contacts for the campaign. You can also import fresh contacts from CRM lists below.
Dynamic Variable Mapping
If your agent uses dynamic variables (like {{first_name}}, {{company}}, {{appointment_date}}), the campaign wizard automatically detects matching contact fields:
{{name}},{{first_name}}→ Contact name{{email}}→ Contact email{{company}}→ Contact company{{budget}}→ Custom field "budget"{{agent_name}}→ Not mapped (uses default from flow)
Variables that match contact fields show an "auto" badge. Unmatched variables use their default values defined in the flow editor.
Post-Call Data Flow
After every call ends, this pipeline runs automatically:
AI Analysis
The AI analyzes the conversation and extracts structured data: summary, sentiment, call outcome, and any custom PCA fields you've configured on the agent.
Contact Enrichment
Extracted data is written to the Wozena contact record based on your agent's PCA → Contact mapping (configured in Agent Settings → Post-Call Analysis → Contact Enrichment).
Disposition Update
The contact's disposition is automatically updated based on the call outcome and sentiment:
- High interest → Qualified
- Medium interest → Interested
- Appointment booked → Qualified
- Not interested → Not Interested
- DNC requested → Do Not Call
CRM Push (if enabled)
If auto-push is enabled on your CRM connection:
- Call note created on the CRM contact with summary, outcome, duration, sentiment (and optionally transcript/recording)
- Contact fields updated in CRM based on your push field mappings
- PCA data pushed to CRM fields based on per-agent PCA → CRM mappings
This happens within seconds of the call ending.
PCA → CRM Field Mapping (Per Agent)
Different agents extract different data. A lead qualification agent might extract budget and interest_level, while an appointment booking agent extracts appointment_date and preferred_time.
To map these agent-specific fields to CRM properties:
Go to Agents → click on your agent → Settings → scroll to Post-Call Analysis
Click "Contact Enrichment Mapping"
For each PCA field, you'll see three columns:
| PCA Field | → Contact Field | → CRM Field (optional) |
|---|---|---|
budget | cf:budget | hs_budget |
interest_level | cf:interest_level | hs_lead_status |
appointment_date | cf:appointment | — (skip) |
The CRM field column only appears when you have an active CRM connection. Select the CRM property to push each value to after calls.
Click Save — future calls with this agent will push the mapped PCA data to the corresponding CRM fields.
Why per-agent?
PCA → CRM mapping is configured per agent (not globally) because each agent extracts different data. Agent A might extract "budget" while Agent B extracts "appointment_type" — each needs its own CRM field mapping.
CRM Automation Actions
The automation engine includes three CRM-specific actions you can use in rules:
| Action | What it does | Example rule |
|---|---|---|
| Create CRM Deal | Creates a deal/opportunity in your CRM pipeline linked to the contact | "When disposition changes to Qualified → Create deal in Sales pipeline at stage Negotiation" |
| Update Deal Stage | Moves an existing CRM deal to a different pipeline stage | "When disposition changes to Customer → Move deal to Closed Won" |
| Push CRM Note | Adds a custom note to the CRM contact | "When tag 'vip' is added → Push note 'VIP contact flagged by agent'" |
To create a CRM automation rule:
- Go to Automations → New Rule
- Choose a trigger (e.g.,
disposition_changed,call_completed,tag_added) - Add conditions if needed (e.g., "interest level is high")
- Select one of the CRM actions above
- Configure the action (pipeline, stage, note template)
- Save and enable the rule
DNC (Do Not Call) Sync
Do-Not-Call status syncs bidirectionally between Wozena and your CRM:
| Direction | When | What happens |
|---|---|---|
| CRM → Wozena | On every contact sync | If a contact is marked as opted-out or DNC in your CRM, they are marked do_not_call = true in Wozena. They will be excluded from campaigns. |
| Wozena → CRM | After every call | If the AI detects a DNC request during a call (via PCA do_not_call_requested field), or if you manually toggle DNC, the opt-out status is pushed to the CRM contact. |
The rule is strictest wins — if either system marks a contact as DNC, they remain DNC in both systems.
Disconnecting
To disconnect your CRM:
- Go to Integrations → find your connected CRM
- Click the disconnect button (unlink icon)
- Confirm the disconnection
What happens when you disconnect:
- ✅ Imported contacts remain in Wozena — they're your data
- ✅ CRM badges stay on contacts for reference
- ✅ Field mappings are preserved (in case you reconnect)
- ❌ Auto-push stops — call data is no longer sent to CRM
- ❌ Scheduled re-sync stops
- ❌ CRM automation actions will fail (rules using CRM actions should be disabled)
You can reconnect at any time — the setup wizard will re-launch to configure the new connection.
Troubleshooting
"No CRM lists found"
Your CRM may not have any lists or tags configured. Try selecting "All Contacts" in the setup wizard instead.
Token expired / Connection error
HubSpot tokens expire every 30 minutes. Wozena automatically refreshes tokens before making API calls. If you see repeated token errors:
- Disconnect the CRM
- Reconnect via OAuth
- Re-run the setup wizard
Contacts showing as "Unknown"
Check your field mappings — make sure firstname (HubSpot) or firstName (GHL) is mapped to the Wozena Name field. Re-run the setup wizard and verify Step 2.
Call data not pushing to CRM
Verify:
- Auto-push is enabled — Integrations → Settings → check the auto-push toggle
- Contact is CRM-linked — The contact must have been imported from CRM (has the HubSpot/GHL badge)
- Connection is active — Check the connection status on the Integrations page
Import takes too long
Large imports (10,000+ contacts) run in the background via our job queue. You'll receive a notification when complete. Check the notification bell for status.
Security & Compliance
| Aspect | Details |
|---|---|
| Credential storage | OAuth tokens and API keys are encrypted with AES-256-GCM at rest |
| Token refresh | Automatic — HubSpot tokens refresh every 30 minutes, GHL every 24 hours |
| Data sharing | Opt-in only — auto-push is off by default. Transcript and recording push require explicit opt-in |
| Audit trail | Every sync operation is logged with fields sent, direction, status, and timestamp |
| DNC compliance | Bidirectional DNC sync ensures opted-out contacts are never called |
What's Next?
📞 Launch a Campaign
Use your CRM-imported contacts to run an outbound campaign.
🧠 Configure PCA
Define what data the AI should extract from conversations and map to CRM fields.
⚡ Automation Rules
Create rules that trigger CRM actions based on call outcomes.
📅 Calendar Integration
Connect Cal.com or Calendly for appointment booking during calls.