Three platforms measure the same dollar three different ways. I built the common ruler.
RetailNorm normalizes cross-platform retail media data to one declared attribution standard, so mid-size agencies can compare what platforms designed to be incomparable. Founder-level ownership: research, validation, service design, interface, growth. Solo, AI-augmented build: validated concept to paying-user product in weeks.
Every platform grades its own homework. Agencies compare the grades.
Amazon Ads reports ROAS on a 14-day last-click window. Walmart Connect uses 30-day multi-touch. Criteo uses 7-day first-click. Each number is internally correct and externally meaningless: the measurement system changes with the party being measured, and the party being measured chose the system.
Mid-size agencies sit downstream of this with no tooling. Enterprise suites that solve it start at $3–10K/month; their real alternative is a planner, Excel, and a personal macro nobody else trusts. Budget decisions worth hundreds of thousands of dollars flow through that macro every Monday.
Scope: Full product (research to production)
Users: Mid-size media agencies
Work: Research, service design, IA, interface, growth, AI execution
A measurement problem, misdiagnosed as a workflow problem.
Everyone downstream treated this as an efficiency problem: planners just needed to be faster in Excel. That misdiagnosis is why it persisted. You cannot spreadsheet your way out of three incompatible attribution systems; the comparison itself is invalid before the first formula runs.
Framing it as a measurement-standards problem changed what needed to be built. Not a faster report generator: a normalization engine with one declared standard, and enough transparency that agencies would trust numbers that are consistently lower than the ones platforms hand them.
The constraint set was unusual and shaped everything: solo operator, no engineering team, mid-size customers priced out of enterprise tooling. Every architectural decision had to be maintainable by one person, which turned architecture into a design decision rather than an engineering detail.
Enterprise tools: $3K-10K/mo. Mid-size agencies: priced out. Their alternative: Excel. RetailNorm sits in the gap nobody was serving.
Agencies don’t buy tools. They buy deliverables.
Concierge validation, manually delivering normalized reports before any product existed, surfaced it: agencies never asked about the dashboard. They asked when the next PDF was coming. The report is the unit of value; the interface is how the report gets made. Starting with the dashboard would have meant building the wrong product with full confidence.
The second insight is less comfortable: a normalizer that only ever outputs lower numbers is, commercially, a bad-news machine. It survives only if it can justify itself. That made explanation infrastructure, confidence scores, data flags and an auditable technical view, first-class product rather than documentation.
What I built, and the order I refused to change.
1. A normalization engine with one declared standard
Upload CSVs from any platform, get comparable ROAS in seconds, normalized to 7-day last-click: deliberately the strictest of the three. Every normalized number lands lower than what agencies are used to seeing. That is not a side effect to soften; the gap between reported and normalized is the product’s clearest proof of value, and explaining it is the strongest trust moment in the entire experience.
2. One engine, two cognitive loads
Directors and planners need the same truth at different depths. The executive view gives three numbers and one plain-language insight; the technical view exposes decay parameters, z-scores and corrections, auditable line by line. Same engine, same confidence score in both: trust is never view-dependent.
3. Uncertainty as a visible property
Every analysis carries its confidence and its flags: “71%, 2 flags.” The counterintuitive bet of the product, showing imperfection to build credibility, and the one users cite most. Polished certainty is what the platforms sell. This is the alternative.
4. The PDF as the retention mechanism
Agencies judge the product by the artifact that reaches their client. If it looks like an Excel export, they rebuild it in PowerPoint and the tool becomes a data source. The report template got institutional-grade typography and structure because report quality, not feature depth, is what brings an agency back next Monday.
This PDF is not a feature. It is the reason agencies come back every Monday.
Deliberately simple. The architecture is the feature.
- 3 numbers, no jargon
- one plain-language insight
- the answer, not the math
- decay parameters per platform
- z-scores and applied corrections
- the math, auditable line by line
What trade-offs did I make?
Every decision involved choosing between conventional wisdom and what the research actually showed:
| Decision | Chosen | Rejected | Why |
|---|---|---|---|
| Normalization baseline | 7-day last-click (strictest) | 14-day (Amazon default) | Strictest standard means every number drops, which forces the “why is this lower?” conversation: the moment the product earns trust or dies |
| Uncertainty display | Visible confidence scores (71%) | Hidden/clean 100% | Transparent imperfection more credible than polished certainty |
| Architecture | Single HTML file, no framework | React + microservices | One maintainer. A fix ships to production in 30 seconds. Every added layer is a liability I’d carry alone: architecture chosen as a design constraint, not a stack preference |
| Data input | CSV upload | API integrations | OAuth, credentials, rate limits would triple scope. CSV takes 15 seconds. APIs are v2 |
Comparability, priced for the agencies Excel was failing.
What RetailNorm is not: an attribution truth machine. No tool can recover what the platforms don’t expose. What it does is narrower and more defensible: one consistent ruler, applied identically to every platform, with its error bars showing. Agencies don’t need perfect attribution to allocate budget well. They need numbers that are wrong in the same way everywhere.