# QR Code Analytics — Scan Tracking & Stats

> Track every QR scan: total, unique, device, OS, browser, country, city, hour heatmap, and 90-day timeline. CSV/PDF export. Free + Pro tiers.

*Source: https://shopsavvy.com/qr/stats*

---

## Hero

**Headline:** QR Code Analytics

**Tagline:** Every Scan, Counted.

**Subhead:** Total scans, unique scans, device, OS, browser, country, city, and hour-by-hour heatmaps for every QR code you create.

**Primary CTA:** Download on the App Store

---

## What Gets Tracked

| Field | Source | Granularity |
|-------|--------|-------------|
| Timestamp | Server-side at scan time | Second |
| Country | IP geolocation | Country |
| City | IP geolocation | City |
| Device family | User agent parse | iOS / Android / Desktop |
| OS | User agent parse | iOS 17, Android 14, macOS 14, Windows 11, Linux |
| Browser | User agent parse | Chrome, Safari, Firefox, Edge, Opera |
| User agent (raw) | Request header | Full string |
| Hour-of-day | Derived from timestamp | 0–23 |

We do **not** request GPS. We do **not** store personal identifiers. We do **not** cross-link scans across your different QR codes.

---

## Per-Link Analytics (Pro)

For every dynamic QR you create, the dashboard shows:

### Counts

- **Total scans:** every recorded event
- **Unique scans:** deduped on IP+user-agent within a 24-hour rolling window
- **First scan / last scan:** lifetime span of the link

### Date Filters

5 ranges: 24h, 7d, 30d, 90d, all-time. Every panel reshapes to the active filter.

### Timeline

Scans-by-day bar chart, scrollable across the active range.

### Device & OS

iOS / Android / Desktop split with counts and percentages, plus drill-down to specific OS versions.

### Browser

Chrome, Safari, Firefox, Edge, Opera ranked by scan count for the active range.

### Geography

- Top 10 countries (ranked by scans)
- Top 10 cities (city + country code)
- IP-derived; no GPS request

### Hour Heatmap

24-cell heatmap (0–23) showing scan intensity by hour. Identifies your peak engagement window for the active range.

### Recent Scans

Last 20 scan events with full metadata: timestamp, device, OS, browser, city, country, referrer.

### Export

- **CSV export** — every scan event with full metadata
- **PDF export** — full dashboard for the active filter (Pro)
- **Share-as-image** — render any panel as a PNG (Pro)

---

## Personal Scan History

The Analytics screen also shows personal scanning insights for codes you've **scanned**, not just codes you've created.

### Free Tier

- Total scan events (cumulative across all codes)
- Unique codes scanned
- Last scan time (relative, e.g. "2 hours ago")

### Pro Tier

- **30-day activity chart** — bar chart of active scanning days
- **Most scanned (top 10)** — codes ranked by scan frequency
- **Type breakdown** — stacked bar of barcode formats scanned
- **Scan timeline** — chronological log of every scan with type badge
- **Lifetime stats:**
  - Total scan events (cumulative)
  - Unique codes scanned
  - Codes you've created
  - Formats discovered (count of distinct barcode types)
  - Longest scanning streak (consecutive days)
  - Scanning since (your first scan date)
- **Year heatmap** — GitHub-style yearly grid of scanning intensity, day by day

---

## Unique Scan Definition

A unique scan = one IP-and-user-agent pair within a rolling 24-hour window. Subsequent scans from the same combination still increment **total** scans but do not increment **unique** scans.

This dedupes legitimate repeated scans (someone scanning the menu QR three times during dinner) while preserving the separate-visitor signal for analytics.

---

## Privacy

| Collected | Not Collected |
|-----------|---------------|
| Server-side timestamp | GPS / precise location |
| IP-derived country and city | Personal identifiers |
| Device family, OS, browser | Cross-link tracking across your codes |
| Raw user agent | Anything tied to your shopping history |

Each link's analytics is its own silo. We don't cross-reference scans of one of your QR codes with scans of another.

---

## Frequently Asked Questions

**What does QR analytics actually track?**
For every dynamic QR code you create, the app records each scan: timestamp, IP-derived country and city, device family (iOS, Android, Desktop), OS, browser, and the user agent. Personal identifiers are not stored.

**What counts as a unique scan?**
A unique scan is one IP-and-user-agent pair within a rolling 24-hour window. Subsequent scans from the same combination still count toward total scans but do not increment the unique counter.

**What date ranges can I view?**
24 hours, 7 days, 30 days, 90 days, and all-time. The scans-by-day timeline, top countries, top cities, hour heatmap, and device breakdown all respect the active filter.

**Can I export the data?**
Yes. Every link supports CSV export of all scan events. Pro adds PDF export of the full dashboard and share-as-image for posting summaries to social.

**What free analytics do I get without Pro?**
A personal scan-history overview: total scans, unique codes scanned, and last scan time. Pro unlocks per-link analytics for QR codes you create plus the full personal lifetime dashboard.

**What does the Pro personal dashboard show?**
A 30-day activity chart, most-scanned codes (top 10), type breakdown, full scan timeline, lifetime stats (total events, unique codes, codes created, formats discovered, longest streak, scanning-since date), and a GitHub-style year heatmap of activity.

**How precise is the location data?**
Location is derived from IP at the country and city level for the top 10 of each. The app does not request the scanner's GPS, so precision stops at the city.

**Do my analytics work with any QR code?**
Per-link analytics require a dynamic QR code (created via QR Hosting), since that is what gives the link a unique short code to attribute scans to. Static QR codes encode their destination directly and cannot be tracked retroactively.

---

## Related Pages

- [QR Code Reader](/qr-code-reader) — the full app overview
- [QR Code Generator](/qr/create) — design custom QR codes
- [Dynamic QR Codes](/qr/host) — required for per-link tracking
