Why don't Meta Ads conversions match GA4?
Meta Ads and GA4 conversions don't match because Meta credits its own ads under a wide definition of influence, while GA4 can only credit the visits it records. The table puts the main differences side by side.
| Difference | Meta Ads Manager | GA4 |
|---|---|---|
| What earns credit | Link click (7 days), engagement (1 day), ad view (1 day) by default | A session GA4 recorded, credited by data-driven or last-click attribution |
| Ad views | Counted as view-through conversions | Invisible |
| Date of the conversion | Can be reported against the impression date | Day the purchase happened |
| People it can't track | Modeled conversions fill part of the gap | Key events modeled when there is enough traffic; otherwise unconsented key events go to Direct |
| Where Meta traffic lands | Every click on your ad | Paid Social only if the UTMs say so; otherwise Organic Social, or Direct when the referrer is stripped |
Meta's attribution setting
For campaigns optimising for website conversions, the default attribution setting is 7-day click-through, 1-day engage-through and 1-day view-through (Jon Loomer, March 2026). On 3 March 2026 Meta announced that click-through for website and in-store conversions would count link clicks only, rolling out from later that month. Conversions after a share, save or other non-link click moved to engage-through, the new name for engaged-view, and an engaged view on a video ad dropped from 10 seconds to 5 (Meta for Business, 3 March 2026). Meta's help page now defines click-through as 1 or 7 days after a link click, view-through as 1 day after an impression and engage-through as 1 day after a non-link click, and notes that some accounts still run the prior versions during the rollout (Meta Business Help Center).
Meta said it hoped the new definition would let its reporting "align better with third-party tools like Google Analytics". Expect a smaller gap on the click column, while view-through and engage-through credit stay in the default results.
A separate change hit API users. From 12 January 2026 the Ads Insights API stopped returning 7-day and 28-day view-through windows, a change Meta described as consistent with what Ads Manager already offers (Meta for Developers). If a dashboard pulled those windows through the API, its Meta numbers dropped that day without anything changing in your account.
View-through and engage-through credit
A shopper in Munich watches your Reel on the train without tapping it. That evening she searches your brand on Google and buys. Meta counts a 1-day view-through conversion. GA4 credits organic or paid search, because it never saw the Reel. For prospecting campaigns on Reels and Stories, where few people click, view and engage-through credit can be a large share of what Ads Manager reports.
Impression date versus purchase date
Meta can attribute a conversion to the day of the ad impression that earned it, and its Marketing API exposes the choice as action_report_time, which takes impression, conversion, mixed or lifetime (Meta for Developers). GA4 records the purchase on the day it happened. Around a sale weekend or a month end, the two can disagree by a whole week of conversions while agreeing on the total.
Modeled conversions and Aggregated Event Measurement
Since Apple's App Tracking Transparency arrived with iOS 14.5, many iPhone users can't be followed from ad to purchase. Meta said at the time that it would use statistical modeling "to account for less data availability from iOS 14 users" (Meta for Developers, 2020), and Aggregated Event Measurement is the protocol it built to measure web events from those users (Jon Loomer). Modeled conversions sit in Ads Manager results and GA4 has no record of them. In Europe there's a second loss on the GA4 side: when a visitor declines analytics cookies, GA4's events "are not associated with a persistent user identifier", so the purchase can't be tied back to the Meta click unless GA4's modeling fills it in (Analytics Help; the Google Ads and GA4 guide covers when GA4 models).
Pixel and Conversions API deduplication
A setup with both the Pixel and the Conversions API sends each purchase to Meta twice, once from the browser and once from your server. Meta keeps one and discards the later duplicate when the event_name matches and the Pixel's eventID equals the server event's event_id, within 48 hours of receiving the first. A second method matches on event_name plus fbp or external_id, and works only when the browser event arrives first (Meta for Developers). A missing or mismatched ID counts the purchase twice. If Meta's purchases suddenly run at close to double your backend orders, check deduplication in Events Manager first.
How GA4 credits paid social
GA4 puts a session in Paid Social only when the source matches its list of social sites and the medium matches a paid pattern such as cpc, ppc, retargeting or anything starting with paid (Analytics Help). An ad tagged utm_medium=social lands in Organic Social. So does an untagged click that arrives with a Facebook or Instagram referrer, while an untagged click whose referrer was stripped lands in Direct. Either way the purchase leaves your paid social report. GA4 then shares credit across the journey with data-driven attribution or gives it to the last non-direct click. Search and email sit closer to the purchase than a Reel, so they tend to win.
Payment pages cause a second leak. When a buyer pays on PayPal, Klarna or a bank's 3-D Secure page and returns to your thank-you page, GA4 can start a new session from that domain and credit the purchase to it. Add those domains under List unwanted referrals in the web data stream's tag settings; Google names third-party payment processors as the example (Analytics Help).
How big can the gap get in one account?
Take a German fashion shop with an average order of €80 and a break-even ROAS of 2.0. In one week Meta spends €12,000.
| Where the purchases sit | Purchases |
|---|---|
| Ads Manager, 7-day link click | 330 |
| Ads Manager, 1-day engage-through | 40 |
| Ads Manager, 1-day view-through | 110 |
| Ads Manager total | 480 |
| GA4, Paid Social, data-driven | 205 |
Example figures.
Meta's 480 purchases are worth €38,400, a ROAS of 3.2, while GA4's 205 are worth €16,400, a ROAS of 1.37: one number says scale, the other says cut. Of the 275-purchase gap, 150 are engage-through and view-through conversions that GA4 can never see. The other 125 come from clicks: in this shop's audit, 35 sat in Organic Social because one campaign used utm_medium=social, about 60 went to Google search or email under data-driven credit, and about 30 came from visitors who declined analytics cookies. Each of those has a different fix, and only the UTM error is a mistake.
How do you reconcile Meta Ads and GA4?
- Compare click with click. In Ads Manager, split results by attribution window and compare the 7-day click column with GA4's Paid Social purchases. Leave view-through and engage-through out of this comparison.
- Tag every ad with UTMs. Use
utm_source=facebookorinstagramandutm_medium=paid_social, and add campaign, ad set and ad names through Meta's dynamic URL parameters. - Find the strays. In GA4's traffic acquisition report, filter session source for facebook, instagram, fb or ig. Meta traffic in Organic Social has lost its paid tag. Untagged clicks with a stripped referrer sit in Direct, where no filter finds them, so the fix is step 2.
- Exclude payment domains. Add PayPal, Klarna, your card processor and 3-D Secure domains to the unwanted referrals list.
- Check deduplication. In Events Manager, confirm Pixel and Conversions API purchases share event_name and event_id, and compare Meta's purchases with your order count for the same days.
- Match dates and time zones. Compare full weeks, and check the Meta ad account and GA4 property use the same time zone.
- Hold both against your backend. Shopify, WooCommerce or CRM orders for the same week give you the ceiling neither tool should pass.
Which number should decide the Meta budget?
Ads Manager tends to run high because it credits views and engagements that may have led nowhere, and GA4 tends to run low for paid social: it can't see views at all, and data-driven credit drifts to search and email, which sit closer to the purchase. The sales Meta caused, the ones that wouldn't have happened without the ads, take a test to measure. When both sit above break-even, keep going. When they straddle it, as in the example above, test before you scale or cut.
An incrementality test measures what happens without the ads: an audience holdout, a Conversion Lift study, or a geo test that pauses or boosts Meta in some regions and compares them with the rest. Meta's open-source GeoLift package is one way to design one; our geo lift test guide walks through it for European markets.
Test results can go either way. In our product demo, internal attribution credits Meta Retargeting-DE with €7.60 back per euro while a March audience holdout measured €1.90 ±0.40, below the €2.40 break-even. Advantage+ Sales-DE runs the other way: €2.10 in internal attribution, €3.10 ±0.50 in a May lift study run by Meta. Going by your own attribution alone, you would have scaled the wrong campaign and starved the right one; the incrementality page explains how those tests run.
Meta's number and yours, side by side.
Nupact puts Meta's platform-reported conversions next to the reconciled figure from GA4 and your backend, with the gap visible in every report. On the way back, it returns enriched conversions to Meta through the Conversions API, with deduplication, match-rate monitoring and a dry run before anything goes live.
If the Conversions API feed goes stale, as in the demo's six-hour Meta CAPI outage, autonomous actions pause and the team is paged in Slack. Between tests, a daily incrementality-adjusted number states which test it came from and how old it is.
What do people ask once they've seen the Meta and GA4 gap?
Why does Meta show more conversions than GA4?
Meta credits conversions within 1 day of an ad view or engagement as well as 7 days after a link click, includes modeled conversions from people it can't track, and doesn't share credit with other channels. GA4 sees none of the views, loses Meta clicks without the right UTMs, and gives part of the credit to search and email.
Did Meta's link-click attribution change fix the gap with GA4?
It brought the click numbers closer. Under the change Meta began rolling out in March 2026, only link clicks count as click-through for website and in-store conversions, which matches how GA4 sees Meta traffic; some accounts were still on the old definition during the rollout. View-through and engage-through conversions still sit in Ads Manager's default results and still have no counterpart in GA4.
Does the Conversions API make Meta match GA4?
No. The Conversions API helps Meta record purchases the browser Pixel misses, so Meta's number usually rises and the gap with GA4 can widen. Send matching event_name and event_id values from both sides so Meta can drop the duplicate.
Which UTM medium should I use for Meta ads?
Use a medium GA4 recognises as paid, such as paid_social, with facebook or instagram as the source. A medium of social puts paid traffic in Organic Social.
Should I trust Meta or GA4 for budget decisions?
Use Meta's numbers to optimise inside Meta and GA4 or backend data to compare channels. If they disagree about break-even, test first.
Bring one Meta account and its GA4 property.
We reconcile a recent week on screen and show which part of the gap is views, which is tagging and which is attribution. Founder-led, your setup on screen.