CTV for Subscription Apps: Measuring a Conversion That Lands 30 Days Later

Boaz Cohen
September 18, 2026
Comparte este artículo:
Portada
Contenido
Descubre lo que Edge226 puede hacer por ti
Solicitar una demostración

A subscription app running CTV has a harder measurement problem than anyone else buying the channel. The thing you actually care about, a paid subscriber who renews, happens weeks after the impression. Most of the plumbing between a television ad and an app event was built for something that happens in hours.

That gap is where subscription CTV tests fail. Not in the market, and usually not in the creative. In the window arithmetic nobody checked before the budget went out.

Here is how to plan one that produces a readable answer.

How a TV impression reaches a subscription

Start here, because every number downstream inherits this.

A television and a phone share no advertising identifier. There is no click carrying a device ID, and nothing in the ad hands the phone a token to redeem later. What connects them is the household IP address, matched within a lookback window after the impression. That window commonly defaults to 24 hours and typically tops out around three days.

Three consequences, and all three land harder on a subscription app than on a game:

The match is to a home, not a person. Several installs from one household can be credited to one impression. The subscriber you are about to measure may not be the person who saw the ad.

Probabilistic impression matches rank low in the attribution waterfall, below clicks and below verified device matches. When a CTV match loses, the install does not disappear. It gets credited elsewhere, most often to organic. Our post on why CTV installs arrive late and land in organic traces the decay hour by hour, including what DHCP renewal and carrier-grade NAT do to the match rate.

On iOS, Apple's frameworks are not in this path at all. AdAttributionKit runs on iOS and Mac Catalyst and covers in-app ads served inside the App Store and alternative marketplaces. There is no tvOS support and no mechanism for a television impression to originate an Apple-signed attribution. That does not mean CTV is unmeasurable on iOS. It means the measurement runs entirely through probabilistic IP matching outside Apple's frameworks, with all the fragility that implies.

The trial window problem

This is the section that decides whether your test is readable, and it is the one most subscription plans skip.

Two separate windows have to hold, and they fail for different reasons.

Window one, impression to install. Twenty-four hours by default, roughly three days at the ceiling. This is the CTV constraint, and it is tight against a channel whose conversion curve runs long.

Window two, install to paid conversion. Here the answer splits by path, and the split is the whole argument.

Through your MMP's SDK, trial length doesn't matter much. Once an install is attributed, later in-app events attach to that user for as long as you keep measuring. A paid conversion on day 8 or day 31 reports normally, with revenue attached.

Through AdAttributionKit or SKAdNetwork, it mostly does not work. The three conversion windows cover days 0 to 2, 3 to 7, and 8 to 35. The fine-grained conversion value is available only in the first postback; windows two and three carry a coarse value with three levels. Postbacks arrive after a random delay of 24 to 48 hours for the first and 24 to 144 hours for the others.

Read that against a 7-day trial. The paid conversion lands on day 8, inside window three, so you get a coarse bucket and no revenue detail, and the postback arrives as late as day 41. Against a 30-day trial, it is worse. A user who installs, browses for six days, then starts the trial converts on day 36, which is past the last window. That conversion is not late. It is permanently invisible on that path.

So the honest statement is this. For CTV specifically, neither Apple framework applies, which leaves a 24-to-72-hour probabilistic IP match as the only link between the television impression and a subscription that converts a month later. If your trial runs longer than a week, design the test as a geo holdout from the start rather than discovering in week six that the per-campaign numbers were never going to arrive.

Map the funnel your product actually has

Build the event plan around your own product rather than a generic template:

  • Install: the user downloads the app and opens it for the first time.
  • Activation: the user completes the first action your product team considers meaningful.
  • Paywall view: the user reaches the offer. This is where most of the drop happens, and most event plans have no event.
  • Trial start: the user begins an eligible trial, where one is offered.
  • Paid conversion: the user makes a first qualifying payment.
  • Renewal: the subscriber pays again at the observation point you set.

Four things to get right that most plans miss.

Opt-in and opt-out trials are not comparable. A trial that requires a payment method up front converts at a completely different rate than one that doesn't. Label which you run, and never compare cohorts across the two.

Cancellng during a trial is its own state. A user who cancels on day 3 but keeps access until day 7 is not the same as a user who reached the end and declined. Decide whether they sit in your denominator before you calculate anything.

Involuntary churn is not churn. Billing retry, grace period, and account hold are payment failures, not decisions. Apple and Google both signal these as distinct events, and folding them into a retention number tells you about card expiry rather than your product.

Apple does not distinguish a trial start from a paid conversion by notification type. A trial start arrives in the same family as any other new subscription, and the conversion arrives as a renewal. You have to read the offer and period fields on the transaction to tell them apart, and if nobody does that, your trial-to-paid rate is measuring something else.

Compare cohorts at the same age

A cohort acquired yesterday has had less time to convert than one acquired last month. Report the observation window next to every conversion number, every time.

Write the formula with its anchor stated, because the anchor changes the answer:

Trial-to-paid = trial starters who paid within N days of trial start ÷ all eligible trial starters in that cohort

Anchoring to install instead of trial start gives a different denominator, because trial start can lag install by days. Pick one, write it down, and exclude trials younger than your window rather than letting immature ones dilute the rate.

Same discipline on cost:

Cost per paid subscriber = spend ÷ paid subscribers, counted the same way every time

Attributed and incremental subscriber counts are different estimands and can diverge in either direction. Never put them in the same column without labeling which is which.

One thing that quietly breaks all of this: refunds arrive asynchronously. The store adjudicates them, not you, and the notifications land days later. Your cohort's paid count is not final at the observation point. That is the maturity argument from the paragraph above, applied to revenue instead of retention, and almost nobody applies it there.

