Media Taxonomy and Spend Spine
One vocabulary for channels and tactics, one spend series reconciled to what the business paid, joined to the outcome the budget is meant to move and what it is worth, at a grain that supports the designs you want to run.
The decision it encodes
What did we spend, on what, and does everyone agree?
Finance closed the quarter with paid social at $2.41m. The platform interface says $2.31m. The mix model was fitted on $2.55m.
Nobody is wrong. The finance figure includes agency commission. The platform figure is net of a credit applied in March. The model was fitted on a series built by matching campaign names against a regular expression that stopped catching a naming convention somebody changed in the same month.
Every number downstream inherits the one you picked, and nobody can say which one was picked, because the choice was made inside a query rather than written down anywhere.
The decision it encodes
What did we spend, on what, and does everyone agree?
The last clause is the one doing the work. A spend series that only one team can reproduce is a private opinion about the past, and every estimate built on it inherits both the number and the argument.
The taxonomy is applied
The common failure is to let campaign names carry the structure and then parse it back out. Names are written by people under deadline, conventions drift, and a regular expression is a silent dependency on a habit.
The alternative is a mapping table: platform campaign id to a node in a vocabulary somebody owns. New campaigns land unmapped and fail loudly rather than falling into whichever bucket the pattern happened to match. Renaming a campaign then changes nothing, which is the property you want.
| Choice | Why it cannot be left implicit |
|---|---|
| Channel and tactic | Prospecting and retargeting behave nothing alike. Collapsing them makes a curve that describes neither. |
| Gross or net | Agency commission, platform credits, and taxes each move the series by percent, and different teams each drop a different one. |
| Booked or delivered | Spend committed in a period and spend delivered in it diverge most at quarter end, which is when the question gets asked. |
| Grain | Channel by geo by day is the finest anyone needs and the coarsest a geo design can use. Aggregation is irreversible. |
| Delivery alongside cost | Saturation is a property of impressions reaching people, not of dollars leaving an account. Auction prices move independently. |
| Version | Taxonomies change. A model refitted after a change is fitted on a different series unless the change is dated. |
| Outcome and horizon | Which business result the spend is judged on, and how long it takes to mature. A model fitted on orders and a test read on activated accounts are not disagreeing about media. |
| Value | How an outcome becomes money: contribution after refunds, cancellations, and discounts, or a retained-value estimate for a subscription, with the assumptions versioned so a decision can be re-read under the ones that were active when it was made. |
None of these is difficult. Each one is a fork where two teams will pick differently, and the cost is not the discrepancy. It is the week spent finding it.
The outcome side of the spine
The spend series is half of it. Every estimate this system produces is a ratio of an outcome to a spend, and the outcome side is left implicit far more often than the spend side. It should carry: the primary outcome the budget is judged on, stated once, whether that is orders, activated accounts, or contribution; the maturity window after which it is counted as final; how refunds, cancellations, discounts, renewals, and late conversions are handled; how a user is assigned to a market, since a geo design depends on it; and how the outcome is translated into contribution or customer value, with the version of those assumptions recorded against every decision that used them.
Two consequences. Incremental conversions are not automatically the right objective: a channel that produces more first orders of lower-value customers can lose to one that produces fewer of better ones, and only a value definition can say so. And the early proxy and the mature outcome will sometimes disagree. When they do, the spine says which one the plan is judged on, so the argument happens once rather than every quarter.
Grain decides which questions you may ask later
This is the choice that cannot be revisited. Aggregation throws away information permanently, and the grain you keep is the grain of question the rest of this system can answer.
Weekly national spend supports a national mix model and nothing else. A geo holdout needs spend by market and day, because the design compares markets and the readout has to confirm the spend moved where it was supposed to. Keeping the finer grain costs storage. Discovering you need it costs a quarter.
The spine is upstream of the argument
Attribution, mix models, and experiments disagree for many reasons, and the cheapest one to eliminate is that they were fitted on different spend. Triangulating when your evidence disagrees is worth far more when the inputs are known to match, because then the disagreement is about method rather than about data plumbing.
Maturity, honestly staged
Stage 1: one channel and tactic vocabulary, applied at campaign creation. No new capability. Two teams stop reporting different numbers for the same thing, which is most of the value and none of the fun.
Stage 2: reconciled to invoices on a schedule. The series becomes the one finance recognizes, so a model’s efficiency numbers can be defended outside the data team.
Stage 3: daily and geo grain, with delivery alongside cost. Geo designs become available, and saturation can be modeled against impressions rather than against dollars.
Stage 4: id-mapped and versioned. Renaming a campaign changes nothing, new campaigns fail loudly rather than defaulting, and a taxonomy change is dated so a refitted model is comparable to the one before it.
Why the grain cannot be recovered later Technical
Aggregation is a projection. Summing daily market spend to a weekly national total discards the variation across markets and within the week, and no procedure recovers it, because many different daily patterns produce the same weekly total. Any design that depends on that variation is unavailable from that point on, whatever anyone is willing to spend on analysis.
Which is why the practical rule is to store at the finest grain the platform reports and aggregate in the query rather than in the pipeline. The cost is rows. The alternative cost is that a geo test proposed in March cannot be powered from data collected in January, and the team waits a quarter to accumulate history that was always available and was thrown away on the way in.
One caveat worth stating. Finer grain is not automatically more truthful. Platform geo attribution is itself modeled for some inventory, and daily figures restate for several days after the fact. Store the grain, and treat the last week as provisional rather than as fact.
Context
Best suited for
Any program buying media across more than one platform, and any organization where a model, a dashboard, and a finance report are expected to agree about what was spent.
Data requirements
- Platform campaign identifiers, which persist, rather than campaign names, which do not
- Invoiced spend at a grain that can be matched to platform reporting, monthly at worst
- Impressions or another delivery measure alongside cost, since auction prices move on their own
- A dated record of taxonomy changes, so a series can be compared to itself across a restructure
What changes by context
- B2C ecommerce
- Promotional calendars drive both spend and demand, so the spine has to carry promotion periods as a series too. Without them every channel curve absorbs the promotion and reports it as media effectiveness.
- B2C subscription
- Spend is judged against retained value rather than first payment, so the spine needs to join to a cohort outcome months later. That makes the date fields load-bearing in a way they are not where the outcome lands the same week.
- Marketplace
- Supply-side and demand-side spend belong to different vocabularies and different outcomes. Collapsing them into one channel taxonomy produces curves that average two unrelated response functions.
- B2B SaaS
- Much of the spend is events, content, and sponsorship, which have no platform to report them. Those arrive as invoices and calendar entries, so the taxonomy has to accept a manual source without treating it as a lower class of data.
When it breaks down
- Single-channel programs, where a spreadsheet is the answer and this is ceremony.
- Media bought entirely through an agency that reports monthly summaries, where the grain does not exist to be stored.
- Organizations that will not let anyone change how campaigns are named or created, in which case the mapping table becomes a permanent manual job rather than a one-time discipline.