Events reference for Loomi for Shopify

Events capture both what happens in Shopify and how shoppers interact with your storefront. Loomi for Shopify tracks two event types:

  • Server-side events reflect Shopify data changes such as orders, carts, customers, and consent updates.
  • Web events capture browser-side behavior such as page views, searches, checkout steps, and widget interactions. Web tracking is powered by the Bloomreach Web SDK in the Shopify app embed and uses Data hub event streams in Loomi for Shopify setups. For more information, see Set up web tracking for Loomi AI for Shopify.

Server-side events

cart_update

Triggers when a shopper's cart is created or changed. Use it for abandoned cart messages and real-time offers.

PropertyTypeDescriptionExample
_created_attimestampCart creation time (Unix)1718000000
actionstringWhat happened to the cart: "create", "update", or "empty" (cart cleared)"update"
domainstringShopify store domain"mystore.myshopify.com"
integration_idstringIntegration UUID"abc-123-..."
integration_namestringIntegration display name"My Store"
integration_typestringAlways "shopify""shopify"
integration_versionstringIntegration version"3.1"
product_idsarray of stringsDeduplicated list of product IDs in the cart["12345", "67890"]
product_listarray of objectsProducts with quantities[{"product_id": "12345", "quantity": 2}]
sku_idsarray of stringsDeduplicated list of SKUs in the cart["TSH-BLU-L"]
sku_listarray of objectsSKUs with quantities[{"sku": "TSH-BLU-L", "quantity": 2}]
total_pricenumberCart total in store currency59.98
total_price_local_currencynumberCart total in the customer's presentment currency55
total_quantityintegerTotal number of items in the cart2
variant_idsarray of stringsDeduplicated list of variant IDs in the cart["111", "222"]
variant_listarray of objectsVariants with quantities[{"variant_id": "111", "quantity": 1}]

Customer identifier: cart_id, the Shopify cart token.

_customer_change

Triggers when a customer record changes in Shopify: create, update, enable, disable, or delete. Loomi for Shopify uses this event to update customer profiles.

PropertyTypeDescriptionExample
actionstringWhat triggered the event: "create", "update", "enable", "disable", "delete""update"
domainstringShopify store domain"mystore.myshopify.com"

Customer identifier: shopify_id, the Shopify customer ID.

purchase

Triggers when an order is placed or changed: on order created, paid, cancelled, fulfilled, partially_fulfilled or refunds/create.

Note

purchase.product_list is a compact order-level summary, not the full per-item payload. Use it for product IDs and quantities at the order level.

If you need item-level details such as title, variant, SKU, price, discount, or fulfillment-related values, use the purchase_item events. Loomi for Shopify emits one purchase_item event per line item alongside the purchase event.

PropertyTypeDescriptionExample
_app_idstringShopify app ID that created the order"580111"
_discount_code_listarray of stringsDiscount codes applied["SUMMER10"]
_financial_statusstringLegacy field with the same value"paid"
_fulfillment_statusstringLegacy field with the same value"fulfilled"
_landing_sitestringURL of the landing page"/collections/sale"
_namestringShopify order name (human-readable order number)"#1042"
_referring_sitestringURL of the referring site"https://google.com"
_subtotal_pricenumberSubtotal before shipping and tax75
_total_discountsnumberTotal discount amount applied10
_total_line_items_pricenumberSum of all line item prices before discounts85
_total_weightintegerTotal weight in grams500
cancel_reasonstringReason for cancellation"customer"
cancelled_attimestampTime the order was cancelled, if applicable1718100000
created_attimestampOrder creation time (Unix)1718000000
currencystringStore base currency code"USD"
domainstringShopify store domain"mystore.myshopify.com"
financial_statusstringPayment status"paid"
fulfillment_statusstringShipping fulfillment status"fulfilled"
integration_idstringIntegration UUID"abc-123-..."
integration_namestringIntegration display name"My Store"
integration_typestringAlways "shopify" or "shopify_core""shopify"
integration_versionstringIntegration version"3.1"
local_currencystringCustomer's presentment currency"EUR"
payment_typestringPayment gateway used"shopify_payments"
product_idsarray of integersList of all product IDs in the order[12345, 67890]
product_listarray of objectsProducts with quantities[{"product_id": "12345", "quantity": 2}]
purchase_idstringShopify order ID"5678901234"
purchase_source_typestringChannel the order came from"web"
purchase_statusstringCombined financial and fulfillment status label: "created", "cancelled", "fulfilled", "partially_fulfilled", "refund_created", "partial_refund_created""created"
shipping_citystringShipping destination city"New York"
shipping_companystringCompany name on the shipping address"Acme Corp"
shipping_countrystringShipping destination country"United States"
shipping_regionstringShipping destination state or province"New York"
shipping_streetstringStreet address"123 Main St"
shipping_zipstringShipping postal code"10001"
tagsarray of stringsOrder tags["vip", "subscription"]
tags_liststringComma-separated order tags|vip|subscription|
tax_valuenumberTotal tax amount7.2
total_pricenumberTotal charged to the customer in store currency89.99
total_price_local_currencynumberTotal in the customer's presentment currency79.99
total_price_without_taxnumberTotal price minus tax82.79
total_quantitynumberTotal number of items ordered3
variant_idsarray of integersList of all variant IDs in the order[111, 222]
variant_listarray of objectsVariants with quantities[{"variant_id": "111", "quantity": 2}]

