Subscription apps

Know which campaigns bring paying subscribers

Trials, subscriptions and renewals tied back to their source — with free receipt validation for the App Store and Google Play, SKAN revenue buckets and cohort revenue in your reporting currency.

AppVero SKAN conversion value schema editor with revenue buckets and coarse value rules.

What gets in the way

  1. 01

    Installs aren’t the goal

    Trials start on day 0, but paid conversions and renewals come days or weeks later.

  2. 02

    Reported revenue isn’t validated revenue

    Purchase events can be faked or replayed. Revenue you optimise on should be checked first.

  3. 03

    iOS signal is aggregated

    Without ATT consent, SKAN and AdAttributionKit conversion values are what you get — so their design matters.

Scenario

From trial to renewal

An illustrative walk-through for a subscription app sold through both app stores.

  1. attribution

    Install attributed

    Apple Ads through AdServices, or the Play referrer for an Android campaign link.

  2. SKAN

    Trial starts

    av_trial_start is tracked — and sets a SKAN flag bit on device if it’s in your schema.

  3. receipt validation

    Subscription purchased

    trackPurchase() sends the StoreKit 2 transaction or Play purchase; AppVero verifies it and counts it as validated revenue.

  4. S2S events

    Renewals from your backend

    Forward renewals you already receive from the stores with the S2S events API, so they join the same install.

  5. cohorts

    Cohorts decide budgets

    Cumulative revenue per install on day 0, 1, 3, 7, 14 and 30 — by media source, in your currency.

Event plan

A starting event plan

Standard av_ events where they fit, your own names where they don’t. Events from the SDK and the S2S API both inherit the install’s attribution.

EventWhenSent from
av_trial_startFree trial startedSDK
av_purchaseSubscription purchased — sent by trackPurchase() with the receipt, validated server-sideSDK
subscription_renewedRenewal confirmed by the storeS2S
av_registrationAccount createdSDK
iOS — StoreKit 2 purchaseSwift
let result = try await product.purchase()
if case .success(let verification) = result {
    AppVero.shared.trackPurchase(verification)   // validated server-side from the JWS
    if case .verified(let transaction) = verification { await transaction.finish() }
}
Questions

Good to know

Does receipt validation cost extra?

No. Receipts are verified cryptographically without calling store APIs, so there are no quotas or fees.

How do renewals get attributed?

Send renewal events from your backend with the S2S events API, identified by install ID or customer user ID; they inherit the install’s attribution.

See your own data in AppVero

Bring a campaign, a link or an app build. We’ll walk through attribution, deep links and raw data with your team, on data that looks like yours.