The RevenueCat of referral programs

Referrals for subscription apps

For apps and web products. Paste a template, add one webhook, and referrals start tracking — no SDK of ours.

Free until your first referral link, then €19/month flat. We never touch the money.

ledger · yourapp
Referred revenue$612.40
Commission pending$2.00
Commission approved$120.48
INITIAL_PURCHASE$2.00at_ref: W8CZ3TH → usr_4c1e…f3e8pending
invoice.paid$5.80refund: charge.refundedvoid
POST /events$9.80external_user_id: usr_7c2a…d10eapproved
RENEWAL$2.00at_ref: W2KD7PH → usr_b83f…19adapproved
Sample data · 20% of each payment for 12 months · one step = the 30-day hold

From referral code to payout

Four copy-paste steps — the same for iOS, Android and web products.

  1. Webhook URL…/pk_aff_3f9c2e71b8d04a6c9e15f0b7a2d4c8e1

    Create a program

    free

    Pick a commission rule and paste one webhook URL into Stripe or your subscription platform. Nothing to install.

  2. Your referral codeK7QM4XP

    Use my code K7QM4XP: https://yourapp.com/?ref=K7QM4XP

    Give each user a code

    One call from your server — POST /codes — creates it. Show it next to a Share button.

  3. at_ref = "K7QM4XP"set through your subscription SDK

    New users apply it

    They type the code at signup and the template sets it in one line. On the web, a ?ref= link is enough.

  4. invoice.paid$5.80Stripe webhook · $29.00 · 20% · 12 monthsapproved

    Pay out

    Commissions unlock after the 30-day refund hold; refunds cancel them. Export the list and pay with PayPal or Wise.

estimate

What could referrals earn you?

Net per year, after commissions

€8,403

New subscribers / year
90
Their revenue (12 months each)
€10,789
Commissions you pay referrers
−€2,158
AppThunder Referrals (€19/month)
−€228

That’s 37× what the tool costs.

Estimate from your inputs: referrers × reach × 12 months × conversion, each new subscriber counted for 12 months. Not a forecast.

Copy. Paste. Ship.

Three small functions for your app or site, plus one call on your server. Pick your platform, press Copy, paste — nothing of ours to install.

import UIKit// + your subscription SDK's import (provides Purchases)enum AppThunderRef {    static let apiBase = URL(string: "API_BASE")!  // dashboard    /// Fresh installs: from your onboarding code field.    static func applyCode(        _ code: String) { Purchases.shared.attribution.setAttributes(["at_ref": code]) }    /// Checks a code before "applied" UI. Public key.    static func validateCode(        _ code: String, done: @escaping (Bool) -> Void) {        var url = URLComponents(url: apiBase.appendingPathComponent("codes/\(code)"), resolvingAgainstBaseURL: false)!        url.queryItems = [URLQueryItem(name: "public_key", value: "PUBLIC_KEY")]        URLSession.shared.dataTask(with: url.url!) { data, _, _ in            let json = data.flatMap { try? JSONSerialization.jsonObject(with: $0) as? [String: Any] }            done(json?["valid"] as? Bool ?? false)        }.resume()    }    /// The user's OWN code, stored by your backend.    static func share(        code: String, from vc: UIViewController) {        let text = "Use my code \(code): https://yourapp.com/?ref=\(code)"        let sheet = UIActivityViewController(activityItems: [text], applicationActivities: nil)        sheet.popoverPresentationController?.sourceView = vc.view  // iPad        vc.present(sheet, animated: true)    }}
AppThunderRef.swiftiOScopy-paste · no SDK of ours

Three rules we don’t break

Three promises you can check yourself in the product.

payoutsyourappAug 2026 · 6 referrers · $135.60
Export
  • PayPal Mass Pay
  • Wise batch
  • CSV
ReferrerCodeCommissionsTotal
usr_7f3a…e41bR4TW8NC23$46.00
usr_2b8e…c3d7H9VK2ZD6$34.80
cus_Qm8T…2NfRM3XF7QA3$29.40
usr_c8a1…d094T5NG3LY2$11.60

We never hold your money

We work out who is owed what and hand you the file — PayPal Mass Pay, Wise or CSV. You pay your referrers; the money never passes through us.

conversionsall events3 events · 2 attributed
  1. attributed10:30:14

    INITIAL_PURCHASE$9.99viasubscription webhook

    at_refR4TW8NCusr_7f3a…e41b$2.00pending

  2. not attributed10:34:52

    invoice.paid$29.00viaStripe webhook

    metadata.at_refnoneno code, not counted

Deterministic or nothing

Only a real code counts — typed in your app, a ?ref= link or a call from your server. No fingerprinting, no guesswork.

templatesinstallcopy-paste · not a package
PlatformEntry point
Swiftenum AppThunderRef
Kotlinobject AppThunderRef
React Nativeexport const AppThunderRef
Flutterclass AppThunderRef
Webwindow.AppThunderRef

Templates, not an SDK

Five copy-paste templates. The code lives in your repo — nothing of ours to install or keep updated.

also enforced
  • Self-referrals blocked
  • Referee e-mails stored only as hashes

One price, no cap

Everything in one plan. The price stays the same, however much your referrers bring in.

Flat plan

€19/ month

Per account, all your programs.Plus VAT. Billed monthly, cancel any month.

Create your program

Free to set up · card only at your first referral link

Included

Templates
Swift, Kotlin, React Native, Flutter, Web
Attribution
Subscription webhook, Stripe webhook, REST API
Commission hold
30 days · refunds void automatically
Exports
PayPal Mass Pay, Wise batch, CSV
Currency
Commissions and exports in USD
Self-referrals
Blocked
Revenue share
None
Cap on referral revenue
None

