Skip to content

Campaign tracking

Connecting an ad platform imports its campaigns and its daily spend. That alone does not tell AdStrike which campaign a given visit came from — that link is carried by the landing page URL, and each platform handles it differently.

Without it you still get attributed revenue per channel, but no cost, no ROAS and no CPA per campaign: the spend is imported and joined to nothing.

Most platforms need nothing from you. Read the section for yours before changing any setting in the ad platform.

When a visit arrives, AdStrike looks for its campaign in three ways, in order:

  1. By campaign id — a parameter in the landing URL holding the platform’s own campaign identifier. Exact and robust; nothing to maintain.
  2. By UTM mapping — the URL’s utm_campaign is compared with the campaign’s UTM mapping, either declared by the platform or entered by you.
  3. By campaign name — the URL’s utm_campaign is compared with the campaign’s own name, ignoring separators and case. So a campaign named Brand | FR | 2026 is matched by utm_campaign=Brand_FR_2026.

The third one is why naming your UTMs after your campaigns is usually all it takes.

Nothing to do. Google adds gad_campaignid to click URLs on its own, and AdStrike reads it.

Do not add gad_campaignid={campaignid} to the final URL suffix. Google already sends the parameter, so a suffix adds it a second time with a different value — and for Performance Max campaigns the {campaignid} ValueTrack parameter does not resolve to the campaign id AdStrike knows. When both are present the suffix value wins, so the setting silently breaks the matching it was meant to enable, on Performance Max in particular.

If you have already set it, remove it. Existing visits keep whatever link they were given; new clicks recover on their own.

Nothing to do. Criteo puts no campaign id in its click URLs, so AdStrike reads the utm_campaign your ad sets append and maps it to the campaign automatically, refreshing it on every sync.

One caveat: ad sets whose tracking code sends a generic value such as acquisition or retargeting cannot be traced back to a specific campaign, because several campaigns share it — and the value matches no campaign name either. Give each ad set a distinctive utm_campaign if you want campaign-level cost.

Nothing to do in most cases. Meta puts its campaign id in utm_id on part of its traffic, and AdStrike falls back to the campaign name for the rest — so naming your campaign the way your utm_campaign reads is enough.

If a campaign still shows no match, check the campaign’s URL parameters in Meta: when the UTMs are set both in the destination URL and in the URL parameters field, the two get concatenated and one overwrites the other. Keep them in one place.

Connect TikTok first, on Settings → Integrations, and link the ad account to a site. Campaigns cannot be matched before they are imported.

TikTok then matches on the campaign name, like Meta. If your utm_campaign does not resemble the campaign name, either align the two or enter the value in AdStrike through the UTM mapping dialog on the Campaigns page.

Open the Campaigns page. A warning appears there whenever a platform sends traffic that cannot be tied to any campaign, naming the platform concerned.

Changes only affect new visits: traffic recorded beforehand keeps no campaign link, and there is no retroactive fix. Allow for the time it takes new clicks to come in — and for visitors’ cached copy of the tracker to expire — before concluding it has not worked.