Skip to content

How to track Meta ads in GA4, step by step

Pick one paid medium and a social source GA4 recognises, then add them in each Meta ad's URL parameters field. Confirm in Traffic acquisition that the clicks land in Paid Social. Then link Meta under Product links to bring cost, clicks and impressions into GA4.

By , Founder & CEOUpdated 8 min read

Run the numbers for your store: the free break-even ROAS calculator.

To track Meta ads in GA4, write one naming rule, then put it in every ad's URL parameters field in Ads Manager. The next day, check that GA4 files the clicks under Paid Social. If you also want Meta's cost inside GA4, link Meta under Product links. Every later report repeats the names you pick, so pick them once.

Two tabs do the work: Ads Manager for the tags and GA4 for the checks. The cost link at the end needs at least an Editor role in GA4, plus a Meta business account and ad account.

Plan for two sittings. Tag today, then check tomorrow, once GA4 has processed the first visits.

Step by step

  1. Choose a source and a medium GA4 will recognise. Use one paid medium for all Meta ads, such as paid_social, and a fixed source per platform, such as facebook and instagram. Both sources are on the list of social sites Google publishes for GA4, and so are fb and ig. Where to look: GA4 Help > Default channel group > Download a spreadsheet of GA4 default-channel-group sources and categories.
  2. Open the ad's Tracking section. Meta keeps URL parameters at ad level, inside the ad creation steps. Work through the ad until you reach Tracking. Menu path: Ads Manager > your campaign > ad set > ad > Tracking.
  3. Type or build the parameters. Enter them in the URL parameters field, or click Build a URL parameter, then Apply. Anything here overrides a duplicate parameter in the Website URL field, and Meta asks you never to leave a value empty. Menu path: Tracking > URL parameters > Build a URL parameter > Apply.
  4. Let Meta fill in the names. Add utm_campaign= and utm_content=, which Meta's help suggests for Google Analytics. Meta locks those values to the names used when the ad was first published, so a later rename never reaches GA4. Menu path: the same URL parameters field.
  5. Keep site_source_name out of the source. Google's UTM advice offers as an example of a dynamic value. It returns fb and ig, which GA4 knows, but also an, msg and th for Audience Network, Messenger and Threads. The published list lacks those three. Menu path: Tracking > URL parameters, with a fixed utm_source instead.
  6. Check the first visits the next day. Realtime makes a poor test here, because its first user source card skips new users who have not been processed yet. Search Traffic acquisition for your source instead. Menu path: GA4 > Reports > Acquisition > Traffic acquisition > dimension drop-down > Session source / medium.
  7. Confirm the channel and the campaign names. Add Session default channel grouping as a secondary dimension and look for Paid Social. Then switch the main dimension to Session campaign and look for your Meta campaign names. Menu path: Traffic acquisition > the add button next to the dimension drop-down > Session default channel grouping.
  8. Link Meta for cost, clicks and impressions. Create a campaign data source with Meta as the import source, sign in to Meta, and pick the Business Center and ad account. Type your sources into the Facebook, Instagram, Audience Network, Messenger and Threads source fields, and your medium into Medium. Menu path: GA4 Admin > Data collection and modification > Data import > Create import source > Campaign data > Meta > Next > Connect.
  9. Read the match rate. The import's details page shows % imported and Match rate, the share of imported rows that joined your GA4 data. The validation report lists the source and medium pairs your property already receives. Menu path: GA4 Admin > Data import > your import source, and Reports > Data import > Campaign data import validation.

A worked example

For illustration, take a store with one Meta campaign called Autumn Sale and an ad called Video A. Its URL parameters field reads utm_source=facebook&utm_medium=paid_social&utm_campaign=&utm_content=.

Meta encodes the space in the campaign name, as its help page shows for a campaign called Prospecting 2026. GA4 then records the visit as facebook / paid_social, in Paid Social, with Autumn Sale as the session campaign.

Now make three small changes, each caught by a rule on Google's channel page.

First, a teammate swaps the source for. Facebook clicks arrive as fb and Instagram clicks as ig, both still Paid Social. Audience Network clicks arrive as an, which the published list lacks, so they usually land in Paid Other.

