This repository contains the open dataset backing the research report Pageloot QR Code Statistics 2026.
Canonical report: https://pageloot.com/qr-code-statistics/ All citations, references, and links should point to that URL.
This dataset covers 12,988,255 scan events across 884,074 QR codes created on the Pageloot platform, with 494,380 active codes analyzed. The data spans scans from 235 countries and territories over a window of July 2020 through July 2026, representing 20,000+ brands.
Scan distribution is highly skewed: the top 1% of codes account for 80.4% of all scans. The median code receives 1 scan, the mean is 26.3, the 90th percentile is 12, and the 99th percentile is 161. 34.6% of codes were never scanned (14.6% of paid codes vs. 35.8% of trial codes). Paid codes average 307 scans compared to 8.9 for trial codes.
For the 2023 cohort, 63.4% of scans occurred after day 90 and 40.5% after the one-year mark, indicating strong long-term engagement. Among paid accounts, 54.8% never edited their QR codes, and 67.5% made no edits after day one. 10.2% of raw scans in the last 12 months were identified as bots. Device breakdown (bot-excluded): iOS 48.9%, Android 38.2%, with 87.1% of scans on mobile.
A "scan" is a server-side redirect event on a dynamic QR code; static codes cannot be measured. A "paid account" has ≥1 successful charge, active or churned. Codes on unconverted trial accounts are scannable/editable only during a trial window, so trial-side figures reflect both behavior and trial expiry; paid-account figures are uncensored. Edit-behavior data covers paid accounts only. Device/OS/browser figures exclude identified bot user agents (10.2% of raw events, last 12 months). The 2023 cohort includes expired trial codes, which understates longevity if anything. All data is aggregated and anonymized; no PII was accessed. Single-platform data; reflects Pageloot's SMB/agency customer mix. Timestamps UTC. Refreshed quarterly.
Summary statistics of scan counts across all active codes analyzed.
| Column | Description |
|---|---|
total_codes |
Total number of QR codes included in the analysis |
never_scanned |
Number of codes with zero recorded scans |
mean_scans |
Mean scan count per code |
median |
Median scan count per code |
p90 |
90th percentile scan count |
p99 |
99th percentile scan count |
Scan distribution across 100 equal-sized code percentile buckets, sorted by scan volume descending. Each bucket contains the same number of codes (approximately 1% of the total). Used to illustrate the power-law concentration of scans.
| Column | Description |
|---|---|
pctl |
Percentile bucket (1 = top 1% of codes by scan volume; 100 = bottom 1%) |
scans |
Total scans attributed to codes in this bucket |
codes |
Number of codes in this bucket (each bucket is ≈ 1/100 of total codes) |
Never-scanned rate and scan-count statistics broken down by account type (paid vs. trial).
| Column | Description |
|---|---|
is_paid |
Account type: True = paid account (≥1 successful charge), False = trial account |
codes |
Total number of dynamic QR codes in this group |
never_scanned |
Number of codes with zero recorded scans |
mean_scans |
Mean scan count per code in this group |
median |
Median scan count per code in this group |
Note: Trial-side figures reflect both user behavior and trial expiry (codes lose scan tracking after trial ends). Paid-account figures are uncensored.
Scan counts by code age bucket for the 2023 creation cohort, showing how scans accumulate over the lifetime of a code. The cohort includes all codes created in calendar year 2023.
| Column | Description |
|---|---|
code_age |
Time elapsed since code creation (bucket label, e.g. 0-7d, 1-2y) |
scans |
Total scans recorded for codes in this age bucket |
Note: Includes expired trial codes, which may understate longevity.
Scan counts by code age bucket across all codes (all cohorts, all time). Shows when scans tend to occur relative to code creation.
| Column | Description |
|---|---|
code_age |
Time elapsed since code creation (bucket label, e.g. 0-7d, 365d+) |
scans |
Total scans recorded for codes in this age bucket |
Edit behavior summary for paid dynamic QR codes. Covers paid accounts only — trial codes lose edit access after trial expiry and are excluded to avoid censored data.
| Column | Description |
|---|---|
paid_dynamic_codes |
Total number of paid dynamic QR codes in the dataset |
never_updated |
Codes never edited at any point after creation |
never_after_day1 |
Codes not edited after the first day post-creation |
Share of QR code types as a percentage of all codes created. Reported as shares (not raw counts) for two windows: 2025 alone and all-time. Used to show how content-type preferences have shifted.
| Column | Description |
|---|---|
type |
QR code content type (e.g. Link, PDF, vCard) |
share_2025_pct |
Percentage share of codes created in 2025 |
share_alltime_pct |
Percentage share of codes created across all time |
Scan counts broken down by OS, device, and browser for the most recent 12-month period. Includes all user agents including bots — the 10.2% bot share finding derives from this file.
| Column | Description |
|---|---|
os |
Operating system (e.g. iOS, Android, Other) |
device |
Device type or model identifier |
browser |
Browser name or user agent string (includes identified bots) |
scans |
Number of scan events matching this OS/device/browser combination in the last 12 months |
All-time scan totals by country or territory. Covers scans from 235 countries and territories.
| Column | Description |
|---|---|
country |
Country or territory name |
all_time |
All-time total scan count from this country/territory |
Note: All-time totals only; no time-series breakdown in this file.
Year-over-year scan growth for the 6 countries featured in the research report. Countries were selected for the report based on notable growth; this is not an exhaustive ranking.
| Column | Description |
|---|---|
country |
Country name |
last_12m |
Scan count in the most recent 12-month window |
prior_12m |
Scan count in the preceding 12-month window |
yoy_growth_pct |
Year-over-year growth percentage (last_12m / prior_12m − 1, rounded) |
Note: Contains only the 6 countries featured in the report, not a complete country ranking.
Scan counts broken down by day of week and hour of day (UTC), aggregated across all time. Used to identify peak scan patterns.
| Column | Description |
|---|---|
dow |
Day of week (0 = Monday, 1 = Tuesday, …, 6 = Sunday) |
hr |
Hour of day in UTC (0–23) |
scans |
Total scan events recorded for this day-of-week / hour combination |
This dataset is released under Creative Commons Attribution 4.0 International (CC BY 4.0).
You are free to share and adapt the data for any purpose, provided you give appropriate credit. See LICENSE.md for the full license text.
Required attribution: Pageloot QR Code Statistics 2026
APA: Pageloot. (2026). Pageloot QR Code Statistics 2026 — Open Dataset. GitHub. https://github.com/siimti/qr-code-statistics
BibTeX:
@dataset{pageloot_qr_2026,
author = {Pageloot},
title = {Pageloot QR Code Statistics 2026 — Open Dataset},
year = {2026},
publisher = {GitHub},
url = {https://github.com/siimti/qr-code-statistics},
note = {Report: \url{https://pageloot.com/qr-code-statistics/}}
}Machine-readable citation: see CITATION.cff.