More in
Chat Funnel Setup
WhatsApp Business API Integration With Your CRM (Working Setup)
Apr 18, 2026 · Currently reading
Click-to-WhatsApp Ad Campaigns: From Setup to First Conversion
Apr 18, 2026
Conversational Qualification: Questions That Don't Annoy Buyers
Apr 18, 2026
Designing a Chat Funnel for High-Ticket B2B (Not E-Commerce)
Apr 18, 2026
Configuring Fallback Flows When AI Agents Fail
Apr 18, 2026
Building a 24/7 Chat Funnel Without Burning Out Your Team
Apr 18, 2026
Chat Funnel A/B Testing: What to Test and How
Apr 18, 2026
GDPR-Compliant Chat Funnels for EU Buyers
Apr 18, 2026
Measuring Chat Funnel Performance: The Metrics That Matter
Apr 9, 2026
Lead Routing Automation for Chat-Captured Leads
Apr 7, 2026
WhatsApp Business API Integration With Your CRM (Working Setup)
Here's a frustrating reality: you get WhatsApp conversations flowing, reps respond, leads express interest, and then 40% of those contacts never appear in your CRM. Not because of a technical limitation, but because the integration was misconfigured in a way that silently fails.
A RevOps manager at a B2B SaaS company discovered this when she pulled a WhatsApp report and compared it against HubSpot. The gap was real and had been accumulating for two months. The fix took one afternoon once she identified which path she was on and what was misconfigured.
This guide walks you through the three main integration setups: ManyChat → HubSpot, Respond.io → HubSpot, and webhook-to-any-CRM, with the specific field mapping, deduplication logic, and UTM attribution steps that each requires.
Choosing Your Integration Path
Before touching any settings, pick your path. The decision comes down to your existing toolstack and CRM. According to Meta's official WhatsApp Business Platform documentation, the Business API supports three authentication tiers with different messaging capabilities — your integration path determines which tier applies to your use case. If you're still deciding which chat platform fits your workflow, the Respond.io vs ManyChat comparison for B2B sales breaks down the tradeoffs clearly.
| Path | Best for | Technical requirement | Sync depth |
|---|---|---|---|
| ManyChat → HubSpot | Teams already using ManyChat for flows | Low (native connector) | Contact + custom properties |
| Respond.io → HubSpot | Teams using Respond.io as primary inbox | Low (native connector) | Contact + lifecycle stage + conversation history |
| Webhook → Any CRM | Salesforce, Pipedrive, custom CRMs | Medium (Zapier or Make required) | Configurable via webhook payload |
If you're on HubSpot and actively building flows in ManyChat, go with Path A. If you're running all chat operations through Respond.io, Path B gives you deeper sync. If your CRM isn't HubSpot, Path C is your option.
Path A: ManyChat → HubSpot
Enabling the Integration
In ManyChat, go to Settings → Integrations → HubSpot. You'll need:
- A HubSpot account with Contacts access
- A ManyChat admin role
- HubSpot API key or OAuth connection (OAuth is preferred)
Click Connect, authorize the HubSpot connection, and confirm the linked portal.
Required HubSpot Permissions
The connecting HubSpot user needs at minimum: Contacts (view and edit), Properties (view), and Workflows (view). If you're using HubSpot workflows triggered by ManyChat data, add Workflows (edit).
Mapping Contact Fields
ManyChat subscriber data maps to HubSpot contact properties. Here's the default mapping and what you'll want to customize:
| ManyChat Field | HubSpot Property | Notes |
|---|---|---|
| First Name | firstname | Auto-mapped |
| Last Name | lastname | Auto-mapped |
| Phone | phone | Maps to primary phone (watch E.164 format) |
| Only present if collected in flow | ||
| Custom attribute: company_size | company_size (custom) | Must create property first in HubSpot |
| Custom attribute: industry | industry | Maps to standard HubSpot property |
| Custom attribute: use_case | hs_lead_status (custom) | Create a custom field for this |
| Flow source (ad ID) | hs_analytics_source | Requires UTM passthrough setup |
To map a custom attribute, go to ManyChat → Integrations → HubSpot → Field Mapping and add a new row. The HubSpot property must exist before you can map to it. Create it in HubSpot first under Contacts → Properties.
Contact Owner Assignment
ManyChat can assign a HubSpot contact owner based on round-robin or a fixed owner. Set this under the HubSpot integration settings → Default Owner. For teams doing territory-based routing, you'll need to use a HubSpot workflow triggered on contact creation to re-assign based on company or region.
What Syncs and What Doesn't
ManyChat syncs contact properties and optionally pushes a note with conversation summary. It does not sync full conversation transcripts to HubSpot natively. For conversation history, you need Path B or a webhook workaround.
The integration also doesn't push contact updates in real-time for every message. It triggers on specific events in your flow (typically on opt-in or when a flow step fires the HubSpot action).
Path B: Respond.io → HubSpot
Connecting Via Respond.io's Native HubSpot Module
In Respond.io, go to Settings → Integrations → HubSpot. You'll authenticate via OAuth. Respond.io requires a HubSpot admin account for the initial connection.
Once connected, Respond.io creates a two-way sync: contacts created in Respond.io appear in HubSpot, and existing HubSpot contacts can be pulled into Respond.io conversations.
Lifecycle Stage Mapping
Respond.io can update HubSpot lifecycle stages based on conversation events. Configure this under the HubSpot integration settings:
- New contact from WhatsApp → Lead
- Qualification questions completed → Marketing Qualified Lead
- Meeting booked → Sales Qualified Lead
Set these mappings to fire automatically when the relevant step in your flow completes.
Contact Deduplication by Phone Number
Respond.io uses phone number as the primary deduplication key when syncing to HubSpot. If a contact already exists in HubSpot with the same E.164-formatted phone number, Respond.io updates the existing record rather than creating a duplicate.
The catch: phone number format must match exactly. If HubSpot has "+1 (555) 000-0000" and Respond.io sends "+15550000000", they won't deduplicate. Standardize all phone numbers to E.164 format in both systems. In HubSpot, you can use a workflow with the "Format phone number" action to normalize existing records.
Conversation History Sync Options
Respond.io can push conversation history to HubSpot as a note on the contact record. Enable this under HubSpot integration → Sync Options → Log Conversations. Each conversation becomes a timestamped note with the full exchange.
This is the biggest advantage of Path B over Path A for teams that want reps to see context before they call a chat-sourced lead.
Path C: Webhook to Any CRM
Structuring the Respond.io Webhook Payload
Respond.io supports outbound webhooks triggered by conversation events (new contact, message received, flow step completed). Configure these under Settings → Developer → Webhooks.
A sample payload when a contact completes a qualification flow step:
{
"event": "contact.updated",
"contact": {
"id": "abc123",
"phone": "+15550001234",
"firstName": "Jane",
"lastName": "Chen",
"customAttributes": {
"company_size": "50-200",
"use_case": "sales_automation",
"timeline": "Q2_2026",
"source_ad_id": "23849572894"
},
"createdAt": "2026-04-18T09:32:00Z",
"optInTimestamp": "2026-04-18T09:31:47Z"
},
"conversation": {
"id": "conv_xyz789",
"channel": "whatsapp"
}
}
Building the Zapier or Make Zap
In Zapier:
- Trigger: Webhooks by Zapier → Catch Hook
- Copy the webhook URL into Respond.io
- Send a test contact through the flow to populate sample data
- Action: Create or Update Contact in your CRM
- Map fields from the webhook payload to CRM fields
- Add a filter step: only proceed if
phoneis not empty
In Make (formerly Integromat), use the Webhooks module as trigger, then route to your CRM's Create/Update Contact module.
Handling the Phone Number Format Issue
WhatsApp always sends phone numbers in E.164 format. Most CRMs accept E.164 but some (particularly Salesforce) have local format requirements. Add a text formatter step in Zapier/Make to strip the country code prefix or reformat as needed before the CRM action fires.
UTM and Source Attribution
When a contact enters your WhatsApp funnel from a Meta ad, the ad source data travels with them, but only if you've wired the handoff correctly. For the full ad setup that feeds this attribution pipeline, see the guide on Click-to-WhatsApp ad campaigns.
Meta passes a ad_id and campaign_id parameter when the conversation is initiated from a Click-to-WhatsApp ad. Respond.io captures these automatically in the conversation metadata. ManyChat captures them as User Input variables if you've added the Meta ad source step to your flow.
To get campaign-level attribution in your CRM:
- Store ad_id, ad_set_id, and campaign_id as custom attributes in your chat platform
- Include them in your field mapping or webhook payload to the CRM
- Create a HubSpot custom property "WhatsApp Campaign Source" mapped to campaign_id
- Build a HubSpot report filtered by "WhatsApp Campaign Source" to see pipeline by campaign
This gives you a simple campaign → pipeline view without needing a third-party attribution tool.
Deduplication Rules
When the same phone number enters your funnel multiple times (common with retargeting campaigns), your integration needs a clear rule. This is especially relevant when lead capture automation is pulling contacts in from multiple channels simultaneously.
The priority order:
- Match on phone number first (E.164 normalized)
- If match found: update the existing record, don't create new
- If no match: create new contact, flag as new lead
- If phone matches but email differs: update email only if the existing record has no email
In HubSpot, the native deduplication only matches on email by default. For phone-based deduplication, use a HubSpot workflow: trigger on contact creation, search for existing contact by phone number, and if found, merge the records using a custom code step or a third-party deduplication app like Dedupely.
In Salesforce, use duplicate rules under Setup → Duplicate Management, with a matching rule on Phone field. A Gartner study on CRM data quality found that poor data quality costs organizations an average of $12.9 million per year — phone deduplication is one of the most cost-effective fixes.
Testing the Integration
Run this 6-step sequence before going live:
- Send yourself through the full WhatsApp flow using a test phone number
- Check your chat platform (ManyChat/Respond.io) to confirm the contact was created with all custom attributes populated
- Wait 2-3 minutes, then check your CRM for a new contact with the matching phone number
- Verify each mapped field arrived with the correct value, especially custom attributes
- Check that contact owner was assigned correctly
- Send a second test with the same phone number to verify deduplication (update not duplicate)
If step 3 fails: check your integration connection status first, then look at the event log in your chat platform for sync errors.
If step 4 fails with missing custom attributes: confirm the attribute was populated during the flow (check the contact record in ManyChat/Respond.io) and that the field mapping is configured correctly.
Common Pitfalls
Phone number format mismatch. The single most common failure. Normalize to E.164 everywhere before you build any mapping. GDPR-compliant chat funnels for EU buyers covers additional requirements around storing phone numbers if your contacts are in the EU.
Missing opt-in timestamp. GDPR and WhatsApp Business Policy both require you to record when a user opted in. Store the opt-in timestamp as a CRM field from day one, not as an afterthought.
CRM blocking records without email. HubSpot and Salesforce can be configured to require email on contact creation. WhatsApp contacts often don't have email collected. Either remove the email requirement for chat-sourced contacts or collect email as a flow step.
HubSpot property type conflicts. If you map a ManyChat text attribute to a HubSpot number property, the sync will fail silently. Match property types exactly: text to text, number to number, dropdown to dropdown.
What to Do Next
Once your integration is confirmed working, build a CRM view filtered by "WhatsApp Campaign Source is not empty." Pair this view with solid CRM data model design so your custom chat properties sit in a consistent schema from the start. This becomes your ongoing view for tracking pipeline sourced from chat. Review it weekly against your other lead sources to see the channel's contribution.
From there, connect the attribution dots to revenue. When a chat-sourced lead closes, tag the deal with the original campaign source. After 60 days you'll have enough data to optimize ad spend toward the campaigns that produce not just conversations, but closed revenue.
Learn More
- Setting up a Meta ads → WhatsApp chat funnel end-to-end
- Lead routing automation for chat-captured leads
- How the death of the contact form is reshaping lead capture
- CRM workflow automation for ops teams
- Measuring chat funnel performance: the metrics that matter
- Setting up Respond.io with HubSpot end-to-end

Principal Product Marketing Strategist
On this page
- Choosing Your Integration Path
- Path A: ManyChat → HubSpot
- Enabling the Integration
- Required HubSpot Permissions
- Mapping Contact Fields
- Contact Owner Assignment
- What Syncs and What Doesn't
- Path B: Respond.io → HubSpot
- Connecting Via Respond.io's Native HubSpot Module
- Lifecycle Stage Mapping
- Contact Deduplication by Phone Number
- Conversation History Sync Options
- Path C: Webhook to Any CRM
- Structuring the Respond.io Webhook Payload
- Building the Zapier or Make Zap
- Handling the Phone Number Format Issue
- UTM and Source Attribution
- Deduplication Rules
- Testing the Integration
- Common Pitfalls
- What to Do Next
- Learn More