6 min read
Analytics
Last Updated - Platform v25.0The poq Android and iOS SDKs contain analytics layers that provide a plug-point for frontend analytics integrations. Poq screens and components send out of the box events through these layers to the analytics providers that your app uses.
We provide integrations for popular analytics providers but it is easy to plug-in your own. Integrations often map, filter or handle these events using separate provider specific API.
Outline
This document details the out of the box analytics events sent by screens and components of both platforms.
Platforms may send events with slight differences or additional parameters.
Events are documented as a short description of where they occur, a yaml representation of the event, and a changelog. Array parameters can be any number of items but for documentation purposes they are limited to only a few examples.
Use the following example as a key to understand the events.
Product Identifiers
We send the following identifier parameters for products:
The productId
parameter identifies the master product (Flowery Dress).
The externalId
parameter identifies the selected listing; the look / style of the product (Red Flowery Dress).
Most product events have this parameter.
The sku
parameter identifies the selected variant; the purchasable physical item (Small Red Flowery Dress).
Only variant specific events have this parameter.
User Tracking
The analytics layer cannot be used to track emails. All strings parameters are filtered to ensure emails are not tracked. Emails in strings are stripped or replaced with a placeholder.
The SDK send the PoqUserID
with some events.
The PoqUserID
is a poq frontend generated identifier that is refreshed on install and when the user is logged out.
It roughly identifiers a poq user session but should not be used to identify the real user.
From v23.1 onwards clients can return an ExternalId
from authentication responses.
The frontend stores this identifier with the user for analytics purposes.
Environment Tagging
Integrations can use the Switch Environment event to tag the user.
Some integrations have tag the user using the country code.
For iOS (from v23), most provided integrations will tag the user using the AppConfig
identifier.
Screen Tracking
Integrations can handle the View Screen event to call their specific API for screen tracking.
Account
These events are sent by account features.
Register
Sent when the user registers a new account.
signUp: userId: user_id # 123e4567-e89b-12d3-a456-426614174000 (PoqUserId) marketingOptIn: newsletter_accept? # 1 (true) / 0 (false)
Login
Sent when the user logs in to an existing account.
login: userId: user_id # 123e4567-e89b-12d3-a456-426614174000 (PoqUserId)
Logout
Sent when the user logs out.
logout: userId: new_user_id # 123e4567-e89b-12d3-a456-426614174000 (PoqUserId)
Update Profile
Sent when the user updates their account profile.
editDetails: userId: user_id # 123e4567-e89b-12d3-a456-426614174000 (PoqUserId) marketingOptIn: newsletter_accept? # 1 (true) / 0 (false) # v25+
Account (Loyalty)
These events are sent by Loyalty features.
View Loyalty Card
Sent when the user navigates to view their loyalty card.
viewClubCard: # v25+ customerId: customer_id # 123827492
Add Wallet Pass
Sent when the user adds their loyalty card to the OS wallet.
addWalletPass: # v25+ customerId: customer_id # 123827492
View Rewards
Sent when the user navigates to view their loyalty rewards.
viewRewards: # v25+ customerId: customer_id # 123827492
Sent when the user navigates to view a specific loyalty reward.
viewRewardDetails: # v25+ customerId: customer_id # 123827492 rewardId: reward_id # AD2913 title: reward_title # Free Tie
Apply Reward
Sent when the user taps to apply a loyalty reward / voucher to their cart.
applyReward: # v25+ customerId: customer_id # 123827492 rewardId: reward_id # AD2913 title: reward_title # Free Tie
Cart
These events are sent by Cart features.
View Cart
Sent when the user navigates to their Cart (after loading it).
viewBag: items: - productId: product_id # PRD28104D externalId: listing_id # PRD28104D-RED sku: sku # PRD28104D-RED-M productTitle: product_name # Red Dress price: price # 12.99 quantity: quantity # 1 - ... currency: currency # USD quantity: quantity # 2 total: total # 25.98 (quantity * price)
Update Cart
Sent when the user bulk updates their Cart.
bagUpdate: items: # v25+ - productId: product_id # PRD28104D externalId: listing_id # PRD28104D-RED sku: sku # PRD28104D-RED-M productTitle: product_name # Red Dress price: price # 12.99 quantity: quantity # 1 - ... currency: currency # USD quantity: quantity # 2 total: total # 25.98 (quantity * price)
Add Cart Item
Sent when the user adds an item to their Cart.
addToBag: productId: product_id # PRD28104D externalId: listing_id # PRD28104D-RED sku: variant_id # PRD28104D-RED-M productTitle: product_name # Red Dress price: product_price # 12.99 currency: currency # USD quantity: quantity # 2 total: total # 25.98 (quantity * price) items: # Optional; requires API support # v25+ - productId: product_id # PRD28104D externalId: listing_id # PRD28104D-RED sku: sku # PRD28104D-RED-M productTitle: product_name # Red Dress price: price # 12.99 quantity: quantity # 1 - ...
Remove Cart Item
Sent when the user removes an item from their Cart.
removeFromBag: productId: product_id # PRD28104D externalId: listing_id # PRD28104D-RED sku: variant_id # PRD28104D-RED-M productTitle: product_name # Red Dress price: product_price # 12.99 currency: currency # USD quantity: quantity # 2 total: total # 25.98 (quantity * price)
Add Cart Voucher
Sent when the user add a voucher to their Cart.
applyVoucher: voucher: voucher_id # ALL20OFF items: # v25+ - productId: product_id # PRD28104D externalId: listing_id # PRD28104D-RED sku: sku # PRD28104D-RED-M productTitle: product_name # Red Dress price: price # 12.99 quantity: quantity # 1 - ... currency: currency # USD # v25+ quantity: quantity # 2 # v25+ total: total # 25.98 (quantity * price) # v25+
Remove Cart Voucher
Sent by iOS when the user remove a voucher from their Cart.
removeVoucher: id: voucher_id # ALL20OFF items: # v25+ - productId: product_id # PRD28104D externalId: listing_id # PRD28104D-RED sku: sku # PRD28104D-RED-M productTitle: product_name # Red Dress price: price # 12.99 quantity: quantity # 1 - ... currency: currency # USD # v25+ quantity: quantity # 2 # v25+ total: total # 25.98 (quantity * price) # v25+
Catalogue
These events are sent by the core catalogue features such as the Shop, Product List and Product Details screens.
View Product List (Category)
Sent when the user navigates to the Product List, via a category, from the Shop screen or a category search suggestion.
viewPlp: categoryId: category_id # new-in categoryTitle: category_name # New In categoryTree: category_tree? # dresses>petite>new-in parentCategoryId: category_parent_id? # petite (data-dependent)
View Product List (Search Results)
Sent when the user navigates to the Product List from a search result.
viewSearchResults: query: search_query # summer type: result_type # search / viewPlp (category result) result: any_products? # successful (true) / unsuccessful (false)
Sort Product List
Sent when the user changes the sort order on a Product List screen.
sortProducts: type: sort_id # price-highest
Filter Product List
Sent when the user applies filters to a Product List screen.
Filter parameters are dynamic; one for each of the applied filters.
filterProducts: minPrice: price_filter_min? # 0.00 maxPrice: price_filter_max? # 120.00
# Applied filters based on ids and values returned by backend. ($list_filter_id): list_filter_id_values # red;blue;yellow ($toggle_filter_id): toggle_filter_value # 0 (false) / 1 (true) ($other_filter_id): # '' ...:
Scan Product Barcode
Sent when the user scans a Product barcode.
barcodeScan: type: input_method # Scan / Manual EAN: barcode_value # 112351232 (not always an EAN) result: result # successful / unsuccessful
Sent when the user scans a Product barcode and a Product result is found.
barcodeScan: type: input_method # Scan / Manual EAN: barcode_value # 112351232 (not always an EAN) result: 'successful' productId: product_id # PRD28104D externalId: listing_id? # PRD28104D-RED productTitle: product_name? # Red Dress
View Product
Sent when the user navigates to a Product Details screen.
viewPdp: productId: product_id # PRD28104D externalId: listing_id # PRD28104D-RED sku: variant_id? # PRD28104D-RED-S (only if opened for a specific variant) productTitle: product_name # Red Dress price: product_price # 12.99 currency: currency # USD
View Product Images
Sent when the user views the full screen images from the Product Details screen.
fullScreenImageView: productId: product_id # PRD28104D externalId: listing_id # PRD28104D-RED sku: variant_id? # PRD28104D-RED-S (only if opened for a specific variant) productTitle: product_name # Red Dress
View Product Video
Sent when the user views a Product video from the Product Details screen.
videoPlay: productId: product_id # PRD28104D externalId: listing_id # PRD28104D-RED sku: variant_id? # PRD28104D-RED-S (only if opened for a specific variant) productTitle: product_name # Red Dress
View Product Reviews
Sent when the user navigates to the Product Review List screen (after loading the reviews).
readReviews: productId: product_id # PRD28104D externalId: listing_id? # PRD28104D-RED sku: variant_id? # PRD28104D-RED-S productTitle: product_name # Red Dress
Sort Product Reviews
Sent when the user changes the sort order on a Product Review List screen.
sortReviews: id: sort_id # highest-rating productId: product_id # PRD28104D externalId: listing_id? # PRD28104D-RED sku: variant_id? # PRD28104D-RED-S
Submit Product Review
Sent when the user taps to submit a new Product Review.
submitReview: productId: product_id # PRD28104D externalId: listing_id? # PRD28104D-RED sku: variant_id? # PRD28104D-RED-S rating: rating # 3 isRecommended: recommends? # 0 (false) / 1 (true)
Share Product
Sent when the user starts to share a Product.
share: productId: product_id # PRD28104D externalId: listing_id? # PRD28104D-RED productTitle: product_name # Red Dress
Checkout
These events are sent during the user checkout journey by Web or Native Checkouts.
Checkout
Sent when the user taps Checkout (at the start of the checkout journey).
beginCheckout: method: checkout_method # web / applePay / expressApplePay / card items: - productId: product_id # PRD28104D externalId: listing_id # PRD28104D-RED sku: sku # PRD28104D-RED-M productTitle: product_name # Red Dress price: price # 12.99 quantity: quantity # 1 - ... quantity: quantity # 3 (total quantity of items) total: total # 20.96 currency: currency # USD
Checkout URL Change
Sent every time the Web Checkout webpage changes URL (even when not visible to the user).
checkoutUrlChange: url: url # https://pay...com?id=299323&total=1...
Purchase
Sent when the user successfully makes a purchase.
order: transactionId: order_id # ORD12948183402 method: checkout_method # web / applePay / expressApplePay / card items: - productId: product_id # PRD28104D externalId: listing_id # PRD28104D-RED sku: sku # PRD28104D-RED-M productTitle: product_name # Red Dress price: price # 12.99 quantity: quantity # 1 - ... quantity: quantity # 3 (total quantity of items) value: total # 20.96 currency: currency # USD userId: user_id # 123e4567-e89b-12d3-a456-426614174000 (PoqUserId) delivery: subtotal_delivery # 1.99 (data-dependent) rrp: subtotal_rrp # 18.00 (data-dependent)
Purchase Failed
Sent when a user purchase / transaction fails. Only sent by the Express Checkout feature.
purchaseFailed: error: error # Something went wrong
Content
These events are sent by additional content features such as Home, AppStories, Onboarding, Carousels...
Tap Slot Component
New in v25; sent when the user taps a Dynamic Content component.
slotComponentTap: type: component_type # image id: content_id # home-banner-3
Tap Banner
Sent when the user taps a Home screen banner.
The type
parameter is a joined string made from the banner content and action types.
bannerTap: title: banner_title # Check out our new-in collection type: banner_content # image-page, gif-category...
Tap Carousel Item
Sent when the user taps an image or normal Carousel item from any screen.
carouselItemTap: carousel: 'image' title: carousel_title # Trending Categories item: item_title # New-In
Sent when the user taps on a Product Carousel item (to navigate to the Product Details screen).
carouselItemTap: carousel: 'product' carouselId: carousel_id? # home-banner-3 title: carousel_title # Recently Viewed id: listing_analytics_id? # item-5 productId: product_id # PRD28104D externalId: listing_id? # PRD28104D-RED sku: variant_id? # PRD28104D-RED-S
Sent when the user taps on a UGC Carousel item (to navigate to the Content Details screen).
carouselItemTap: carousel: 'ugc' title: carousel_title # Trending Categories id: item_id # 123123
- Updated carousel parameter and added ugc with v24.
App Story Interaction
Sent when the user views a Card within an App Story on the App Story screen.
appStories: title: story_title # The new-in collection cardTitle: card_title # Jeans action: open_type # open (user tap) / autoOpen
Sent when the user closes the App Story screen.
appStories: title: story_title # The new-in collection cardTitle: card_title # Jeans action: 'Dismiss'
Sent when the user taps the action on a Card at the bottom of the App Story screen
appStories: title: story_title # The new-in collection cardTitle: card_title # Jeans action: action # PDPSwipe (Product Details) / PLPSwipe (Product List) / webviewSwipe (WebView) / videoSwipe (Full screen Video)
Lookbook
Sent when the user taps the 'Shop the Look' button on a Lookbook screen.
lookbookTap: title: lookbook_title # Summer Vibes screenNumber: page_number # 2 type: 'shopTheLook'
Sent when the user taps a hotspot on a Lookbook (with hotspots) screen.
lookbookTap: title: lookbook_title # Summer Vibes screenNumber: page_number # 2 type: 'hotspot' productId: product_id # PRD28104D externalId: listing_id? # PRD28104D-RED
Launch Pages
Send when launch pages fails to load.
launchPages: action: 'failed'
Onboarding Interaction
Sent when the user begins Onboarding.
onboarding: action: 'begin'
Sent when the user completes Onboarding.
onboarding: action: 'complete'
Sent when the user skips Onboarding.
onboarding: # v25+ action: 'skip' page: page_index # 4 (Page 5)
Push Prompt Interaction
Sent when the user allows notifications via the Push Prompt or the Onboarding Push Prompt page. Has changed in v25.
pushPrompt: action: 'allow'
Sent when the user denies notifications via the Onboarding Push Prompt page. Has changed in v25.
pushPrompt: action: 'dismiss'
Stores
These events are sent by the Store Finder and Store Details features.
Store Finder
Sent when the user navigates to the Store Details screen.
storeFinder: storeName: store_name # Poq London action: 'Details'
Sent when the user performs an action on the Store Details screen.
storeFinder: storeName: store_name # Poq London action: action # Directions / PhoneCall
View Store Availability
Sent when the user navigates to the Store Finder screen to check a products in-store availability.
viewStoreAvailability: productId: product_id # PRD28104D externalId: listing_id? # PRD28104D-RED sku: variant_id? # PRD28104D-RED-S
View Store Availability Details
Sent when the user navigates to the Store Details screen to check a products in-store availability.
viewStoreAvailabilityDetails: storeName: store_name # Poq London productId: product_id # PRD28104D externalId: listing_id? # PRD28104D-RED sku: variant_id? # PRD28104D-RED-S
In-Store Mode
Sent when the user activates in-store mode.
inStoreActivate: id: store_id # store-10 title: store_name # London
Sent when the user deactivates in-store mode.
inStoreDeactivate: id: store_id # store-10 title: store_name # London
Sent when the user taps an nearby store push notification.
inStorePushOpen: id: store_id # store-10 title: store_name # London (if available)
Sent when the user taps an in-store action carousel item.
inStoreCarouselTap: id: action_id # store-finder title: action_title # Store Finder
SwipeToLike
These events are sent by the Swipe to Like feature (for wishlisting).
Swipe to Like
Sent when the user likes (wishlists) or swipes to like an item on the Swipe to Like feature.
swipeToLike: productId: product_id # PRD28104D externalId: listing_id? # PRD28104D-RED sku: variant_id? # PRD28104D-RED-S productTitle: product_name # Red Dress
Swipe to Dislike
Sent when the user dislikes or swipes to dislike an item on the Swipe to Like feature.
swipeToDislike: productId: product_id # PRD28104D externalId: listing_id? # PRD28104D-RED sku: variant_id? # PRD28104D-RED-S productTitle: product_name # Red Dress
Tap Swipe to Like Item
Sent when the user taps an item on the Swipe to Like feature.
swipeToLikeOpenPDP: productId: product_id # PRD28104D externalId: listing_id? # PRD28104D-RED sku: variant_id? # PRD28104D-RED-S productTitle: product_name # Red Dress
User Content
These events are sent by User (Generated) Content features.
Report Content
Sent when the user reports content.
reportContent: id: content_id # 23112
- Added with ugc in v24.
Wishlist
These events are sent by Wishlist features.
Add Wishlist Item
Sent when the user adds a product to the Wishlist.
addToWishlist: productId: product_id # PRD28104D externalId: listing_id? # PRD28104D-RED sku: variant_id? # PRD28104D-RED-S productTitle: product_name # Dress price: product_price # 12.99 total: total # 25.98 (quantity * price) currency: currency # USD quantity: quantity # 2
Remove Wishlist Item
Sent when the user removes a product from the Wishlist.
removeFromWishlist: productId: product_id # PRD28104D externalId: listing_id? # PRD28104D-RED sku: variant_id? # PRD28104D-RED-S productTitle: product_name # Dress price: product_price # 12.99 currency: currency # USD
Clear Wishlist
Sent when the user clears their Wishlist.
clearWishlist:
Other
These events are app or outlier events.
App Launch
Sent when the app is launched from not open. This is not sent when the app is opened from the background.
appOpen: method: method # Direct / Push / Deeplink / Shortcut
Switch Environment
Sent when the app switches Config (iOS) or Country / Currency (Android).
switchCountry: countryCode: country_code # UK, US... currencyCode: currency_code # GBP, USD... isFirst: initial_select? # 1 (true) / 0 (false)
View Screen
Sent when the user navigates to a new screen.
This is an iOS specific event and certain providers track this automatically which can lead to duplication. Android relies on providers automatically tracking this. It is notoriously hard to track this in a good or unified way since screens are not necessarily screens on either OS.
screen: screenClass: screen_class # CartActivity, CartViewController... screenName: screen_name # Cart Screen (code-dependent)