ghostQR

Campaign measurement

QR Scans, Link Clicks and GA4 Sessions: Why the Numbers Differ

Understand what each system counts before trying to reconcile your campaign reports.

By GhostQR ·

Imagine a campaign where a QR platform shows 240 scans, another tracked-link system shows 228 requests, and Google Analytics 4 shows 181 sessions. These figures are hypothetical. A difference does not automatically mean one tool is broken because each number describes an event at a different point in the journey.

The useful question is not “which total is correct?” It is “what had to happen for this system to count one?” Once you define each counter, the gaps become diagnostic.

Three counters, three boundaries

MetricWhat usually triggers itWhat it does not prove
QR scanA request reaches the dynamic QR short linkThat the landing page loaded or a person converted
Link click or requestA browser, app, preview service, or security scanner requests a tracked linkThat one identifiable person deliberately clicked
GA4 sessionThe destination loads and its Google tag records a sessionThat the visit came from a QR code unless campaign data identifies it

In GhostQR, a live dynamic code resolves to its saved destination with an HTTP 302 and scan logging happens separately. A repeated request can add another scan. GhostQR does not identify a known person from that request, and a shared short URL cannot reveal whether it was opened from a printed QR, an email, or a copied message.

Why the scan total is often higher

  • The page never finishes loading. A visitor can close the tab, lose reception, or hit a destination outage after the short link was requested.
  • Measurement is blocked. Browser settings, content blockers, consent choices, or a missing tag can prevent GA4 collection.
  • One person tries more than once. Testing, rescanning, refreshing, and sharing can create several requests.
  • Software follows the link. Messaging previews, email security tools, and bots can request a public URL. GhostQR's redirect path does not promise to remove those requests from scan totals.
  • The reports use different clocks. Time zones, date boundaries, and processing delay can move activity between reporting periods.

Google's GA4 data collection documentation explains that its default website setup collects session statistics and uses a first-party client identifier. When analytics storage is denied through Consent Mode, that identifier is not stored. Your consent implementation and applicable privacy rules determine what your site may collect.

A worked reconciliation

Imagine two cafe placements running for the same seven days. The following figures are illustrative, not customer data or a benchmark.

PlacementGhostQR scansGA4 sessionsGA4 key events
Counter sign15011914
Takeaway card907411

The counter sign has a 31-request gap between scans and sessions; the takeaway card has a 16-request gap. Those differences suggest where to investigate, but they do not reveal one cause by themselves. First account for recorded staff test requests, align both date ranges and time zones, and check whether both destinations carry the same tag and consent behavior.

Then compare outcomes. Google defines engaged sessions as sessions lasting longer than the property's configured engagement threshold, containing a key event, or producing at least two page or screen views. The default threshold is 10 seconds, but an administrator can change the engaged-session timer. A key event is one you configure as important. Those definitions come from the GA4 Traffic acquisition report guide. In the example, the takeaway card produced fewer measured visits but nearly as many key events. That may deserve more testing before moving print budget.

Make the comparison fair

  1. Create a separate dynamic code for each placement. Reusing one code merges its request totals.
  2. Add consistent UTM parameters to each destination, changing only the placement value.
  3. Test the complete route from a camera scan to the final tagged landing page.
  4. Record internal tests and campaign start times so you can account for those test requests later.
  5. Compare the same date range and property time zone in both systems.
  6. Wait for standard GA4 processing before treating a mismatch as final.

Google says Analytics processing can take 24 to 48 hours and data may change during that period. See its data freshness documentation. Realtime is useful for an installation check, but completed Traffic acquisition data is the better basis for a campaign comparison.

Use the gap as evidence, not a conversion rate

Scans divided by printed copies is a response indicator, not a view-to-scan conversion rate, because distribution does not prove exposure. GA4 sessions divided by scans is also not a universal quality score. It reflects page delivery, measurement eligibility, user behavior, and automated traffic together.

Use GhostQR scan analytics to compare code-level requests and the GA4 UTM walkthrough to analyse measured sessions after arrival. If you also share tracked links in email or social posts, learn how to shorten a tagged URL without stripping its campaign data. Create a managed short link when you need an editable destination and a compact address.


GHOSTQR © 2026 — ALL RIGHTS RESERVEDCHANGE THE LINK. NOT THE PRINT.V0.1.0 · MADE IN AUSTRALIA