📊 QR Code Scan Analytics Guide
Track how many people scan your QR codes, when, and where — without paying for premium QR services.
The Problem: QR Codes Are "Fire and Forget"
A static QR code links to a URL. Once printed, you can't change it or see who scanned it. Premium QR services charge $5-15/month for scan tracking. But you can get the same data for free.
Method 1: UTM Parameters + Google Analytics
The simplest free method. Add UTM parameters to your URL before generating the QR code:
https://yoursite.com/menu?utm_source=qr&utm_medium=print&utm_campaign=table-tentThen in Google Analytics:
- Go to Reports → Acquisition → Traffic acquisition
- Filter by Session source = qr
- See total scans, devices, locations, and time patterns
✅ Best for: Website owners who already use Google Analytics
Method 2: URL Shortener with Analytics
Use a free URL shortener that provides click tracking, then encode the short URL in your QR code:
| Service | Free Tier | Analytics |
|---|---|---|
| Bitly | 10 links/month | Clicks, referrers, locations |
| TinyURL | Unlimited | Basic click count |
| Dub.co | 25 links/month | Clicks, devices, geo, referrers |
| Short.io | 1,000 links | Clicks, geo, devices, OS |
✅ Best for: Non-technical users, social media, print marketing
Method 3: Self-Hosted Redirect
For developers who want full control. Set up a simple redirect endpoint that logs scans:
// Example: Next.js API route
// /api/qr/[id]/route.ts
export async function GET(req, { params }) {
// Log: timestamp, user-agent, IP, id
await logScan(params.id, req);
// Redirect to actual destination
return Response.redirect(destinations[params.id]);
}✅ Best for: Developers, agencies managing multiple campaigns
What You Can Track
- Total scans — How many times the QR was scanned
- Unique scans — How many different devices scanned it
- Time of day — When people scan (lunch rush? evening?)
- Device type — iOS vs Android vs desktop
- Location — City/country (from IP geolocation)
- Campaign comparison — Which placement/design performs best
Best Practices
- One QR per campaign — Don't reuse the same QR across different placements
- Use descriptive UTM tags —
utm_campaign=table-tent-lobbynotutm_campaign=qr1 - A/B test designs — Try different colors, sizes, or CTAs and track which gets more scans
- Track over time — QR performance often peaks in week 1 then drops; plan refresh cycles
- Respect privacy — Don't collect personal data without disclosure