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.