Know what happened. Trust what happens next.
When your tracking, reporting and revenue disagree, the answer usually sits across several systems. I help teams trace the measurement path, repair the implementation and make the resulting data useful for decisions and activation.
A measurement audit with a route to implementation
Start with one priority journey or a bounded part of the tracking estate. We agree the systems, access, deliverables and fee before the work begins; a wider migration is a separate decision.
Map the measurement path
Inventory the relevant events, tags, integrations and destinations. Establish each important event’s source, schema, owner and intended use.
Check it against the product
Compare the tracking plan with real customer journeys. Trace missing events, duplicates, identity breaks and disagreements with transaction records.
Implement and verify the repair
Agree the changes, implement them in the relevant application or platform, and validate with engineering and analytics colleagues before release.
Leave it maintainable
Hand over the tracking specification, QA evidence, ownership map and release checks, with the remaining limitations made explicit.
Background and approach
Analytics is where I learned to build software
At Vouchercloud, I managed paid search across fifteen countries. Following a customer from an advert to a retailer and back through an affiliate network required reporting that did not exist, so I started building it. That experience still shapes my approach: a report is only as useful as the events, identities, integrations and commercial records underneath it.
MarTech is the operational side of the same work. It includes the systems that use what we know about a customer: advertising audiences, consent, CRM, messaging, experiments and lifecycle journeys. Most of my work has been around the join between measurement and action.
Why it matters
When the measurement is sound, marketing, product, engineering and commercial teams can work from the same account of what is happening. When it is not, money goes back into the wrong campaigns, product changes are judged against unreliable events and reported revenue cannot be reconciled with the systems where the transactions actually happened.
I do not expect every system to produce exactly the same total. They often use different identities, attribution windows and definitions. I do expect somebody to understand the difference. A plausible number can be more dangerous than an obvious failure because an empty report gets investigated, while a dashboard that quietly counts the same action twice can shape decisions for months.
Why I like the work
I enjoy the investigative part. If two totals disagree, there is a reason. An event began somewhere, passed through a set of rules and ended up in a table or report. Following that path through browser requests, application code, APIs and databases until the difference makes sense is satisfying work.
I also like that analytics sits between several kinds of people. A stakeholder can describe the decision they are struggling with, an analyst can describe the data they need and an engineer can describe the product that has to produce it. I am comfortable translating between all three and then doing the implementation work myself.
PostHog: practice and teaching
PostHog is now a large part of how I work with product analytics. I use it in my own products, and I wrote and run Measure, Keep, and Grow, Hogsend's course on product-led growth and product analytics using PostHog.
The course contains fifteen chapters and 146 lessons. It starts with why a product should measure anything at all, then works through PostHog setup, events and identity, a shared tracking plan, funnels, retention, session replay, dashboards, feature flags, experiments, lifecycle messaging, paid acquisition, holdouts, incrementality and reporting.
Writing it forced me to explain the judgements behind an implementation, not only which buttons to press. That includes why payment events should come from the server, how to QA instrumentation like code, when PostHog is the wrong tool, how a holdout separates activity from incremental effect and how to report only what the data can support.
The problems I tend to be useful for
A team usually calls when it knows something cannot be trusted, but the fault could be in the tracking plan, the application, the tag manager, the data pipeline or the report.
- The same customer action is sent from application code and a tag manager, so it is counted twice.
- The tracking specification says one thing, but the live product has changed around it.
- Events share a name but carry different meanings or properties across web, mobile and backend systems.
- Customer identity breaks between acquisition, product use, payment, CRM and lifecycle tools.
- The advertising platform, analytics property, billing system and affiliate network report different versions of revenue.
- Several teams own individual tools, but nobody owns the path between them.
- A large amount of data is collected without a clear decision, report or action attached to it.
Where I can help
If the measurement system already exists, I can work out what it actually does and where it disagrees with the intended design. If new measurement is needed, I can define it, put it into the product, test it and monitor the release. I can then help connect dependable data to reporting, experimentation or lifecycle work.
Two examples in more detail
GrowthRunner
Analytics implementation and QA
GrowthRunner carried out detailed analytics audits for clients. Each audit meant walking through customer journeys, checking what appeared in the dataLayer and comparing the live tracking with the specification. Much of that work was repetitive, but it still required enough attention that it did not become quicker simply through familiarity.
I built a Chrome DevTools extension that recorded the journey and watched the dataLayer while it happened. It could preserve the steps an auditor took and flag missing or incorrect tracking, which turned part of the audit into something repeatable rather than a trail of screenshots and notes.
I delivered the first version in ten days and the finished build in two weeks. It reduced the time needed for ten audits to roughly the time previously needed for one, and GrowthRunner used it for clients including Wagamama and Net-a-Porter.
Portfolio entrygetBenson
Real-time attribution and revenue analytics
getBenson detected browser extensions inserting coupon codes into ecommerce checkouts. Detecting the extension was only the first part of the product. To show a retailer what the interference was worth, we had to recognise the session, observe the intervention and connect it to the resulting order and revenue.
I rebuilt the original MVP as a typed and tested production system. A Postgres attribution store held the session and intervention data, while a GraphQL API made the resulting revenue analysis available in real time. The code ran inside checkout journeys, so the measurement had to be fast enough not to become another source of lost revenue.
The system operated across 25 million monthly sessions and more than 500 stores. I led technical sales and onboarding for more than 80 ecommerce brands, operated the product for nearly three years and then sold the business.
Portfolio entryRelated work
Tools and systems
I have worked with Google Tag Manager, Google Analytics and GA4, PostHog, Meta, Segment-style data layers, Firebase, BigQuery, PostgreSQL, DuckDB, Timescale, Redis, SQL, APIs and tracking written directly into React and mobile applications. Depending on the system, one may create the event, another may transform it and a third may be where the business finally sees the outcome.
That is the thread running through the work. Sometimes I arrive through marketing, sometimes through product or engineering, but I usually end up doing the same thing: working out what the business needs to know, following the data through the real system and making the answer dependable enough to use.


