UTM tracking in Snowplow
Snowplow is an open-source behavioral data platform that collects rich, first-party event data into a warehouse. Its tracker and enrichment process map standard UTM parameters into dedicated campaign fields (mkt_source, mkt_medium, mkt_campaign, mkt_term, mkt_content) on the atomic event, giving you warehouse-native campaign attribution.
The marketing campaign enrichment
Snowplow ships a campaign-attribution enrichment that parses UTM parameters from the page URL during event processing. It maps utm_source to mkt_source, utm_medium to mkt_medium, utm_campaign to mkt_campaign, utm_term to mkt_term, and utm_content to mkt_content in the atomic event.
Because this happens in the pipeline, every event landing with UTM tags carries structured campaign columns into the warehouse, ready for SQL modeling.
- utm_source -> mkt_source
- utm_medium -> mkt_medium
- utm_campaign -> mkt_campaign
- utm_term -> mkt_term, utm_content -> mkt_content
Warehouse-native attribution
With UTM mapped into typed columns, attribution modeling moves to SQL/dbt over the atomic events table, so you can build first-touch, last-touch, or multi-touch models on your own terms.
Consistent, lowercase UTM tagging keeps the mkt_ columns clean; messy casing or stripped parameters propagate straight into the warehouse, so validate tags before launch.
How it appears in analytics and logs
Populated mkt_source / mkt_medium / mkt_campaign columns in your Snowplow atomic events confirm the page URL carried UTM parameters that the campaign-attribution enrichment parsed at collection time.
Diagnostic use case
Attribute campaigns in a warehouse-first Snowplow pipeline by relying on the campaign-attribution enrichment that reads UTM parameters into structured mkt_ fields.
What WebmasterID can help detect
WebmasterID complements a Snowplow-style first-party model by recording the UTM-tagged landing hit as a campaign touch, so you have a clean source signal even outside the warehouse pipeline.
Common mistakes
- Disabling the campaign-attribution enrichment and wondering why mkt_ fields are empty.
- Stripping UTM before the tracker fires, so no campaign reaches the pipeline.
- Inconsistent casing producing duplicate mkt_campaign values in the warehouse.
Privacy and accuracy notes
Snowplow is first-party and self-hosted; the mkt_ fields describe the campaign, not the person. You control retention and PII handling, and WebmasterID likewise records the touch without exact location or a shared visitor identity.
Related pages
- UTM tracking in RudderStack
RudderStack is an open-source, warehouse-first customer data platform. Its JavaScript SDK automatically parses UTM parameters from the page URL and populates the context.campaign object (source, medium, name, term, content) on events, so campaign attribution flows to every downstream destination and your warehouse.
- UTM parameters in BigQuery
When GA4 is linked to BigQuery, campaign data arrives in the event export as nested event_params and traffic-source fields. The UTM-derived values — source, medium, campaign, content, term — are queryable with SQL via UNNEST, letting you build custom attribution beyond the GA4 UI. This page covers where UTM-derived fields live in the BigQuery schema and the basic query shape.
- UTM and server-side tracking
Server-side tracking reads the UTM parameters from the incoming HTTP request on your server, rather than relying on a browser tag to capture them. This makes campaign attribution resilient to ad blockers, script failures, and consent-gated client tags. The trade-off is that the server sees the landing request but must be designed to persist the campaign context across the visit. This page covers the mechanics and limits.
- Event explorer
Inspect campaign-tagged events captured first-party.
Sources and verification notes
- Snowplow Docs — Campaign attribution enrichmentDocuments UTM-to-mkt_ field mapping in the atomic event.
Last reviewed 2026-06-24. Facts are checked against primary/official sources where available; uncertain specifics are marked “Data not yet verified” rather than guessed.