Web performance
Core Web Vitals — Cumulative Layout Shift, Interaction to Next Paint and Largest Contentful Paint by day, page type, page URL and device, as Shopify measures them. Requires the read_reports scope; empty on stores that have not granted it.
27 fields — 5 dimensions, 22 metrics. Date clauses (SINCE, UNTIL, DURING) use day.
The live, authoritative list is always GET /v1/datasets — this page is regenerated from the same catalog, but the endpoint reflects exactly what is deployed.
Query it
FROM web_performance
SHOW page_loads
GROUP BY grain
SINCE -30d
See Querying with SoloQL for the language.
This dataset is queryable through SoloQL; it has no record-retrieval endpoint.
Fields
| Field | Type | Role | Description |
|---|---|---|---|
grain | string | dimension | Which aggregation Shopify computed the row at. day carries the exact per-day percentiles; day_page carries the per-page counts. Filter on this in every query — mixing the two double-counts. |
page_type | string | dimension | Type of the page of an online store session, such as collection. |
page_path | string | dimension | Path of the page of an online store session. |
device_type | string | dimension | Type of device used for the session. |
page_loads | number | metric | Number of page loads. This is REAL traffic — unlike the vitals' measurement counts, which Shopify samples. |
percent_of_page_loads | percent | metric | Share of all page loads in the result that fall into this group. |
cls_p75 | number | metric | 75th-percentile Cumulative Layout Shift, pre-computed by Shopify. Unitless. ⚠️ A percentile is not additive — this is exact only at the grain Shopify computed it at. |
cls_measurements | number | metric | Page loads measured for CLS. ⚠️ SAMPLED — not traffic. Use page_loads for traffic. |
cls_good | number | metric | Measurements with a good Cumulative Layout Shift. |
cls_needs_improvement | number | metric | Measurements needing improvement. Only available inside Shopify's distribution array. |
cls_poor | number | metric | Measurements with a poor Cumulative Layout Shift. |
cls_good_rate | percent | metric | Share of measured page loads with a good Cumulative Layout Shift. |
lcp_p75 | number | metric | 75th-percentile Largest Contentful Paint in milliseconds, pre-computed by Shopify. ⚠️ Not additive. |
lcp_p90 | number | metric | 90th-percentile Largest Contentful Paint in milliseconds. ⚠️ Not additive. |
lcp_measurements | number | metric | Page loads measured for LCP. ⚠️ SAMPLED — not traffic. |
lcp_good | number | metric | Measurements with a good Largest Contentful Paint. |
lcp_needs_improvement | number | metric | Measurements needing improvement. Only available inside Shopify's distribution array. |
lcp_poor | number | metric | Measurements with a poor Largest Contentful Paint. |
lcp_good_rate | percent | metric | Share of measured page loads with a good Largest Contentful Paint. |
inp_p75 | number | metric | 75th-percentile Interaction to Next Paint in milliseconds, pre-computed by Shopify. ⚠️ Not additive. |
inp_p90 | number | metric | 90th-percentile Interaction to Next Paint in milliseconds. ⚠️ Not additive. |
inp_measurements | number | metric | Page loads measured for INP. ⚠️ SAMPLED — not traffic. |
inp_good | number | metric | Measurements with a good Interaction to Next Paint. |
inp_needs_improvement | number | metric | Measurements needing improvement. Only available inside Shopify's distribution array. |
inp_poor | number | metric | Measurements with a poor Interaction to Next Paint. |
inp_good_rate | percent | metric | Share of measured page loads with a good Interaction to Next Paint. |
store | string | dimension | The shop the record belongs to. Filter with WHERE store IN ('Shop name') or GROUP BY store. |