DTC, ecommerce, SaaS & agencies

Measurement that survived the loss of the cookie

Bayesian marketing-mix modelling, server-side conversion APIs, and consent-aware identity stitching. Mix models calibrated by geo-lift experiments rather than asserted, signal recovered at the edge, and identity resolved in a clean room your legal team can look at.

2

methods that check each other: mix models and geo experiments

6

measurement systems we build

0

events forwarded without a consent check at the router

Darts in a dartboard
What we ship

Measurement, causal inference and identity

Built for the world after the third-party cookie and app tracking consent.

01

Bayesian marketing-mix modelling

Robyn, Meridian or LightweightMMM with adstock and saturation curves, scenario simulation, and a weekly refit — so the model tracks the market rather than describing last quarter.

02

Server-side conversion APIs

Meta, TikTok and Google Enhanced Conversions through server-side tag management, targeting a high event-match quality, because the signal you recover is only as good as the identity you can attach to it.

03

Geo-lift incrementality

Synthetic-control geo experiments that isolate causal lift per channel — and whose output calibrates the mix model's priors, so the two methods correct each other instead of disagreeing in a meeting.

04

Lifetime value by cohort and channel

Bayesian survival models plus an expansion-revenue model, giving lifetime value by acquisition cohort rather than a blended average that hides which channel actually pays.

05

Creative fatigue detection

Bayesian change-point detection on click and conversion rates, frequency caps and saturation-curve inflection, with automatic rotation and bid pushback before performance collapses.

06

Consent-aware identity stitching

Consent strings and browser signals honoured at the event router, resolution through the major identity layers, and the graph kept in your own warehouse.

Why two methods, not one

The experiment calibrates the model

A mix model that nothing calibrates will confidently tell you whatever its priors already believed.

That is why the geo experiments are not an optional extra: their measured lift becomes the prior the mix model is fitted against, so the two methods constrain each other instead of producing two numbers for a meeting to argue about. It is also the honest answer to why attribution dashboards and finance have disagreed for years.

The plumbing

Consent-aware and auditable, by construction

Consent gating belongs at the event router, not in a policy document. If it is enforced anywhere else, somebody will eventually forward an event they should not have.

Event-stream pipelines

Collection landing into your warehouse with transformation models for sessionisation, attribution windows, and conversion deduplication across pixel and server-side events — because counting the same conversion twice is the most common attribution bug there is.

Server-side tagging at the edge

A server-side container or an edge worker for low-latency event routing, with consent strings and browser privacy signals gated before anything is forwarded.

Customer-data-platform integration

Your CDP wired to the warehouse with reverse-ETL, and audience activation out to the ad platforms and connected TV — so the segment marketing defines is the segment that actually gets targeted.

Clean-room first-party joins

Advertiser-publisher joins on hashed identifiers inside a clean room, with differential-privacy noise on outputs where the agreement requires it.

Said before you ask

Where this sits in our record

This is capability, not a delivered engagement. We have not shipped a marketing measurement stack for a client yet.

What is real is the engineering underneath: the modelling, the event pipelines, the identity work and the warehouse joins are all things we run in other sectors, and our own price-intelligence product reads and models retail data at scale every day. You should know which is which before you buy, not after — and the honest offer here is a scoped sprint against your own data rather than a reference call we cannot give you.

Two fields meeting, seen from above

Engineering questions

Asked by growth and data teams

A blend, not a single tool. Layer 1: server-side conversion APIs (Meta CAPI, TikTok Events API, Google Enhanced Conversions through server-side GTM) to recover the deterministic signal iOS ATT and ITP killed in the browser. Layer 2: a Bayesian MMM (Meta Robyn or Google Meridian) for top-down channel allocation, refit weekly. Layer 3: GeoLift-style geo-incrementality tests to calibrate the MMM priors and isolate true lift from correlation. Layer 4: clean-room joins (AWS Clean Rooms, Snowflake Data Clean Room, Habu, or Google PAIR) for advertiser-publisher matching without sharing PII. Privacy Sandbox APIs (Attribution Reporting, Protected Audience) slot in for in-browser noisy attribution as Chrome rolls them out. MTA stays as a directional supporting signal where consent allows - never the primary truth.

Robyn is faster to stand up, uses Nevergrad multi-objective optimisation, and has stronger out-of-the-box adstock and saturation transforms (Hill, Weibull). Meridian, released as Google open source, is Bayesian-native, models geo hierarchies cleanly, and incorporates reach-and-frequency curves natively which matters for video and CTV. Selection criteria we use: data granularity (geo or national), channels in play (Meridian is better for YouTube / video heavy mixes, Robyn for retail-media-heavy DTC), team R vs Python skills, and whether you need to enforce informative priors from past GeoLift experiments. For a DTC or B2C ecom mix with national daily data and 8-15 channels, Robyn ships faster. For brand mixes with geo data and heavy video, Meridian wins.

