Qualified purchases
Choose which paid purchases count as qualified. In Observe mode, AppRefer checks every purchase against your rules without changing the events sent to ad networks, and your revenue does not change.
Observe only
Every real payment is still counted once in revenue and forwarded exactly as before (Purchase or Subscribe, see Events). Qualified purchases are a separate observation stored beside the payment. Sending them to ad networks will be a later, opt-in step.Why
Some buyers cancel or ask for a refund within minutes. Watching how many purchases survive a short window, per product, tells you whether a qualified signal would be worth optimising ads for, before anything about your campaigns changes. It is not a verdict on revenue: an annual buyer who turns off auto-renew still paid for the year.
Rules
Each app has up to 10 rules. A payment is checked by the first rule (in order) that covers its type and product.
| Setting | What it does |
|---|---|
| Applies to | Any of: first payment, trial converts to paid, renewal, one-time purchase. Free trial starts are never purchases (see Qualified trials for those). |
| Products | Store product ids. Empty means every product. |
| Window | How long after the payment to watch, 1 to 720 hours. |
| Minimum amount paid | Optional, with an explicit currency. A USD minimum uses the converted USD price. Any other currency is compared only with payments made in that currency; others show as Unknown. |
| Not refunded or revoked | A refund of this payment, or a revocation of the purchase, inside the window means Not qualified. |
| Exclude purchases whose renewal is cancelled during the window | Optional. Turning off auto-renew inside the window (even if it is turned back on) means Not qualified. Never assumed: leave it off for annual plans. |
| Required activity | Optional: an SDK event name (for example workout_completed) and the minimum times it must be received inside the window. |
Results
| Result | Meaning |
|---|---|
| Waiting | Still inside the observation window. |
| Qualified | The payment met every part of the rule. |
| Not qualified | Refunded, revoked, auto-renew turned off (when the rule asks), below the minimum amount, or not enough app activity. |
| Unknown | AppRefer is missing data it needs to decide, and says why: the store sent no price; the payment was in another currency than the minimum; no AppRefer install was linked to the purchase; the app wasn't sending the activity event before the purchase; AppRefer wasn't collecting that event for the whole window (for about 6 minutes after a new event name is saved, or after a dropped name's 31-day grace period); or the subscription's store history was too long to check the whole window. |
Missing data is always Unknown, never Not qualified. A refund, revocation or cancellation that happened inside the window but is delivered late by the store changes a result to Not qualified, and the change is recorded. A refund after the window is noted but does not change the result.
How payments are matched
- Which purchases are checked. Purchases that reach AppRefer through AppRefer Billing (App Store, Google Play and Stripe, including purchases the SDK reports) or the RevenueCat webhook. Purchases sent only through the legacy Superwall webhook are not checked.
- One result per payment. A payment is identified by app, environment (live or test), store and store transaction id. When the same purchase arrives from AppRefer Billing and again from RevenueCat, it is checked once. A test purchase never matches a live one, even with the same ids.
- Sign-in doesn't matter. Refunds and cancellations are matched by the store's subscription, not by user id, so a purchase made anonymously and cancelled after sign-in is still matched. Google Play subscriptions are matched by their order id (the part before
..), which both sources share; a refund that names its transaction always reaches that payment. - Out of order. A cancellation or refund that arrives before the purchase itself is kept and applied when the purchase lands. Cancellations from up to 10 minutes before the payment count.
- Nothing is dropped silently. A store notice that can't be recorded is retried, then kept and retried daily; the card says how many are outstanding. Very long store histories keep a marker of what was trimmed, and a payment whose window might be affected is Unknown, never Qualified.
- Rule versions. Every save creates a new numbered version; versions are never edited. A payment keeps the version it was checked under, so changing a rule never rewrites past results.
- Required activity. Events are counted for the AppRefer install linked to the purchase (the device id AppRefer Billing and RevenueCat pass along), timed when AppRefer receives them and de-duplicated by event id. Events received before the store's purchase notice are counted too, from the payment time. A new event name is collected within about 6 minutes of saving; a name you rename or remove (or turn the feature off) keeps being collected for 31 days, so payments already waiting are still judged on it.
Set up
- Open Settings → App settings and find Qualified Purchases. Everyone in the company can see it; owners and admins can change it.
- Turn on Observe qualified purchases and start from a template: Weekly plan: kept 2 hours (not refunded, renewal not cancelled within 2 hours) or Annual plan: not refunded in 14 days. Pick the products each rule covers.
- Save. Payments from then on are checked; earlier payments are not.
The card shows the last 30 days: how many payments are waiting, qualified, not qualified or unknown, the reasons, a row per rule version and the latest payments (product, amount, result). Test purchases are shown separately. No user, device or transaction ids are shown.
Annual plans
Many annual buyers turn off auto-renew soon after buying and keep using what they paid for. Use "not refunded" for annual plans and keep the auto-renew check for short plans such as weekly.Privacy and data
Results hold the product, amount, store, times and the outcome. Store transaction ids and install ids are stored only as one-way hashes. Results are kept for 400 days. For a counted event name, AppRefer keeps each install's hashed event ids and receive times for up to 45 days. Erasing a user (see Privacy) deletes that activity record and unlinks their installs from any results.