📊 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-tent

Then in Google Analytics:

  1. Go to Reports → Acquisition → Traffic acquisition
  2. Filter by Session source = qr
  3. 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:

ServiceFree TierAnalytics
Bitly10 links/monthClicks, referrers, locations
TinyURLUnlimitedBasic click count
Dub.co25 links/monthClicks, devices, geo, referrers
Short.io1,000 linksClicks, 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-lobby not utm_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