Notes · Measurement · 8 August 2026

Marketing measurement needs a spine

Measuring marketing means connecting a dollar of spend to a dollar of revenue, through every step in between. That chain only holds if the business has agreed what a customer, a campaign and a sale are. Where it does not hold, you get a number nobody can act on.

A marketing measurement question sounds simple. Did the spring campaign make money?

Answering it means walking a chain. This money bought this placement. This placement was clicked by this person. This person walked in on a Tuesday. That visit was worth two hundred and ten dollars. Four joins, and the answer is only ever as good as the weakest one.

That chain is the measurement spine. Nearly all of the argument in this industry happens above it, about which method should allocate the credit. The spine itself gets very little attention, and it is usually where the problem is.

Where the spine breaks

The ad platform can tell you four hundred people clicked. The booking system can tell you ninety tables were booked. Nothing in either system says whether they were the same people.

That gap repeats at every join. The ad platform holds hashed audience matches and click parameters that get stripped in transit. The booking system holds an email address. The point of sale holds a card token and no name at all. Each is internally correct for the job it was built to do, and none of them shares a key with the next one along.

Then there is the join at the end, which gets skipped: what a sale is worth. Gross or net of discount. Whether a cancellation counts. Whether a no-show does. Ask three people in the same business and you will get three answers, all of them defensible.

Every method is a way of coping with the gaps

Marketing mix modelling does not need the joins at all. It regresses spend against outcome in aggregate, which is why it survives privacy changes and why it can never tell you anything about an individual. Multi-touch attribution needs every join intact, and degrades as identifiers disappear. Geo experiments sidestep identity altogether by holding a region back and comparing.

All three are legitimate and we use all three. What matters is being able to say which links in the chain were observed and which were inferred. Most stacks cannot say.

A number you cannot act on is reporting

This is the part that gets less attention, and it is the reason the spine matters more than the method does.

A mix model returns a coefficient for paid search. That is a real finding. Now do something with it. Which campaigns, which locations, which audiences, what changes on Monday morning? The coefficient is expressed in a unit nobody can address.

To act on it you have to travel back down the spine to the objects you can actually change — a budget on a campaign, an audience, a piece of creative, one venue. If the measurement was never built on those objects, that trip back down is guesswork.

Which means the system that measures and the system that acts have to be talking about the same things. Otherwise every action is a translation of the measurement rather than a consequence of it, and the translation gets done by a person, in their head, at speed, on a Monday.

This is what an ontology is for

Ontology is a heavy word for something plain. It is a written, agreed statement of the things a business measures and acts over: what each one is, what distinguishes one from another, which links between them are allowed to exist, and what evidence has to be present before a link can be asserted.

It is not the schema. A schema says the column holds a string. It is not the semantic layer either, which is where a definition gets enforced when somebody runs a query. The ontology is the thing being enforced.

Three parts of it hold the spine together.

The weakest join is identity

The usual approach is a customer key computed inside whichever source system had the best data: a hash of phone number, falling back to email, falling back to name. It works, and it cannot be audited, corrected or extended, because the logic lives inside a vendor’s product.

The alternative costs one more table. A party is the resolved person. Identity rows are the evidence for that resolution — an identifier type, a hashed value, the source it came from and a strength. Email, phone and loyalty number are strong, and two parties sharing one get merged. A device ID, a session, a click ID are weak: they attach to a party and never cause a merge.

The distinction matters because the weak identifiers are the ones that decay. Cookies expire, click IDs get stripped, a tablet gets handed to somebody else. Held as evidence with a strength rather than as keys, the graph gets thinner as they go, instead of merging two people who once shared an iPad.

Consent sits on the person, because the action does

Consent should be an attribute of the party, scoped by purpose — marketing, measurement — carrying the source it came from and the time it was captured.

Model it per source instead and you have as many consent regimes as you have connectors, no single answer to whether you were permitted to use a record, and no way to honour a withdrawal across systems. That is a legal problem. It is also an operational one, because the far end of the spine is an action aimed at a person, and a stack that can measure someone it is not allowed to contact has a fault built into it.

Every link carries how it was made

The join between an exposure and a transaction needs a field recording how the join was made: identity match, booking reference, geo, modelled.

That one field does two jobs. It lets you report which parts of the spine were observed and which were estimated, which is the honest form of an attribution number. And it lets two methods run side by side over the same data, so when you change method you can see how much of the movement was the world and how much was the arithmetic.

Why now

The identifiers keep getting worse. Every year less of the spine can rest on a technical identifier and more of it has to rest on a person the business already knows, which turns identity resolution from an optimisation into a requirement.

The legal question keeps getting sharper, and being able to state why you were allowed to use a record is an entity question before it is a policy one.

And the interface changed. When someone asks a system a question in English and gets an answer back, the correctness of that answer rests entirely on whether the words map to defined things. “How many new customers did the spring campaign bring in?” cannot be answered unless customer, new and brought in are each written down somewhere with one meaning. Language models made the interface trivial and made the ontology load-bearing. That is the part we did not see coming.

We got this wrong ourselves

We are not neutral here. We build this for a living, and the clearest example we have is our own.

ANAMA was built for restaurants, because that is where the first customers were. So the core customer entity carries covers completed, no-shows, party size and shift, and every attribution table downstream is denominated in reservations and covers. All correct, for a restaurant.

Then you go to add a gym. A gym has no covers and no shifts. One industry’s vocabulary had ended up in the middle of the model instead of at the edge of it, so adding a second industry meant a rebuild rather than a configuration change.

The test we hold the model to now is that adding a whole new industry should be one configuration row and one connector, touching no core entity. We have written that down as an architecture decision and we are working through it, identity first. Not finished.