Why your future MMM depends on the data you label today
Marketing mix modeling is sold as a modeling problem. It's really a labeling problem, and the campaign names you write this week decide how much of it you'll be able to run in two years. Here's why history can't be re-labeled, and the naming system that fixes it going forward.

Whether you can run marketing mix modeling in 12 to 18 months is decided by the campaign names and UTM labels you write this week, not by the modeling tool you pick next year. MMM's inputs are your labeled spend history. Models can be re-run in an afternoon; history cannot be re-labeled, so inconsistent names today are a smaller model later, permanently.
Teams planning for MMM or triangulation usually plan the wrong scarce resource. Modeling capacity is abundant: open-source libraries, commercial platforms, in-house notebooks. What's scarce is two clean years of spend and outcome history, sliced by channel and campaign, where the slices mean the same thing in month 1 and month 24. That's not a modeling artifact. That's a labeling artifact, and you're either building it or corrupting it right now.
#MMM runs on labels, not tags
A marketing mix model's inputs are your campaign names. The model weighs
outcomes against spend lines like "paid search, brand" and "paid social,
prospecting", and every one of those lines exists only because some label
in your data groups it. Your reporting doesn't know what a campaign is;
it knows what a campaign is called. Every chart, every model, every MMM
input is built by grouping on exactly the strings your team typed into
campaign names and utm_campaign tags. Change nothing about the spend,
rename the campaigns, and the numbers move. The label is the model.
This is why "we'll clean it up when we do MMM" is a plan to do MMM with less data. Cleanup scripts can fix the future. They can only guess at the past.
#History can't be re-labeled: the fork problem
One mid-year rename splits a channel's history into two series, neither long
enough to model. Say brand search ran as search_brand from January and
someone standardizes it to brand-search-nl in August. Nothing breaks: spend
flows, dashboards fill. But in the warehouse there are now two campaign
histories (one that dies in August, one born in August) and no reliable
rule that says they're the same thing. Multiply by every renamed campaign,
every "q3-test-v2-FINAL", every platform whose naming drifted from the
others, and the two-year history MMM wanted becomes a shelf of eight-month
fragments.
You can write mapping tables that stitch renames back together, and we do, for
clients who arrive with forked history. But every mapping is a guess encoded
as fact, made by whoever still remembers what search_brand was. Six months
later, nobody does. Chart the share of spend carrying consistent labels over
time in any account with team churn and the line only moves one way
(illustrative shape): near-complete at setup, under half within a couple of
years of quiet renames.
#The three label properties MMM needs
A naming system earns its keep on exactly three properties. Audit your last 90 days of campaign names against them:
Consistent. The same real-world thing carries the same label everywhere:
across platforms, across team members, across utm_source and the platform's
own campaign field. Consistency is what lets you line up the same channel across
platforms at all; it's also the property that dies first when naming lives in
people's heads instead of a written convention.
Granular. The label carries the dimensions you'll want to model, not just a memorable phrase. Channel, market, funnel stage, brand vs non-brand: if it isn't encoded in the name (or in a taxonomy the name keys into), the model can't see it. "spring-push-2" contains none of the variables anyone will ever regress on.
Stable over time. The convention survives quarters, reorgs, and new hires. Stability is the property the fork problem punishes: a better name adopted mid-year is worse than a mediocre name kept, because the model values series length over elegance. Change the convention only with a versioned mapping from old to new, treated like a schema migration.
#Start now: the naming system
The cheapest MMM preparation available is adopting a written naming convention this week and enforcing it at the point of entry. The system we actually run with clients (structure, separators, the enforcement story) is documented in utm naming conventions, and the copy-pasteable convention spec lives in campaign naming convention reference. The parameter mechanics underneath (what each UTM field is for, and the failure cases that silently split your rows) are in UTM parameters: the reference.
None of this requires buying anything. It requires deciding that campaign names are data, not prose, and giving the person launching campaigns a reference they can't misremember.
#What this buys you later
Every measurement method you'll want in the next two years consumes the same labeled history. Triangulation needs platform-reported, warehouse-verified, and modeled numbers to agree on what a "channel" is. Incrementality tests need clean treatment boundaries, which are label boundaries. And MMM needs the long, stable spend series this whole essay is about. Label discipline is the shared prerequisite; the modeling itself is a story for the attribution side of the library, starting with mmm operators guide.
The near-term payoff arrives sooner than the model does: labeled spend is queryable spend. Get your campaign data into a warehouse that enforces the labels, and questions like "what did non-brand search return last quarter, across platforms" stop being projects: Buron's datasets and Explore answer them from data your naming discipline just made consistent across platforms.