Free Tools / UTM Builder

Pinterest UTM Builder

Build a tagged destination URL for a Pin or a Promoted Pin — and see, as you type, which GA4 channel the click will actually land in. Runs entirely in your browser; nothing you paste is sent anywhere.

The page the Pin sends people to. Existing query parameters are kept; a #fragment is moved to the end where it belongs.

What are you tagging?

Organic changes the recommended medium to social and hides the ad macros — organic Pins cannot use them.

Parameters

Where the click came from. GA4 needs this one at minimum, and pinterest is on its recognised social source list.

Commonly the board name, so board-level traffic separates in GA4.

Your tagged URL

Paste a destination URL above and the tagged link appears here.

GA4 default channel: Organic Social

GA4's Organic Social rule matches when the source is on its list of recognised social platforms OR utm_medium is one of social, social-network, social-media, sm, social network, social media. pinterest is on that source list, so this matches on both counts.

No utm_campaign yet

Documented best practice is utm_source, utm_medium and utm_campaign together on every tagged URL. Without a campaign you can see that Pinterest sent traffic, but not which push sent it.

One link, every board

The Pinterest workflow is one destination URL and twenty boards. Paste the board or Pin names, one per line, and each gets its own utm_content so you can separate them in GA4.

Pinterest may already be tagging this link

This is the trap no other UTM builder warns you about. Pinterest automatically applies its own UTM source and medium to the destination URLs of all current and future organic Pins, and publishes an opt-out procedure for it. So the values you build here can collide with values Pinterest adds on its own.

For ads, Pinterest can auto-apply utm_source, utm_medium, utm_campaign and utm_content to every destination URL in an ad account's current and future campaigns. You will find it at Business Manager > Ad accounts > [account] > Settings > Parameter setting > Custom parameters > Add parameters > Save, then ticking “Apply automatically”. It does not apply to Performance+ campaigns. Parameters already sitting in a product feed or typed into the destination URL field are not overridden by these account-level ones.

Before you roll out a tagging scheme, open your GA4 acquisition report and look for Pinterest rows you did not create — including rows that differ from yours only by capitalisation, since GA4 treats those as separate sources. Whatever casing Pinterest uses on its own values is the casing you need to match or opt out of.

The epik parameter you will see on ad clicks

When someone clicks a Pinterest ad, Pinterest appends its own click-ID query parameter, epik, to the destination URL. It is Pinterest's proprietary attribution identifier — the equivalent of Google's gclid or Meta's fbclid — and it encodes campaign and browser metadata rather than readable text, which is why it looks like garbage in your landing-page reports. It is not something you add, and not something to strip: Pinterest uses it to tie on-site actions back to the ad engagement that caused them, and missing or malformed values are what trigger Pinterest Click ID warnings in conversion tracking setups. Make sure any redirect between the ad and your page preserves the whole query string, and that your canonical tags and cache keys ignore it rather than forking on it.

Why Pinterest traffic shows up as Direct in GA4

A session is filed as (direct) / (none) when it arrives carrying no source signal at all — no UTM parameters, no click identifier, no usable referrer, and no first-party cookie from an earlier tagged visit. That is a very ordinary description of a tap on a Pin. Social in-app browsers strip referrer data and drop click identifiers, mobile sessions from social show as Direct at a much higher rate than desktop ones, and any redirect between the Pin and your page that drops the query string produces exactly the same blank arrival. Three separate threads in Pinterest's own Business Community and one in Google's Analytics forum are all people asking the same question about the same symptom.

Tagging is the fix because a UTM parameter is the one signal that survives referrer loss. It lives in the URL the browser requests, so it arrives even when the referrer header has been stripped and the click ID never made it through.

The values that decide how GA4 files the click

GA4 recognises seven manual campaign parameters: utm_source, utm_medium, utm_campaign, utm_id, utm_source_platform, utm_term and utm_content. utm_source is the minimum needed for a manual campaign to register at all, and Google's guidance is that once you set one you should set all the relevant ones, because a parameter you leave off is reported as (not set). Two default channel rules then decide where Pinterest clicks land. Organic Social matches when the source is on GA4's list of recognised social platforms — Pinterest is on it — or when utm_medium is one of social, social-network, social-media, sm, social network or social media. Paid Social is stricter: it requires both a recognised social source and a utm_medium matching ^(.*cp.*|ppc|retargeting|paid.*)$.

That is why utm_medium=social on a Promoted Pin is such an expensive mistake. GA4 matches the Organic Social rule on the source, files your paid clicks as organic, and the spend quietly disappears from your paid reporting. Case matters too: GA4 stores UTM values exactly as sent with no normalisation layer, so pinterest and Pinterest become two distinct traffic sources on two separate rows. Lowercase everything, every time.

Where the parameters have to sit in the URL

Parameters belong in the query string, before any # fragment. Everything after the # is stripped from the request your server ever receives, so a parameter placed after a fragment is never delivered and never tracked. The correct order is protocol, domain, path, ?, parameters, #, fragment. This builder reassembles the URL in that order automatically, keeps any query parameters that were already there byte-for-byte, and replaces only the utm_ keys it is setting.

Values are encoded with encodeURIComponent, which percent-encodes a space as %20 following RFC 3986. That is a deliberate choice over URLSearchParams, which serialises a space as + and reads + back as a space — a documented way to corrupt any value holding a literal plus or Base64 data. Pinterest's macro braces are restored afterwards so {campaignname} reaches the ad server intact rather than as %7Bcampaignname%7D.

Tagging per board instead of per link

A pinner does not have one link and one campaign. They have one destination URL and twenty boards, and every generic UTM builder makes them assemble those links one at a time. Using utm_content to carry the board name is established practice precisely because it lets you separate board-level traffic in GA4 afterwards — which board actually sends readers, not just that Pinterest did. Batch mode above does that fan-out in one pass: paste the destination once, paste the board names, copy all or export the CSV, then paste each link into the matching Pin as you schedule your Pins.

Tagged links are only useful once the Pins are out there

PinGrow schedules and publishes the Pins that carry these URLs — paste the tagged link as the destination and every Pin in your queue arrives in GA4 already attributed.

Try PinGrow Free
What PinGrow actually does

Automate Pinterest, Earn Forever

Point it at Amazon, your Gumroad page or your own shop. It writes the pin from real Pinterest keyword data, attaches your link, and publishes on your schedule, week after week, until you say stop. Add a product to your store and it gets pinned on the next run.