Tag Your Ad Links for Attribution
Updated October 6, 2026
Profitario credits each order to the ad that brought the customer by reading the link they clicked. A few parameters at the end of your ad links (UTM parameters and an ad ID tag) tell it the platform, the campaign and the exact ad. Set them once per ad account and every new order can be matched down to the ad.
- Where
- In each ad platform's ad or account settings. Nothing to install in your store or theme.
- Who
- Whoever manages your ad accounts. Your ad accounts should also be connected in Profitario.
- Time
- About 5 minutes per ad platform.
- Updates
- Orders from clicks after the change. Past orders keep the links they arrived with.
What Profitario Reads#
Parameters you add to your ad links:
| Parameter | Example | What Profitario does with it | Needed? |
|---|---|---|---|
utm_source | facebook | Names the platform: Facebook, Google, TikTok, ... Must be one of the values Profitario recognises | Yes |
utm_medium | paid | Marks the visit as paid (paid, cpc and similar) or as email (email) | Yes |
utm_id | 120214567890123 | Matches the campaign by its ID, or the ad when it holds an ad's ID | Recommended: survives renames |
utm_campaign | autumn_sale | Matches the campaign by its exact name, or by its ID when it holds one. Readable in reports | Recommended |
utm_content | Unboxing video | Matches the ad by its exact name when the link has no ad ID | Optional |
utm_term | Retargeting 30d | Shown on the order. Not used for matching | Optional |
pf_adid | 120214567890456 | Matches the exact ad by its ID. Profitario's own tag | Recommended: without it, matches stop at campaign level |
You fill the values with placeholders (dynamic parameters): {{campaign.id}} on Meta, {campaignid} on Google, __CAMPAIGN_ID__ on TikTok. The platform replaces each one with the real value when someone clicks, so one line works for every ad.
Parameters the platforms and tools add by themselves (nothing to set up):
| Parameter | Added by | What Profitario does with it |
|---|---|---|
fbclid | Meta | Marks the visit as a paid Meta click |
gclid, gbraid, wbraid | Google Ads, with auto-tagging on | Marks the visit as a paid Google click |
gad_campaignid | Google Ads | Matches the campaign, including Performance Max |
gad_source | Google Ads | Marks the visit as a paid Google click |
ttclid | TikTok | Marks the visit as a paid TikTok click |
msclkid | Microsoft Ads, with auto-tagging on | Marks the visit as a paid Microsoft click |
sccid, epik | Snapchat, Pinterest | Marks the visit as a paid click on that platform |
srsltid | Google free product listings | Marks the visit as organic search, not an ad |
_kx, mc_cid, se_activity_id | Klaviyo, Mailchimp, Shopify Email | Marks the visit as email |
Click IDs prove a visit was paid, but they do not say which campaign it was. That is why utm_id and pf_adid are worth adding even though the platforms already tag their clicks. Tags from other attribution tools (Triple Whale, Hyros and others) are read too, see What Profitario recognises.
Set Up Each Platform#
Pick your platform, copy the parameters and paste them where it says. Placeholders are shown in purple. Below the parameters you see the full link an ad then opens.
Set it once, not per ad. Several platforms let you set the parameters once for the whole ad account, and they then apply to every campaign and ad, including the ones you create later. Use that where it exists:
| Platform | Set once for all campaigns and ads? |
|---|---|
| Google Ads | Yes: the account's Final URL suffix |
| Microsoft Ads | Yes: the account's Final URL suffix |
| Partly: the ad account's automatic URL parameters cover the campaign, the ad ID goes in each link | |
| Email tools | Yes: Klaviyo and most email tools have an account-wide UTM setting |
| Meta | Per ad. Select all ads in Ads Manager and paste once to update them together |
| TikTok | Per ad, no bulk edit. A copied ad keeps its parameters, so tag one ad and duplicate it |
| Snapchat | For new ads: the ad account's parameters in Business Manager. Running ads one by one, no bulk edit |
Where: In Ads Manager, open the ad (or select several), scroll to Tracking and paste into URL parameters, not the website URL. Then Publish.
Meta has no account-wide setting. Select all your ads in Ads Manager and paste once: every selected ad gets the parameters.
- utm_source=facebook
- The platform. Keep it the same everywhere
- &utm_medium=paid
- Marks the visit as paid
- &utm_campaign={{campaign.name}}
- Campaign name, for your reports and Google Analytics
- &utm_content={{ad.name}}
- Ad name, a fallback when there is no ad ID
- &utm_term={{adset.name}}
- Ad set name, for Google Analytics. Profitario does not need it
- &utm_id={{campaign.id}}
- Campaign ID: the campaign match that survives renames
- &pf_adid={{ad.id}}
- Ad ID: matches the order to the exact ad
Full link example
https://yourstore.com/products/merino-throw?utm_source=facebook&utm_medium=paid&utm_campaign={{campaign.name}}&utm_content={{ad.name}}&utm_term={{adset.name}}&utm_id={{campaign.id}}&pf_adid={{ad.id}}
Paste the text as it is. Meta fills in the placeholders on every click. Changing the URL parameters of a running ad can restart the learning phase of its ad set, so add them to new ads or at a quiet moment.
Step-by-step guide per platform, with every click, bulk options and the platform's quirks:
Check That It Works#
Do this once per platform, right after you save.
- 1
Step 1 of 2
Check the link the platform shows#
Most platforms show the full link with your parameters next to the field you pasted into. Check that there is one
?between your page address and the parameters, and no spaces. - 2
Step 2 of 2
Click a live ad#
When you come across your own ad, click it and read the address of your store page in the browser. The placeholders must be replaced by real values:
utm_id=120214567890123, notutm_id={{campaign.id}}.If the address still shows
{{campaign.id}},{campaignid}or__CID__, the parameters sit in a field the platform does not fill in, for example straight in the website URL on Meta. Move them to the field named above. Done
Check the next order from an ad#
New orders are sorted within minutes of the purchase. Open the order in Orders and its Attribution tab. Matched campaign shows the campaign and ad, and Match method says Matched by ad ID: the most precise match there is.
Rules That Keep the Data Clean#
One spelling per platform. facebook, Facebook and fb all work, but reports and Google Analytics group by the exact text. Pick one and use it everywhere.
Never mark email or organic links as paid. A utm_medium of paid or cpc makes any visit Paid ads, even from a newsletter. Use email for email and SMS.
Prefer IDs over names. A renamed campaign stops matching by name, an ID never changes. Meta also fills {{campaign.name}} with the name the campaign had when the ad was published, not the current one.
Do not shorten or redirect ad links. Link shorteners and redirect pages can drop the parameters on the way. Link straight to your store.
Keep links short. Shopify keeps the first 255 characters of the landing link. The templates above stay well within that, but a long product URL plus several other tools' parameters can reach it. The Profitario pixel records the full link.
Other Channels#
Influencers, affiliates, partners. Give each partner a link with their own utm_source and utm_medium=referral, for example utm_source=anna_smith, utm_medium=referral and utm_campaign=spring_collab. These orders show under Referral. Do not use utm_medium=paid for them: they would count as Paid ads with no campaign to match, as there is no ad account behind them.
Your own social posts. Visits from facebook.com or instagram.com are counted as Paid ads even without an ad, see how a visit gets its channel.
Other attribution tools. If your links already carry tags for Triple Whale, Hyros, Comet, HubSpot or AdBeacon, Profitario reads those too (see below). You can keep them and add pf_adid, or leave them as they are.
What Profitario Recognises#
utm_source values per platform (upper or lower case):
| Platform | utm_source |
|---|---|
| Facebook / Instagram (Meta) | facebook, fb, meta, instagram, ig |
| Google Ads | google, google_ads, adwords |
| TikTok | tiktok, tt |
pinterest, pin | |
| Snapchat | snapchat, snap |
| Microsoft Ads | bing, microsoft |
| Taboola | taboola |
| AppLovin | applovin |
Mediums, email markers and ID tags:
| What | Recognised values | Notes |
|---|---|---|
Paid utm_medium | cpc, ppc, paid, paidsocial, paid_social, cpm, display | The whole value must match: paid-social or cpc_meta are not recognised |
utm_medium of email or e-mail; utm_source of klaviyo, mailchimp, sendlane or shopify_email | The parameters Klaviyo, Mailchimp, Omnisend and Shopify Email add by themselves count too | |
| Ad ID tags | pf_adid, tw_adid, trueroas, h_ad_id (Hyros), comet_ad_id, hsa_ad (HubSpot), abid (AdBeacon), fbadid, gadid, ttadid, scadid, padid, ad_id, adid | Read in this order: the first one present is used |
| Campaign ID tags | gad_campaignid (Google), tt_campaignid, pins_campaign_id, hsa_cam, tw_campaign, campaign_id and others | Added by the platforms or other tools. All present are tried |
| Click IDs | gclid, gbraid, wbraid, dclid (Google), fbclid (Meta), ttclid (TikTok), msclkid (Microsoft), sccid (Snapchat), epik (Pinterest), tblci (Taboola) | Also the click IDs of X, LinkedIn, Reddit and others. They mark a visit as paid |
Limits#
- Parameters only help orders from clicks made after they were added. Past orders are not changed.
- An ad ID only matches when the ad account is connected in Profitario and has synced its ads.
- Views without a click are not counted, whatever the parameters.
Common questions
Related articles
Was this article helpful?

