Skip to content

How to set up Instagram UTM parameters, step by step

Pick one Instagram source value GA4 recognises, such as ig. Tag bio, story and creator links with utm_medium=social, and ads with paid_social in Meta's URL parameters field. Then split Instagram out in GA4 with a custom channel group and test every link.

By , Founder & CEOUpdated 8 min read

Run the numbers for your store: the free UTM builder.

To set up Instagram UTM parameters, pick one source value GA4 recognises, such as ig, and tag every bio, story and creator link with utm_medium=social. Give each ad utm_medium=paid_social and Meta's dynamic values in its URL parameters field. Then test each link, and usually add a GA4 channel group that splits Instagram from Facebook.

The reasons behind each value sit in What UTM parameters should I use for Instagram?. This page is the clicking. Every path below is copied from the platform's own help page.

Step by step

  1. Write the Instagram row of your naming sheet. Source ig on every Instagram link; medium social for unpaid links and paid_social for ads. Write campaign names in lowercase, joined by underscores. Where: Analytics Help, URL builders, UTM best practices, which asks for one source per platform and lowercase as standard.
  2. Check your source against GA4's own list. Download the spreadsheet of sources and categories linked at the bottom of the Default channel group page. It files ig, instagram, instagram.com and l.instagram.com as social, but not insta, the value in Google's own example. Where: Analytics Help > Default channel group > Analytics' list of sources and categories.
  3. Keep shop out of every campaign name. GA4's Shopping rules match names with shopping in them, or shop after a space, underscore or hyphen. Paid Shopping and Organic Shopping both sit above their Social twins. So spring_drop stays in Social, while spring_shop can leave it. Where: Default channel group, Channels for manual traffic.
  4. Build the bio link in Shopify. From your Shopify admin, go to Growth, click Campaigns, then Create campaign, and save a name. Under Shareable links, click +, choose the Destination, type a Short link handle and fill in the Additional UTM parameters section, then click Done. Where: Shopify Help, Creating campaigns.
  5. Give every story, creator and Reel link its own utm_content. Use values like bio, story_glaze or the creator's handle, so one campaign splits by placement. Shopify's help suggests one shareable link per influencer, and its short links are public facing, which suits a bio. Where: the campaign from step 4, one link each.
  6. Fill the URL parameters field on every ad. In Meta Ads Manager, complete the ad setup until you reach Tracking. Below it, type into the URL parameters field or click Build a URL parameter, then click Apply. Paste utm_source={{site_source_name}}&utm_medium=paid_social&utm_campaign={{campaign.name}}&utm_content={{ad.name}}. Where: Meta Business Help Center, Add URL parameters to your Meta ads.
  7. Name Meta campaigns the way GA4 should show them. Meta keeps the name the ad was first published with, so renames never reach GA4. Spaces arrive as %20, and capitals split rows. Type spring_drop in Ads Manager, not Spring Drop. Where: Meta Business Help Center, Specifications for dynamic URL parameters.
  8. Split Instagram from Facebook in GA4. In Admin, under Data display, click Channel groups, then Create new channel group. It starts from a copy of the default group. Click Add new channel, name it Instagram paid, and click + Add condition group. Set Source to match the regex ^(ig|instagram)$ and Medium to match ^paid.*, then click Save channel. Where: Analytics Help, Custom channel groups.
  9. Move the new channel above Paid Social. Click Reorder, drag Instagram paid above Paid Social, click Apply, then Save group. GA4 puts traffic in the first channel whose rule it matches, and custom groups apply to past data too. Where: Custom channel groups, Reorder channels in a group.
  10. Test each link on your phone first. Tap it and check that the address bar still shows the utm values once the page loads. GA4's help says redirects can strip UTM parameters, and link shorteners can strip referral details. Where: your phone, then Analytics Help, Understand (direct) / (none) traffic.
  11. Read the result the next day. From the left menu, select Reports, then Acquisition > Traffic acquisition. Pick your new channel group as the primary dimension, or search ig in the search bar above the table. Where: Analytics Help, Traffic acquisition report.
  12. Compare with Meta's own platform split. In Ads Manager, click Campaigns, then the Breakdown menu between Columns and Reports, and choose Platform. Meta notes that these platform values are estimated, so expect its count and GA4's to differ. Where: Meta Business Help Center, View ad results by platform, device and placement.

A worked example

For illustration, say a ceramics store plans a two-week spring push on Instagram. It has a bio link, three story links, one creator post and an ad set on Advantage+ placements. The naming sheet reads like this:

