Documentation

What gets collected

The complete event taxonomy. Read it once and you will know what any tool can possibly answer — and what no amount of prompting will get you, because it was never recorded.

From the theme tracker

page_view

URL, page title, timestamp. The spine every other event hangs off.

click

Coordinates, viewport size, normalised position as a percentage of the page, scroll offset, page height, and the target element's tag, classes, id and visible text (capped at 200 characters). Each click is classified normal, rage or dead.

Rage means a burst of repeated clicks in the same spot. Dead means the element had no handler and no href. Both are heuristics — get_element_click_analysis explains when to distrust them.

scroll

Current and maximum depth as a percentage of page height.

page_exit

Fired on leaving a page: total duration, active duration (tab focused), maximum and average scroll depth, and click, rage-click and dead-click counts for that page view.

iOS history

Before 13 August 2026, exit events relied on a browser callback that iOS Safari never fires. Data from earlier windows is missing essentially all iOS exits, and a duration of zero there means unmeasured, not instant bounce.

section_visibility

Per section: the selector, how long it was on screen, and what share of it was visible.

hover_dwell

Per element: total dwell, hover count, longest single hover, and whether it was clicked in the same page view. Pointer devices only — hover carries no meaning on touch.

form_interaction

Per form: a form key, the action, whether it was submitted, total dwell, and the field the visitor was on when they stopped. Per field: name, input type, dwell, touch count and whether the value changed. Up to 25 fields per form.

Field values are never collected

Names, types and timings only, at every layer of the pipeline. Password inputs are recorded under the generic key (password). There is no configuration that turns value capture on, because the capture code does not exist.

js_error

Message, source file, line and column, and the page. Cross-origin scripts are stripped by the browser to Script error. before we ever see them — that is a browser security boundary, not a gap in collection.

page_structure

A pruned snapshot of the rendered DOM: structural elements with tag, id, classes, role, visible text and href, nested as they appear. Deduplicated, so a template is stored once rather than per visit.

Core Web Vitals

LCP, INP, CLS and TTFB, reported by browsers that support PerformanceObserver. The sample is always well below page views for that reason. Available from 23 July 2026 onward.

custom

Events you define, with a name and a JSON property bag. Fired either by a data-cc-track attribute in the theme or by a rule created through the MCP tools. See Custom events.

From the Shopify web pixel

Shopify's own customer events, which is the only way to see the hosted checkout:

product_viewed
A product page was viewed.
collection_viewed
A collection page was viewed.
search_submitted
An on-site search was run.
added_to_cart
A line was added, with product and price at add time.
removed_from_cart
A line was removed — the regret signal.
checkout_started
The visitor entered checkout.
checkout_address_submitted
Address step completed.
checkout_shipping_submitted
Shipping step completed.
payment_info_submitted
Payment step completed.
checkout_completed
The order was placed. Source of every revenue figure.

Checkout steps are not strictly nested

Shopify skips the address and shipping steps for express and returning-customer checkouts, so a later step can legitimately exceed an earlier one. get_funnel_analysis flags this rather than treating it as a bug.

From Shopify directly

Product catalogue — titles, handles, types, vendors, prices, inventory and status — kept current by product webhooks, and theme templates with their section lists. Plus the store's reporting currency, which is what every money figure is quoted in.

What is never collected

  • Form field values. No exceptions, no setting.
  • Payment details. The pixel sees that a payment step completed, never what was entered.
  • Customer names, emails and addresses. The behavioural schema has no column for them.
  • IP addresses. Country is resolved at the edge from the request and the IP is discarded. This is also why country data only exists from 31 July 2026 — earlier sessions cannot be backfilled.
  • Session video. Click Context reconstructs behaviour from structured events, not from a recording. There is no replay to scrub through, which is the trade for having data an AI can reason over.

Visitors and sessions

A visitor id is a first-party pseudonymous identifier used to tell returning visitors from new ones. A session groups one visit's events. Neither resolves to a person, and neither is joined to Shopify customer records.

Consent is honoured through Shopify's Customer Privacy API. A visitor who declines is not tracked, which is one reason the order count is a lower bound.