Every cell's Data sheet tracks the same 14 feed types (the list is derived from tbl_DataTypes on the Control sheet - never hard-coded). Learn them as a checklist; a cell cannot reach Data sign-off until every one of them is resolved:
| Feed | What it is | Usual source |
|---|---|---|
sales | Offline sell-out value, volume and units - the model's target comes from here | Nielsen retail measurement |
kantar_sales | Panel sales for retailer sets outside the Nielsen universe - the hard and soft discounters | Kantar panel |
ecomm_sales | E-commerce platform sales, modelled as its own separate read | Client / retail-platform extracts |
distribution | Distribution series - the program models on TDP (Total Distribution Points) | Nielsen |
promotion | Promo decomposition: promo TDP, promo price (or trade spends where available) | Nielsen; trade spends in-house |
competition_sales | Competitor value/volume for the top 5-6 category players | Same syndicated source as own sales |
traditional_media | TV, OOH, print, radio, cinema - spends plus GRPs/impressions | Media agency (Mindshare) |
digital_media | Digital video, display, paid social, search, streaming audio - spends plus impressions | Agency and publisher exports |
boosted_influencer | Influencer activity amplified with paid boosting | Agency / publisher |
organic_influencer | Influencer activity with purely organic views | Publisher / in-house tracking |
ecomm_media | Retail-platform display and search media, tagged against e-com sales | Retail platforms / agency |
competition_media | Aggregated competitor media spends per channel | Syndicated ad-intelligence trackers |
bgs | Brand-health tracker carrying the MDS pillars (Meaningful, Differentiation, Salience) that feed the long-term model | Kantar branded (BTS) data |
macro | Macro-economic series: CPI, household income, consumer confidence, GDP, unemployment | Public statistical sources |
Each feed carries one status from tbl_DataStatus. The happy path is Pending → Received → Validated, and the gap between the last two is where the real work sits: Received means a file landed; Validated means it survived the checks - right granularity, full history, consistent hierarchy (sub-brands re-sum to brand), no unexplained gaps or duplicates. A feed can sit at Received for weeks while issues are chased.
Three off-ramps exist, and they mean different things:
- Granularity Issue - data exists but at the wrong grain for this cell's read. The recurring example: brand-health (bgs) data is captured at brand level only and gets duplicated across sub-brands and variants. A one-year-old variant cannot really be "salient", but it inherits the brand's salience because that is the only brand-health repository there is. The client is informed and it goes in the caveats - but if the cell's read depends on sub-brand granularity that does not exist, the feed is flagged here.
- Blocked - data should exist but cannot be obtained: an access request stuck with a data owner, an agency that has not responded, a licensing gap.
- Not in Scope - a deliberate scoping decision that this cell does not need the feed. This is a recorded call, not a shrug.
Nielsen vs Kantar
Nielsen carries the overwhelming majority of sales coverage - roughly 98% Nielsen to ~2% Kantar in a typical market. Kantar's genuine contribution is the hard and soft discounter retailer sets that sit outside the Nielsen universe; they are summed together, never modelled separately. The judgement call: if the Kantar share is negligible, do not merge it - tell the client it adds difficulty rather than value and run on Nielsen alone. Merging tiny panel volumes into a census-scale read buys noise, not accuracy.
The TDP decomposition check
The distribution feed arrives as three series, and they must reconcile: Total TDP = Promo TDP + Non-Promo TDP. If the identity fails, the promo decomposition downstream (promo TDP index, promo price index) is built on sand - the feed stays at Received until the source explains the gap.
The e-commerce overlap trap
In markets where retailers run their own online and click-and-collect operations (the UK and US, for instance), the offline Nielsen read already contains e-commerce sales. You cannot add ecomm_sales to sales to get total brand sales - that double counts. The prescription is structural: a separate offline read and a separate e-com read, each with its own media tagged against it, never additive. This is why ecomm_sales and ecomm_media are their own feeds rather than columns in the main ones.
Data readiness is not an ambient state - it is a gate. When every one of the 14 feeds reaches Validated (or is formally parked at Not in Scope), the cell earns its Data sign-off. Alongside it sits the Design sign-off - agreement on scope, model granularity and competitor set. Only when both sign-offs are in place does the committed 8-week Build clock start. That is the whole point of the gate: the build window is a promise, and the program refuses to start the clock on a cell whose data can still surprise it. Chasing feeds happens in Preparation, on a variable timeline, precisely so the Build phase does not absorb the risk.
bgs?ecomm_media?kantar_sales?distribution?- Root
MASTER_SCHEMA.md:Datasheet section (14 feed types fromtbl_DataTypes,tbl_DataStatuslifecycle and off-ramps),Deliverysheet section (Design + Data sign-offs, 8-week Build clock) UL - KT.docx(2 Jun session, Harishma S): Nielsen ~98% / Kantar ~2% coverage, hard/soft discounters, negligible-share rule, TDP = Promo + Non-Promo decomposition, e-commerce/offline overlap ("click and collect" already counted offline), brand-level BTS granularity limitation
tbl_DataStatus.