Short answer: To track Meta ads leads to final sales, give every lead a CRM record that keeps Meta's identifiers (the Instant Form lead_id, or fbc/fbp and hashed email and phone for website forms), record each sales stage with a timestamp, and send those stages back to Meta through the Conversions API. For Instant Forms, CRM events sent with the lead ID unlock Meta's Conversion Leads optimisation, which bids for leads that become qualified or buy. Meta's separate Offline Conversions API was discontinued in May 2025, so all CRM events now go through the Conversions API.
Need this done for you? GrowthSparx offers a fixed-scope lead tracking and attribution setup: GA4, Google Ads, Meta, WhatsApp, calls and CRM wired into one dashboard, usually live in 2–3 weeks.
Benchmark reference: the public 2025–2026 numbers behind this guide (Meta and Google CPC/CPM in India, CPL ranges by industry, landing-page conversion, real estate funnel rates, WhatsApp API pricing) are collected and graded in our India lead generation benchmarks 2026 report.
Which Meta lead path are you tracking?
Meta ads produce leads through three paths, and the identifiers available differ for each. Decide which you run before designing the CRM side.
| Instant Form (lead ad) | Website form | Click-to-WhatsApp / Messenger | |
|---|---|---|---|
| Where the form lives | Inside Facebook/Instagram | Your landing page | The chat thread |
| Main Meta identifier | 15–17 digit lead_id (leadgen_id) | fbc (from fbclid), fbp cookie, hashed email/phone | ctwa_clid from the webhook referral |
| How it reaches the CRM | leadgen webhook or native CRM connector | Your form handler | WhatsApp API inbox / CRM |
| Sending sales stages back | Conversions API, CRM (Conversion Leads) format | Conversions API, hashed customer data | Conversions API for business messaging |
| Typical quality issue in India | Auto-filled names and numbers, low intent | Slower volume, better intent; tracking breaks on redirects | Chats that never answer qualifying questions |
The WhatsApp path is covered in WhatsApp lead tracking with GA4 and CRM. This guide covers the first two.
How do you get Instant Form leads into your CRM?
Downloading CSVs from Meta Business Suite works for a week and fails after that: leads go stale before anyone calls, and the lead ID is lost. Connect the form to the CRM in real time instead.
- Choose the connector. Options are your CRM's native Meta lead ads integration if it has one, a middleware tool such as Zapier or Make, or your own app on the Graph API.
- If building your own: per Meta's lead retrieval guide, set up a webhook endpoint, generate a long-lived Page token and install your app on the Page. Each new lead sends a
leadgenchange containingleadgen_id,page_id,form_id,adgroup_id,ad_idandcreated_time. Then callGET /<LEAD_ID>to fetchfield_data(the answers). For backfills,GET /<FORM_ID>/leadsreads in bulk with the leads_retrieval permission. - Map the fields. Store
meta_lead_id,meta_ad_id,meta_form_id, campaign and ad set names,created_time, and every form answer in its own field, not in a notes blob. - Normalise contact data on the way in: lower-case email, phone in E.164 (
+919876543210). This is what you will hash later. - Alert on sync failures. Compare the day's lead count in Ads Manager with CRM records carrying a
meta_lead_id. A gap means the webhook or token has broken; Page token expiry after an admin leaves is a common cause.
Instant Forms in India attract auto-filled, low-intent submissions. Before blaming tracking, try the "Higher intent" form type with a review screen and one qualifying question (budget, location, course intake). Fixes for junk leads are covered in reducing fake and duplicate leads.
How do you track website leads from Meta ads?
Website leads need three things captured at submission so a later sale can be matched back to the click:
- A Pixel event and a matching server event. Fire the Pixel standard event
Leadon confirmed submission (Meta describes it as "When a sign up is completed";ScheduleandSubmitApplicationfit bookings and applications), and send the same event from your server through the Conversions API. Use the same event name and the same ID: Meta recommends passingeventIDas the fourth parameter offbq('track')(Pixel reference) and the matchingevent_idserver-side. Meta deduplicates only when both arrive within 48 hours of the first event with that ID (deduplication guide). - Click identifiers in hidden fields. Store the
_fbcand_fbpcookie values (or buildfbcfromfbclidin the formatfb.1.<timestamp>.<fbclid>) with the lead. Meta's customer information parameters sayfbc,fbp, IP and user agent must not be hashed. - Hashed email and phone.
emandphmust be SHA-256 hashed after normalising: trim and lower-case email; for phone, remove symbols, letters and leading zeros and include the country code, so an Indian mobile becomes919876543210before hashing.
Our Meta Conversions API setup guide goes deeper on choosing between a partner integration, the CAPI Gateway and a direct server setup. Here we focus on what happens after the lead exists.
Which CRM stages should you send to Meta?
Send stages that are recorded consistently and that sales cannot casually undo. Four to five is enough.
| CRM stage | Meta event name (example) | Definition (agree with sales) | Send for |
|---|---|---|---|
| New lead | Lead (website) / initial stage (Instant Form) | Record created | Both paths; Meta asks for the initial stage too |
| Contacted | Contacted | Two-way conversation happened | Optional; useful when contact rate is the problem |
| Qualified | Qualified Lead | Budget, location and timeline confirmed | Both; usual optimisation target |
| Site visit / demo / consultation | Site Visit | Attended, not just booked | Both |
| Won | Purchase (with value in INR) | Booking amount, fee or invoice paid | Both; include value and currency |
For Conversion Leads, the target stage must convert between 1% and 40% of leads and happen within 28 days of the lead (Meta Conversion Leads requirements). In real estate, "site visit done" usually fits; "booking" often happens too late or too rarely. In education, "application started" fits better than "enrolled".
What does the CRM event payload look like?
Instant Form leads. Meta's payload specification requires action_source: "system_generated", custom_data.event_source: "crm", custom_data.lead_event_source (the name of your CRM) and at least one customer parameter, with lead_id recommended as the highest-priority key. event_name is your stage label. POST to /<DATASET_ID>/events:
{"data": [{"event_name": "Qualified Lead","event_time": 1760165400,"action_source": "system_generated","user_data": {"lead_id": 1234567890123456,"ph": ["<sha256 of 919876543210>"]},"custom_data": {"event_source": "crm", "lead_event_source": "Zoho CRM"}}]}
Website leads. No lead ID exists, so match on hashed em/ph, fbc, fbp and external_id (your CRM lead ID, hashing recommended). Choose the action_source that describes where the stage happened: Meta defines phone_call ("Conversion was made over the phone"), physical_store (in person), chat, email and other (server event parameters). A site visit is physical_store; a lead qualified on a call is phone_call.
Timing rules that break uploads:
event_timecan be at most 7 days in the past. Meta says if any event in a request is older, the whole request errors. Send stage changes at least daily, which Conversion Leads requires anyway.- For Conversion Leads,
event_timemust be after the lead's creation time or the event may be discarded. - Use the time the stage changed in the CRM (in Unix seconds), not the time your script ran.
Hashing in Python, for whoever writes the sync job:
import hashlib, redef h(v): return hashlib.sha256(v.encode()).hexdigest()email = h(" Priya.S@Example.com ".strip().lower())phone = h(re.sub(r"\D", "", "+91 98765-43210").lstrip("0")) # 919876543210
When should you switch on Conversion Leads?
Meta's Conversion Leads goal optimises Instant Form campaigns towards leads likely to reach your chosen CRM stage. Meta states it is "currently only compatible with Facebook/Instagram's Lead Ads (Instant Forms)" and lists these requirements: store the 15–17 digit lead ID, generate at least 200 leads per month, upload at least daily, a target stage reached within 28 days, and a target stage conversion rate between 1% and 40%.
Worked example (illustrative; assumptions stated): a Pune developer runs Instant Forms at ₹350 per lead, 600 leads a month (₹2,10,000 spend). 12% become site visits: 72 visits, so ₹2,917 per visit. If moving to Conversion Leads raises the CPL to ₹450 but lifts the visit rate to 18%, then 2,10,000 ÷ 450 ≈ 467 leads, × 18% ≈ 84 visits, at ≈ ₹2,500 per visit. Fewer, dearer leads; cheaper site visits. That is the trade to evaluate, and you can only see it if the CRM stage data is flowing first. Run the CRM events for 2–4 weeks before changing the campaign goal so the stage is visibly populated in Events Manager.
On the real-estate accounts our founder managed in-house before GrowthSparx, the number managed to was downstream: for ILeadGuru it was a 30% lead-to-deal conversion, and for Defantasia a 40% lead conversion. Neither figure exists without stage data in the CRM.
How do you report Meta leads through to sales?
Build one weekly cohort table from the CRM, filtered to Meta-sourced leads, split by campaign and form:
| Metric | Formula | Watch for |
|---|---|---|
| Sync rate | CRM leads with meta_lead_id ÷ Ads Manager leads | Below 98% means a broken connector |
| Contact rate | Contacted ÷ leads | Fake numbers or slow first call |
| Qualified rate | Qualified ÷ contacted | Audience or creative attracting the wrong people |
| Cost per qualified lead | Spend ÷ qualified | The number to optimise |
| Cost per sale and ROAS | Spend ÷ won; won value ÷ spend | Compare against Google Ads on the same cohort |
Expect Ads Manager and the CRM to disagree on revenue: Meta credits conversions inside its own attribution setting, the CRM credits its lead source. Our guides on CRM revenue attribution and lead-to-revenue dashboards cover the reconciliation.
QA checklist before relying on the data
| Test | Expected result |
|---|---|
| Submit a test Instant Form (Meta's Lead Ads Testing Tool) | CRM record within minutes with meta_lead_id, ad ID, form ID and all answers |
| Submit the website form from a Meta ad click | One Lead in Events Manager marked as deduplicated (browser + server), fbc stored in CRM |
| Same person submits twice | One contact, second enquiry logged, no duplicate stage events |
| Move test lead to Qualified, then edit it again | Exactly one Qualified Lead event received |
| Stage change older than 7 days in a batch | Excluded by the sync job so the request does not fail |
| Inspect a sent payload | em/ph hashed; fbc, fbp, lead_id unhashed; event_time in seconds |
| Daily reconciliation for the first two weeks | Sync rate and event counts logged; failures alerted |
Collect only the fields you need, show a clear privacy notice on Instant Forms and landing pages, and restrict CRM exports: India's DPDP Act, 2023 applies to this personal data. If you also run Google Ads, the same CRM stages can feed Google Ads offline conversion tracking.
Sources
- Meta for Developers: Retrieving lead ads leads: leadgen webhook fields, Graph API retrieval, bulk read.
- Meta for Developers: Conversion Leads integration: Instant Forms only; 200 leads a month; daily upload; 28 days; 1–40%.
- Meta for Developers: Conversion Leads payload specification: required fields and sample payload.
- Meta for Developers: Server event parameters: action_source values, 7-day event_time limit, event_id.
- Meta for Developers: Customer information parameters: hashing, normalisation, fbc format.
- Meta for Developers: Deduplicate Pixel and server events: event_id and 48-hour window.
- Meta for Developers: Pixel reference: Lead, Contact, Schedule, SubmitApplication; eventID parameter.
- Jon Loomer: Offline Conversions API deprecation: quotes Meta's notice that the Offline Conversions API was discontinued in May 2025.