purchase_item

Triggers once per line item in an order, alongside purchase. Each item in the order gets its own purchase_item event. Use it for items analysis and build recommendations.

📘

Note

Configured product and variant metafields are included only in purchase_item events.

PropertyTypeDescriptionExample
_app_idstringShopify app ID"580111"
_financial_statusstringLegacy field with the same value"paid"
_fulfillment_statusstringLegacy field with the same value"fulfilled"
_gramsnumberItem weight in grams200
_namestringFull item name, including variant"Classic T-Shirt - Blue / Large"
_requires_shippingbooleanWhether the item needs physical shippingTRUE
_variant_titlestringVariant label (for example, size or color)"Blue / Large"
brandstringProduct brand or vendor"Nike"
cost_per_unitnumberPrice multiplied by quantity, in store currency59.98
cost_per_unit_local_currencynumberPrice multiplied by quantity, in presentment currency55
created_attimestampOrder creation time (Unix)1718000000
currencystringStore base currency"USD"
discount_amountnumberTotal discount applied to this line item5
domainstringShopify store domain"mystore.myshopify.com"
financial_statusstringPayment status"paid"
fulfillment_statusstringItem fulfillment status"fulfilled"
integration_idstringIntegration UUID"abc-123-..."
integration_namestringIntegration display name"My Store"
integration_typestringAlways "shopify""shopify"
integration_versionstringIntegration version"3.1"
local_currencystringCustomer's presentment currency"EUR"
original_pricenumberPrice before any discounts39.99
pricenumberUnit price in store currency29.99
price_local_currencynumberUnit price in the customer's presentment currency27.5
product_idstringShopify product ID"12345"
product_tagsarray of stringsProduct-level tags["new-arrival", "sale"]
product_tags_liststringComma-separated product tags|vip|subscription|
purchase_idstringShopify order ID (links back to the purchase event)"5678901234"
purchase_source_typestringOrder channel"web"
purchase_statusstringOrder payment status"paid"
quantitynumberNumber of units purchased2
skustringProduct SKU"TSH-BLU-L"
tagsarray of stringsOrder-level tags["vip", "subscription"]
tags_liststringComma-separated order tags`
titlestringProduct title"Classic T-Shirt"
total_pricenumberTotal line item price after discounts59.98
variant_idstringShopify variant ID"111"
variant_titlestringVariant label (same value, non-prefixed)"Blue / Large"

shopify_consent

Triggers when a customer's email or SMS consent changes. Use it to track consent and manage suppression lists.

PropertyTypeDescriptionExample
actionstringConsent decision: "accept" or "reject""accept"
categorystringConsent category ID mapped to the Shopify marketing channel"email_newsletter"
emailstringEmail address of the consented user"[email protected]"
integrationstringIntegration type label: "shopify-v3" or "unified-shopify""shopify-v3"
integration_idstringIntegration UUID"abc-123-..."
shopify_domainstringShopify store domain"mystore.myshopify.com"
smsstringPhone number of the consented user"+12025550147"
valid_untilstringConsent expiry — always "unlimited" for Shopify"unlimited"

Customer identifier: shopify_id.

Web events

Common properties

All events include the following properties:

PropertyTypeDescriptionExample
customer_localestringCustomer/storefront locale for the current page or session, if available"en-AL"
domainstringShopify store domain"mystore.myshopify.com"
integration_idstringIntegration UUID"abc-123-..."
integration_typestringAlways "shopify""shopify"
locationstringFull homepage URL"https://mystore.com"
page_titlestringTitle of the current page"Classic T-Shirt | My Store"
referrerstringURL of the referring page"https://www.google.com/"

add_to_cart

Triggers when a shopper adds a product to their cart, from either a product page or a quick view.

This event is available for customers with Search enabled.

PropertyTypeDescriptionExample
product_idstringShopify product ID"12345"
titlestringProduct name"Classic T-Shirt"
total_pricenumberTotal price of items inside a cart1999.99
variant_idstringSelected variant ID"111"
widget_idstringWidget identifier"similar-products-pdp"
widget_querystringQuery value of the widget response, such as the shopper’s search term"turtleneck"
widget_response_idstringUnique ID of the widget response, attributes the add-to-cart action to a specific widget result set"abcd123"
widget_typestringType of recommendation widget"item_based"

conversion

Triggers when a purchase completes. This is the Loomi equivalent of the webhook-based purchase event, tracked through the Shopify Web Pixel for immediate browser-side capture.

This event is available for customers with Search enabled.

Enabled by: purchase_tracking = true

PropertyTypeDescriptionExample
local_currencystringStore currency, mapped as currency in Search"USD"
price_local_currencynumberPrice in local currency100.99
product_listarray of objectsLine items, each item includes product_id, quantity; optionally, variant_id, title, price[{"product_id": "12345", "quantity": 2}]
purchase_idstringShopify order ID, mapped as order_id in Search"5678901234"
total_pricenumberTotal order value89.99

checkout

Triggers when a shopper starts checkout. Maps to Shopify's checkout_started standard pixel event. Carried over unchanged from the previous Shopify web pixel integration.

Enabled by: checkout_tracking = true

PropertyTypeDescriptionExample
currencystringStore currency code"USD"
domainstringShopify store domain"mystore.myshopify.com"
shipping_citystringCity where the order is being shipped"Paris"
shipping_costnumberTotal shipping cost49.99
shipping_countrystringCountry where the order is being shipped"France"
step_titlestringCurrent checkout step/state"checkout_started"
total_pricenumberCheckout total in store currency89.99

Customer identifier: cookie (browser cookie), linked to email_id or shopify_id when the shopper is logged in.

search_submit

Triggers when a shopper submits a search query, either by pressing Enter or clicking the search button. Replaces the legacy search event.

Enabled by: search_tracking = true

PropertyTypeDescriptionExample
catalogsarray of objectsList of catalogs searched for this query. Each catalog includes name; optionally, view_ids for the catalog views used on the page[{"name":"products_en","view_ids":["en_US"]}]
qstringSearch term submitted"blue sneakers"

suggest

Triggers when a shopper interacts with the Loomi for Shopify autosuggest dropdown, either by seeing suggestions as they type or selecting one.

Autosuggest clicks don't follow the same event pattern for every suggestion type.

  • Clicking a product suggestion doesn’t trigger a separate search submission event.
  • Product suggestion attribution can be carried in the destination URL instead of relying on a suggest event on click.
  • Search-results page view behavior remains separate from autosuggest interaction tracking.

If you are validating this behavior in an existing storefront, confirm it against the currently deployed integration behavior because this area was recently adjusted.

Enabled by: suggest_tracking = true

PropertyTypeDescriptionExample
aqstringCurrent input text that triggered autosuggest"blue sn"
qstringThe suggestion that was shown or selected"blue sneakers"

view_category

Triggers when a shopper views a collection page. Maps to Shopify's collection_viewed standard pixel event. Carried over unchanged from the previous Shopify web pixel integration.

Enabled by: view_category_tracking = true

PropertyTypeDescriptionExample
category_idstringShopify collection ID"270573969570"
titlestringCollection display name"Summer sale"

Customer identifier: cookie.

view_homepage

Triggers when a shopper views the store's homepage.

Enabled by: view_homepage_tracking = true

PropertyTypeDescriptionExample
domainstringShopify store domain"mystore.myshopify.com"
integration_idstringIntegration UUID"abc-123-..."
locationstringFull homepage URL"https://mystore.com"

view_item

Triggers when a shopper loads a product detail page. Records a product impression before it is sent.

Enabled by: view_item_tracking = true

PropertyTypeDescriptionExample
_vendorstringShopify product vendor"Acme"
availablebooleanWhether the variant is available for saletrue
brandstringProduct brand name"Acme"
pricenumberProduct price29.99
product_idstringShopify product ID"12345"
stock_levelnumberCurrent inventory quantity for the item100
tagsarrayProduct tags["summer","sale"]
titlestringProduct title"Classic T-Shirt"
variant_idstringShopify variant ID"111"
variant_inventorynumberCurrent inventory quantity for the selected variant20

view_quickview

Triggers when a shopper opens a quick view panel for a product without navigating to the product detail page.

Enabled by: quick_view_tracking = true

PropertyTypeDescriptionExample
product_idstringShopify product ID"12345"
titlestringProduct name"Classic T-Shirt"
variant_idstringSelected variant ID"111"

view_search_results

Triggers when the search results page loads. This is a separate event from search_submit, so you can analyze zero-result searches and result-to-click funnels.

Enabled by: view_search_results_tracking = true

PropertyTypeDescriptionExample
catalogsarray of objectsList of catalogs searched for this query. Each catalog includes name; optionally, view_ids for the catalog views used on the page[{"name":"products_en","view_ids":["en_US"]}]
search_termstringSearch term the results are for"blue sneakers"

widget_click

Triggers when a shopper clicks a product inside a recommendations widget.

Enabled by: widget_click_tracking = true

PropertyTypeDescriptionExample
product_idstringProduct that was clicked"12345"
widget_idstringWidget identifier"similar-products-pdp"
widget_querystringQuery value of the widget response, such as the shopper’s search term"turtleneck"
widget_response_idstringUnique ID of the widget response"abcd123"
widget_typestringType of recommendation widget"item_based"

widget_view

Triggers when a recommendations set renders and becomes visible on a page.

Enabled by: widget_view_tracking = true

PropertyTypeDescriptionExample
widget_idstringWidget identifier"similar-products-pdp"
widget_querystringQuery value of the widget response, such as the shopper’s search term"turtleneck"
widget_response_idstringUnique ID of the widget response"abcd123"
widget_typestringType of recommendation widget"item_based"

Migrating from legacy search tracking

The previous Shopify web pixel integration tracked search with a single search event. Loomi for Shopify replaces it with two separate events: search_submit and view_search_results. Update any campaign triggers or segments that use search when you migrate.

Key differences from legacy Shopify tracking

/Legacy Shopify integrationLoomi for Shopify
PixelMarketing SDK Web PixelBloomreach Web SDK (app embed)
search eventSingle search eventSplit into search_submit and view_search_results
Search and recommendation eventsNot availablewidget_view, widget_click, suggest, view_search_results
Data routingDirect to BloomreachThrough Data hub event streams
view_item enrichmentServer-sidePure view_item events without server-side enrichment

Event timestamps

Loomi for Shopify doesn't use one timestamp rule for every event type.

  • purchase and purchase_item use the Shopify order created_at timestamp.
  • Post-purchase changes that update the same order state still follow the order created_at timestamp unless noted otherwise in a specific event payload.
  • Consent events use the source event timestamp when Shopify provides it. If that timestamp isn't available, Bloomreach falls back to the time the consent data was imported.

Timestamp behavior stays aligned with the legacy Shopify integration.



Did this page help you?

© Bloomreach, Inc. All rights reserved.