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

Measurement, causal inference and identity
Built for the world after the third-party cookie and app tracking consent.
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.
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.
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.
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.
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.
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.
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.
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.
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.
The systems behind the measurement
Data pipelines at scale
Our own price-intelligence product: millions of URLs a day, validated before indexing and served by API — the same discipline the event layer needs.
See how it is built →Knowledge graphs
Identity resolution across sources, which is the same problem as stitching a customer across devices and consent states.
See how it is built →Outreach and intent
Where measurement meets activation: enrichment decides who, intent decides when, and everything lands back in the CRM.
See how it is built →
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
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.







