Auto-Tracked Events
The SDK records the events below automatically. You do not need to calltrack() for any of
them, and doing so produces duplicate data — two rows for the same moment, which silently
double-counts every metric built on it.
These events can be used as:
- Experiment conversion goals in the Console
- Webhook triggers for server-side integrations
- In-app message and survey triggers
- Analytics filters in dashboards and exports
This page is generated from the SDK source. Every event below is emitted by a real call site
in the iOS SDK (82 events). CI (
pnpm check:auto-tracked-events) fails if the SDK gains an
event that is not listed here, so the page cannot drift out of date.Session & lifecycle
Onboarding
Permissions
Paywalls & purchases
Purchase event details
is_trial: withbillingProviderstoreKit2(AppDNA’s own billing),purchase_completed.is_trialis a Boolean on both platforms, and a free-trial start reportsprice0. On iOSpriceis the amount actually charged (the intro price for a paid introductory offer). The RevenueCat and Adapty bridges omitis_trial— an app onrevenueCatsees no change in trial event revenue.- Late purchases: a
purchase_completedreported after the purchase call has ended carries an emptypaywall_id(""). On iOS (.storeKit2) these are interrupted, Ask-to-Buy and offer-code purchases, reported whenever StoreKit delivers the transaction — at app start or while the app runs. On Android they are purchases whose verification failed earlier and purchases made outside the app, reported at every return to the foreground (app start included), atidentify, during a restore, and onrefreshEntitlementCache(). is_consumableis sent on both platforms, from different sources. On Android it istruefor a product marked Consumable in Monetization → Products. On iOS it comes from the App Store product type:truefor a product configured as Consumable in App Store Connect (the console flag is not read).emitted_byis"sdk"on SDK billing events. It is reserved:AppDNA.trackdrops anemitted_byyou pass.cancel_semanticsonsubscription_canceled:"vanished_not_renewing"(the SDK saw the subscription disappear while not auto-renewing) or"auto_renew_off"(a billing provider webhook reported auto-renew turned off).delivery_idon push events identifies one delivery to one device; it requires an AppDNA server from this release.
Subscriptions
Paid state you report yourself
source: "host" is what distinguishes your assertion from a purchase the SDK observed, so the two
are never confused in the warehouse. There is no user id in the payload: the SDK attaches the
identity it already holds. Whether these count toward your bill is part of your agreement — see
Who counts as a paying user.
Web entitlements
Screens, flows & slots
In-app messages
Push
Surveys & feedback
Onboarding chat step
Deep links
Experiments
Identity
Platform differences
The tables above are generated from the iOS SDK. Android, Flutter and React Native emit the same event names for the same moments — that parity is enforced by the shared behavioural fixtures inpackages/sdk-shared-fixtures/ — but a platform may not implement every surface yet. If an event
you expect never arrives, check the platform SDK page under SDKs before
implementing it yourself.
Defining your own events
Anything not listed above is yours to define — the product moments no SDK can infer: the action that means a user got value, what counts as activated, the loop a healthy user repeats. See Events for thetrack() contract, and
Analytics & feedback for how they reach your dashboards.

