Causal IQ · Sr. Account Ops Manager · Built for Thomas J. Henry

CTV Measurement Framework

How layering CTV with Display reduced time-to-signup by 5-7 days for a single client - and justified $500K+ in additional CTV budget. The codebase was handed off to Causal IQ at my departure for continued use across the broader client book.

5-7 days
Faster Time-to-Signup
CTV + Display vs. either alone
$500K+
CTV Budget Justified
$700K → $1.2M monthly
Handed Off
Codebase to Causal IQ
For continued use post-departure
Python
Built From Scratch
Pandas · custom attribution

Does CTV actually accelerate conversion - or steal credit from Display?

A client was running Display-only campaigns and considering adding CTV. The question was simple to ask and hard to answer: how long does it take a typical user to convert when they are exposed to (a) Display only, (b) CTV only, or (c) CTV + Display layered together?

And the harder follow-up: does CTV actually accelerate conversion, or just steal credit from Display in last-click attribution? Off-the-shelf measurement tools could not answer that for a programmatic-direct law firm campaign. Last-click reporting credited Display by default because CTV is unclickable. The answer had to be built.

Cohort the users. Measure time-to-signup. Verify against conversion data.

A custom Python framework that bucketed users by first exposure type, measured time-to-signup for each cohort, and closed the loop against the client's first-party conversion data so every conversion could be traced back to an ad exposure.

01

Bucket users by first exposure type

Three cohorts: Display-only, CTV-only, and CTV + Display layered. Cohort assignment was based on the first ad served, not the last - which is where most attribution tools fail.

02

Measure time-to-signup for each cohort

From the first impression served to the conversion event. The signup itself was the dependent variable - not impressions, not clicks. What mattered was how many days passed before a real customer outcome.

03

Control for audience overlap, frequency, and recency

Same audience targeting across all three cohorts. Frequency-capped consistently. Recency windows aligned. Without these controls, the comparison would be apples-to-oranges and the finding would not be defensible.

04

Close the loop with first-party conversion data

Client-provided log-level conversion data was joined back to ad exposure logs. Every signup was verified against the client's actual conversion records - not an attribution pixel guess. This is the part most agencies skip.

05

Generate weekly cohort reports for the AM team

Outputs were formatted for the Account Manager to hand to the client without a data scientist in the loop. Built in Python with Pandas, custom attribution logic, and DSP API integrations.

Three cohorts. One question.

Bars below represent relative time-to-signup. Shorter is better. The layered cohort beat both single-channel cohorts by a meaningful margin.

Cohort A
Display-only
Baseline
Single-channel exposure. Used as the reference point for all comparisons.
Cohort B
CTV-only
Longer
Longer consideration cycle than Display-only. CTV alone is awareness-heavy and slower to convert.
Cohort C
CTV + Display layered
5-7 days faster
Shorter time-to-signup than either channel alone. The combination compounded - it did not just average.

The combination accelerated conversion meaningfully.

CTV-only had a longer time-to-signup than Display-only - a longer consideration cycle, as you would expect from a non-clickable awareness channel.

But CTV + Display together had 5-7 days shorter time-to-signup than either channel alone. The two channels were not just additive in reach - they were compounding in conversion velocity. CTV primed the audience, Display closed it, and the combination shortened the funnel by nearly a full week.

5-7 days shorter
When CTV was layered with Display, the average user signed up 5-7 days sooner than they did under either channel alone. That is the kind of measurement most ad ops teams cannot produce - and it justified the budget decision below.

The number that moved a budget.

The anchor client expanded their CTV budget once the cohort report cleared the question of whether CTV was actually moving the needle. The framework was then generalized to apply across the broader Causal IQ client book.

$700K
Monthly · Before
$1.2M
Monthly · After
+$500K / month
Thomas J. Henry - the legal anchor client - expanded their CTV budget from $700K to $1.2M monthly based on the cohort analysis. That is $500K+ in incremental CTV spend per month tied directly to a measurement framework built for one client and reused across the book.
5-7 days faster time-to-signup $700K → $1.2M monthly budget Generalized across the client book Codebase handed off at departure

Most agencies cannot answer this with quantitative rigor.

Cross-channel measurement is hard. The "does CTV accelerate conversion" question gets asked at every quarterly business review - and most teams answer it with a story instead of a number.

Off-the-shelf attribution does not solve this

Last-click reporting credits Display by default because CTV is unclickable. MMM is too slow and too aggregate to answer at the campaign level. Lift studies require a holdout most clients will not budget for.

This is what Innovid, IAS, DoubleVerify, and LiveRamp sell as products

Cross-channel attribution and incrementality measurement are paid SaaS categories. I built a focused version of one in Python for a single anchor client - and then made it portable across the rest of the book.

It persisted after I left

I handed the codebase to Causal IQ at my departure. The framework continues to be used on the broader client book. That is the kind of operator most teams need: builds the tool, runs the business with it, leaves it behind in working condition.

Built once. Reused across accounts.

The framework was originally scoped for a single legal client. The methodology generalized: any account with sufficient log-level data and a closed-loop conversion event could be run through the same cohort + time-to-conversion pipeline.

The methodology is portable. The codebase is not mine.

I no longer own the codebase - it was handed off to Causal IQ. The methodology, however, is fully portable. Anyone with log-level DSP exports and a closed-loop conversion event can apply the same cohort + time-to-signup analysis to their own book.

Open Methodology, Handed-off Codebase
The framework is documented as part of my portfolio. The Python implementation lives at Causal IQ and continues to be used on the broader client book. If you want to apply the same approach internally - bucket by first exposure, measure time-to-conversion, verify against client conversion data, generate cohort deltas - that is a repeatable pattern, not a proprietary tool.

What it was built on.

A focused Python stack. No managed attribution vendor in the loop - just log-level data, Pandas, and a closed-loop verification path against the client's first-party conversion data.

Language & Data

Python Pandas NumPy

Attribution Layer

Custom cohorting Time-to-conversion Device-graph joins

DSP Integrations

DV360 API The Trade Desk API CTV exchange logs

Closed-Loop Verification

Client conversion logs Conversion joins Weekly cohort reports

More from the portfolio.