Indian marketing team connecting social advertising leads to CRM and completed sales

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.

On this pageInstant Forms vs website leadsGetting Instant Form leads into the CRMWebsite leads: Pixel, CAPI and identifiersCRM stages to sendCRM event payloadsConversion Leads optimisationReporting Meta leads to salesQA checklistSources

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 formClick-to-WhatsApp / Messenger
Where the form livesInside Facebook/InstagramYour landing pageThe chat thread
Main Meta identifier15–17 digit lead_id (leadgen_id)fbc (from fbclid), fbp cookie, hashed email/phonectwa_clid from the webhook referral
How it reaches the CRMleadgen webhook or native CRM connectorYour form handlerWhatsApp API inbox / CRM
Sending sales stages backConversions API, CRM (Conversion Leads) formatConversions API, hashed customer dataConversions API for business messaging
Typical quality issue in IndiaAuto-filled names and numbers, low intentSlower volume, better intent; tracking breaks on redirectsChats 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.

  1. 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.
  2. 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 leadgen change containing leadgen_id, page_id, form_id, adgroup_id, ad_id and created_time. Then call GET /<LEAD_ID> to fetch field_data (the answers). For backfills, GET /<FORM_ID>/leads reads in bulk with the leads_retrieval permission.
  3. 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.
  4. Normalise contact data on the way in: lower-case email, phone in E.164 (+919876543210). This is what you will hash later.
  5. 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 Lead on confirmed submission (Meta describes it as "When a sign up is completed"; Schedule and SubmitApplication fit 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 passing eventID as the fourth parameter of fbq('track') (Pixel reference) and the matching event_id server-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 _fbc and _fbp cookie values (or build fbc from fbclid in the format fb.1.<timestamp>.<fbclid>) with the lead. Meta's customer information parameters say fbc, fbp, IP and user agent must not be hashed.
  • Hashed email and phone. em and ph must 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 becomes 919876543210 before 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 stageMeta event name (example)Definition (agree with sales)Send for
New leadLead (website) / initial stage (Instant Form)Record createdBoth paths; Meta asks for the initial stage too
ContactedContactedTwo-way conversation happenedOptional; useful when contact rate is the problem
QualifiedQualified LeadBudget, location and timeline confirmedBoth; usual optimisation target
Site visit / demo / consultationSite VisitAttended, not just bookedBoth
WonPurchase (with value in INR)Booking amount, fee or invoice paidBoth; 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_time can 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_time must 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, re
def 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:

MetricFormulaWatch for
Sync rateCRM leads with meta_lead_id ÷ Ads Manager leadsBelow 98% means a broken connector
Contact rateContacted ÷ leadsFake numbers or slow first call
Qualified rateQualified ÷ contactedAudience or creative attracting the wrong people
Cost per qualified leadSpend ÷ qualifiedThe number to optimise
Cost per sale and ROASSpend ÷ won; won value ÷ spendCompare 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

TestExpected 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 clickOne Lead in Events Manager marked as deduplicated (browser + server), fbc stored in CRM
Same person submits twiceOne contact, second enquiry logged, no duplicate stage events
Move test lead to Qualified, then edit it againExactly one Qualified Lead event received
Stage change older than 7 days in a batchExcluded by the sync job so the request does not fail
Inspect a sent payloadem/ph hashed; fbc, fbp, lead_id unhashed; event_time in seconds
Daily reconciliation for the first two weeksSync 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

FAQ

Common questions

How do I connect Facebook lead ads to my CRM?

Subscribe a Meta app to your Page's leadgen webhook, or use your CRM's native Meta integration or a connector such as Zapier. Each new lead triggers a webhook with the leadgen_id, form, ad and page IDs; your system then fetches the answers from the Graph API and creates the CRM record. Store the 15–17 digit lead ID, ad ID and form ID on every record.

What is Meta's Conversion Leads optimisation?

Conversion Leads is a performance goal that optimises Instant Form campaigns for leads likely to reach a deeper CRM stage, such as qualified or sale, rather than raw form submissions. It needs CRM stage events sent through the Conversions API with the Meta lead ID. Meta's stated requirements include at least 200 leads a month, daily uploads, and a target stage reached within 28 days.

Can I still use Meta's Offline Conversions API?

No. Meta discontinued the separate Offline Conversions API in May 2025. Offline and CRM events, such as a qualified lead, site visit or sale, are now sent through the Conversions API to a dataset, using the appropriate action_source, hashed customer details and, for Instant Form leads, the Meta lead ID.

How do I deduplicate Meta Pixel and Conversions API lead events?

Send the same event name and the same event ID from both. In the Pixel, pass eventID as the fourth argument of fbq('track'); in the Conversions API, send the matching event_id. Meta deduplicates when both arrive within 48 hours of the first event with that ID. Without a shared ID, one lead can be counted twice.

Why does Meta show more leads than my CRM?

Common causes are duplicate Pixel and server events without a shared event ID, leads that failed to sync from the webhook, repeat submissions by the same person, and Meta counting conversions inside its attribution window that your CRM credits to another source. Reconcile Meta lead IDs against CRM records daily during launch to separate sync failures from attribution differences.

Need a practical growth system?

Book a review of your current acquisition, content and conversion workflow.

Book a Strategy Call
RS
Founder & Performance Marketing Lead, GrowthSparx

Rinku works across SEO, lead generation, paid acquisition and conversion systems for Indian and global businesses. This article uses practical operating frameworks, identifies limitations and links changing platform facts to primary sources.

Have a question? Message us directly on WhatsApp—usually a reply within a few hours.

Chat on WhatsApp