storekit collects behavioural events to help you understand customer journeys, optimise conversions, and power marketing integrations. This page explains what we track, how data flows, and how events integrate with third-party platforms.
Native Event Collection
storekit automatically collects events across web and native apps without requiring additional code.
Core Commerce Events
Fired when a customer lands on the store. {
"event" : "active_on_site" ,
"properties" : {
"accountId" : "40586258-8a99-4651-b79f-0a1ab602a926" ,
"id" : 8709 ,
"slug" : "your-store"
}
}
Fired when a customer opens a product modal. {
"event" : "viewed_product" ,
"properties" : {
"id" : 98765 ,
"name" : "Flat White" ,
"currency" : "GBP" ,
"price" : 350 ,
"image" : "https://cdn.storekit.com/products/flat-white.jpg" ,
"plu" : "FW001" ,
"sku" : "SKU-FW-001"
}
}
Fired when an item is added to the basket. {
"event" : "add_to_cart" ,
"properties" : {
"id" : 98765 ,
"name" : "Flat White" ,
"price" : 400 ,
"image" : "https://cdn.storekit.com/products/flat-white.jpg" ,
"modifiers" : [
{
"id" : 111 ,
"name" : "Oat Milk" ,
"price" : 50
}
]
}
}
Fired when an item is removed from the basket. {
"event" : "remove_from_cart" ,
"properties" : {
"id" : 98765 ,
"name" : "Flat White" ,
"price" : 400 ,
"image" : "https://cdn.storekit.com/products/flat-white.jpg" ,
"modifiers" : []
}
}
Fired when the customer opens the checkout screen. {
"event" : "started_checkout" ,
"properties" : {
"currency" : "GBP" ,
"items" : [
{
"id" : 98765 ,
"name" : "Flat White" ,
"price" : 400 ,
"quantity" : 2 ,
"modifiers" : []
}
],
"venueSlug" : "your-store" ,
"value" : 8.00
}
}
Fired when payment is confirmed and the order is placed. {
"event" : "order_completed" ,
"properties" : {
"orderId" : "ord_789xyz" ,
"total" : 12.50 ,
"currency" : "GBP" ,
"venueSlug" : "your-store" ,
"order" : {
"items" : [ ... ],
"fulfillmentMethod" : "delivery" ,
"customer" : { ... }
}
}
}
Search & Discovery Events
Fired when a customer performs a search (debounced by 1 second). {
"event" : "products_searched" ,
"properties" : {
"query" : "coffee" ,
"resultCount" : 12
}
}
Fired when the upsell/cross-sell modal is displayed. {
"event" : "cross_sell_modal_view" ,
"properties" : {
"productCount" : 4 ,
"crossSellType" : "product"
}
}
crossSellType is either "product" or "category" depending on configuration.
Discount Events
Fired when a customer submits a discount code. {
"event" : "discount_entered" ,
"properties" : {
"code" : "SUMMER20"
}
}
Fired when a discount code is successfully applied. {
"event" : "discount_applied" ,
"properties" : {
"discount_id" : 456 ,
"discount_name" : "Summer Sale" ,
"discount_amount" : 500 ,
"discount_type" : "percentage"
}
}
Fired when a discount code is rejected. {
"event" : "discount_denied" ,
"properties" : {
"discount_code" : "EXPIRED10" ,
"reason" : "Code has expired" ,
"status_code" : 400
}
}
Fired when a promotional offer becomes visible. {
"event" : "viewed_offer" ,
"properties" : {
"offerId" : 123 ,
"linkId" : "link_abc" ,
"type" : "banner" ,
"value" : "20% off"
}
}
Fired when a customer clicks on a promotional offer. {
"event" : "click_offer" ,
"properties" : {
"offerId" : 123 ,
"linkId" : "link_abc" ,
"type" : "banner" ,
"value" : "20% off"
}
}
Stories Events
Fired when a customer opens the story viewer. {
"event" : "story_viewer_opened" ,
"properties" : {
"storyId" : 789 ,
"storyIndex" : 0 ,
"storyTitle" : "New Summer Menu" ,
"totalStories" : 5 ,
"source" : "menu_page"
}
}
Fired when a story page is viewed. {
"event" : "story_viewed" ,
"properties" : {
"storyId" : 789 ,
"storyTitle" : "New Summer Menu" ,
"pageIndex" : 2 ,
"totalPages" : 4 ,
"hasVideo" : true ,
"hasCta" : true
}
}
Fired when a customer navigates between story pages. {
"event" : "story_navigation" ,
"properties" : {
"storyId" : 789 ,
"fromPage" : 1 ,
"toPage" : 2 ,
"direction" : "forward" ,
"method" : "tap"
}
}
Fired when a customer clicks a CTA within a story. {
"event" : "story_cta_clicked" ,
"properties" : {
"storyId" : 789 ,
"pageIndex" : 2 ,
"ctaType" : "product" ,
"ctaLabel" : "Order Now" ,
"ctaData" : { "productId" : 456 },
"videoProgressPercent" : 75
}
}
Fired when a customer views all pages of a story. {
"event" : "story_completed" ,
"properties" : {
"storyId" : 789 ,
"storyTitle" : "New Summer Menu" ,
"totalPages" : 4 ,
"timeSpentSeconds" : 32
}
}
Fired when the story viewer is closed. {
"event" : "story_viewer_closed" ,
"properties" : {
"storyId" : 789 ,
"pageIndex" : 2 ,
"totalStoriesViewed" : 3 ,
"totalPagesViewed" : 8 ,
"timeSpentSeconds" : 45 ,
"closeMethod" : "swipe_down"
}
}
Experimentation Events
Fired when a customer is exposed to an A/B test variant. {
"event" : "viewed_experiment" ,
"properties" : {
"experimentId" : "checkout-flow-v2" ,
"variationId" : 1 ,
"venueId" : 8709 ,
"accountId" : "40586258-8a99-4651-b79f-0a1ab602a926" ,
"venueSlug" : "your-store"
}
}
Item ID Resolution
When sending events to analytics platforms, storekit resolves the item_id using the following priority:
PLU - Point of sale lookup code (preferred for POS-connected stores)
SKU - Stock keeping unit
POS ID - External POS system identifier
ID - storekit’s internal product ID (fallback)
This ensures your analytics data uses the same identifiers as your POS system for accurate reporting and attribution.
item_id = product.plu || product.sku || product.posId || product.id
For best results, ensure your products have PLU codes configured if you’re using a POS integration. This keeps your analytics data consistent with your POS reports.
storekit forwards events to third-party platforms in their native format. Events are transformed automatically—no mapping required.
Events are sent to Meta’s Pixel API. A PageView event fires automatically on initialisation.
Triggered by add_to_cart {
"content_ids" : [ 98765 ],
"content_name" : "Flat White" ,
"currency" : "GBP" ,
"value" : "4.00" ,
"content_type" : "product"
}
Triggered by started_checkout {
"currency" : "GBP" ,
"value" : 8.00
}
Triggered by order_completed {
"currency" : "GBP" ,
"value" : "12.50" ,
"content_type" : "product"
}
Meta Pixel provides better attribution than browser-only pixels, especially with iOS privacy changes and ad blockers.
Google Analytics 4 / Google Tag Manager
Events are pushed to the dataLayer following GA4’s e-commerce schema.
{
"event" : "active_on_site" ,
"userId" : null ,
"sessionId" : null ,
"pagePath" : null
}
Triggered by viewed_product {
"event" : "view_item" ,
"currency" : "GBP" ,
"value" : 3.50 ,
"items" : [
{
"item_id" : "FW001" ,
"item_name" : "Flat White"
}
]
}
{
"event" : "add_to_cart" ,
"value" : 4.00 ,
"currency" : "GBP" ,
"items" : [
{
"item_name" : "Flat White" ,
"item_id" : "FW001" ,
"price" : 4.00 ,
"quantity" : 1
}
]
}
Triggered by started_checkout {
"event" : "begin_checkout" ,
"value" : 8.00 ,
"currency" : "GBP" ,
"items" : [
{
"item_name" : "Flat White" ,
"affiliation" : "your-store" ,
"item_id" : "FW001" ,
"price" : 4.00 ,
"quantity" : 2 ,
"category" : "Hot Drinks" ,
"item_variant" : "Oat Milk"
}
]
}
Triggered by order_completed {
"event" : "purchase" ,
"transaction_id" : "ord_789xyz" ,
"value" : 12.50 ,
"currency" : "GBP" ,
"items" : [
{
"item_name" : "Flat White" ,
"affiliation" : "your-store" ,
"item_id" : "FW001" ,
"price" : 4.00 ,
"quantity" : 2 ,
"category" : "Hot Drinks" ,
"item_variant" : "Oat Milk"
}
]
}
Klaviyo
Events are sent to Klaviyo for email marketing automation. Customer identity is linked via email when available using klaviyo.identify().
Triggered by active_on_site {
"AccountId" : "40586258-8a99-4651-b79f-0a1ab602a926" ,
"VenueId" : 8709 ,
"VenueSlug" : "your-store"
}
Triggered by viewed_product {
"ProductId" : 98765 ,
"ProductName" : "Flat White" ,
"ProductPrice" : 350 ,
"ProductImage" : "https://cdn.storekit.com/products/flat-white.jpg"
}
Triggered by add_to_cart {
"ProductId" : 98765 ,
"ProductName" : "Flat White" ,
"ProductPrice" : 400 ,
"ProductImage" : "https://cdn.storekit.com/products/flat-white.jpg"
}
Triggered by started_checkout {
"Currency" : "GBP" ,
"Value" : 8.00
}
1st Party Event Collection
For customers who want full data ownership, storekit can send events directly to your own data warehouse. All events include base context properties automatically.
Base context (included in all events):
{
"account_id" : "40586258-8a99-4651-b79f-0a1ab602a926" ,
"venue_id" : 8709 ,
"venue_slug" : "your-store"
}
Triggered by active_on_site. Also identifies the user. {
"event" : "venue_loaded"
}
Triggered by viewed_product {
"event" : "product_modal_view" ,
"product_id" : 98765 ,
"product_name" : "Flat White" ,
"product_price" : 350 ,
"product_image" : "https://cdn.storekit.com/products/flat-white.jpg" ,
"product_plu" : "FW001"
}
{
"event" : "add_to_cart" ,
"product_id" : 98765 ,
"product_name" : "Flat White" ,
"product_price" : 400 ,
"product_image" : "https://cdn.storekit.com/products/flat-white.jpg" ,
"product_quantity" : 1 ,
"product_plu" : "FW001" ,
"add_to_cart_source" : null
}
{
"event" : "remove_from_cart" ,
"product_id" : 98765 ,
"product_name" : "Flat White" ,
"product_price" : 400 ,
"product_image" : "https://cdn.storekit.com/products/flat-white.jpg" ,
"product_quantity" : 1 ,
"product_plu" : "FW001"
}
{
"event" : "order_completed" ,
"orderId" : "ord_789xyz" ,
"total" : 12.50 ,
"currency" : "GBP"
}
{
"event" : "cross_sell_modal_view" ,
"product_count" : 4 ,
"cross_sell_type" : "product"
}
{
"event" : "viewed_offer" ,
"offer_id" : 123 ,
"link_id" : "link_abc" ,
"type" : "banner" ,
"value" : "20% off"
}
Triggered by click_offer {
"event" : "clicked_offer" ,
"offer_id" : 123 ,
"link_id" : "link_abc" ,
"type" : "banner" ,
"value" : "20% off"
}
{
"event" : "products_searched" ,
"query" : "coffee" ,
"result_count" : 12
}
Triggered by viewed_experiment {
"event" : "experiment_viewed" ,
"experiment_key" : "checkout-flow-v2" ,
"variation_id" : 1 ,
"account_id" : "40586258-8a99-4651-b79f-0a1ab602a926" ,
"venue_id" : 8709 ,
"venue_slug" : "your-store"
}
{
"event" : "story_viewer_opened" ,
"story_id" : 789 ,
"story_index" : 0 ,
"story_title" : "New Summer Menu" ,
"total_stories" : 5 ,
"source" : "menu_page"
}
{
"event" : "story_viewed" ,
"story_id" : 789 ,
"story_title" : "New Summer Menu" ,
"page_index" : 2 ,
"total_pages" : 4 ,
"has_video" : true ,
"has_cta" : true
}
{
"event" : "story_navigation" ,
"story_id" : 789 ,
"from_page" : 1 ,
"to_page" : 2 ,
"direction" : "forward" ,
"method" : "tap"
}
{
"event" : "story_cta_clicked" ,
"story_id" : 789 ,
"page_index" : 2 ,
"cta_type" : "product" ,
"cta_label" : "Order Now" ,
"cta_data" : { "productId" : 456 },
"video_progress_percent" : 75
}
{
"event" : "story_completed" ,
"story_id" : 789 ,
"story_title" : "New Summer Menu" ,
"total_pages" : 4 ,
"time_spent_seconds" : 32
}
{
"event" : "story_viewer_closed" ,
"story_id" : 789 ,
"page_index" : 2 ,
"total_stories_viewed" : 3 ,
"total_pages_viewed" : 8 ,
"time_spent_seconds" : 45 ,
"close_method" : "swipe_down"
}
Configuration
Enabling Integrations
Go to Settings > Integrations in your dashboard
Select the analytics platform
Enter your pixel/measurement ID or API key:
Google Tag Manager : Container ID (GTM-XXXXX)
Meta Pixel : Pixel ID
Klaviyo : API Key
Events begin flowing immediately
Supported Chat Integrations
The analytics system also initialises chat widgets when configured:
Front Chat
Superchat
Tawk.to
Intercom
Troubleshooting
Events not appearing in Meta/Google
Check that your pixel ID is correct and the integration is enabled. Server-side events may take up to 24 hours to appear in some dashboards due to platform processing delays.
Revenue values don't match
Ensure your analytics platform is configured for the correct currency. storekit sends values in the store’s local currency. Note that prices in events are in minor units (pence/cents) unless otherwise specified.
Anonymous visitors are tracked with a device-based ID. User identity is associated once they provide their email at checkout.
Analytics are disabled when viewing the store in Store Designer mode to avoid polluting your data with test traffic.