Documentation

Data freshness

There are two watermarks, not one. Confusing them is the single most common way to reach a wrong conclusion here — usually the wrong conclusion that tracking has broken.

The two watermarks

Every date-scoped response carries a _meta.dataCoverage block. Your assistant reads it; you should know what it says.

firstEvent
The oldest raw event still stored. It moves forward over time as raw-event retention expires, even while older aggregates survive.
lastEvent
The newest raw event. Clicks, exits, JS errors, session lists, product performance and DOM snapshots are current through here — usually seconds ago.
aggregatesThrough
The last date the nightly rollup completed. Funnel analysis, top issues, anomalies, journey patterns, correlations, opportunity sizing and the session converted and revenue flags are complete only through here.

What follows from that

Zeros from today are expected

Ask for a funnel over today and you get zeros, because the rollup for today has not run. That means the pipeline has not caught up. It does not mean the store stopped converting, and it does not mean tracking is broken.

The same window can be simultaneously full and empty depending on which tool you use. get_click_analysis on today returns live data. get_funnel_analysis on today returns nothing. Both are behaving correctly.

Which tools read which layer

Raw — live
get_click_analysis, get_click_heatmap, get_element_click_analysis, get_hover_analysis, get_section_visibility, get_exit_analysis, get_js_errors, get_page_dom_snapshot, get_session_journeys, get_product_performance, get_search_analysis, get_custom_events
Rollup — nightly
get_funnel_analysis, get_top_issues, get_anomalies, get_journey_patterns, get_conversion_correlations, get_opportunity_sizing, get_page_performance, get_page_vitals, get_cro_overview
Current state — no window
get_product_catalog, get_page_templates, get_product_page_structure, get_custom_event_definitions, list_custom_event_rules

Reading the envelope yourself

Every date-scoped response starts with something like this:

{
  "_meta": {
    "serverToday": "2026-08-21",
    "authenticatedShop": "your-store.myshopify.com",
    "dataCoverage": {
      "firstEvent": "2026-07-22T09:14:03.000Z",
      "lastEvent": "2026-08-21T11:47:55.000Z",
      "aggregatesThrough": "2026-08-20",
      "freshnessNote": "..."
    }
  },
  ...
}

If a result surprises you, ask your assistant to show dataCoverage. Nine times out of ten the window you asked for sits partly outside it.

Retention

Raw events and aggregates expire on different schedules, and both depend on your plan. Aggregates outlive raw events on every tier, so long-window funnel history survives after the underlying clicks have been cleared. Exact figures are on Plans and limits.

Dimensions that start mid-history

Some fields did not exist for the whole of your history. Scoping a window to before a dimension existed produces an “unknown” bucket that cannot be recovered — the underlying input was never stored.

Core Web Vitals
From 23 July 2026.
Country
From 31 July 2026. Resolved at the edge; IPs were never stored, so earlier sessions cannot be backfilled.
Product webhooks
From 3 August 2026. Before that the nightly catalogue poll skipped stores with an expired token, so stock and price could sit weeks stale.
Theme id
From 7 August 2026, and only for stores running a current tracker.
iOS exit events
Reliable from 13 August 2026.

When you segment by one of these over a window that starts earlier, expect a large unknown bucket. Narrow the window rather than reporting the bucket.