We encourage you to track them in your own analytics as described in 3rd Party Analytics.

The following Superwall events can be used as triggers 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 Using Implicit Events.

The full list of events is as follows:

Event NameActionParameters
app_installWhen the SDK is configured for the first time[“is_superwall”: true, “app_session_id”: String, “using_purchase_controller”: Bool]
app_launchWhen the app is launched from a cold startSame as app_install
session_startWhen the app is opened either from a cold start, or after at least 60 minutes since last app_close.Same as app_install
first_seenWhen the user is first seen in the app, regardless of whether the user is logged in or not.Same as app_install
app_closeAnytime the app leaves the foregroundSame as app_install
app_openAnytime the app enters the foregroundSame as app_install
subscription_startWhen the user successfully completes a transaction for a subscription product with no introductory offers[“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?]
freeTrial_startWhen the user successfully completes a transaction for a subscription product with an introductory offerSame as subscription_start
nonRecurringProduct_purchaseWhen the user purchased a non recurring productSame as subscription_start
transaction_startWhen the payment sheet is displayed to the userSame as subscription_start
transaction_abandonWhen the user cancels a transactionSame as subscription_start
transaction_failWhen the payment sheet fails to complete a transaction (ignores user canceling the transaction)Same as subscription_start + [“message”: String]
transaction_restoreWhen the user successfully restores their purchasesSame as subscription_start
transaction_completeWhen the user completes checkout in the payment sheet and any product was “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]
paywall_closeWhen a paywall is closed (either by user interaction or do to a transaction succeeding)[“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_declineWhen a user manually dismisses a paywall.Same as paywall_close
paywall_openWhen a paywall is openedSame as paywall_close
paywallWebviewLoad_startWhen a paywall’s URL begins to loadSame as paywall_close
paywallWebviewLoad_failWhen a paywall’s URL fails to loadSame as paywall_close
paywallWebviewLoad_timeoutWhen the loading of a paywall’s website times out.Same as paywall_close
paywallWebviewLoad_completeWhen a paywall’s URL completes loadingSame as paywall_close
trigger_fireWhen a tracked event 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.
paywallResponseLoad_startWhen a paywall’s request to Superwall’s servers has startedSame as app_install +[“is_triggered_from_event”: Bool]
paywallResponseLoad_failWhen a paywall’s request to Superwall’s servers has failedSame as paywallResponseLoad_start
paywallResponseLoad_completeWhen a paywall’s request to Superwall’s servers is completeSame as paywallResponseLoad_start
paywallResponseLoad_notFoundWhen a paywall’s request to Superwall’s servers returned a 404 error.Same as paywallResponseLoad_start
paywallProductsLoad_startWhen the request to load the paywall’s products started.Same as paywallResponseLoad_start
paywallProductsLoad_failWhen the request to load the paywall’s products failed.Same as paywallResponseLoad_start
paywallProductsLoad_completeWhen the request to load the paywall’s products completed.Same as paywallResponseLoad_start
user_attributesWhen the user attributes are set.[“aliasId”: String, “seed”: Int, “app_session_id”: String, “applicationInstalledAt”: String, “is_superwall”: true, “application_installed_at”: String] + provided attributes
subscriptionStatus_didChangeWhen the user’s subscription status changes[“is_superwall”: true, “app_session_id”: String, “subscription_status”: String]
paywallPresentationRequestWhen 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]
deepLink_openWhen 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
survey_responseWhen the response to a paywall survey as been recorded.Same as subscription_start + [“survey_selected_option_title”: String, “survey_custom_response”: String, “survey_id”: String, “survey_assignment_key”: String, “survey_selected_option_id”: String]
touches_beganWhen the user touches the app’s UIWindow for the first time. This is only tracked if there is an active touches_began trigger in a campaign.Same as app_install
device_attributesWhen device attributes are sent to the backend every session.[“app_session_id”: String, “is_superwall”: Bool, “publicApiKey”: String, “platform”: String, “appUserId”: String, “aliases”:[String], “vendorId”: String, “appVersion”: String, “osVersion”: String, “deviceModel”: String, “deviceLocale”: String, “deviceLanguageCode”: String, “deviceCurrencyCode”: String, “deviceCurrencySymbol”: String, “interfaceType”: String, “timezoneOffset”: Int, “radioType”: String, “interfaceStyle”: String, isLowPowerModeEnabled: Bool, “bundleId”: String, “appInstallDate”: String, “isMac”: Bool, “daysSinceInstall”: Int, “minutesSinceInstall”: Int, “daysSinceLastPaywallView”: Int?, “minutesSinceLastPaywallView”: Int?, “totalPaywallViews”: Int, “utcDate”: String, “localDate”: String, “utcTime”: String, “localTime”: String, “utcDateTime”: String, “localDateTime”: String, “isSandbox”: String, “subscriptionStatus”: String, “isFirstAppOpen”: Bool, “sdkVersion”: String, “sdkVersionPadded”: String, “appBuildString”: String, “appBuildStringNumber”: Int?]