Second, a new campaign is called Shop the Drop. GA4's Paid Shopping rule matches names like that, or any name containing shopping, when the medium is paid. So its clicks can land in Paid Shopping, though Meta sent every one of them.

Third, one ad was tagged by hand as Facebook / paid_social. The channel stays the same, but the reports show it on its own row, apart from facebook.

For the cost link, every Meta ad in this example carries facebook as its source. So facebook goes into all five source fields, and paid_social into Medium. Google's guide allows exactly that: one source for all of Meta, or one per platform.

How soon can you judge? A real export gives a feel for the clock. Take one store's anonymised GA4 export, 1 January 2024 to 21 August 2026, which holds shares of revenue only. On that store's Journeys sheet, journeys with 1 touch took 0.5 days to buy, and journeys with 2 to 3 touches took 12.5 days. So next-day sessions show that the tags work, while Meta's place inside longer paths needs a couple of weeks to appear. Your own path lengths sit in GA4's key event attribution paths report, under Days to key event.

What to check when the report looks wrong

  • Meta clicks sit in Paid Other. The source is missing from Google's social list, as with an, msg, th, insta or meta. Retag new ads with facebook or instagram.
  • They sit in Organic Social. The medium does not look paid, so GA4 reads the social source as organic. A medium of social does exactly that.
  • They sit in Paid Shopping. The campaign name starts with shop, has it after a space, or contains shopping, and the medium is paid. Renaming will not help when Meta fills in the name, so use a fixed utm_campaign on new ads.
  • One platform shows on two rows. Capital letters split values in GA4's reports, so Facebook and facebook count apart. Pick lowercase and keep it.
  • Session campaign reads (not set). A parameter is missing. Google says missing UTM parameters produce (not set) values in reports.
  • Campaign names in GA4 look out of date. Meta's name-based values keep the name from the day the ad was first published.
  • The import shows cost on a row with no sessions. The source or medium you typed does not exactly match your tags. You cannot edit those fields, so delete the connector and create a new one.

What to do this week

  1. Write the naming rule in one line and pin it where ads get built. For example: source facebook or instagram, medium paid_social, campaign and content filled in by Meta. Pass: everyone who builds ads uses the same line. Fail: two people, two spellings.
  2. Run the validation report before you import. Open Reports, then Data import, then Campaign data import validation. Pass: one source and medium pair per Meta platform. Fail: several pairs, such as Facebook / paid next to facebook / paid_social.
  3. Put a week of Meta link clicks next to GA4 sessions. Use the same days in Ads Manager and in Traffic acquisition. Pass: the two rise and fall together. Fail: Meta's clicks climb while GA4's Paid Social sessions stay flat, which points at untagged ads or lost parameters.

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); Realtime report (Google Analytics Help); Traffic acquisition report (Google Analytics Help); Connect Meta to Google Analytics (Google Analytics Help); Import campaign data (Google Analytics Help); Key events attribution paths report (Google Analytics Help).

Frequently asked questions

  • Should I use site_source_name as my UTM source?
    Not if you want every Meta click in Paid Social. It returns fb and ig, which are on GA4's social list, but also an, msg and th, which are not. A fixed source per platform, such as facebook and instagram, keeps all of them in Paid Social.
  • How long until Meta cost shows up in GA4?
    Usually within a day. Google says an import can take up to 30 minutes to finish and up to 24 hours to reach reports. After that, the Meta import runs daily.
  • Will editing URL parameters reset my Meta ad set?
    It can. Meta says you can change URL parameters after you publish, but the ad set may re-enter the learning phase. Put fixes on new ads where you can, or make all the edits in one go.

Go deeper: Incrementality testing, explained.

Sixty-second versions of these ideas: Causality Engine on YouTube Shorts.

Keep reading

Terms in this article

Browse the full glossary

Your platforms guess.
We run the math.

Upload a GA4 export and see what each channel caused, next to last-click, in 1–2 minutes. The read is yours to keep.

Free, in your browser: your file is not uploaded. The full read is €99, refundable within 30 days. Prices exclude VAT.
Or book a 30-min call.