The cheapest paid plan at Rewardful, FirstPromoter, Tolt, PromoteKit, Dub Partners, Refgrow and Cello is capped by referral revenue, payouts or partners — €19 isn’t.

See each plan and its cap

From AppThunder, the web-to-app builder.

VendorCheapest paid plan, billed monthlyCap on that planPricing page
RewardfulStarter · $49 / monthUp to $7,500/month in affiliate-attributed revenuerewardful.com/pricing (opens in a new tab)
FirstPromoterStarter · $49 / monthUp to $5,000/month revenue from affiliates · Maximum 1,000 affiliatesfirstpromoter.com/pricing (opens in a new tab)
ToltBasic · $69 / monthUp to $10,000/month earned from affiliatestolt.com/pricing (opens in a new tab)
PromoteKitPro · $39 / monthUp to $10,000/month from affiliatespromotekit.com/pricing (opens in a new tab)
Dub PartnersBusiness · $90 / monthBusiness is Dub’s cheapest plan that includes Partners.$2.5K partner payouts/month · 500 partnersdub.co/pricing (opens in a new tab)
RefgrowStarter · $29 / monthUp to $1,000 in affiliate-generated revenue per monthrefgrow.com/pricing (opens in a new tab)
CelloPartner Referrals Plus · $100 / monthUser Referrals Grow · $300 / monthCello sells two referral products; the cheapest paid plan of each is listed.Plus: 25 transacting partnersGrow: Up to $50K referral ARRcello.so/pricing (opens in a new tab)
  • Prices and limits as published by each vendor, checked 23 Sep 2026; monthly billing.
  • Six of the seven charge less per month on annual billing (Tolt shows no annual plan); the table lists monthly billing.
  • PromoteKit (up to 3 referrals) and Cello Partner Referrals (up to 5 transacting partners) also have free plans; both are capped.
  • Vendor prices are in $ as each vendor publishes them (Cello shows the same figures in € to EU visitors); our price is in €.
  • Conversion: $29 ≈ €25.30 at the ECB rate of 22 Sep 2026.

faq

Before you integrate

How attribution, commissions, payouts and data work.

See the templates

Integration

  • Does this work for web products, or only apps?

    Yes — SaaS, shops or courses that bill with Stripe subscriptions or have a backend that calls our API; a signup page alone is not enough. The web snippet keeps the code from the referral link for 90 days, first touch, same device. With Stripe, pass it as at_ref in the subscription metadata — our Stripe webhook reads it on invoice.paid and voids the commission on charge.refunded; otherwise your backend calls POST /referrals at signup and POST /events for each payment.

  • How does attribution work on iOS without fingerprinting?

    With an explicit code: a link can’t carry one through an App Store install without fingerprinting, so on a fresh install the user types it (in an onboarding field, say), and a link passes it only when the app is already installed or on the web. The template’s applyCode function sets it as the subscriber attribute at_ref, and our webhook reads it from the purchase event — or your backend registers the pair with POST /referrals. Android works the same way; an install without a code is not counted.

  • Does it work with my subscription platform?

    Yes, natively, if your app uses the Purchases SDK that the Swift, Kotlin, React Native and Flutter templates call: paste our webhook URL into that platform’s webhook settings, and nothing of ours is installed. With any other stack, report purchases from your backend with POST /events — same ledger, same rules.

  • Do I need a backend?

    Yes, one small server endpoint. Creating each referrer’s code with POST /codes needs your secret key, and that key must never ship in an app or a web page. The rest runs through the templates, the web snippet and the webhooks — with Stripe, plus passing at_ref into the subscription metadata at checkout.

  • What do I need to start?

    Create a program (free): you get a public key pk_aff_… for the app, a secret key sk_aff_… for your backend only, shown once, and a webhook URL for your subscription platform’s webhook settings or, for web, your Stripe dashboard with the events invoice.paid and charge.refunded. Then add one copy-paste template (Swift, Kotlin, React Native, Flutter or the web snippet) and the backend endpoint that creates referrer codes with POST /codes — it returns 402 payment_required until you add a card.

Money

  • Can I reward the user who was referred?

    Not built in: Referrals computes commissions for referrers only. If you want to give the referred user something, such as a discount or a trial, you do that in your own billing. On iOS, rewarding someone just for installing or registering is risky under App Store review.

  • Do you pay my referrers?

    No — we never hold money, and the product stores no payout addresses. The export lists each referrer by your external_user_id with their codes, commission count and amount in USD, as a PayPal Mass Pay file, a Wise batch or a CSV; you pay them yourself with the payout details you hold.

  • What happens when a referred user gets a refund?

    Each commission stays pending for a 30-day hold, the refund window, and then becomes approved, meaning owed. A refund voids it — on Stripe the charge.refunded event, in apps the subscription platform’s cancellation event with a refund reason. An ordinary cancellation doesn’t touch commissions already earned.

  • Do you take a cut of referral revenue?

    No. €19 a month, flat, covers every program in your account — no revenue share and no cap on the referral revenue you track.

Account & data

  • Can I cancel any month?

    Yes. The plan is billed monthly, and you can cancel it in any month.

  • What do you store about your users?

    The ids you send as external_user_id (an app user id or a Stripe customer id), the codes and the payment events — no names, no payout addresses. E-mail is optional; if you send it, it is stored only as a SHA-256 hash, for the self-referral check.

Turn customers into referrers.

Create your program

Sign up free — you get your keys and webhook URL right away; €19/month flat from your first referral link.