How do I track Meta ads in GA4?
Add utm_source, utm_medium and utm_campaign to every Meta ad. Use a source on GA4's social list, such as facebook or instagram, and a paid medium, and GA4 files the clicks under Paid Social. Link Meta under Product links to add cost. Ad views never reach GA4.
By Joris van Huët, Founder & CEOUpdated 7 min read
Run the numbers for your store: the free break-even ROAS calculator.
Tag every Meta ad's URL with utm_source, utm_medium and utm_campaign, using a social source GA4 knows, such as facebook, and a paid medium. GA4 then usually files those clicks under Paid Social. To see Meta's cost next to them, link Meta in GA4's Admin. Ad views and engagements still never reach GA4.
GA4 does not watch Meta. It reads the address each visitor lands on, and the tags in that address say who sent them. Meta's Help Center splits the job the same way: you add URL parameters in Meta, and a website analytics tool tracks the results.
Sometimes Meta does the tagging for you. Meta says it may add Facebook or Instagram as the source and paid as the medium by itself, since 1 January 2024. Shopify merchants may get Facebook and paid. GA4 usually files either pair under Paid Social, because its channel rules ignore capital letters.
So tracking can start before anyone touches a URL. Whether it ever reached your revenue is a different question.
What one store's data shows
The usual answer ends at "add UTM tags". Here is one store's export next to that answer.
One store's anonymised GA4 export, 1 January 2024 to 21 August 2026. It holds shares of revenue only: no ad spend, no order counts. Its first day is the same 1 January 2024 that Meta names for its automatic tags.
| What the export shows | Share of revenue | Source cell |
|---|---|---|
| Paid Social, in last click, first click and touched views | 0.0% | Channels sheet, Paid Social row |
| All channels in the touched view, added up | 110.4% | Channels sheet, Touched column total |
| Journeys with 4 to 9 touches (1,568 distinct paths, 16.9 days to buy) | 5.4% | Journeys sheet, 4 to 9 touches row |
| Journeys with 10 or more touches (1,792 distinct paths, 16.0 days to buy) | 3.0% | Journeys sheet, 10+ touches row |
Start with the most generous view. The touched view gives every channel on a journey full credit, which is why that column on the Channels sheet adds up to 110.4%. A channel that opened journeys and lost the sale to a closer still scores there. On the Channels sheet, Paid Social scores 0.0% even in that view.
So this is not a story of Meta helping and losing the credit. No measurable share of this store's revenue passed through a session that GA4 filed as Paid Social.
The long journeys sharpen that zero. The Journeys sheet holds 1,568 distinct paths of 4 to 9 touches and 1,792 of 10 or more. On the Journeys sheet, those take 16.9 and 16.0 days to buy. Long, crowded journeys are exactly where a tagged prospecting ad would show up as an early touch.
What the export cannot show is why. It has no spend column, so a store that ran no Meta ads looks like one whose Meta clicks went elsewhere. It cannot show what Meta counted either, or any ad that was seen and never clicked. It is one store, not a benchmark.
If Meta clicks were filed elsewhere, the tag decided where.
Why does "just add UTMs" still go wrong?
Because GA4's rule for Paid Social wants two things at once. The source must be on GA4's list of social sites. The medium must look paid: anything containing cp, exactly ppc or retargeting, or anything starting with paid.
Google publishes that list as a download on its Default channel group help page. On the published list, facebook, fb, instagram, ig and messenger count as social. The values insta, meta, an, msg and th are not on it.
Those gaps bite in two places. The first is Meta's own site_source_name parameter, which returns an for Audience Network, msg for Messenger and th for Threads. With a paid medium, GA4 then usually files those clicks under Paid Other, its bucket for ads it cannot place.
The second is Google's own advice. Its UTM best practices suggest insta for Instagram, and its Meta import page uses Meta as the example source. Neither value is on the published list, so check where those clicks land before you copy the advice.
Capital letters cause a quieter mess. GA4's channel rules ignore case, but its reports and its cost import do not, so Facebook and facebook become two values. One platform then splits across two rows, and Google's automated Meta import does not support several values for one platform.
A tag also covers one landing, not one shopper. Meta says a URL parameter only applies to the first product page. If the shopper leaves and later comes back on their own, the parameter is lost. In GA4's eyes, that return visit was never Meta's.
Can GA4 show what your Meta ads cost?
Yes, once you link the two. GA4's Admin has Meta Links under Product links, and Meta is an import source under Data import. The link pulls cost, clicks and impressions for paid Meta traffic into GA4.
Google says the import tries to pull at least 24 months of Meta history. After that it runs daily, and the numbers appear in a report called Non Google campaign, under Acquisition.
Two rules bite here. The source and medium you type into the import must exactly match your tags. Once the connector exists you cannot edit them, so a typo means deleting it and starting again.
The cost joins your GA4 data on source, medium and date. So an untagged ad's cost still lands on your Meta row, while its visitors land on another row. Return on ad spend then looks worse than it is: a tagging problem dressed as a performance problem.
What to do this week
- Read the tags on your three biggest live ads. In Ads Manager, open each ad and find the URL parameters field below Tracking. Pass: all three share one paid medium and use a source on Google's list, such as facebook or instagram. Fail: an empty field, a medium of social, or a source like insta or meta.
- Search Traffic acquisition for every spelling. In GA4, select Reports, then Acquisition, then Traffic acquisition, and switch the dimension to Session source / medium. Search for facebook, instagram, fb and ig, with Session default channel grouping as a secondary dimension. Pass: one row per platform, all in Paid Social. Fail: two rows for one platform, or Meta rows in Paid Other.
- Link Meta in GA4's Admin. Under Product links, click Meta Links, then Link, and follow the import steps. Pass: within a day, the Non Google campaign report shows cost on the same rows as your Meta sessions. Fail: cost sits on a row with no sessions, so your tags and the import disagree.
Check the homework. Your GA4 Attribution paths export already holds the evidence. Causality Engine reads that one file and shows what each channel caused next to what last-click gave it, in 1 to 2 minutes, for €99 once (excluding VAT), refundable within 30 days. Check the homework
Sources, 1 October 2026: Add URL parameters to your Meta ads in Meta Ads Manager (Meta Business Help Center); Specifications for dynamic URL parameters in Meta Ads Manager (Meta Business Help Center); Default channel group (Google Analytics Help); GA4 default-channel-group sources and categories, PDF (Google Analytics Help); URL builders: Collect campaign data with custom URLs (Google Analytics Help); Connect Meta to Google Analytics (Google Analytics Help); Import campaign data (Google Analytics Help); Traffic acquisition report (Google Analytics Help).
Related answers
Frequently asked questions
Does Meta add UTM tags to my ads automatically?
It may. Meta's Help Center says it may add Facebook or Instagram as the source and paid as the medium, since 1 January 2024. It may also add campaign, ad set and ad IDs. Shopify merchants may get Facebook and paid. Check a live ad's landing URL before you rely on it.Can GA4 import my Meta ad spend?
Yes. In GA4's Admin, Meta Links under Product links starts an import of cost, clicks and impressions for paid Meta traffic. The source and medium you enter must exactly match your ad tags, or the cost will not join your sessions.Why do my Instagram ads show as Paid Other in GA4?
Usually because of the source value. GA4 files a paid click as Paid Social only when the source is on its list of social sites. Instagram and ig are on Google's published list, and insta is not. Tag new Instagram ads with instagram or ig.
Go deeper: Incrementality testing, explained.
Sixty-second versions of these ideas: Causality Engine on YouTube Shorts.
Keep reading
Terms in this article
- AnalyticsAnalytics is the systematic computational analysis of data. It reveals customer behavior and measures campaign performance.
- AttributionAttribution identifies user actions that contribute to a desired outcome and assigns value to each. It reveals which marketing touchpoints drive conversions.
- CausalityCausality is the relationship where one event directly causes another, essential for identifying specific actions that drive desired outcomes in marketing.
- Google AnalyticsGoogle Analytics is a web analytics service that tracks and reports website traffic.
- ImpressionAn Impression counts each time an ad or content displays on a user's screen. It measures exposure, not engagement.
- Product PageProduct Page is a webpage dedicated to a single product. It includes images, descriptions, pricing, and purchase options.
- RetargetingRetargeting is online advertising that targets users who have previously interacted with your website or content. Attribution analysis shows the causal role of retargeting in driving conversions and improving ad spend.
- UTM ParametersUTM Parameters are URL tags marketers use to track campaign effectiveness across traffic sources. They provide data for accurate campaign tracking and attribution in analytics platforms.