Article summary
Connect Facebook lead IDs, WhatsApp permission and number-checking output in CRM while preserving campaign attribution and suppression evidence.
When Facebook ad leads enter a WhatsApp workflow, the critical key is an immutable lead_id plus permission evidence—not the phone alone. Phones are normalized, shared and changed. Joining ads and checking output directly on phone can corrupt attribution across duplicate submissions, mapped phones and campaign forms.
Capture form context at submission
Store lead_id, campaign_id, adset_id, ad_id, form_id, submitted_at, phone_raw, country_answer and the version of WhatsApp permission language. Consent to receive one requested asset does not necessarily cover later promotions; actual messages must fit the stated scope.
| Field family | Owning system | Purpose |
|---|---|---|
| Ad attribution | Meta / warehouse | Campaign, ad and form provenance |
| Contact | CRM | lead_id to contact_id |
| Permission | Consent ledger | Channel, purpose and opt-out |
| Phone observation | Checking staging | Task fields and date |
Normalize without overwriting source
Use the form’s country answer as phone evidence and preserve phone_raw plus normalization_rule. Missing or conflicting country data enters an exception queue. Do not assume the campaign’s target country is the phone country; people travel and keep foreign subscriptions.
Place number checking after permission
Consider the narrowest task such as WS Registration only when the form context clearly includes WhatsApp contact and no opt-out applies. AIPUSH accepts one phone per line as TXT and exports Excel. Checking cannot repair missing consent.
Build three mapping tables
| Map | Key | Collision handling |
|---|---|---|
| lead_contact | lead_id ↔ contact_id | Retain repeated submissions |
| contact_phone | contact_id ↔ normalized phone | Do not overwrite several phones |
| phone_observation | phone ↔ task/batch | Mapped phones enter review |
Write Excel into an observation domain
Add batch_id, checked_at and task_name, then join phone_observation. Unmatched rows, state conflicts and one-to-many mappings create cases. Never write task output over the raw Meta lead table.
A mapped phone cannot rewrite ad attribution
When a WhatsApp mapped phone differs from the form phone, retain the original lead_id, campaign_id and submission time. The mapping is an identity-review clue, not evidence for reallocating advertising credit.
Report conversion events in layers
Separate lead_submitted, qualified_lead, conversation_started, opportunity and sale. Passing a phone task is not a conversion; it is a data-quality state. Freeze revenue windows, refunds and offline-sale rules so the last check does not receive every later sale.
Deduplicate without deleting touchpoints
When one phone submits repeatedly, retain every lead_id and touchpoint while merging only the contact view. Attribution may use an agreed first, last or multi-touch rule, but choose it before reading performance. Deleting duplicate rows damages ad learning and frequency analysis.
Opt-out stops the connected workflow
A WhatsApp exit enters suppression and applies to phones confidently linked to that contact_id, with caution for shared numbers. A later form restores a scope only when it contains a clear new permission.
Accept on two kinds of correctness
Data teams report phone reconciliation, exceptions and field coverage. Marketing teams report lead_id preservation, qualified leads and incremental conversion. The integration succeeds only when data cleanup does not silently destroy attribution.
