3rd Party Analytics
Superwall Events
The SDK automatically tracks some events, which power the charts in the dashboard.
We encourage you to track them in your own analytics as described in 3rd Party Analytics.
The following Superwall events can be used as placements to present paywalls:
app_install
app_launch
deepLink_open
session_start
paywall_decline
transaction_fail
transaction_abandon
survey_response
For more info about how to use these, check out how to add them using a Placement.
The full list of events is as follows:
Event Name | Action | Parameters |
---|---|---|
adServicesTokenRequestComplete | When the AdServices token request finishes. | ["token": String] |
adServicesTokenRequestFail | When the AdServices token request fails. | ["error": Error] |
adServicesTokenRequestStart | When the AdServices token request starts. | None |
app_close | Anytime the app leaves the foreground. | Same as app_install |
app_install | When the SDK is configured for the first time. | ["is_superwall": true, "app_session_id": String, "using_purchase_controller": Bool] |
app_launch | When the app is launched from a cold start. | Same as app_install |
app_open | Anytime the app enters the foreground. | Same as app_install |
configAttributes | When the attributes affecting Superwall’s configuration are set or changed. | None |
configFail | When the Superwall configuration fails to be retrieved. | None |
configRefresh | When the Superwall configuration is refreshed. | None |
confirmAllAssignments | When all experiment assignments are confirmed. | None |
customPlacement | When the user taps on an element in the paywall that has a custom_placement action. | ["name": String, "params": [String: Any], "paywallInfo": PaywallInfo] |
deepLink_open | When a user opens the app via a deep link. | ["url": String, "path": String", "pathExtension": String, "lastPathComponent": String, "host": String, "query": String, "fragment": String] + any query parameters in the deep link URL |
device_attributes | When device attributes are sent to the backend every session. | Includes app_session_id , app_version , os_version , device_model , device_locale , and various hardware/software details. |
first_seen | When the user is first seen in the app, regardless of login status. | Same as app_install |
freeTrial_start | When a user completes a transaction for a subscription product with an introductory offer. | Same as subscription_start |
identityAlias | When the user’s identity aliases after calling identify . | None |
nonRecurringProduct_purchase | When the user purchases a non-recurring product. | Same as subscription_start |
paywall_close | When a paywall is closed (either manually or after a transaction succeeds). | [“paywall_webview_load_complete_time”: String?, “paywall_url”: String, “paywall_response_load_start_time”: String?, “paywall_products_load_fail_time”: String?, “secondary_product_id”: String, “feature_gating”: Int, “paywall_response_load_complete_time”: String?, “is_free_trial_available”: Bool, “is_superwall”: true, “presented_by”: String, “paywall_name”: String, “paywall_response_load_duration”: String?, “paywall_identifier”: String, “paywall_webview_load_start_time”: String?, “paywall_products_load_complete_time”: String?, “paywall_product_ids”: String, “tertiary_product_id”: String, “paywall_id”: String, “app_session_id”: String, “paywall_products_load_start_time”: String?, “primary_product_id”: String, “survey_attached”: Bool, “survey_presentation”: String?] |
paywall_decline | When a user manually dismisses a paywall. | Same as paywall_close |
paywall_open | When a paywall is opened. | Same as paywall_close |
paywallPresentationRequest | When something happened during the paywall presentation, whether a success or failure. | [“source_event_name”: String, “status”: String, “is_superwall”: true, “app_session_id”: String, “pipeline_type”: String, “status_reason”: String] |
paywallProductsLoad_complete | When the request to load a paywall’s products completes. | Same as paywallResponseLoad_start |
paywallProductsLoad_fail | When the request to load a paywall’s products fails. | Same as paywallResponseLoad_start |
paywallProductsLoad_retry | When the request to load a paywall’s products fails and is being retried. | ["triggeredPlacementName": String?, "paywallInfo": PaywallInfo, "attempt": Int] |
paywallProductsLoad_start | When the request to load a paywall’s products starts. | Same as paywallResponseLoad_start |
paywallResponseLoad_complete | When a paywall request to Superwall’s servers completes. | Same as paywallResponseLoad_start |
paywallResponseLoad_fail | When a paywall request to Superwall’s servers fails. | Same as paywallResponseLoad_start |
paywallResponseLoad_notFound | When a paywall request returns a 404 error. | Same as paywallResponseLoad_start |
paywallResponseLoad_start | When a paywall request to Superwall’s servers has started. | Same as app_install + ["is_triggered_from_event": Bool] |
paywallWebviewLoad_complete | When a paywall’s webpage completes loading. | Same as paywall_close |
paywallWebviewLoad_fail | When a paywall’s webpage fails to load. | Same as paywall_close |
paywallWebviewLoad_fallback | When a paywall’s webpage fails and loads a fallback version. | Same as paywall_close |
paywallWebviewLoad_start | When a paywall’s webpage begins to load. | Same as paywall_close |
paywallWebviewLoad_timeout | When the loading of a paywall’s webpage times out. | Same as paywall_close |
reset | When Superwall.reset() is called. | None |
restoreComplete | When a restore completes successfully. | None |
restoreFail | When a restore fails. | ["message": String] |
restoreStart | When a restore is initiated. | None |
session_start | When the app is opened after at least 60 minutes since last app_close . | Same as app_install |
shimmerViewComplete | When the shimmer view stops showing. | None |
shimmerViewStart | When the shimmer view starts showing. | None |
subscription_start | When a user completes a transaction for a subscription product without an introductory offer. | [“product_period_days”: String, “product_price”: String, “presentation_source_type”: String?, “paywall_response_load_complete_time”: String?, “product_language_code”: String, “product_trial_period_monthly_price”: String, “paywall_products_load_duration”: String?, “product_currency_symbol”: String, “is_superwall”: true, “app_session_id”: String, “product_period_months”: String, “presented_by_event_id”: String?, “product_id”: String, “trigger_session_id”: String, “paywall_webview_load_complete_time”: String?, “paywall_response_load_start_time”: String?, “product_raw_trial_period_price”: String, “feature_gating”: Int, “paywall_id”: String, “product_trial_period_daily_price”: String, “product_period_years”: String, “presented_by”: String, “product_period”: String, “paywall_url”: String, “paywall_name”: String, “paywall_identifier”: String, “paywall_products_load_start_time”: String?, “product_trial_period_months”: String, “product_currency_code”: String, “product_period_weeks”: String, “product_periodly”: String, “product_trial_period_text”: String, “paywall_webview_load_start_time”: String?, “paywall_products_load_complete_time”: String?, “primary_product_id”: String, “product_trial_period_yearly_price”: String, “paywalljs_version”: String?, “product_trial_period_years”: String, “tertiary_product_id”: String, “paywall_products_load_fail_time”: String?, “product_trial_period_end_date”: String, “product_weekly_price”: String, “variant_id”: String, “presented_by_event_timestamp”: String?, “paywall_response_load_duration”: String?, “secondary_product_id”: String, “product_trial_period_days”: String, “product_monthly_price”: String, “paywall_product_ids”: String, “product_locale”: String, “product_daily_price”: String, “product_raw_price”: String, “product_yearly_price”: String, “product_trial_period_price”: String, “product_localized_period”: String, “product_identifier”: String, “experiment_id”: String, “is_free_trial_available”: Bool, “product_trial_period_weeks”: String, “paywall_webview_load_duration”: String?, “product_period_alt”: String, “product_trial_period_weekly_price”: String, “presented_by_event_name”: String?] |
subscriptionStatus_didChange | When a user’s subscription status changes. | ["is_superwall": true, "app_session_id": String, "subscription_status": String] |
surveyClose | When the user chooses to close a survey instead of responding. | None |
survey_response | When a user responds to a paywall survey. | ["survey_selected_option_title": String, "survey_custom_response": String, "survey_id": String, "survey_assignment_key": String, "survey_selected_option_id": String] |
touches_began | When the user touches the app’s UIWindow for the first time (if tracked by a campaign). | Same as app_install |
transaction_abandon | When the user cancels a transaction. | Same as subscription_start |
transaction_complete | When the user completes checkout and any product is purchased. | Same as subscription_start + [“web_order_line_item_id”: String, “app_bundle_id”: String, “config_request_id”: String, “state”: String, “subscription_group_id”: String, “is_upgraded”: String, “expiration_date”: String, “trigger_session_id”: String, “original_transaction_identifier”: String, “id”: String, “transaction_date”: String, “is_superwall”: true, “store_transaction_id”: String, “original_transaction_date”: String, “app_session_id”: String] |
transaction_fail | When the payment sheet fails to complete a transaction (ignores user cancellation). | Same as subscription_start + ["message": String] |
transaction_restore | When the user successfully restores their purchases. | Same as subscription_start |
transaction_start | When the payment sheet is displayed to the user. | Same as subscription_start |
transaction_timeout | When the transaction takes longer than 5 seconds to display the payment sheet. | ["paywallInfo": PaywallInfo] |
trigger_fire | When a registered placement triggers a paywall. | [“trigger_name”: String, “trigger_session_id”: String, “variant_id”: String?, “experiment_id”: String?, “paywall_identifier”: String?, “result”: String, “unmatched_rule_<id>”: “<outcome>”]. unmatched_rule_<id> indicates why a rule (with a specfiic experiment id) didn’t match. It will only exist if the result is no_rule_match. Its outcome will either be OCCURRENCE, referring to the limit applied to a rule, or EXPRESSION. |
user_attributes | When the user attributes are set. | [“aliasId”: String, “seed”: Int, “app_session_id”: String, “applicationInstalledAt”: String, “is_superwall”: true, “application_installed_at”: String] + provided attributes |