How AppRefer works
AppRefer is one SDK and one dashboard for attribution, subscriptions, in-app support and analytics, on iOS, Android, Flutter and React Native.
What you get
- Attribution. Tracking links record the ad click, the SDK matches the install to it, and purchases are sent back to the ad network that drove them. See Attribution.
- Subscriptions (AppRefer Billing). App Store, Google Play and Stripe purchases verified on the server, entitlements, offerings and paywall experiments. You can also keep RevenueCat and send its webhooks to AppRefer. See Billing setup and Offerings.
- Support. In-app chat, email replies, a help centre and optional AI answers, worked from one inbox that shows each customer's purchases. See Support.
- Analytics. Net revenue, cohort ROAS, subscription metrics, product events and a live event stream. See the Dashboard guide.
- Set up by people or AI agents. Everything in the dashboard can also be done through the REST API with an organisation API key, and the whole reference is available as one plain-text file at /llms-full.txt for coding agents (with an index of every page as markdown at /llms.txt).
The customer journey
Every step below writes to the same customer record, so attribution, revenue, support and analytics all describe the same person.
- You create a tracking link in the dashboard (or via the API) and use it as the destination of your ad.
- Someone taps the ad. The link records the click and its click ID (
fbclid,gclid,ttclid,opprefortwclid), shows a short app page and sends them to the App Store or Google Play. On Android the click ID travels with the install through the Play Install Referrer. See Tracking links. - They install and open the app. The SDK's
configure()makes one call. AppRefer matches the install to the click (Play Install Referrer, Apple AdServices, exact IP match, then probabilistic matching), respecting the user's tracking choice, and returns the result to the app. - They start a trial or buy. With AppRefer Billing, the purchase is verified with the store (App Store Server Notifications, Google Play real-time notifications, Stripe webhooks). If you use RevenueCat, its webhook delivers the same events. Either way the purchase lands on the customer's record.
- The conversion goes back to the ad network. AppRefer sends it with the original click ID to that network's conversions API, so the network learns which ads bring paying customers. Trial starts can be held back until they prove intent (Qualified trials), and renewals keep reporting lifetime value.
- Support and analytics use the same record. When the customer opens the in-app chat, your team sees their subscription. Revenue, cohort ROAS and product events are reported per campaign, ad and country.
Supported ad networks
| Network | How installs are matched | Where conversions go |
|---|---|---|
| Meta Ads | fbclid on /api/c links, IP and probabilistic matching | Meta Conversions API |
| Google Ads | gclid on the /g landing page; the gclid in the Play Install Referrer for Android App campaigns | Google Ads, per event conversion action |
| TikTok Ads | ttclid on /api/c links | TikTok Events API |
| Apple Ads | Apple AdServices token on iOS (works without tracking permission) | Attribution and spend only; Apple has no conversions API |
| ChatGPT Ads (beta) | oppref on the /o landing page | OpenAI Conversions API |
| X Ads | twclid on /x website-funnel links | X Conversions API for verified website purchases; off by default for each app |
Apple's privacy-preserving postbacks (SKAdNetwork and AdAttributionKit) are covered on the SKAdNetwork page.
Architecture
AppRefer is a single web app: the API and the dashboard deploy together. There is no separate backend for you to run.
Your app (AppRefer SDK: iOS, Android, Flutter, React Native)
| configure, events, Billing purchases, Support chat
v
AppRefer API + dashboard
| operational store: matching, queues, customers, support
| analytics warehouse: clicks, installs, events, revenue
|
|<-- App Store, Google Play and Stripe notifications (AppRefer Billing)
|<-- RevenueCat webhooks (if you use RevenueCat)
|<-- Your backend: verified website purchases, account deletion (REST API)
|
+--> Meta, Google Ads, TikTok, ChatGPT Ads and X Ads conversion APIs
+--> Push notifications and email for support repliesDesign principles
- Thin SDK.
configure()resolves attribution in one request and caches the result. Events are saved on the device and retried until delivered (up to 1,000 events for 7 days, SDK 0.9.0+). - Purchases come from the server side. Store notifications (AppRefer Billing) or RevenueCat webhooks are the source of truth for revenue. You don't need to track purchases in app code, and the RevenueCat Only setting ignores any revenue the app reports itself.
- Tracking only with permission. Click matching, conversion forwarding and advanced matching run only for installs that allowed tracking. Everything else still gets first-party analytics, Billing and Support. See Privacy.
- Personal data is hashed on the device. Email, phone and name are SHA-256 hashed before they leave the phone.
- Server-side kill switch. Turn the SDK off for an app from Settings without shipping an update.
- Separate test data. Test keys (
pk_test_) keep their installs, events and purchases apart from live data and never send anything to ad networks. - One version for all four SDKs. iOS, Android, Flutter and React Native ship the same features under the same version number (currently 0.11.0).
Next step
Follow the Quickstart to add the SDK, create your first tracking link and connect an ad network.