Marketing Campaign and Sales Impact (EU)

CPGMKT994· 97K records · 8 tables · v1.0.0 · Updated 2026-08-11
Marketing & Advertising Marketing & Advertising Dataset API
CSV JSON SQLmarketingcampaignsmedia-mixsales-liftattributionconsumer-goodseuropeweeklytime-series

Overview

A decade of marketing and sales at weekly grain, where the product is the lift mechanism itself. Twelve invented consumer-goods brands sell through ten invented European retailers; 472 campaigns buy television, digital, social, retailer media networks and print across 548 weeks; and every week's actual units are built as baseline plus seasonality plus per-channel lift plus residual. The decomposition ships as its own table and the build asserts it sums exactly, row by row, except one documented brand-quarter whose attribution window is double counted: the digital and social columns both claim an overlapping conversion window, the rows sum above actuals by the recorded excess, and finding the quarter is the exercise. Lift carries diminishing returns, asserted on the shipped rows: lift per dollar falls as spend rises. The channel mix moves the way the European market moved, asserted: print declines slowly and keeps a material long tail while retailer media networks multiply from a low base, and the 2020 commerce shift lifts the online share of units more mildly than in the American sibling and holds most of it. Retailer sales split the brand-week actual exactly; one retailer reports weeks starting Sunday while everyone else starts Monday, so a date join silently drops it, and one campaign's tracking failed in flight, spending money against zero measured impressions. Built for media-mix modelling, attribution teaching, incrementality analytics, retail analytics, ETL pipelines and BI logic, with ground truth included. The licence and disclosure sections state the provenance of the data.

Row Counts by Table

Counted from the files that ship, not estimated.

TableRows
mke_brands12
mke_retailers10
mke_channels5
mke_weeks548
mke_campaigns472
mke_media_weekly23,493
mke_weekly_sales65,760
mke_lift_decomposition6,576

Table Relationships

One parent record and seven child tables, each joined back on the same key.

70%
Loading diagram

Schema

Every table ships with typed columns, referential integrity, and documentation.

mke_brands· Rows: 12
ColumnTypeDescription
brand_idvarchar(8)Brand key. Primary key.
brand_namevarchar(16)Generated brand name. Collisions with real manufacturers and famous brands are a build failure.
categoryvarchar(24)beverages, snacks, home_care, personal_care, packaged_food or pet_care.
base_weekly_unitsintegerThe brand base weekly volume the lift mechanism builds on.
launch_price_usdnumeric(6,2)Unit price at the start of the decade, in dollars.
demand_patternvarchar(24)seasonal_peaked or steady.
mke_retailers· Rows: 10
ColumnTypeDescription
retailer_idvarchar(8)Retailer key. Primary key.
retailer_namevarchar(24)Generated retailer name. Collisions with real retailers are a build failure.
retailer_formatvarchar(16)The retailer format the split weights follow.
week_conventionvarchar(16)monday_start, or sunday_start for the one documented defect retailer whose week dates sit one day early.
mke_channels· Rows: 5
ColumnTypeDescription
channel_codevarchar(16)Channel key. Primary key: TV, DIGITAL, SOCIAL, RETAIL_MEDIA or PRINT.
channel_namevarchar(32)The channel in words.
typical_cpm_usdintegerTypical cost per thousand impressions in dollars, the invented planning figure.
saturation_lift_pctnumeric(5,1)The lift ceiling of the channel as percent of brand base volume, the diminishing-returns asymptote.
mke_weeks· Rows: 548
ColumnTypeDescription
week_idvarchar(8)Week row key. Primary key.
week_indexintegerThe week number every table joins on, 1 to 548.
week_start_datedateThe Monday the week starts, the spine convention.
yearintegerCalendar year of the week start.
quartervarchar(16)Calendar quarter of the week start.
mke_campaigns· Rows: 472
ColumnTypeDescription
campaign_idvarchar(8)Campaign key. Primary key.
brand_idvarchar(8)The brand the campaign belongs to.
campaign_namevarchar(40)Generated campaign name.
objectivevarchar(24)always_on, awareness, conversion, seasonal_push or launch_support.
start_week_indexintegerFirst week of the campaign.
end_week_indexintegerLast week of the campaign.
channel_listvarchar(48)The channels the campaign buys, pipe separated.

+1 more columns in mke_campaigns. The full schema ships with the download.

mke_media_weekly· Rows: 23,493
ColumnTypeDescription
media_idvarchar(16)Media row key. Primary key.
campaign_idvarchar(8)The campaign the row belongs to.
brand_idvarchar(8)The brand, denormalised.
channel_codevarchar(16)The channel bought.
week_indexintegerThe week of the activity.
spend_usdintegerSpend in dollars for the campaign-channel-week.
impressionsintegerMeasured impressions. Zero only in the one documented tracking-failure campaign.

+2 more columns in mke_media_weekly. The full schema ships with the download.

mke_weekly_sales· Rows: 65,760
ColumnTypeDescription
sale_idvarchar(16)Sales row key. Primary key.
brand_idvarchar(8)The brand.
retailer_idvarchar(8)The retailer.
week_indexintegerThe week. Join on this, not on the date.
week_start_datedateThe week start in the RETAILER own convention: one documented retailer reports Sunday-start dates one day before the spine.
units_soldintegerUnits sold. Retailer units sum exactly to the brand-week actual in the decomposition.
avg_unit_price_usdnumeric(6,2)Average unit price in dollars that week.

+2 more columns in mke_weekly_sales. The full schema ships with the download.

mke_lift_decomposition· Rows: 6,576
ColumnTypeDescription
decomposition_idvarchar(8)Decomposition row key. Primary key.
brand_idvarchar(8)The brand.
week_indexintegerThe week.
baseline_unitsintegerUnpromoted base demand, including the documented 2020 pantry effects.
seasonality_unitsintegerSeasonal swing around the baseline, signed.
tv_lift_unitsintegerUnits attributed to television that week.
digital_lift_unitsintegerUnits attributed to digital. In the documented double-counted brand-quarter this column claims part of an overlapping conversion window.

+6 more columns in mke_lift_decomposition. The full schema ships with the download.

Sample Data

A snapshot of real rows from the dataset (values are fully synthetic).

decomposition_idbrand_idweek_indexbaseline_unitsseasonality_unitstv_lift_unitsdigital_lift_unitssocial_lift_unitsretail_media_lift_unitsprint_lift_unitsactual_units
DC0001BR0111662811629502627238501178191154
DC0002BR0121656551037503380199401132185206
DC0003BR013165259520803446223001058173890

Version History

v1.0.02026-08-11First release. 12 brands, 10 European retailers, 472 campaigns, five channels, 548 weeks, with the exact lift decomposition shipped as the answer key, 2016-01-04 to 2026-06-29.

Related Datasets