If you have Fivetran pulling from Google Ads, Meta Ads, TikTok, and DV360, you have data. What you don't have is a measurement layer. The data is there, but "conversion" means four different things across four platforms, "impression" is defined by different viewability standards, and the attribution windows are all different. You cannot compare performance across channels with this data. You cannot feed it into an MMM. You cannot reconcile why the warehouse number doesn't match the platform number the client is looking at.

This is Silver Step 1. It is the most commonly skipped layer in the media data stack, and it is the reason most cross-channel measurement programs fail before they produce a usable output.


The Medallion Architecture and Where Silver Step 1 Lives

The standard data warehouse architecture has three layers:

  • Bronze (Raw) — exact copies of source data, schema and semantics preserved as-is from each platform
  • Silver (Normalized) — cleaned, standardized, semantically consistent. Two steps: Silver Step 1 is semantic normalization (this article). Silver Step 2 is identity resolution — stitching the same user across platforms.
  • Gold (Aggregated) — business-level aggregations: campaign performance, client dashboards, MMM inputs, incrementality test results

The critical insight: Gold is only as clean as Silver. If Silver Step 1 is wrong or missing, every Gold table is wrong. Every dashboard, every MMM run, every incrementality test is operating on data where "conversion" means different things in each row.


The Five Things Silver Step 1 Must Normalize

1. Conversion definitions

This is the most important and most variable. Google counts "conversions" based on last-click within a configurable window, including cross-device. Meta counts "conversions" using pixel attribution with a 7-day click / 1-day view default. TikTok uses its own attribution model. DV360 uses view-through attribution by default. The same user completing the same purchase on the same day can be counted as a conversion by all four platforms simultaneously.

Silver Step 1 does not pick a winner. It creates a canonical conversion_event table from first-party conversion data (your CRM or pixel), then maps each platform's reported conversion to the canonical event. This gives you both the platform-reported conversion and the independently verified conversion in the same row — and the difference between them is what you actually need to know.

2. Impression definitions

The IAB standard is 50% of pixels in view for 1 second (display) or 2 seconds (video). But not every platform enforces this consistently, and viewability measurement vendors (IAS, DoubleVerify, MOAT) apply their own filters on top. An "impression" in your Fivetran raw table may or may not meet any viewability standard. Silver Step 1 normalizes impressions to a consistent viewability definition and flags non-standard impressions separately.

3. Attribution windows

Google's default is 30-day click / 30-day view. Meta's default is 7-day click / 1-day view. LinkedIn defaults to 30-day click. TikTok defaults to 7-day click. If you're summing "attributed conversions" across platforms with these raw defaults, you are double-counting customers and inflating every performance metric. Silver Step 1 aligns all platforms to a single attribution window — typically the one that matches your business's sales cycle — and recomputes attributed conversions consistently.

4. Currency and spend normalization

Less dramatic but still a real issue for multi-market agencies: ad platforms report spend in the currency of the ad account, not the reporting currency. Campaigns running in GBP, EUR, and USD all land in the Bronze layer in their native currency. Silver Step 1 applies a consistent FX rate (daily spot rate from a canonical source) and normalizes all spend to the reporting currency. This matters for MMM inputs, where spend is a key variable, and for any cross-market budget optimization.

5. Time zone alignment

Ad accounts are configured with local time zones. A campaign running in New York reports day-level data in US Eastern time. A campaign running in London reports in GMT. If you're analyzing cross-market performance at the day level without normalizing time zones, you're misaligning data by up to 13 hours depending on market combination. Silver Step 1 converts all timestamps to UTC before any day-level aggregation.


Silver Step 1 vs Silver Step 2

These are commonly conflated but do fundamentally different things:

  • Silver Step 1 (semantic normalization) — makes the same type of event mean the same thing across platforms. Works entirely within each platform's own data — no cross-platform user stitching required.
  • Silver Step 2 (identity resolution) — stitches the same user across platforms. Takes a Google user ID, a Meta click ID, a TikTok device ID, and resolves them to a single canonical customer identity. This requires a hashed email graph, RampID, UID2, or a first-party identity graph. Much harder, much more expensive, and depends on Silver Step 1 being correct first.

A common mistake is trying to do Silver Step 2 (identity resolution) without Silver Step 1 in place. You will successfully stitch user identities across platforms and then be looking at inconsistent conversion definitions across those stitched profiles. The output is confidently wrong data.


Where the Work Actually Lives

Silver Step 1 is primarily a dbt problem. The work is SQL transformation models that take platform-specific raw tables and produce normalized output tables with consistent schema and semantics. A well-structured Silver Step 1 dbt project includes:

  • One staging model per source (stg_google_ads_conversions, stg_meta_conversions, etc.) that handles platform-specific quirks
  • One canonical conversion model (fct_conversions) that applies consistent attribution window logic across all sources
  • One canonical impressions model (fct_impressions) with consistent viewability definitions
  • One spend model (fct_spend_normalized) with FX and time zone normalization applied
  • Tests asserting that conversion counts are within expected ranges — spikes here surface platform attribution changes before they propagate to Gold

For teams using TapELT rather than raw Fivetran connectors, Silver Step 1 is partially handled at ingestion — TapELT normalizes common fields before the data lands. The dbt work is reduced but not eliminated: you still need consistent attribution window logic and the canonical conversion model.


The Failure Mode

The most common failure mode is not skipping Silver Step 1 entirely — it's doing it incompletely and not knowing it. A team normalizes conversion definitions but not attribution windows. The MMM inputs look reasonable. The model runs. The output shows Meta underperforming Google by 40%. No one notices that Meta's 7-day click window is counting far fewer conversions than Google's 30-day window for the same underlying customer behavior. The budget shifts. Meta spend drops. The client sees an actual performance decline because Meta was actually working, but the measurement was wrong.

The check: before any MMM run or incrementality test, verify that attributed conversion counts at the platform level are consistent with your canonical conversion counts at a reasonable ratio. If Google claims 10,000 conversions and your canonical model shows 3,000 total for the period, something in Silver Step 1 is wrong. Fix the data before running the model.