Appearance
E-commerce events
Alongside the core event model, Prism recognizes a canonical set of e-commerce events covering the full journey from browsing to purchase. On most stores every one of these is captured automatically — see Detecting e-commerce with dataLayer for how, and the Shopify guide if you're on Shopify.
The journey
| Event | Fires on | Capture | Sent to ad platforms |
|---|---|---|---|
ViewItem | A product page view | Auto | Yes, by default |
ViewItemList | A collection/category page view | Auto | First-party only |
Search | A site search | Auto | First-party only |
AddToCart | An item added to the cart | Auto | Yes, by default |
RemoveFromCart | An item removed from the cart | Auto | First-party only |
ViewCart | The cart page or drawer opened | Auto | First-party only |
BeginCheckout | Checkout started | Auto | Yes, by default |
AddShippingInfo | Shipping step completed | Auto | First-party only |
AddPaymentInfo | Payment step completed | Auto | First-party only |
Purchase | Order completed | Auto | Yes, always |
CheckoutAbandon | Checkout started, never completed | Derived — see Cart abandonment | First-party only |
CartAbandon | Item added to cart, checkout never started | Derived — see Cart abandonment | First-party only |
"Auto" means Prism detects and fires the event with no code changes on your part, either from your site's existing dataLayer/GTM instrumentation or, on Shopify, from the customer-events pixel. "First-party only" events are collected and shown in Adsidian's reporting but held back from Meta, Google, and Reddit unless your agency opts them in — the same auto-capture policy the rest of Prism follows.
Purchase is the exception to "first-party only": it's your conversion, so it always ships to whichever ad platforms are connected. ViewItem, AddToCart, and BeginCheckout join it in the default fan-out because those three plus Purchase are what Meta and Google actually optimize campaigns on — your agency can add more from the dashboard.
Commerce properties
Every journey event carries a consistent shape:
| Property | Type | Meaning |
|---|---|---|
value | number | Monetary value of the event — cart total, order total, or item price depending on the event |
currency | string | ISO 4217 currency code (USD, CAD, …) |
contents | array | Line items: [{ id, quantity, item_price }, ...] |
num_items | number | Total unit count across contents |
order_id | string | Your order/transaction ID — present on Purchase and used to deduplicate a browser-fired Purchase against the same order arriving by webhook |
contents[].id must match your product catalog exactly
Meta's dynamic and Advantage+ catalog retargeting keys off content_ids matching the id field in the product catalog feed Meta ads from — not your internal SKU, not a display name. If the ID format doesn't match (a common mismatch: Shopify's plain variant ID vs. the composite shopify_{country}_{productId}_{variantId} format the Meta sales channel uses), retargeting and dynamic ads fail silently — no error, just empty audiences. If you're on Shopify, the catalog ID format is a setting in your Prism setup; see the Shopify guide.
Manual tracking
If a cart or checkout step isn't auto-captured — a fully custom cart, a step your platform module doesn't reach yet — fire it yourself with the same window.prism('track', ...) API used for every other event:
js
window.prism('track', 'Purchase', {
value: 129.0,
currency: 'USD',
order_id: 'A-1042',
contents: [
{ id: 'shopify_US_7812093_44120981', quantity: 2, item_price: 49.0 },
{ id: 'shopify_US_7812104_44121002', quantity: 1, item_price: 31.0 },
],
num_items: 3,
});You can pass email/phone/etc. alongside — see Customer data & privacy for the recognized fields and how they're hashed.
Next
- Detecting e-commerce with dataLayer — how auto-capture works if you already run GA4/GTM e-commerce tracking
- Cart abandonment — how
CartAbandonandCheckoutAbandonare derived and what to do with them - Installing on Shopify