Use one documented UTM contract across channels, and do not copy platform macros until you have verified them in the exact ad field and format you use. The earlier version of this page contradicted the site’s attribution guide and mixed full-URL, suffix and parameter-only fields. This Phase 1 revision removes those unverified recipes rather than risk broken destinations or misleading reports.
The shared 99Ways parameter contract
Parameter | Meaning | Example
utm_source | Platform or publisher | google, facebook, reddit
utm_medium | Channel type | cpc, paid-social, display
utm_campaign | Cross-channel campaign or initiative | winter-sale-2026
utm_term | Keyword, audience or ad-set detail | brand-keyword, retargeting-30d
utm_content | Creative, placement or link variation | video-ad-01, feed-placementThis matches the canonical UTM governance guide. Do not put an ad-set ID in utm_content on one platform and an ad ID there on another while expecting the field to remain comparable. Store platform IDs in dedicated fields such as platform_campaign_id, platform_adset_id and platform_ad_id when stable joins are required.
Names and IDs serve different jobs
A shared campaign name in utm_campaign groups the same initiative across platforms. Platform IDs are stable keys for joining delivery and cost exports. Keep both when needed: readable UTMs for cross-channel analysis and dedicated ID parameters for exact platform joins. Never place customer IDs, email addresses, private audience names or other personal data in a URL.
Field type determines the literal input
Field type | What it expects | Separator responsibility
Full destination URL | Landing-page URL plus query string | You must use ? for the first parameter and & thereafter
Parameter or suffix field | Key-value pairs only | The platform normally attaches them; do not paste a leading ? unless current documentation explicitly requires it
Tracking template | A platform landing-page placeholder plus tracking expression | Use only after verifying the platform’s current placeholder and escaping rulesDo not assume these field types are interchangeable. Google’s Final URL suffix is the simpler home for parameters that merely need appending; a tracking template has different purposes and syntax. Other platforms vary by campaign type and interface version, which is why a generic six-platform copy table is unsafe without current delivery tests.
Build one canonical URL before adapting it
Start with a registry row containing the untracked destination, approved source/medium/campaign values, optional term/content values, dedicated platform IDs, owner and launch date. Generate the URL from that record instead of hand-editing strings in Ads Manager.
For a destination with no query string, the first separator is ?: https://example.com/page?utm_source=facebook&utm_medium=paid-social&utm_campaign=winter-sale-2026. If the destination already has a query string, append with &. Preserve fragments and required application parameters deliberately.
Validate the delivered click, not just the editor preview
Use a safe test ad or supported test-link flow. Confirm that the browser reaches the intended canonical HTTPS page, every dynamic token resolves rather than arriving as literal braces, existing query parameters survive, and redirects retain the values. Then inspect one test landing event and one non-production conversion through the authorized analytics/CRM path.
Record the literal input, resolved public URL, ad format, test date and observed downstream fields. A preview that merely displays the template is not delivery evidence. If a platform cannot be tested, label its recipe unverified and do not present it as copy-ready.
Migration without breaking historical reporting
Do not rename live campaign parameters in place. Map old values to the new contract, choose a cutover date, keep the mapping with the campaign registry and update reports to understand both eras. Validate channel grouping in each analytics product; no single utm_medium value guarantees identical classification everywhere.
Phase 1 status of platform recipes
The previous Meta, Google, Reddit, TikTok, Snapchat and Pinterest macros are intentionally not repeated here because they have not been verified in this phase. Phase 2 can restore a dated per-platform table only after checking primary documentation and capturing anonymized input/output evidence for each supported ad format. Use the PostHog audit for downstream QA.



