RevenueHogdocsโ† back to app

Customers & LTV.

customer profiles derived from transactions alone. upgraded to real identities when the optional sdk attributes them.

One customer per subscription

RevenueHog builds customers with zero SDK data: every Apple originalTransactionId(the identifier Apple keeps stable across a subscription's whole life) becomes one customer. Their timeline is the verified server-notification events on that transaction: trial start, conversion, renewals, refunds, churn.

SDK-less customers get a stable, privacy-preserving identity derived by hashing the transaction id: the same subscriber always resolves to the same handle (e.g. customer_8f3c2a) without storing anything extra. Their attribution reads "organic / app store", because that's all Apple's data can honestly say.

How LTV is computed

Lifetime value is the net USD across the customer's money events: purchases, renewals and trial conversions add; refunds subtract. Trial starts contribute $0. Amounts come from each signed transaction's own price and currency, converted with daily ECB rates (see the metrics methodology).

Scope

LTV is computed from the live event stream, so it covers activity since your apps' notifications were wired (plus whatever Apple re-delivers). It is a per-customer telemetry number, not a reconciliation against Apple's payouts.

Customer status

Status follows the latest event on the customer's timeline: churnedwhen the last word was a churn event or refund, or when the latest transaction's own expiry has passed; trial while the latest transaction is an unexpired free trial; otherwise active.

One deliberate rule: the cancelled-trials metric option does not change customer status. A trial user who turned auto-renew off is still entitled and still in their trial. Their status stays "trial" until it actually lapses. That option is about metric counts, not a person's state.

SDK attribution upgrades

The optional SDKs (Swift, React Native, Kotlin) add exactly one thing: identify + 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 you attach. Purchases reported before login (under a persisted anonymous id) re-attribute automatically after identify.

Everything else on this page works without them. Endpoint and payload details live in the SDK reference.