Analytics

QR Code Tracking for Dynamic QR Codes

See which printed QR codes are actually being scanned — by code, over time, by device, and by available location. Classified automated traffic is counted by default and reported as its own figure, and you can set it aside deliberately when you want the second view. Either way the number on the dashboard is one you can reason about rather than one you have to trust.

$19/month · up to 500 active dynamic QR codes · scan analytics included

Sample data
The VastQR analytics view: controls for date range, comparison, traffic set to All events and batch; cards for scans, QR codes scanned and best day; and a data-coverage panel listing how many scans carried a known device, a known city, a mappable position, and how many were classified as automated, above a note saying those requests are included in this view.
The number of scans, and — right next to it — how much is actually known about them. Device, city and position each carry their own count, classified automated traffic is a row of the same list rather than a footnote, and the Traffic control is where you set those requests aside.

How QR code tracking works

A QR code has no counter inside it. A static code sends the scanner straight to whatever URL is encoded in the pattern, so unless the destination is doing its own measuring, nothing records that a scan happened.

A dynamic code works differently. The printed pattern points at a short redirect. When that link is opened, the redirect service records the request before forwarding the visitor to the current destination. That single indirection is what makes a printed code measurable — and, separately, what makes it editable after printing.

Create trackable dynamic QR codes →

What you can actually see

Scan totals and trend

How many scan requests your codes received over the last 7, 30 or 90 days, compared against the previous period of the same length. Enough to answer whether a print run got used, which day peaked, whether activity rose after a placement went live, and whether an asset is still pulling traffic months later.

Sample data
A VastQR scan-trend bar chart covering thirty days, with a dashed line showing the previous thirty days for comparison.
Daily scans with the previous period drawn behind them. Any single day can be opened to see which codes produced it.
It is a count of scan events
Not people, not unique visitors. One person scanning three times produces three events, and there is no verified unique-person metric behind this number — so nothing on this page will call it one.

Why that distinction changes how you read every QR report →

Performance by QR code

Once there is more than one printed placement, the useful question stops being how many scans did we get and becomes which code produced them. Every code carries its own lifetime total, its total for the period, its change against the previous period and its share of the batch — so a table tent, a window decal, a package insert and a flyer can be judged separately.

Sample data
A VastQR QR-performance table listing individual codes with their status, lifetime scans, scans in the period, change against the previous period, a sparkline and each code's share of the total.
Per-code attribution. The period total is the sum of these rows — every scan in VastQR carries the id of the code that produced it, so this is an equality, not an estimate.

Device and location context, with their own denominators

Where a request carried enough information, VastQR summarises the device type and OS family behind it, and the city it appeared to come from. Crucially, each panel reports how many scans it can speak for.

If device information exists for 89% of scans, the honest reading is not “89% of scanners used this device” — it is “device information exists for 89% of recorded scans, and here is what those look like.” The three coverage figures are independent: one scan can carry a device and no city, or a city and no plottable position. Sharing a single denominator across all three panels would make at least two of them wrong.

Sample data
Two VastQR analytics panels side by side: a device donut chart noting how many scans had no readable device, and a world map with a city ranking noting how many scans could not be placed.
Each panel states what it could not account for — 38 scans with no readable device, 148 that could not be placed on the map — instead of quietly dropping them out of the percentages.

Automated traffic is counted by default, and can be set aside on purpose

Not every request to a redirect is a person with a phone. Link previews, crawlers, security scanners, uptime checks and your own testing all produce requests.

The default view is All events. Recognised automated activity is counted in every figure and reported as its own row on the coverage card, so a spike that is really one crawler sweeping your links looks like what it is rather than like demand.

When you want the operational view instead, switch Traffic to Exclude classified automated. The filter runs on the server before anything is calculated, so the trend, the per-code table, the comparison against the previous period, devices and locations all describe the same filtered set — they cannot disagree with each other. The automated count itself is taken before the filter runs, which is why it still appears in the excluded view: taken afterwards it would always read zero and remove the one number that makes the rest interpretable.

ViewWhat it containsWhat it means
All eventsEvery recorded event in the selected scopeRaw operational activity, recognised automated requests included
Exclude classified automatedThose events minus the ones the classifier recognises as automatedA filtered operational view — not a verified-person count
“Not classified as automated” is not “human”
The classifier reads a user-agent string. Automation that does not announce itself is not recognised, and one person can produce several scan events. That is why the filtered remainder is never called human scans, real people or verified visitors anywhere in this product — VastQR does not market perfect bot filtering, because it is not a claim the evidence supports.

A scan count is not a person count

This is the single most misread number in QR analytics, so it is worth being explicit about what each question can and cannot be answered with.

QuestionWhat VastQR can tell you
How much activity did this code receive?Scan-event totals and the trend across the period
Which codes generated it?Per-code attribution, summing exactly to the period total
What context arrived with those scans?Device type and OS family, city and mappable position, each with its own coverage figure
How much was automated?The count and share of recognised crawlers and link previews, reported in either view
Who scanned it?Nothing. A scan event is not an identity, and VastQR does not present it as one.

Turning printed placements into something measurable

