Event Parameters and Properties
Reference of event parameters and Apphud-managed user properties sent to third-party integrations.
When Apphud sends events about subscriptions and non-renewing purchases to third-party services — mobile analytics, attribution providers, messengers — each event carries a payload of event parameters and a snapshot of Apphud-managed user properties.
This page documents what's in that payload. For the list of event types Apphud emits, see Event Types. For per-integration payload mapping (which provider expects which field name), see the corresponding integration guides under Integrations Overview.
Event Parameters
Every event carries these parameters where applicable. Many integrations expect different field names for the same data — local_price in one provider is af_revenue in AppsFlyer and _valueToSum in Meta (Facebook). Apphud sends the right field name per integration automatically.
| Parameter | Description |
|---|---|
product_id / af_content_id / content_items[0].$sku / fb_content_id | Product identifier |
transaction_id | Transaction identifier from the store |
unit | Increment of time for a subscription period. Possible values: day, week, month, year |
units_count | Number of units per subscription period |
local_price / af_revenue / _valueToSum | Cost of the product in the local store currency |
currency / af_currency / fb_currency | Local currency ISO code |
usd_price / content_items[0].$price | Cost of the product converted to USD (see About Analytics → About Currencies) |
price_description | Combined display string. Format: <local_price> <currency> ~ <usd_price> USD. Example: 499 RUB ~ 7.8 USD |
reason | Reason for an expiration, refund, or billing-issue-resolved event — see Reason values below |
offer_id | Promotional offer identifier |
offer_type | Introductory or promotional offer payment mode. Possible values: pay_up_front, pay_as_you_go, trial (for promotional offers) |
app_name | App name as configured in Apphud |
user_id | Apphud user identifier |
group_name | Subscription / permission group name |
Field naming per integrationTo see exactly which field name a specific destination expects, check that integration's guide. The mapping is one-to-one — Apphud just routes the same logical value under the destination's preferred name.
Reason values
The reason parameter has different value sets depending on the event:
Subscription expired (subscription / intro / promo / trial)
user_canceled— user canceled the subscription manuallybilling_issue— billing error during renewaldeclined_price_increase— user didn't agree to a recent price increaseunavailable_product— product wasn't available at the time of renewalunknown_error— unknown error
Subscription refunded (subscription / intro / promo)
app_issue— user canceled due to a real or perceived issue with your appanother_reason— canceled for another reason (e.g., accidental purchase)
Billing issue resolved
- The
reasonfield carries theproduct_idfrom the last active receipt at the time the billing issue was resolved.
User Properties
Alongside event payloads, Apphud sends a snapshot of Apphud-managed user properties for the user the event belongs to. Destination analytics use these for downstream segmentation.
These are Apphud-managed system properties — they're distinct from your own Custom User Properties set via the SDK. System properties use the [Apphud] prefix.
| Property | Description |
|---|---|
[Apphud] status-<group_name> | Subscription status for the named permission group. See Status values below |
[Apphud] autorenew-<group_name> | Whether auto-renew is on for the subscription in that group |
[Apphud] total_spent | Lifetime spend by the user, in USD |
[Apphud] paying | Whether the user has any paying status |
[Apphud] payments_count | Number of charge events for this user |
<group_name>placeholderReplace
<group_name>with the name of your Permission Group as configured in Product Hub → Permission groups. If your app has multiple groups (Premium, Pro, Lifetime), each appears as a separate property — e.g.,[Apphud] status-Premium,[Apphud] status-Pro.
Status values
All values are per Permission Group:
none— user has never purchased a subscription in this grouptrial— user is currently in trial periodintro— user is currently on an introductory offerregular— user has a subscription at the regular pricepromo— user is currently on a promotional offerrefunded— user refunded the subscriptionexpired— subscription lapsed
FAQ
Why does the same parameter appear under multiple names (e.g., local_price / af_revenue)?
local_price / af_revenue)?Different integrations use different field names for the same data. AppsFlyer expects af_revenue, Facebook expects _valueToSum, generic analytics expects local_price. Apphud routes the same logical value under the right name automatically — you don't configure this. See the per-integration guide under Integrations Overview for each destination's exact mapping.
Where does the USD value in usd_price come from?
usd_price come from?From the exchange rate at the time the event was created. The historical USD value is frozen at event time and doesn't change later. See About Analytics → About Currencies for the conversion source.
What's the difference between [Apphud] status-<group> properties and Custom User Properties?
[Apphud] status-<group> properties and Custom User Properties?[Apphud] status-<group>is Apphud-managed — Apphud sets it automatically based on the user's subscription state. You can read it in destinations but you can't set it.- Custom User Properties are properties you set via the SDK (
Apphud.setUserProperty, etc.) — anything app-specific like quiz answers, signup source, premium-feature flags.
Both flow to integration destinations alongside events.
Are these parameters sent on every event?
Most parameters are sent on every applicable event. reason is only sent on events where it makes sense (expirations, refunds, billing-issue resolutions). offer_id / offer_type only on events tied to a paid intro or promotional offer.
How do I see the actual payload for a specific event?
In Events → click a row → Event details → click View details on a specific connection → opens that integration's per-event log with the full payload.
