Getting Started

Ad Tracking Parameters

InHaus matches sessions and orders to your ad campaigns by reading utm_campaign from the URL the customer lands on. This guide walks through setting that up correctly in Meta Ads, Google Ads, TikTok Ads, and Klaviyo - plus the most common tracking-template mistakes that silently break attribution.

Why this matters

Without UTM parameters, our pixel captures the visit but has no way to link it to a specific campaign. You'll see total channel revenue (e.g. "Meta Ads: $4,200") but not per-campaign breakdowns like "AU Advantage+ Shopping earned $1,800 from 12 orders". Setting up tracking templates takes five minutes per platform and unlocks the entire Website Engagement and Campaign Performance views.

1

Meta Ads

Meta doesn't add UTM parameters to your ad URLs by default. You add them via the campaign-level URL parameters field.

1

Open your Meta campaign

Go to Meta Ads Manager → select a campaign → click Edit.
2

Scroll to the ad level

UTM parameters are set at the ad level (not campaign or ad set). Click into each ad.
3

Set the URL parameters field

In the ad editor, find URL parameters(near the "Website URL" field) and paste:
utm_source=meta&utm_medium=paid&utm_campaign={{campaign.id}}&utm_content={{ad.id}}&utm_term={{adset.id}}
Meta substitutes {{campaign.id}} with the actual numeric campaign ID at click time. InHaus matches that ID against your synced campaigns automatically.
4

Save and publish

Meta applies the URL parameters to every new click from the moment you save. Historical clicks keep whatever (if anything) they were tagged with before.
Why campaign.id instead of campaign.name? Campaign IDs are immutable - if you rename a campaign in Ads Manager, historical reporting still joins correctly. Names can change or contain characters that break URL encoding.
2

Google Ads

Google uses ValueTrack tokens inside a tracking template. Set it once at the account level and every campaign inherits.

1

Open account-level tracking

In Google Ads, go to AdminAccount settingsTracking. Click Tracking template.
2

Paste the tracking template

Set the account-level tracking template to:
{lpurl}?utm_source=google&utm_medium=cpc&utm_campaign={campaignid}&utm_content={creative}&utm_term={keyword}
{lpurl} is Google's placeholder for your destination URL. Everything after the ? gets appended when the ad is clicked.
3

Validate the template

Google has a Test button next to the tracking template field. Click it to confirm the URL resolves correctly. If you see {campaignid} appearing as literal text instead of a real ID, the tracking template has a typo.
4

Save

New clicks immediately get the substituted values. Campaign-level tracking templates override account-level - if a campaign has its own template set, it wins.
Don't use {campaign} - that's not a valid Google ValueTrack token. The correct ones are {campaignname} and {campaignid}. A typo will cause Google to emit the literal text {campaign}into every click URL, completely breaking attribution. We've seen this happen to every second merchant we onboard - double-check your template.
3

TikTok Ads

TikTok's URL parameters work similarly to Meta - set at the ad-group level via dynamic tags.

1

Open your TikTok ad group

TikTok Ads Manager → select an ad group → click Edit.
2

Set URL parameters

In the destination URL field, append:
?utm_source=tiktok&utm_medium=paid&utm_campaign=__CAMPAIGN_ID__&utm_content=__AID__
TikTok substitutes __CAMPAIGN_ID__ and __AID__ at click time with the actual IDs.
3

Save and publish

Same as Meta - new clicks get the parameters immediately.
4

Klaviyo (Email)

Klaviyo automatically adds utm_source=klaviyo and utm_medium=email to every click - you don't need to configure anything for basic email attribution.

Nothing to do here. InHaus already ingests Klaviyo click events server-to-server via the Klaviyo API, so email attribution works even for customers on iOS Safari / Mail Privacy Protection / cross-device journeys where the pixel misses the click. If your Klaviyo integration is connected in Settings → Integrations, this just works.

Common mistakes to avoid

  • Unsubstituted placeholders - {campaign}, {campaignname}, {adgroup} appearing literally in your landing page URLs means your tracking template has a typo. Each ad platform has its own token syntax (Google uses {campaignid}, Meta uses {{campaign.id}}, TikTok uses __CAMPAIGN_ID__) - don't mix them.
  • Using utm_source=facebook for Meta - this works but makes InHaus treat Facebook and Instagram as the same source. If you want them separated in reports, use utm_source=meta and let the medium distinguish (utm_medium=facebook vs utm_medium=instagram).
  • Forgetting the question mark in Google tracking templates - the correct template starts with {lpurl}?. Without the ?, Google appends the params directly to your URL and breaks it.
  • Setting UTMs at the wrong level- Meta wants them at the ad level, Google wants them at the account level, TikTok wants them at the ad group level. Setting at the wrong level doesn't propagate.

How to verify it's working

  1. Open an incognito window and click one of your live ads.
  2. Check the URL you land on. It should include ?utm_source=...&utm_medium=...&utm_campaign=... with real values (not placeholders).
  3. Wait 2–3 minutes, then open InHaus → CampaignsColumnsWebsite Engagement. Your campaign should show non-zero Sessions, Avg Duration, and Pageviews.
  4. If it doesn't, hit /api/debug/utm-histogram?workspaceId=YOUR_ID&days=1 to see what the pixel is actually capturing - the topCampaigns array shows the values that came through.

Still not seeing campaign data? Book a free 15-minute onboarding call- we'll screenshare with you and get it sorted.

Contact us