The value of QR tracking is not the chart. It is being able to compare physical placements that are otherwise almost impossible to measure.

Take a 200-piece campaign: 50 table tents, 40 counter cards, 30 window decals, 50 flyers and 30 package inserts. Point them all at the same URL with the same untracked code and the traffic is a single undifferentiated number. Give each placement its own dynamic code — still pointing at the same destination — and you can see which placements earn their print cost, then keep, move, reprint, pause or repoint accordingly.

That is where bulk creation, editable destinations and per-code analytics stop being three features and become one workflow.

Want to know which printed code gets scanned?

Paste or upload your destinations, validate the rows, and preview the whole batch before you pay for anything.

Static and dynamic tracking are not the same measurement

CapabilityStatic QRDynamic QR in VastQR
Destination editable after printingUsually noYes
Redirect-level scan recordingNoYes
Scan count for one specific printed codeNoYes
Trend against a previous periodNoYes, over 7, 30 or 90 days
Device type and OS family, where availableNoYes
City and map position, where availableNoYes
Automated-traffic classificationNoYes
Optional exclusion of classified automated eventsNoYes
Measurable with website analytics on the destinationYesYes

The last row matters, and most comparisons get it wrong. A static code pointing at a page you control can be measured — by that page’s own analytics, using a tagged URL. What it cannot do is attribute a visit to one specific printed asset at the redirect, which is the thing per-code tracking exists for.

Compare static and dynamic codes for print →

QR analytics and website analytics answer different questions

A QR dashboard measures the handoff. GA4 measures the visit. Used together they cover the offline-to-online journey; used interchangeably they produce arguments about which number is “right.”

Use it forVastQR scan analyticsWebsite analytics such as GA4
Scan volume on a printed assetYesNo
Attribution to one specific codeYesOnly via tagged destination URLs
On-site engagement and page pathsNoYes
Conversions and revenueNoYes
Requests where the page never loadedYesNo

VastQR has no native GA4 integration. The way the two systems connect is a campaign-tagged destination URL, which GA4 reads when the page loads.

How to set up QR tracking in GA4 →

What VastQR records, and what it will not claim

Implemented today

  • scan-event totals and daily trend
  • comparison against the previous period
  • per-code attribution, summing to the total
  • device type and OS family where available
  • city and mappable position where available
  • independent coverage figures for each panel
  • recognised automated traffic, counted and reported
  • an All events / Exclude classified automated view
  • 7, 30 and 90-day ranges
  • filtering the whole view to one batch

Not claimed

  • unique people or verified humans
  • precise GPS or personal identity
  • demographics
  • purchase or conversion attribution
  • perfect bot filtering
  • browser-level analytics
  • a native GA4 integration
  • guaranteed complete location coverage
  • guaranteed real-time delivery
Methodology
QR analytics can only use what arrived with the redirect request. Some requests do not carry every dimension, so VastQR reports coverage rather than filling the gaps with guesses. Automated traffic is classified when the analytics are read rather than when the scan is written, which means a corrected rule reclassifies the whole history instead of freezing one day’s assumptions into every stored row.

Scan analytics for up to 500 active dynamic QR codes

VastQR Bulk — $19/month includes up to 500 active dynamic QR codes, bulk CSV creation, destinations you can edit after printing, scan analytics, batch management, the supported design controls, and PNG, SVG and PDF downloads. Billing is month to month.

There is no per-scan charge on the current $19 plan.

Know which printed QR codes are actually being used

Prepare a batch, validate the destinations, preview the design, and activate trackable dynamic codes when you are ready to deploy them. Preview the batch before you pay — $19/month for up to 500 active codes.

QR code tracking FAQ

Can you track how many times a QR code is scanned?
Yes, when the QR points at a trackable redirect. A VastQR dynamic code resolves through a managed redirect, so the request can be recorded before the visitor is forwarded to the current destination.
Can a static QR code be tracked?
Not by itself — a static pattern reports nothing. If it points at a page you control, website analytics and campaign-tagged URLs can still measure the resulting visit. That is destination analytics, which is a different measurement than redirect-level tracking tied to a specific code.
Can you see who scanned a QR code?
No, and no honest QR product should claim it. VastQR reports scan activity and the context that arrived with each request — device type, OS family and approximate city where available. A scan event is not an identified person.
Can I track the location of QR code scans?
City and mappable position are available for some scans and not others, depending on what the request carried. The dashboard shows how many scans actually had location data, so a map is never presented as if it covered the whole period.
Does VastQR count bots and link previews?
Yes, by default — and it says so. The default view is All events: recognised automated traffic is counted in every figure and reported on the coverage card rather than quietly removed. You can also switch Traffic to “Exclude classified automated” for a second view that recalculates the period without those events. What is left is not a verified human count, and VastQR does not label it as one.
What is the difference between QR tracking and GA4?
QR tracking measures the redirect request. GA4 measures what happens on your website after the page loads. Neither replaces the other, and the two numbers legitimately differ.
Can I track hundreds of QR codes at once?
Yes. VastQR is built around batches, with per-code attribution inside them, up to 500 active dynamic codes on the current plan.