Browser-side pixels lose a large share of iOS conversion signal to ATT opt-out and Safari ITP. Server-side CAPI sends events directly from your servers to Meta / TikTok / Google with hashed first-party identifiers (email, phone, click ID - fbclid, ttclid, gclid). The platform deduplicates against any pixel events that did fire. The recovery is measurable rather than taken on faith: Meta's own Event Match Quality score tells you how well your server events are matching, on your own traffic. Implementation involves event schema design, an EMQ audit, consent-mode gating for EEA traffic under TCF v2.2, and a server-side GTM container as the orchestration layer, with QA against the Meta Test Events tool.

GeoLift uses synthetic control: you turn a channel off in matched test geos and the algorithm builds a counterfactual from donor geos. Output is a clean iCAC and incremental ROAS by channel. We use it to calibrate MMM priors - the MMM gives you allocations every week, but it is correlational; incrementality is causal. Typical cadence: 4-6 GeoLift experiments per year on your top spending channels (Meta, Google, TikTok, CTV, paid podcast). Each runs 4-8 weeks. We then use the lift estimates as informative Bayesian priors in the next Robyn or Meridian refit. This is how you stop overspending on channels that look great in last-click but are only fractionally incremental.

Yes - this is the load-bearing piece most teams get wrong. Architecture: a consent-management platform (OneTrust, Didomi, Sourcepoint) emits a TC string per pageview; an event router (server-side GTM or a custom edge worker on Cloudflare / Fastly) reads the TC string plus the GPC header and gates which downstream destinations fire. Identity graph joins happen in your warehouse (Snowflake / BigQuery / Databricks), keyed on a consented identifier (hashed email, LiveRamp RampID, UID2 token). For users who refused consent, you keep aggregate counts only - no row-level joins. Output is a graph where 100% of edges are auditable back to a TCF purpose and a GPC signal. We document this for the DPO.

Different problems. LiveRamp Authenticated Traffic Solution (ATS) is publisher-side authenticated identity - it lets publishers send a RampID into the bid stream for logged-in users, and is the broadest of any non-Google authenticated solution. The Trade Desk Unified ID 2.0 (UID2) is an open-source deterministic ID derived from hashed email, designed for the open programmatic ecosystem outside Google. If you are an advertiser running heavily through The Trade Desk and the open exchange, UID2 has better reach there. If you need broad publisher footprint including premium publishers using LiveRamp, ATS wins. In practice we implement both - they coexist, the cost is implementing two encryption flows, and the addressable-reach lift from running them in parallel is measurable on your own traffic versus either alone.

Two-stage Bayesian survival model. Stage 1: a Weibull or Cox proportional-hazards churn model gives you per-account survival probability over months 1 to 36, conditioned on plan tier, seat count at signup, ICP fit score, and onboarding-event covariates (time-to-first-value, integration-connected). Stage 2: an expansion-revenue model (zero-inflated negative binomial works well) layers in upsell and seat-expansion. Multiply through and you get expected LTV per account. Then bucket by acquisition channel - paid search brand, paid search non-brand, paid social, content / SEO, outbound SDR, partner - and you get LTV per channel cohort. The gap between best and worst channels is computed from your own cohorts, and it almost never matches first-touch attribution. This is what drives reallocation away from channels that look efficient on CAC but deliver low-LTV cohorts.

Time-series anomaly detection per creative-ad-set pair, watching CTR, post-click CVR, and frequency. Three signals: (1) a Bayesian change-point detector on CTR (PyMC or Ruptures) catches structural breaks at 5-7 days of impression exposure; (2) frequency cap - when average frequency per unique reach exceeds 3-4 for response campaigns, fatigue is imminent; (3) a saturation curve fit per creative - once daily impressions exceed the inflection point, marginal CPA explodes. Output is an automated rotation queue that swaps the bottom-decile creatives, with refresh suggestions piped from a generative-creative pipeline (Midjourney / Runway for variants, LLM for copy variants), and bid adjustments pushed back into Meta and Google APIs. The CPA effect of disciplined rotation is measured against your own pre-rotation baseline, not quoted as a promised percentage.

Each build is scoped as a fixed-deliverable sprint, not a retainer. A Bayesian MMM build (Robyn or Meridian) includes data wrangling, model fit, holdout validation, and a Streamlit / Looker scenario simulator. Server-side CAPI covers Meta + TikTok + Google through server-side GTM, plus EMQ tuning and consent-mode wiring. A clean-room first-party identity stitch is paced mostly by the publisher partner's onboarding speed. A GeoLift incrementality cycle is bounded by the experiment itself - test design, market matching, the run, analysis. An LTV cohort × channel model and creative-fatigue detection with API pushback are each self-contained builds. We put a date on each at scoping, against your actual stack - not from a generic template.

Bring the attribution nobody trusts

Scoped as fixed-deliverable sprints, not retainers. Bring the dashboard finance disagrees with and we will tell you which of the two is closer to the truth — and what it would take to stop having that argument.
Our second practice

This is our AI engineering practice

It is real work and it is where our four products came from. But what Cognilium leads with is narrower: optimization apps that run in tandem with Microsoft Dynamics 365, computing the decisions the ERP records but does not derive — the optimal price, the optimal pick path, the optimal stock level. See the optimization apps · How we build inside the ERP.