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 NameActionParameters
adServicesTokenRequestCompleteWhen the AdServices token request finishes.["token": String]
adServicesTokenRequestFailWhen the AdServices token request fails.["error": Error]
adServicesTokenRequestStartWhen the AdServices token request starts.None
app_closeAnytime the app leaves the foreground.Same as app_install
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 start.Same as app_install
app_openAnytime the app enters the foreground.Same as app_install
configAttributesWhen the attributes affecting Superwall’s configuration are set or changed.None
configFailWhen the Superwall configuration fails to be retrieved.None
configRefreshWhen the Superwall configuration is refreshed.None
confirmAllAssignmentsWhen all experiment assignments are confirmed.None
customPlacementWhen the user taps on an element in the paywall that has a custom_placement action.["name": String, "params": [String: Any], "paywallInfo": PaywallInfo]
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
device_attributesWhen 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_seenWhen the user is first seen in the app, regardless of login status.Same as app_install
freeTrial_startWhen a user completes a transaction for a subscription product with an introductory offer.Same as subscription_start
identityAliasWhen the user’s identity aliases after calling identify.None
nonRecurringProduct_purchaseWhen the user purchases a non-recurring product.Same as subscription_start
paywall_closeWhen 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_declineWhen a user manually dismisses a paywall.Same as paywall_close
paywall_openWhen a paywall is opened.Same as paywall_close
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]
paywallProductsLoad_completeWhen the request to load a paywall’s products completes.Same as paywallResponseLoad_start
paywallProductsLoad_failWhen the request to load a paywall’s products fails.Same as paywallResponseLoad_start
paywallProductsLoad_retryWhen the request to load a paywall’s products fails and is being retried.["triggeredPlacementName": String?, "paywallInfo": PaywallInfo, "attempt": Int]
paywallProductsLoad_startWhen the request to load a paywall’s products starts.Same as paywallResponseLoad_start
paywallResponseLoad_completeWhen a paywall request to Superwall’s servers completes.Same as paywallResponseLoad_start
paywallResponseLoad_failWhen a paywall request to Superwall’s servers fails.Same as paywallResponseLoad_start
paywallResponseLoad_notFoundWhen a paywall request returns a 404 error.Same as paywallResponseLoad_start
paywallResponseLoad_startWhen a paywall request to Superwall’s servers has started.Same as app_install + ["is_triggered_from_event": Bool]
paywallWebviewLoad_completeWhen a paywall’s webpage completes loading.Same as paywall_close
paywallWebviewLoad_failWhen a paywall’s webpage fails to load.Same as paywall_close
paywallWebviewLoad_fallbackWhen a paywall’s webpage fails and loads a fallback version.Same as paywall_close
paywallWebviewLoad_startWhen a paywall’s webpage begins to load.Same as paywall_close
paywallWebviewLoad_timeoutWhen the loading of a paywall’s webpage times out.Same as paywall_close
resetWhen Superwall.reset() is called.None
restoreCompleteWhen a restore completes successfully.None
restoreFailWhen a restore fails.["message": String]
restoreStartWhen a restore is initiated.None
session_startWhen the app is opened after at least 60 minutes since last app_close.Same as app_install
shimmerViewCompleteWhen the shimmer view stops showing.None
shimmerViewStartWhen the shimmer view starts showing.None
subscription_startWhen 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_didChangeWhen a user’s subscription status changes.["is_superwall": true, "app_session_id": String, "subscription_status": String]
surveyCloseWhen the user chooses to close a survey instead of responding.None
survey_responseWhen 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_beganWhen the user touches the app’s UIWindow for the first time (if tracked by a campaign).Same as app_install
transaction_abandonWhen the user cancels a transaction.Same as subscription_start
transaction_completeWhen 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_failWhen the payment sheet fails to complete a transaction (ignores user cancellation).Same as subscription_start + ["message": String]
transaction_restoreWhen the user successfully restores their purchases.Same as subscription_start
transaction_startWhen the payment sheet is displayed to the user.Same as subscription_start
transaction_timeoutWhen the transaction takes longer than 5 seconds to display the payment sheet.["paywallInfo": PaywallInfo]
trigger_fireWhen 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_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