Why Meta and Your CRM Report Different Conversion Counts
Meta Ads and your CRM rarely report identical conversion counts. Meta typically reports higher numbers. This mismatch is normal, but it creates confusion: which platform tells the truth, and how do you know if tracking is broken?
The gap exists because Meta and your CRM measure conversions at different points in the funnel, use different attribution windows, and apply different deduplication logic. Understanding these differences is the first step to auditing what's actually working.
The Core Sources of Discrepancy
Attribution Window Mismatch
Meta counts a conversion if it happens within your chosen attribution window (1, 7, or 28 days after click). Your CRM counts a conversion when the deal closes, regardless of when the click happened. A user might click a Meta ad on day 1, enter your CRM on day 5, and close on day 45. Meta counts it (within the window). Your CRM counts it too, but the date is day 45. If you're comparing by date, the same conversion appears in different months.
This is the single largest source of discrepancy for B2B and long-sales-cycle businesses.
Duplicate Conversions
Meta deduplicates conversions within its system. If the same person clicks an ad twice in one day, Meta counts one conversion (if they convert). Your CRM might record two entries if two separate form submissions happen. Your tracking code might fire twice if the conversion page loads twice. Each duplicate inflates your CRM count.
Lost Conversions During Handoff
Data moves from Meta Pixel to your website to your CRM. At each step, conversions can be lost. The Pixel fires but the user leaves before your tracking code runs. The tracking code fires but the form submission fails silently. The form submits but the data doesn't sync to your CRM. Each break in the chain means Meta sees a conversion your CRM never receives.
Multi-Touch vs Last-Click Attribution
Meta uses multi-touch attribution by default (it credits the ad even if other touchpoints helped). Your CRM likely uses last-click or first-click. If a user clicks a Meta ad, then clicks an organic result, then converts, Meta credits the ad. Your CRM credits organic. Both are counting the same conversion, but assigning it to different sources.
Pixel Fires on Non-Conversion Events
Your Meta Pixel might fire the "Purchase" or "Lead" event on pages that aren't actual conversions. Common mistakes: firing on thank-you pages that load even when the form fails, firing on every page load instead of once per submission, or firing on button clicks before validation. Your CRM only records actual submissions. Meta records button clicks.
Audit Step 1: Align Your Attribution Windows
Start here. This is the easiest fix and often resolves 30–50% of the gap.
Check your Meta attribution window. Go to your ad account, select Ads Manager, and open Campaign reporting. In the column headers, find "Conversion Window" or "Attribution Model." Note the setting (usually 7-day or 28-day click).
Now pull a conversion report from your CRM for the same date range and same window. If your CRM doesn't have a built-in window, calculate it manually: for each conversion, count back 7 or 28 days from the conversion date, and only include conversions where the lead was created in that window.
Compare the totals. If the gap shrinks by half, you've found the main culprit. If not, move to Step 2.
Audit Step 2: Verify Your Pixel Is Firing Correctly
A broken Pixel is the second most common cause of discrepancy.
Open your website in a browser and visit a page where your conversion event should fire (a thank-you page, a form submission, or a button click). Open the browser developer tools (F12 or right-click → Inspect). Go to the Network tab. Trigger the conversion event (submit a form, click a button, or reload the page).
Search the Network tab for "capi" or "facebook". You should see requests to graph.facebook.com. If you see nothing, your Pixel is not firing. If you see requests, click one and check the payload. Look for "event_name" and verify it matches what you configured in Meta (e.g., "Lead" or "Purchase").
If the Pixel is not firing, check your implementation. Is the Meta Pixel base code on every page? Is the conversion event code on the right page? Is the event name spelled correctly? Is there a JavaScript error blocking the code? Use the Meta Pixel Helper browser extension to diagnose quickly.
If the Pixel is firing but Meta's conversion count is still high, check the event frequency. Fire a test conversion 5 times in a row. Does Meta count it 5 times or once? If it counts 5 times, your deduplication is not working. This usually means the event_id parameter is missing or not unique per conversion.
Audit Step 3: Check for Duplicate Conversions in Your CRM
Run a query in your CRM to find duplicate form submissions. Look for multiple submissions with the same email address within a 1-minute window. Count them.
Next, check your form's client-side validation. If validation fails, does the form prevent submission? If yes, duplicates should be rare. If no, users can submit invalid data multiple times, inflating your count.
Also check your form's server-side code. Does it check if an email already exists before creating a new lead? If not, the same person can submit twice and create two records. If yes, duplicates are prevented at the database level.
If duplicates are significant (more than 5% of conversions), deduplicate your CRM data or add server-side validation to prevent future duplicates. Then recalculate the Meta vs CRM gap.
Audit Step 4: Trace a Single Conversion End-to-End
Pick one conversion that Meta reports but your CRM doesn't (or vice versa). Trace it through the entire chain.
Start with Meta. Go to Ads Manager and find the campaign. In the Conversion column, note the count. Now look at the Pixel data. In Meta Events Manager, go to Test Events. Submit a test conversion from your website. Watch the event arrive in real time. Check the data: user ID, timestamp, event name, event value. All correct?
Now check your website logs. Search for the timestamp when the conversion fired. Is there a request to your form endpoint? Did the form submit succeed (HTTP 200 response)? If yes, the conversion reached your backend.
Now check your CRM. Search for the lead or contact by email. Does it exist? If yes, when was it created? Compare the timestamp to the Meta timestamp. If the CRM timestamp is after the Meta timestamp by more than a few seconds, something delayed the sync (API lag, webhook delay, batch processing).
If the lead doesn't exist in your CRM, the sync broke. Check your form's integration: Is the CRM API key valid? Is the webhook URL correct? Did the API rate limit get hit? Check your form provider's logs (Unbounce, Leadpages, Gravity Forms, etc.) for errors.
Audit Step 5: Compare Attribution Models
If Steps 1–4 didn't explain the gap, the issue is likely attribution logic.
Meta defaults to multi-touch attribution. Your CRM probably uses last-click or first-click. To test this, pick a campaign and export the conversion data from both platforms for the same date range.
In Meta, go to Ads Manager → Campaigns. In the column header dropdown, add "First-Click Attribution" as a separate column. Compare it to your current "Conversion" column. If they match, you're using first-click. If they differ, you're using multi-touch.
In your CRM, check how it assigns credit. Most CRMs assign credit to the touchpoint closest to the conversion (last-click). If your CRM has an attribution report, check it. If not, ask your CRM provider or check their documentation.
Once you know both models, you can adjust your expectations. Multi-touch always reports higher because it credits multiple ads. Last-click reports lower because only the final touchpoint gets credit.
Audit Step 6: Check for Bot Traffic and Invalid Conversions
Meta applies some bot filtering, but not perfectly. Your CRM might not filter bots at all.
In Meta Ads Manager, check if you've enabled bot filtering. Go to Ad Account Settings → Pixels. Select your Pixel. Under "Advanced Matching," check if you've enabled "Filter Bot Traffic." If not, enable it. This reduces conversions reported by Meta but makes the number more accurate.
In your CRM, check for obvious invalid conversions: emails that are obviously fake (test@test.com, admin@example.com), phone numbers with all zeros, or submissions from known VPN/proxy IP ranges. If your form doesn't validate email format, you might have many invalid entries. Add client-side validation (check for @) and server-side validation (verify the domain is real).
After filtering, recalculate the gap.
Which Numbers Should You Actually Trust?
After auditing, you'll likely still have some discrepancy (5–15% is normal). Here's which number to use for decisions.
For optimizing Meta campaigns: Trust Meta's numbers. Meta has the most complete view of ad performance because it sees every click and can attribute conversions within its window. Use Meta's data to decide which campaigns, audiences, and creatives to scale.
For revenue and ROI: Trust your CRM. Your CRM sees actual closed deals and revenue. Use CRM data to calculate true return on ad spend (ROAS). If Meta reports 100 conversions but your CRM shows only 40 closed deals, your real ROAS is based on the 40.
For reconciliation: Use a hybrid approach. Calculate the conversion rate from Meta (conversions divided by clicks). Then apply that rate to your CRM's lead volume to estimate expected revenue. If actual revenue is much lower, something is wrong with your sales process, not your tracking.
Reality Check: When Discrepancy Is Not a Problem
A 10–20% gap between Meta and your CRM is normal and expected. Do not spend days chasing a 5-conversion difference if your total is 500.
Focus on trends, not exact numbers. If Meta reports +15% conversions month-over-month and your CRM reports +12%, both are signaling growth. If Meta reports +30% but your CRM reports -5%, something is broken (likely bot traffic or pixel misconfiguration).
Also remember that Meta's numbers update in real time, while your CRM might sync on a delay (minutes to hours). Always compare the same date range and wait 24 hours after a campaign ends before auditing.
What to Do Next
Start with Step 1 (align attribution windows). Most teams find their answer there. If the gap persists, work through Steps 2–6 in order. Each step is a quick diagnostic that either solves the problem or narrows it down. Once you've identified the source, you can either fix the tracking or adjust your reporting to account for the gap.
If you're still stuck after auditing, check whether your Meta pixel setup is correct or whether you need help diagnosing a deeper integration issue between your ad account and CRM.
FAQs
Should I expect Meta and my CRM to report exactly the same number of conversions?
No. A 5–20% difference is normal due to attribution windows, deduplication logic, and sync delays. Anything larger signals a tracking problem.
Why does Meta always report more conversions than my CRM?
Meta's attribution window is usually longer than your CRM's sync window, and Meta uses multi-touch attribution. Also, some conversions fire in Meta Pixel but never reach your CRM due to form errors or API failures.
How do I know if my Meta Pixel is firing?
Use the Meta Pixel Helper browser extension or check your browser's Network tab for requests to graph.facebook.com when a conversion event should fire.
Should I trust Meta's numbers or my CRM's numbers for ROI?
Trust your CRM for ROI because it sees actual closed deals. Trust Meta for campaign optimization because it has complete click and impression data.
People Also Ask
What is attribution window and why does it matter?
An attribution window is the time frame in which a platform credits a conversion to an ad click. Meta's default is 7 or 28 days after click. Your CRM might count conversions that happen months later. Misaligned windows create the biggest gap between platforms.
How do I change my Meta attribution window?
In Meta Ads Manager, go to Campaigns, and in the column header dropdown, select "Conversion Window." Choose 1, 7, or 28-day click attribution. The change applies to reporting only, not to how Meta optimizes.
What is multi-touch attribution?
Multi-touch attribution credits multiple touchpoints (ads, organic, email, etc.) for a single conversion. Last-click attribution credits only the final touchpoint. Meta defaults to multi-touch, which reports higher numbers.
Why does my form submit but not appear in my CRM?
The form likely submitted but the CRM sync failed. Check your form provider's logs for API errors, verify your CRM API key is valid, and ensure the webhook URL is correct.
Can I have too many duplicates in my CRM?
Yes. If more than 5% of conversions are duplicates, add server-side validation to your form to prevent duplicate submissions, or deduplicate your CRM data retroactively.
How long should I wait after a campaign ends before comparing Meta and CRM numbers?
Wait at least 24 hours. Meta's numbers stabilize after 24 hours, and your CRM's sync might lag. Comparing real-time numbers will show artificial discrepancies.
Is bot traffic inflating my Meta conversions?
Possibly. Enable bot filtering in Meta Ads Manager (Ad Account Settings → Pixels → Advanced Matching → Filter Bot Traffic). This reduces Meta's reported conversions but makes the number more reliable.
How do I calculate true ROAS if Meta and my CRM disagree on conversions?
Use your CRM's numbers. Calculate ROAS as revenue divided by ad spend. Your CRM's conversions represent actual customers, not just pixel fires.
Should I use Meta's conversion data or my CRM's for scaling campaigns?
Use Meta's data. Meta has more granular audience and placement data. Use Meta to decide what to scale. Use your CRM to verify that scaling actually produces revenue.
If this post is wrong, outdated, or you would take a different path
I write from work I have done on real sites. Search products change, and a step that was right when I published can go stale. I can also be wrong about the method.
If you disagree with the approach, the facts, or the outcome, I want the detail. Tell me what is off, what you would do instead, and where you saw it. I use that to correct the post so the next reader is not stuck.
This is not a comment thread. Use Contact me so the note is tied to this post and I can reply.
You are sending feedback for
How to Audit Conversion Tracking When Meta and Your CRM Report Different Numbers
Meta Ads