Paywall component interaction events
Reference for paywall_component_interacted analytics events across platforms
The paywall_component_interacted event is emitted when a user changes a paywall control (tabs, toggles, carousels, packages, buttons, purchase actions, etc.). It is user-driven: for example, carousel auto-advance does not send this event when the user did not drag or tap to change the page.
Like other paywall analytics events, payloads include shared context such as session_id, offering_id, paywall_id, paywall_revision (when available), display_mode, dark_mode, locale, and a timestamp, plus integration-specific wrappers (see sample JSON under Paywalls events on Amplitude and Mixpanel).
Interaction-specific properties
Package and product context use the same JSON keys on iOS, Android, and Web (snake_case in the wire payload). Only a subset applies per component_type / interaction.
| JSON key (wire) | Description |
|---|---|
component_type | Interaction category (see tables below). |
component_value | Type-specific value (e.g. tab id, on / off, button action, purchase flow discriminator). |
component_name | Optional; builder-dependent display name for the control. |
component_url | Present when relevant (e.g. URL buttons, some purchase flows). |
origin_index | Starting index (e.g. carousel, tab strip). |
destination_index | Ending index. |
origin_context_name | Optional context label for the origin index. |
destination_context_name | Optional context label for the destination index. |
default_index | Default / baseline index when applicable. |
origin_package_id | Package identifier at the start of a transition. |
destination_package_id | Package identifier after the transition. |
default_package_id | Default package when applicable (e.g. sheet context). |
current_package_id | Active package before a change (e.g. sheet close). |
resulting_package_id | Package after a change (e.g. sheet close). |
origin_product_id | Product identifier aligned with origin_package_id. |
destination_product_id | Product identifier aligned with destination_package_id. |
default_product_id | Product aligned with default_package_id. |
current_product_id | Product aligned with current_package_id. |
resulting_product_id | Product aligned with resulting_package_id. |
SDKs may fill missing product ids from package ids when the mapping is known at event time.
Interactions from paywalls built in the current editor
These are the component_type values you will see for paywalls created and shipped with the current RevenueCat Paywalls experience (dashboard editor, current templates).
component_type | Typical component_value / notes |
|---|---|
tab | Tab identifier; index fields may describe tab positions. |
switch | on or off. |
carousel | User-driven page changes; includes origin/destination indices. Auto-advance alone does not emit this event. |
button | Non-purchase actions such as restore_purchases, navigate_to_terms, navigate_to_privacy_policy, navigate_to_url, etc. |
text | e.g. navigate_to_url with component_url when applicable. |
package | Package selection / emphasis changes; includes package transition ids when relevant. |
package_selection_sheet | Sheet lifecycle (e.g. open/close); may include current_* and resulting_* package/product ids on close. |
purchase_button | Discriminators such as in_app_checkout, web_checkout, web_product_selection, custom_web_checkout; component_url when relevant. |
Interactions from first-generation (legacy) paywall templates
Older, first-generation paywall templates may emit overlapping concepts with different component_type / component_value pairs, for example:
| Control / action | Typical mapping |
|---|---|
| All plans / toggle plans | component_value such as toggle_all_plans (from controls like All plans). |
| Restore | restore_button style interactions. |
| Terms / privacy | terms_link, privacy_link, or button / navigate_to_* on editor-built paywalls. |
| Tier selector | tier_selector. |
| Purchase row | purchase_button with in_app_checkout where applicable. |
component_name may be absent on some native paths depending on the template and SDK version; treat it as optional.
For how paywalls are presented on each platform, see Displaying Paywalls.