Dynamic QR Codes
Track performance
Codes that you can’t measure are just decoration. QR Codes → Analytics turns every scan into a number you can act on — what got scanned, what sold, what it earned, and who bought. It’s five views: an Overview, then four breakdown tabs — QR codes, Products, Campaigns and Customers — and every one of them lets you click through to a detail view. Pro
Numbers are only useful if you know what’s behind them, so this page starts with the counting rules, then tours the reports.
How scans and orders are counted
Only people count as scans
Messaging apps and social networks (WhatsApp, Telegram, Facebook and others) open a link the moment it’s shared, to build a preview. Search engines, crawlers and link checkers visit links too. The plugin recognises these by their browser signature and request type, logs them as bots, and leaves them out of every report. They never add a product to a cart or apply a coupon. On a code’s own page they still show in the timeline, marked Bot / preview, so you can see they happened.
One blind spot: email security scanners. Services such as Microsoft Safe Links, Proofpoint and Mimecast open every link in an incoming email to check it, and they present themselves as ordinary browsers. They can’t be told apart from a person, so if you email a code’s link to a company inbox, a visit or two may be counted that no human made.
Total and unique scans
Scans counts every human scan. Unique scans, shown under it, counts each visitor once per QR code per day — someone who scans the same code five times on Saturday counts as one unique scan. Visitors are told apart by a one-way hash of their IP address; the address itself isn’t stored.
The catch: people on one shared network (an office or an event Wi-Fi) share an IP address, so they can count as a single visitor. At a busy trade show, unique scans will read low — trust the total there.
Scans and link clicks
A scan comes from the printed code. A link click comes from the link you copied with Copy link and shared in a message, a post or an email. The copied link carries a small marker, so Analytics keeps the two apart: the Scans tile shows “87 unique · 12 link clicks” under the number, and link clicks never inflate the scan count of your printed codes. (All QR Codes and the product’s QR codes box add the two together as Visits.)
Conversions and conversion rate
When a shopper scans a code (or clicks its link) and then checks out, the order is credited to that code and its campaign. The link travels in the shopper’s WooCommerce session, not through the coupon, so it works with or without a discount. If the same shopper scans a second code before buying, the most recent scan gets the credit.
- A conversion is an order paid at least once — it has reached Processing or Completed. Orders sitting in Pending payment or On hold don’t count yet. If a counted order is later cancelled, fails or is fully refunded, it drops out again.
- Conversions count the scans that led to an order, so one scan that leads to two orders is still one conversion.
- Conversion rate = conversions ÷ (scans + link clicks). An order can follow either kind of visit, so both are in the denominator.
Net revenue and revenue not yet completed
- Net revenue — the money from Completed orders, less any partial refunds.
- Revenue not yet completed — orders still in Processing: paid, not yet marked completed. In tables the column is called Not yet completed.
- Cancelled, failed and fully refunded orders are in neither figure.
If your net revenue looks low, check whether paid orders are being left in Processing — they move across the moment you complete them.
Campaigns: credited at scan time
Campaign reports count each scan, and the order it led to, under the campaign the code was in when it was scanned. If you move a code from one campaign to another, its earlier scans and sales stay with the old campaign and only new scans count for the new one.
Bundle and link codes
The Products report counts codes made for each product. Sales through bundle codes (several products in one scan) and link codes aren’t split across products there — find them on the QR codes, Campaigns, Customers and Overview reports. A link code to another website reports scans only (“external — scans only”): no order on your store can be linked to it.
The date range
One control sits above every view: the date range. Pick All time, Last 7 days, Last 30 days, This month, Last month, or set your own From and To, and everything below — overview, tables and detail pages — recalculates to that window. On a bounded range the Overview’s tiles also compare against the previous period (↑ / ↓ / New).
The overview
The Overview stacks five blocks, top to bottom:
- At a glance — Scans (with unique scans and link clicks underneath), Conversion rate, Net revenue and Revenue not yet completed.
- Performance over time — a daily curve you can flip between Scans and Revenue.
- From scan to order — the funnel, with the drop-off at each step and a How scans and orders are counted link back to this page.
- Needs attention — up to three flags, shown right here on the Overview (nothing is emailed or sent): a product with a high refund rate (more than twice your store’s rate in the selected range), a product that’s often out of stock when scanned (over 30% of its scans, with at least 10 scans), and Never-scanned codes (five or more codes created over 60 days ago that nobody has scanned). Each links to the matching report.
- Top performers — your best QR codes, products and campaigns, each a shortcut into its detail view. A code without a label is named after its product (or Bundle, Link code, Blank code).
From scan to order
The funnel reads Scan → product or page → order, in three steps:
- Scans & link clicks — every human visit, from the printed code or its shared link.
- Reached product or page — every successful scan: the product went into the cart, a variable product’s page opened before the customer picked a variation, or a link code’s page opened. On a code’s own timeline each scan keeps its badge, Added to cart or Page opened. It also counts scans where the product went in but the coupon was refused; those also show under Failed scans on the code’s page, so the coupon gets a look.
- Orders — conversions, as defined above.
Before the first scan there’s nothing to chart, so instead of a page of zeros the Overview says “Scans, sales and revenue for each QR code show up here after the first scan. Print or download a code and scan it with your phone to see it work.” with a View all QR codes button.
The breakdown tabs
The four breakdown tabs slice the same data different ways, and they all behave alike: a sortable table (click a numeric heading), a search box and filters, and the shared date range. Every row is a doorway — click it for a detail view of that one code, product, campaign or customer. Products and campaigns then drill one level further, down to a single code’s scan-by-scan history.
QR codes
The master list of every code: scans, conversions and conversion rate, net revenue, not yet completed, and when it was last scanned. Narrow it with the search box (label, coupon, product) or the filters: campaign (including No campaign), product, and status — All statuses, Active, Retired or Unassigned (blank codes not yet assigned).
Click a code to open its detail page — the richest view in Analytics. Up top: its product (or destination), campaign and coupon, then KPI tiles including Failed scans with the reason (out of stock, coupon failed, code not found). Below is a scan timeline, one row per visit, that you can filter to Converted, Added to cart or Failed. Each row shows the outcome, the linked order, the items, the discount, the revenue and the Time to order; visits from the shared link are marked Link click, and scans of a retired or blank code say so. View customers → jumps to the people this one code brought in.
A code’s detail page lives at …&code=<id>. In 1.x it was &qr= — bookmarks to old detail pages don’t carry over, so open the code from the QR codes tab and bookmark it again.
Products
Rolls every product code up to the product it sells, so you see which products your codes actually move — not just which get scanned. The QR codes column counts how many codes point at each one. As the line above the table says: “Codes made for each product. Sales through link codes and bundles are under QR codes.”
Opening a product gives you its own KPI tiles and the list of every code that points at it. Each of those rows drills into that code’s scan timeline — so you can go from “this product earned £1,350” to “…and this is the exact scan that did it” in two clicks.
Campaigns
Performance per campaign, each tagged with its channel — so you can line a print drop up against a social push or an email blast and judge them on revenue, not gut feel. Remember that a campaign is credited with the scans made while a code was in it.
Open a campaign for its channel, status and run dates, its totals, and the codes inside it — each drilling down to its own scan history. (This is the analytics twin of the campaign you set up on the Campaigns screen; Edit campaign takes you there.)
Customers
The view most stores overlook: the actual people a scan brought in. Sorted by order count so your Repeat buyers (more than one order — also your coupon-abuse signal) rise to the top, with Guest badges for shoppers without an account, and filters for email, campaign (including No campaign) and coupon.
A customer’s detail page lists every QR-attributed order they’ve placed — with the order status, the code and product behind it, the coupon and the revenue. It’s what turns “we printed some QR codes” into “this flyer brought in eleven customers, four of whom came back.”
In the order itself. Each WooCommerce order screen has a box that says where the order came from — From a QR scan, with the code and campaign, or “This order didn’t come from a QR scan.” QR orders also show Source: qr in WooCommerce’s own Order Attribution box, thanks to the tracking tags.
Next: Configure settings →
