Analytics

Analytics

Each recorded scan stores the time, location, device and how the scanner got there. Bots and prefetches aren't recorded, as covered in the introduction.

Scans are recorded on every plan, but reading them needs Pro. That covers the dashboard, the map, a code's scan history and the /scans API routes.

Where to look

  • The dashboard shows totals and trends across your workspace.
  • A code's own page lists its scans.
  • /map plots scans by location and exports them as CSV.
  • /activity is the log of what people in your workspace changed.

What a scan stores

FieldNotes
TimeWhen the scan happened
IP addressDeleted along with the scan if your deployment sets a retention period
Country, region, city, latitude, longitudeFrom Vercel's geolocation headers, so empty when running elsewhere
Device, device type, browser, OSParsed from the user agent
Referrer and categoryMost QR scans have no referrer
UTM parametersFrom the scan URL and from the code's own UTM settings
Unique visitorWhether this IP and user agent had scanned this code before

Unique visitors are an estimate. Two people on the same Wi-Fi with the same phone model count as one.

Tag a campaign

Set UTM parameters on a URL code to have them added to the destination and recorded with each scan. Print one code per placement, each with its own utm_content, to compare placements.

Get the numbers out

Use the API, or read totals directly:

curl -H "Authorization: Bearer $QRHOOKS_API_KEY" \
  "https://your-domain/api/v1/scans/stats?from=2026-10-01T00:00:00Z"