The RevenueCat of referral programs

Let your users market your app

Each friend who subscribes with a user’s code pays you, and that user earns a commission. Works for web products too.

Free until you create your first referral link. Then it’s €19 a month. We never touch your 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

How a referral turns into a payout

Four steps, and they’re the same in a mobile app and on the web.

  1. Webhook URL…/pk_aff_3f9c2e71b8d04a6c9e15f0b7a2d4c8e1

    Create a program

    free

    Decide what your users earn per referral. Then paste one webhook URL into Stripe or your subscription platform. There’s nothing to install.

  2. Your referral codeK7QM4XP

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

    Give each user a code

    Your server creates it with one call to POST /codes. Put it in your app next to a Share button.

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

    Friends enter it

    They type it when they sign up, and the template saves it with one line. On the web, opening a ?ref= link is enough.

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

    Pay out

    Each commission waits 30 days in case of a refund, and a refund cancels it. After that you export the list and pay through 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.

This is plain math on your inputs (referrers × reach × 12 months × conversion), with each new subscriber counted for 12 months. It isn’t a forecast.

The code’s already written

It’s three small functions for your app or site and one call on your server. Copy the template for your platform into your project. There’s no SDK 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

Things we won’t do

You can check each of these in the product yourself.

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’s owed what and give you a file for PayPal Mass Pay, Wise or a plain CSV. You pay your referrers yourself, so 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

A code, or it doesn’t count

A referral only counts when a real code comes with it: typed into your app, sent by your server or carried by a ?ref= link. We don’t fingerprint devices, and we never guess.

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

No SDK to install

You get five copy-paste templates, and the code lives in your repo. There’s nothing of ours to install or keep updated.

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

One price, no cap

One plan with everything in it. The price doesn’t go up when your referrers bring in more.

Flat plan

€19/ month

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

Create your program

Free to set up. You add a card when you create 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

At Rewardful, FirstPromoter, Tolt, PromoteKit, Dub Partners, Refgrow and Cello, the cheapest paid plan is capped by referral revenue, payouts or partners. Our €19 plan 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 tracking, commissions, payouts and your data work.

See the code

Integration

  • Does it work for web products too, or only for apps?

    It works for web products too, like a SaaS, a shop or an online course, as long as you bill through Stripe subscriptions or have a backend that calls our API. A signup page on its own isn’t enough. The web snippet keeps the code from a referral link for 90 days (first touch, same device). With Stripe, you pass it as at_ref in the subscription metadata. Our Stripe webhook reads it on invoice.paid and voids the commission on charge.refunded. Without Stripe, your backend calls POST /referrals at signup and POST /events for each payment.

  • How do you track referrals on iOS without fingerprinting?

    With a code. Without fingerprinting, a link can’t carry a code through an App Store install, so on a fresh install the user types it in, for example in an onboarding field. A link only passes the code when the app is already installed, or on the web. The template’s applyCode function saves it as the subscriber attribute at_ref, and our webhook reads it from the purchase event. Your backend can also register the pair with POST /referrals. Android works the same way, and an install without a code doesn’t count.

  • 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. You paste our webhook URL into that platform’s webhook settings and don’t install anything of ours. On any other stack, your backend reports purchases with POST /events. It’s the same ledger with the same rules.

  • Do I need a backend?

    Yes, but just one small endpoint. Creating each referrer’s code with POST /codes needs your secret key, and that key must never ship inside an app or a web page. The templates and webhooks handle the rest. With Stripe, you also pass at_ref into the subscription metadata at checkout.

  • What do I need to get started?

    A program, and creating one is free. You get a public key pk_aff_… for the app and a secret key sk_aff_… that only goes on your backend (we show it once). You also get a webhook URL. It goes into your subscription platform’s webhook settings or, on the web, into your Stripe dashboard with the events invoice.paid, invoice_payment.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. That endpoint answers 402 payment_required until you add a card.

Money

  • Can I reward the user who was referred?

    Not out of the box. Referrals works out commissions only for the people who refer. If you want to give the new user something, like a discount or a trial, you set that up in your own billing. On iOS, rewarding someone just for installing or signing up is risky in App Store review.

  • Do you pay my referrers?

    No. We never hold or move money. The export lists each referrer by your external_user_id with their codes, how many commissions they earned and the amount in USD, plus any payout address you noted for them. You download it as a PayPal Mass Pay file, a Wise batch or a CSV and pay them yourself.

  • What happens when a referred user gets a refund?

    Each commission stays pending for 30 days, the refund window, and then becomes approved, which means you owe it. A refund voids it. On Stripe that’s the charge.refunded event; in apps it’s your subscription platform’s cancellation event with a refund reason. A normal cancellation doesn’t touch commissions that were already earned.

  • Do you take a cut of referral revenue?

    No. You pay €19 a month, flat, and that covers every program in your account. There’s no revenue share and no cap on the referral revenue you track.

Account & data

  • Can I cancel any month?

    Yes. You’re billed monthly, and you can cancel in any month.

  • What do you store about my users?

    The ids you send as external_user_id (an app user id or a Stripe customer id), the codes, and the payment events with amount, currency and date. No names. We only store a payout address, such as a PayPal e-mail, if you add one for a referrer. Your users’ e-mail addresses are optional. If you send one, we keep only a SHA-256 hash of it, to catch self-referrals.

Let your users do the selling.

Create your program

Sign up free and you get your keys right away. You only pay €19 a month once you create your first referral link.