PlacementTags after the question markWhere GA4 should file it
Bio linkutm_source=ig&utm_medium=social&utm_campaign=spring_drop&utm_content=bioOrganic Social
Story linkutm_source=ig&utm_medium=social&utm_campaign=spring_drop&utm_content=story_glazeOrganic Social
Creator postutm_source=ig&utm_medium=social&utm_campaign=spring_drop&utm_content=creator_handleOrganic Social
Ad setutm_source={{site_source_name}}&utm_medium=paid_social&utm_campaign={{campaign.name}}&utm_content={{ad.name}}Paid Social on Instagram and Facebook

The ad row hides one surprise. Meta's site_source_name writes ig on Instagram and fb on Facebook, and both are on GA4's social list. On Audience Network, Messenger and Threads it writes an, msg and th, which that list does not hold. With a paid medium, those clicks can land in Paid Other, which is fine as long as you look there.

Now the timing. In one store's Journeys sheet, journeys with 2 to 3 touches took 12.5 days to buy. Journeys with 4 to 9 touches took 16.9 days on the same Journeys sheet. Meta's help says a URL parameter covers only the first product page someone lands on. If your buyers take that long, the tagged Instagram visit sits at the start of the path, and the sale arrives later by another route.

So read the paths report as well. In GA4, click Advertising, then Key event attribution paths under the Key events drop-down. Set the table to Source. Your ig source should show up among the early touches, not only the last.

Pass, a week after launch: ig / social and ig / paid_social both show sessions, and the Instagram paid channel holds the ad clicks. Fail: the ads still read facebook / paid, so the URL parameters field never saved.

What should you check when the report looks wrong?

  • Instagram ad clicks read facebook / paid. Meta may add its own source and medium to ad traffic. For Shopify merchants, it lists the source as Facebook. Fill the URL parameters field yourself.
  • Ad clicks sit in Paid Other. The source is not on GA4's social list. Look for insta, or for an, msg and th from placements outside Facebook and Instagram.
  • Ad clicks sit in Organic Social. The medium failed GA4's paid test. A medium of paid_social passes, while ig_ads and instagram_ads do not.
  • A campaign lands in a Shopping channel. Its name contains shop or shopping, or its source is IGShopping, a shopping site on GA4's list.
  • A collection ad carries no tags. Meta does not support dynamic URL parameters for collection ads on Instagram placements. Type fixed values for those ads instead.
  • The channel group is missing from the paths report. GA4 cannot use custom channel groups in the Key events paths report yet. Use the Source dimension there.
  • Your test click is missing from Realtime. The First user source card in Realtime only shows users GA4 has already processed. Check Traffic acquisition the next day.

What to do this week

  1. Tag one new ad, not a live one. Create one new Instagram ad and fill its URL parameters field as in step 6. Meta warns that changing a published ad's parameters may restart its learning phase. Pass: a day later, ig / paid_social shows sessions in Traffic acquisition. Fail: it reads facebook / paid, so the field did not save.
  2. Build the Instagram paid channel. Follow steps 8 and 9 under Admin, Data display, Channel groups. Pass: the channel shows last month's sessions, because custom groups apply to past data. Fail: it is empty, so your regex does not match the source spelling in Traffic acquisition.
  3. Test your bio link from a phone. Tap the link in your own Instagram bio and read the address bar once the page loads. Pass: every utm value is still there. Fail: some are missing, so a redirect or shortener stripped them; point the bio at the full tagged URL.

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: URL builders: Collect campaign data with custom URLs (Google); Default channel group (Google); GA4 default-channel-group sources and categories (Google); Custom channel groups (Google); Understand (direct) / (none) traffic (Google); Traffic acquisition report (Google); Realtime report (Google); Key events attribution paths report (Google); Creating campaigns (Shopify); Understanding Campaigns (Shopify); Add URL parameters to your Meta ads in Meta Ads Manager (Meta); Specifications for dynamic URL parameters in Meta Ads Manager (Meta); View ad results by platform, device and placement in Meta Ads Manager (Meta)

Frequently asked questions

  • What does site_source_name return for Instagram ads?
    ig. Meta's dynamic parameter reports where the ad ran. It writes ig for Instagram, fb for Facebook, msg for Messenger, an for Audience Network and th for Threads. GA4's published social list holds ig and fb, so only those two reach Paid Social with a paid medium.
  • Can I tell Instagram Stories ads from feed ads in GA4?
    Yes. Meta's placement parameter writes values such as instagram_feed and instagram_stories. Put it in utm_content if placement matters more to you than the ad name, since one parameter holds one value. It does not work on collection ads in Instagram placements.
  • Why doesn't my Instagram test click show in GA4 Realtime?
    Because Realtime reports acquisition by first user source, and only for users GA4 has already processed. A new visitor may not appear there at all. Check Reports, then Acquisition, then Traffic acquisition the next day, and search for your source.

Go deeper: Causal attribution, 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.