Customers
Customer profiles built from transactions alone: one customer per subscription, how LTV and status are computed, entitlements, history, SDK identity upgrades.
The Customers page (/customers) lists everyone who has bought or trialled, with a profile per customer. Profiles work with zero SDK data, and upgrade to your own user IDs when the optional SDK identifies them.
One customer per subscription
Every Apple originalTransactionId (the identifier Apple keeps stable across a subscription's whole life) becomes one customer. Their timeline is the verified events on that transaction: trial start, conversion, renewals, refunds, churn. Stripe subscriptions appear the same way.
SDK-less customers get a stable, privacy-preserving identity derived by hashing the transaction ID: the same subscriber always resolves to the same handle (for example customer_8f3c2a) without storing anything extra. The copyable ID has the form $u_t…. Their attribution reads "Organic / App Store", because that is all Apple's data can say.
List
Columns: HANDLE (pink when SDK-identified, hover for "SDK-identified" or "Derived from transactions"), APP, PRODUCT, STATUS, LTV, LAST SEEN. The header shows the total (1,731 customers). Rows are newest activity first, 40 per page, with Load more → and ← First page.
Search handles and IDs… filters by handle or customer ID (case-insensitive); Clear resets. Search runs over the 1,000 most recently active subscriptions. The topbar app filter applies. Apple lookup → opens customer lookup for a transaction or order ID.
An identified person with two subscriptions appears as two rows. Empty: "No customers yet. They appear as purchase events arrive. No SDK required; the SDK upgrades anonymous records to real user IDs."
How LTV is computed
LTV = Σ signed USD of the customer's money events
+ BUY, RENEW, CONV (purchases, renewals, trial conversions)
− RFND (refunds)
+ RREV (reversed refunds)
TRIAL and Family Sharing copies contribute $0Amounts come from each signed transaction's own price and currency, converted with daily ECB rates (see currency conversion).
Scope
LTV is computed from the live event stream, so it covers activity since your apps' notifications were wired (plus anything imported or re-delivered). It is a per-customer telemetry number, not a reconciliation against Apple's payouts.
Status
Status follows the latest event on the timeline:
| Status | When |
|---|---|
| Churned | The last word was a churn event or refund, or the latest transaction's own expiry has passed |
| Trial | The latest transaction is an unexpired free trial |
| Active | Otherwise |
The Count cancelled trials as active preference does not change status. A trial user who turned auto-renew off is still entitled and still in their trial, so their status stays Trial until it lapses. That preference is about metric counts, not a person's state.
Profile
/customers/<id> shows:
- Identity: handle, Copy customer ID, a status pill, and for SDK customers VERIFIED (identify came from an App Attest enrolled device) or UNVERIFIED (simulator, React Native, Android or raw HTTP). Product and app chips.
- Details: LTV, First seen, Last seen, Country, Platform, Attribution (
SDK identify,SDK identify (unverified), orOrganic / App Store). - Entitlements: one card per product,
Entitlement: <product>withRenews <date>orUntil <date>, the price (for example$9.99/mo, omitted during an offer period) and the store. State On (active), Cancelled (auto-renew off, still entitled), or Expired (refunded or past expiry). - HISTORY: each event with title, date, signed amount and age, refund-request responses and reasons, ending at Subscription started (marked
· est.when inferred from Apple's original purchase date because the initial notification predates your wiring).
SDK identity upgrades
The optional SDKs (iOS, Android, React Native) add identify and attribute calls that link transactions to your user IDs. When a transaction is attributed, its anonymous customer upgrades to a real profile: your user ID, device model, OS version, locale and any custom attributes. Purchases reported before login (under a persisted anonymous ID) re-attribute automatically after identify. Everything else on this page works without them.
Last updated on
Apps
The Apps list and app detail page: revenue tiles, top products, Apple Ads, TestFlight, ingest URL, S2S audit, forwarding, nickname, history import and refunds.
Customer lookup
Look up an App Store customer by transaction ID or receipt order ID, then see live Apple statuses and history, and comp free days with a goodwill extension.