6 min read

Analytics

Last Updated - Platform v24.0

The 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...

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)