Tag one link, or every channel in a launch at once. Ad platform macros such as {{campaign.name}} and {keyword} are left literal so the platform can still substitute them, and every link is checked for the tagging mistakes that quietly send a campaign into Unassigned.
Your tagged URL appears here.
Tidy values lower cases everything and swaps spaces for underscores, which is what keeps one campaign from splitting into four rows in a report. Macros are never touched.
| Channel | Source | Medium | Content | Tagged URL | Row |
|---|
The sheet is saved in this browser only, so it survives a refresh and never reaches a server. The CSV carries a byte order mark and CRLF endings, so Excel opens it with the accents intact.
Useful before a launch, and useful after one, when the report is empty and nobody knows why.
| Parameter | Required | What it answers |
|---|---|---|
utm_source | Yes | Which property sent the visit. google, facebook, newsletter. |
utm_medium | Yes | What kind of marketing it was. This is the field that decides the channel group. |
utm_campaign | Recommended | Which campaign or promotion it belongs to. |
utm_content | Optional | Which creative or placement, so two ads in one ad set stay separable. |
utm_term | Optional | The keyword on paid search. |
utm_id | Optional | The campaign ID, used to join sessions to cost data imported into GA4. |
GA4 does not guess. It reads utm_medium against a fixed list, and anything outside that list lands in Unassigned no matter how carefully the rest of the link was built. facebook_ads, paidsocial and ppc_google are the three that break campaigns most often.
| Channel | Use | Not |
|---|---|---|
| Paid search | cpc, ppc, paid | google_ads, search |
| Paid social | paid_social, social_paid | facebook_ads, paidsocial |
| Organic social | social | instagram |
| Display | display, banner, cpm | programmatic |
email | mailchimp, edm | |
| Affiliate | affiliate | partner |
A macro is a placeholder the ad platform swaps for a real value at click time. It has to reach the platform exactly as written, so this builder never percent encodes one, and never flags its capital letters as a casing mistake.
| Platform | Syntax | Example |
|---|---|---|
| Google Ads | ValueTrack in braces | {keyword}, {campaignid}, {creative} |
| Microsoft Ads | Braces, mixed case | {CampaignId}, {AdGroupId} |
| Meta | Double braces | {{campaign.name}}, {{ad.name}} |
| TikTok | Double underscores | __CAMPAIGN_NAME__, __CID_NAME__ |
| Display & Video 360 | Dollar and braces | ${CAMPAIGN_ID}, ${CREATIVE_ID} |
| Campaign Manager 360 | Percent and bang | %ecid!, %epid! |
utm_source or utm_medium, which hands the session back to the referrer.utm_medium outside the channel group list, which is the usual reason a campaign reports zero sessions.%20 or a plus sign.?, # or &) inside a value, which truncates the query string.http landing page, which most ad platforms reject or silently rewrite.UTM parameters explained for paid media covers what each field is for and a naming convention worth adopting. Why GA4 shows unassigned traffic explains the one field that decides whether a campaign appears in reporting at all. Ad platform URL macros lists the placeholder syntax for Google Ads, Meta, TikTok, DV360 and Campaign Manager 360, and why encoding one breaks it.
Once the click URL is settled, put it into the creative with the clickTag generator, or inject it straight into a zipped banner with the HTML5 clickTag editor. Before the campaign ships, run the finished creatives through the HTML5 banner validator and check the video cuts against the safe zone checker.