Linkrunner for Subscription apps

Find the campaigns that bring paying subscribers

Connect every campaign to trial starts, first payments, renewals and refunds. RevenueCat, store billing and web checkout revenue land on the attributed user, so ROAS reflects money collected, not trials started.

Learning, kids, dating and wellness teams measure installs to first payment with Linkrunner

Customers include Stimuler, Lingopanda, Matiks, Omli Kids, Kulfi, Kine, CycleBae.

StimulerLingopandaMatiksOmli KidsKulfiKineCycleBae

Optimise on the first payment, not the trial

The value event is FIRST_PAYMENT. A trial costs you nothing to give away and many trials never convert, so a campaign that wins on trials can still lose money. FIRST_PAYMENT always means a real paid transaction, whether from a paid first purchase or a converted trial, while trial starts remain a useful early signal because they arrive in the same session.

  1. Install
  2. 1TRIAL_STARTEDSame session to day 1Fastest intent signal; carries no revenue, so it never inflates ROAS
  3. 2TRIAL_CANCELLEDDay 0 to end of trialEarly warning that a campaign's trials will not convert
  4. Optimise on thisFIRST_PAYMENTDay 0 for paid starts; after the trial (commonly day 3 or day 7) for trial conversionsThe first real charge; the event that pays back acquisition cost
  5. 4SUBSCRIPTION_RENEWEDAround day 30 to 37 for a monthly plan; day 365 or later for annualProves the subscriber stayed past the first period
  6. 5SUBSCRIPTION_REFUNDEDAny time after a paymentMoney you thought you had collected; some campaigns refund more than others
Challenges

Why subscription attribution breaks in standard setups

A trial start is not revenue

Linkrunner keeps TRIAL_STARTED, which carries no revenue, apart from FIRST_PAYMENT. You can let networks learn from trial starts while ROAS counts only money collected, so a campaign full of trials that never convert cannot look profitable.

See how RevenueCat events map →
RevenueCat eventLinkrunner revenue typeStatus
INITIAL_PURCHASE (trial)TRIAL_STARTEDNo revenue
INITIAL_PURCHASE (paid)FIRST_PAYMENTCompleted
RENEWAL (trial conversion)FIRST_PAYMENTCompleted
RENEWALSUBSCRIPTION_RENEWEDCompleted
REFUNDSUBSCRIPTION_REFUNDEDCancelled
BILLING_ISSUESUBSCRIPTION_BILLING_ISSUEFailed
CANCELLATION (trial)TRIAL_CANCELLEDCancelled

Monthly renewals land just after the D30 window

With a 7-day trial and a monthly plan, the first charge lands around day 7 and the first renewal around day 37, outside D30 ROAS. It still attaches to the attributed user and shows in cohorts, the Users tab, webhooks and exports.

See how ROAS windows work →
diwali_prospecting_inSpend $8,420
EventCost per event
  • Install4,210
    $2.00$8,420 ÷ 4,210
  • Sign-up1,684
    $5.00$8,420 ÷ 1,684
  • Purchase421
    $20.00$8,420 ÷ 421
D7 revenue $8,840D7 ROAS 1.05x

Revenue arrives from more than one billing route

App Store, Google Play and web checkout each report payments differently, and the same charge can arrive twice if two sources send it. Pick one source per transaction: RevenueCat, the SDK's capturePayment, or the server API, which also carries payments from other billing tools and web checkouts. App payments are deduplicated by payment ID.

Read the revenue tracking API docs →
App SDKReact Native
await linkrunner.capturePayment({ amount: 4.99, userId: "user_2041", paymentId: "ord_88213", type: "FIRST_PAYMENT", status: "PAYMENT_COMPLETED",});
Or from your backendPOST /capture-payment
Payment recordedCompleted
Credited toIN_Prospecting_Sep+$4.99

iOS trials report through SKAN, coarsely

Without ATT consent, iOS campaigns report through SKAN and AdAttributionKit. Only the first postback window, day 0 to 2, carries fine values; trial conversions after that land in coarse windows where you only get low, medium or high. Map trial start and first payment ranges deliberately to see paid conversion on iOS campaigns.

See how SKAN mapping works →

SKAN 4 postbacksCopies to Linkrunner

  1. Postback 1Day 0 to 242Fine value
  2. Postback 2Day 3 to 7MediumCoarse value
  3. Postback 3Day 8 to 35HighCoarse value

Where subscription teams find users who pay

  • Meta: Send trial starts as an early signal and FIRST_PAYMENT with revenue, so creative-level ROAS reflects first payments rather than trials.
  • Google App campaigns: Import trial start and first payment as conversion actions and choose which one the campaign optimises toward.
  • Apple Ads: iOS users searching for a category ("learn English", "period tracker") arrive with clear intent; attribution runs through Apple AdServices with keyword-level spend.
  • Creators and influencers: One link per creator, with an Influencer role so each creator sees only their own campaigns; first payments tie back to the creator who sent the user, not just installs.
  • Web-to-app and web checkout: Meta Sales (Website) campaigns and link-based flows send users to a web paywall, and each completed web payment reaches Linkrunner through the server API.
  • TikTok: Short product demos suit learning and wellness apps; campaign links carry the ttclid click ID for deterministic matching.

Frequently asked questions

Measure subscribers, not trial starts

Live within a week, with every campaign tied to first payments, renewals and refunds, and your first 25,000 attributed installs free.