Payback math changes in year two

Agree with your finance team on the revenue basis before comparing channels, and get the store cut right, because a flat 30 percent assumption is wrong on both platforms.

Apple. During a subscriber's first year of service, you receive 70 percent of the subscription price, minus applicable taxes. After a subscriber accumulates one year of paid service, that rises to 85 percent. Two details matter for a payback model: free trials and renewal extensions are excluded from days of paid service, and if a subscription lapses, the clock stops and resumes from the recovery date when renewed within 60 days. Developers in the Small Business Program receive 85 percent from the start.

Google. As of June 30, 2026, auto-renewing subscriptions in the US, UK and EEA carry a 10 percent service fee plus a 5 percent billing fee. The billing fee applies to Google Play Billing and alternative billing systems, but not to external web link transactions. The same structure reaches Australia and Japan on September 30, 2026, South Korea on December 31, 2026, and everywhere else by September 30, 2027.

A twelve-month payback model built on a flat 30 percent understates year-two contribution substantially on iOS, which can be the difference between a channel that clears the threshold and one that does not.

Label modeled lifetime value as a forecast rather than realized cash. A strong early trial rate does not establish long-term retention, and where a cohort is younger than your payback window, report that rather than filling the gap with a model.

Two reporting systems, one join

Subscription truth lives in Apple's App Store Server Notifications and Google's real-time developer notifications. Those are server-to-server, keyed to store transactions, and they carry no advertising dimension at all. Your MMP has the channel dimension but no billing truth.

Joining them is your job, and the join key is your own user identifier, because neither store nor your MMP supplies one that works across both. If that join does not exist before the campaign starts, you will have a channel report and a revenue report that cannot be reconciled, and the test will produce an argument rather than an answer.

Separate the credit question from the growth question

Which touchpoint gets credit is attribution. Report the window and the method alongside the result, because a number produced under a 72-hour window and one produced under a 24-hour window are not the same measurement.

Did the campaign produce subscribers who would not otherwise have subscribed is incrementality, and attribution cannot answer it. A geo holdout can: suppress CTV in matched markets, run it in others, and compare total paid subscriptions with organic included. It never asks which touchpoint deserves credit, so the household match and the organic spillover both stop mattering. Our post on the three things to look at when measuring CTV covers the holdout design and the time-to-install curve.

Size the test from a power calculation on your own paid-conversion volume, not from a number a vendor quotes. The one thing that is fixed in advance is duration: a subscription test has to outlast the trial period plus the conversion lag plus the refund settling window. On iOS, add the measurement tail. If you are reading any postback path, the third conversion window closes 35 days after first launch, and its postback follows up to 144 hours later.

Worth stating plainly: if your decision rule reads the CTV row in a dashboard, you have already decided to turn CTV off. Write it against total paid subscriptions and organic movement instead.

Keep the creative promise aligned with the offer

Show the experience a subscriber actually receives. If the ad implies a free feature and the destination is a hard paywall, the mismatch shows up as a trial-start problem that looks like a media problem.

The store listing matters more on CTV than anywhere else, because the viewer cannot tap. They pick up a phone and search for what they remember seeing. If the icon, name, and first screenshot do not match the ad, that intent goes to whatever the store surfaces instead.

Do not let a creative test turn into a pricing test. If the offer or the onboarding changes mid-flight, log it, because the comparison you thought you were running is no longer the one running.

The test brief

Before launch, write down:

  1. The decision this campaign should inform, and the threshold that settles it.
  2. Target market, app version, and which trial structure is live.
  3. Activation, paywall, trial, payment, refund, and renewal event definitions.
  4. The cohort anchor and the maturity cutoff for every rate you will report.
  5. The attribution window and method, and whether a geo holdout is running.
  6. The revenue basis, agreed with finance, including the store fee tier by cohort age.
  7. The join between store notifications and channel data, confirmed working.
  8. Every other change shipping during the window.

FAQ

Can you attribute CTV to a mobile app install on iOS?

Not through Apple's frameworks. AdAttributionKit supports iOS and Mac Catalyst and covers in-app ads served in the App Store and alternative marketplaces; there is no tvOS path for a television impression. CTV-to-mobile attribution runs on probabilistic household IP matching outside those frameworks, with a lookback window that typically defaults to 24 hours.

Can a 30-day free trial conversion be measured?

Through your MMP's SDK, yes, because in-app events attach to an attributed user well past the trial. Through SKAdNetwork or AdAttributionKit, largely no: the last conversion window closes at day 35 from first launch and carries only a coarse value, so a conversion after a 30-day trial is often outside it entirely. Plan a geo holdout instead.

Why does CTV look weak in the dashboard?

Because probabilistic impression matches rank low in the attribution waterfall and the lookback window is short relative to how CTV converts. The subscriptions still happen. They get credited to another channel or logged as organic.

What does Apple actually take on a subscription?

Thirty percent during a subscriber's first year of service, then 15 percent after a subscriber accumulates one year of paid service. Free trials do not count toward days of paid service. Small Business Program members pay 15 percent from the start.

How long should a subscription CTV test run?

Longer than the flight. The window has to cover the trial period plus the conversion lag plus refund settling, and on iOS any postback-based read adds a tail running to day 35 plus a delay of up to 144 hours. Size the spend from a power calculation on your own conversion volume.

Explore Edge226's CTV offering, or book a demo to talk through a measurement plan for your app. For a worked example in a different vertical, our post on running a CTV test you can actually read covers the same mechanics for games.

Mantente al día con el último rendimiento

Suscríbete a nuestro boletín

¡Gracias! ¡Hemos recibido tu envío!
¡Vaya! Algo salió mal al enviar el formulario.