Projects and members
A project holds one product's apps, store items, customers, webhooks and charts. An iOS app and an Android app that sell the same subscription belong in the same project, so a customer who buys on one platform is entitled on both.
- Sign in to the panel and create a project from the project switcher.
- Use a separate project for products whose data must stay apart.
- Invite teammates under Members.
| Role | Can |
|---|---|
read | View customers, events, charts and configuration. Secrets such as webhook signing secrets stay hidden. |
write | Also change apps, products, webhooks and project settings, grant benefits and run imports. |
Apps and store credentials
Add one app per store listing under Apps → New app. Each app gets its own public API key, which the SDK uses.
App Store app
- App Bundle ID must match the app's bundle identifier. Transactions signed for another bundle are rejected.
- In-App Purchase key is required. RevFox uses it to call the App Store Server API for transaction history, subscription status and refunds. Create one.
- App Store Connect API key is optional. It lets RevFox import your products and prices. Create one.
- Apple commission estimate sets the dates your app was in the App Store Small Business Program, so revenue uses a 15% commission instead of 30%.
Play Store app
- Google Play package name must match the app's application ID.
- Service account credentials are the JSON key of a Google Cloud service account with access to the app in Play Console. Create one.
Give store accounts only the permissions RevFox needs, and keep their keys out of source control. Keys are stored in your RevFox database, so protect database backups the same way.
Store notifications
Stores report renewals, cancellations, billing problems and refunds to RevFox as they happen. RevFox also asks the stores directly, so a missed notification is caught later, but notifications make changes show up within seconds.
App Store Server Notifications
- Open the App Store app in RevFox and copy its Notification URL. It has the form
https://<api host>/app-store-server-notifications/<id>. - In App Store Connect, open the app, then App Information → App Store Server Notifications.
- Paste the URL as both the production and the sandbox URL, and choose Version 2.
The app page shows when the last notification arrived. RevFox accepts only notifications signed by Apple.
Google Play real-time developer notifications
- Enable the Cloud Pub/Sub API in the Google Cloud project of your service account.
- On the Play app's page in RevFox, under Google Play Pub/Sub, pick an existing topic or let RevFox create one, and connect it. RevFox creates a subscription and pulls messages from it.
- In Play Console, open Monetize with Play → Monetization setup, paste the topic name under real-time developer notifications, and send a test notification.
Track new purchases from store notifications
This switch on each app decides what happens when a store reports a purchase RevFox has never seen. Off, the default, it waits until your app or an import reports the purchase, so it is recorded under the right customer. On, it is recorded straight away under a placeholder customer that your app claims later. See placeholder customers.
Products, packages and benefits
Three layers turn store product IDs into something your app can reason about.
| Layer | What it is | Example |
|---|---|---|
| Store item | A product as the store knows it, per app. Import them from the store or add them by ID. | pro_monthly, pro:monthly |
| Package | A group of store items your paywall shows together. The SDK fetches a package by its identifier and gets each platform's products. | default with monthly and yearly |
| Benefit | What a store item unlocks. Your app checks benefits, never product IDs. | pro |
- Under Products → Store items, import or add the App Store and Play product IDs.
- Under Products → Benefits, create a benefit and attach the store items that grant it.
- Under Products → Packages, create a package and add the store items your paywall offers.
Play subscriptions are sold per base plan, so their store items are named productId:basePlanId. One-time products keep their plain ID.
A package can be changed at any time. The next time the app fetches it, it shows the new products, without an app update.
API keys
The API keys page has two kinds of keys.
| Key | Looks like | Used by | Secret? |
|---|---|---|---|
| SDK API key | apps_… or play_… | The SDK in your app. One per app. | No. It ships inside the app. |
| Secret API key | sk_… | Your own backend, for the server API. | Yes. Shown once, stored only as a hash. |
The page also shows the API server URL to give the SDK, taken from api_url in the server's config.
Integrations
| Integration | What it does |
|---|---|
| Webhooks | Sends subscription events to your backend. See Webhooks. |
| Analytics | Sends the same events to Amplitude or Mixpanel, with revenue. |
| Apple Search Ads | Records the campaign, ad group and keyword that brought each iOS install. Needs the SDK's AdServices token collection. |
| App Store history | Reads the notifications Apple kept for an app, to recover purchases made before RevFox. Runs only when you click Sync now. |
| Migration | Imports customers and purchases from another platform. See Migration. |
| Data exports | Downloads transactions and customers as CSV. |
Customers and charts
Customers lists everyone RevFox knows, filtered by active subscription, expired or never subscribed. A customer's page shows their benefits, purchases, attributes, aliases and full event history, with each webhook delivery. From there you can grant or revoke a promotional benefit, or delete the customer.
Charts covers revenue, MRR, active subscriptions, active customers, new customers, trial conversion, churn, refunds, lifetime value and a revenue prediction. Turn on the sandbox toggle to see test purchases; leave it off for production numbers.
