# Shopify Speed Benchmark 2026: Dataset

- Version: 1.2
- Release date: 2026-10-12 (v1.1: 2026-04-04)
- Publisher: EcomHint (ecomhint.com)
- Stores screened: 2,332
- Stores in this dataset (complete subset): 1,533
- Industries: 9

## Overview

This dataset contains Lighthouse lab performance metrics and Chrome User Experience Report (CrUX) field data for 1,533 Shopify stores across 9 industries. The lab tests ran between March 19 and 24, 2026.

It accompanies the article *Shopify Speed Benchmark 2026: Performance Data from 1,533 Stores Across 9 Industries* (https://ecomhint.com/blog/shopify-speed-benchmark).

## What changed in v1.2

Version 1.2 corrects how the dataset describes and uses CrUX field data. The stores, the lab data and the row counts are the same as in v1.1.

- The v1.1 `crux_*` columns came from the desktop homepage test. For 1,065 stores they describe the homepage URL only. For the other 468, CrUX had too little homepage data and PageSpeed Insights (PSI) returned the whole store's data instead. v1.1 called all of it origin-level, which was wrong for the 1,065. These columns are now named `crux_homepage_desktop_*`, and a new flag, `crux_homepage_desktop_origin_fallback`, marks the 468.
- New whole-store field data for mobile and desktop, in the `crux_origin_mobile_*` and `crux_origin_desktop_*` columns. Our Core Web Vitals figures use these columns from v1.2 on, and we report mobile and desktop separately.
- New `crux_origin_mobile_cwv_pass` and `crux_origin_desktop_cwv_pass` columns apply Google's Core Web Vitals rule. v1.1 counted a store as passing when PSI's overall category was FAST, a category that also depends on First Contentful Paint (FCP) and Time to First Byte (TTFB).

The CHANGELOG lists every column change and the figures that were retired.

## Core Web Vitals, whole store

| | Mobile | Desktop |
|---|---|---|
| Stores passing Core Web Vitals | 81% (1,242 of 1,533) | 77% (1,186 of 1,533) |
| LCP good (p75 ≤ 2,500 ms) | 91% (1,388 of 1,522) | 94% (1,434 of 1,523) |
| CLS good (p75 ≤ 0.1) | 91% (1,391 of 1,529) | 82% (1,258 of 1,530) |
| INP good (p75 ≤ 200 ms) | 95% (1,351 of 1,426) | 99% (1,420 of 1,432) |
| Stores without an INP value | 7% (107) | 7% (101) |
| Stores with whole-store data | 1,531 | 1,532 |

The pass rate divides by all 1,533 stores. A store without whole-store data, or without an LCP or CLS value, counts as not passing. Each per-metric rate divides by the stores that have a value for that metric. Desktop CLS (82%) is the lowest of the six per-metric rates, and INP passes less often on mobile than on desktop.

## Methodology

### Store selection
- Starting pool: 2,332 Shopify stores identified across 9 industries
- Complete subset (this dataset): 1,533 stores that meet all three criteria:
  1. CrUX field data in the desktop homepage PSI response (homepage URL data, or PSI's whole-store fallback)
  2. 3 successful mobile homepage Lighthouse runs
  3. 3 successful desktop homepage Lighthouse runs
- 4 stores were excluded due to partial lab failures after initial qualification
- v1.2 keeps the same 1,533 stores as v1.1, so every lab figure stays comparable. Whole-store field data exists for 1,531 of them on mobile and 1,532 on desktop.

### Testing protocol
- Tool: Google PageSpeed Insights API (Lighthouse 13.x)
- Runs: 3 per page type per strategy (all 3 required for homepage inclusion; minimum 2 for other page types)
- Strategies: Mobile and Desktop
- Page types: Homepage, Product Detail Page (PDP), Collection page
- Metrics reported: Median of successful runs
- Not every store has all 3 page types; rows exist only where valid data was collected

### CrUX field data

The dataset has two kinds of CrUX field data. Both come from the PSI response of the first homepage run and describe real Chrome visits in the 28-day window just before the test. Field values are per store, so they repeat on every row of that store.

#### Whole store: `crux_origin_mobile_*` and `crux_origin_desktop_*`
- Source: PSI `originLoadingExperience`, from the mobile homepage run for mobile and from the desktop homepage run for desktop
- Covers every page of the store's origin (for example `https://example.com`), not only the homepage
- Metrics: LCP p75, CLS p75, INP p75, plus a Core Web Vitals verdict (`cwv_pass`)
- This is the data behind the Core Web Vitals figures in our articles from v1.2 on

#### Desktop homepage: `crux_homepage_desktop_*`
- Source: PSI `loadingExperience` from the desktop homepage run. These were the `crux_*` columns in v1.1
- Homepage URL data for 1,065 stores. For the other 468 stores, CrUX had too little data for the homepage alone and PSI returned whole-store data instead (`crux_homepage_desktop_origin_fallback` is true)
- Kept for continuity with v1.1. Because it mixes two scopes and covers desktop only, do not use it for store-level pass rates
- `crux_homepage_desktop_overall_category` is PSI's overall category, the worst of five metrics with FCP and TTFB included. It is not a Core Web Vitals pass or fail

#### Core Web Vitals rule
`crux_origin_mobile_cwv_pass` and `crux_origin_desktop_cwv_pass` follow Google's assessment:
- A store passes when p75 LCP ≤ 2,500 ms, INP ≤ 200 ms and CLS ≤ 0.1. Each threshold is inclusive.
- When a store has no INP value (too few interactions for CrUX to report it), LCP and CLS decide.
- When LCP or CLS is missing, or the store has no whole-store data, the store is not assessable and the cell is blank.

CLS values are decimals (PSI reports CLS multiplied by 100; the dataset divides by 100).

### Third-party detection
- Based on Lighthouse entity recognition for each page type and strategy
- Summary dataset reports median entity count across successful runs per page type
- These are detected third-party network requests, NOT installed Shopify apps
- Entity categories from Lighthouse's third-party-web dataset

### Theme detection
- Observational only; based on Shopify theme metadata
- Theme performance differences are descriptive, not causal

## Files

| File | Description |
|------|-------------|
| `shopify-speed-benchmark-2026-summary-public-v1.2.csv` | One row per store + page type + strategy (anonymized) |
| `shopify-speed-benchmark-2026-run-level-public-v1.2.csv` | One row per individual test run (anonymized) |
| `shopify-speed-benchmark-2026-entities-public-v1.2.csv` | One row per store + page type + strategy + third-party entity (anonymized) |
| `shopify-speed-benchmark-2026-data-dictionary-v1.2.csv` | Field definitions for all columns |
| `shopify-speed-benchmark-2026-metadata-v1.2.json` | Machine-readable dataset metadata |
| `CHANGELOG-shopify-speed-benchmark-2026-v1.2.md` | Version history |
| `README-shopify-speed-benchmark-2026-v1.2.md` | This file |

The v1.1 files stay available at their original URLs.

## Industry breakdown

| Industry | Stores | Passes Core Web Vitals, mobile | Passes Core Web Vitals, desktop |
|----------|--------|--------|--------|
| Automotive Parts | 164 | 92% | 82% |
| Beauty & Personal Care | 180 | 73% | 68% |
| Consumer Goods | 225 | 77% | 80% |
| Fashion & Apparel | 177 | 85% | 81% |
| Food & Beverage | 141 | 85% | 77% |
| Home & Furniture | 173 | 80% | 84% |
| Luxury & Jewelry | 166 | 75% | 72% |
| Multi-Brand Retail | 137 | 80% | 69% |
| Pet Care | 170 | 84% | 81% |

Whole-store data, Google's rule, divided by every store in the industry.

## Data grain

### Summary dataset
One row = one store + one page_type + one strategy.
A store with homepage + PDP + collection tested on both mobile and desktop has up to 6 rows.

### Run-level dataset
One row = one store + one page_type + one strategy + one run.
Includes only runs belonging to combos with at least 2 successful runs.

### Entity dataset
One row = one store + one page_type + one strategy + one third-party entity.
Contains per-entity main thread blocking time and transfer size (median of successful runs).
Entity list is the union of Lighthouse third-party entity detection across runs; entities with zero blocking time in all runs still appear with 0ms.

## Anonymization

- Public files use `store_id`, a truncated SHA-256 hash of the internal identifier
- No domains, store names, or Shopify subdomains appear in public files
- Country codes are retained for geographic analysis

## Reproducing Article Numbers

The data claims in the published articles can be reproduced from these CSV files as follows.

| Figure | How to compute it |
|--------|-------------------|
| Performance scores, LCP, TBT, CLS (lab) | Median across stores from the summary CSV (already median-of-3-runs per store) |
| Service count for correlations | `third_party_service_count` column in the summary CSV (median of 3 runs) |
| Blocking times | From the entity CSV, filtered to `main_thread_time_ms > 0`; p25/median/p75 via standard quantile calculation |
| Adoption percentage | Number of stores where entity appears / 1,533 total stores |
| Entity stats (unique count, categorized count) | Counted across the entire entity dataset (all page types, strategies, runs) |
| Category breakdown, correlations, bucket analysis | Filtered to homepage mobile |
| Core Web Vitals pass rate (whole store) | Take one row per store (for example homepage + mobile). For mobile, count `crux_origin_mobile_cwv_pass == true`; for desktop, count `crux_origin_desktop_cwv_pass == true`. Divide by all stores in the group. Blank counts as not passing |
| Per-metric field pass rates (whole store) | Stores whose `crux_origin_<device>_*` p75 value is at or under the threshold / stores with a value for that metric. Thresholds: LCP ≤ 2,500 ms, CLS ≤ 0.1, INP ≤ 200 ms. About 7% of stores have no INP value on each device and are left out of the INP denominator |
| Rounding | Medians use round-half-up (988.5 rounds to 989); percentages are whole numbers, rounded half up; correlations use standard rounding to 2 decimal places |

Lab vs field comparisons use the same device on both sides. Homepage lab LCP (`lcp_ms` ≤ 2,500 on homepage rows) passes for 1% of stores on mobile (16 of 1,533) and 68% on desktop (1,036 of 1,533), against 91% and 94% for whole-store field LCP. Homepage lab CLS (`cls` ≤ 0.1) passes for 88% on mobile (1,348 of 1,533) and 87% on desktop (1,340 of 1,533), against 91% and 82% in the field.

Reference computation scripts are available on request (hello@ecomhint.com).

## Limitations

- Whole-store field data covers every page of the store, so it does not describe the specific homepage, PDP or collection page that was lab-tested
- The desktop homepage field columns mix homepage URL data (1,065 stores) with whole-store fallback data (468 stores)
- CrUX only includes Chrome on desktop and Android, so iPhone and iPad visits are not in the field data
- Third-party detection captures network requests, not installed apps
- Theme associations are observational; performance varies by customization
- Lab metrics represent synthetic test conditions, not real user experience
- Lab data was collected over a 6-day window and field data covers the 28 days before each test; store configurations may have changed since

## License

This dataset is released under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).

Citation:
> EcomHint. (2026). Shopify Speed Benchmark 2026: Performance Data from 1,533 Stores Across 9 Industries. Version 1.2. https://ecomhint.com/blog/shopify-speed-benchmark

## Contact

Questions about this dataset: hello@ecomhint.com
