Docs · How-to

Read your scan analytics

Every scan of a dynamic code passes through taproute, so counting them needs nothing installed and no consent banner. This guide covers where the numbers are, how to narrow them to one code or one campaign, how to get them out as a file, and · the part worth reading twice · which of them do not mean what they look like.

See the numbers

  1. Open Analytics. Analytics in the sidebar. It opens on the whole workspace. If nothing has been scanned yet you get "No scans in this period yet. Print a code and watch this fill up."
  2. Pick a range. The filter bar under the heading offers Last 7 days, Last 30 days, Last 90 days, Last 6 months, Last 12 months and All time. Start at 30 days · long enough to show a shape, short enough to keep every breakdown available.
  3. Read the four cards at the top. Total scans, Unique visitors, New visitors and Returning. Each carries its comparison against the previous period, and the comparison states the previous period's actual number so you can check the percentage rather than take it on faith.
  4. Scroll for the breakdowns. Scans over time, a map headed Where scans happen, then By country, By device, By browser, By OS, Traffic sources, Top campaigns, By city, Busiest hours and Top links.

Narrow it to one code

  1. From the code itself. Open the code in Links and click its scan count at the bottom of the Overview tab. Analytics opens already filtered to that code, with a chip in the filter bar showing its slug.
  2. Or filter by folder. If you have folders, the filter bar carries a picker that starts at All folders. Useful for "how did the spring campaign do" when the campaign is a folder of twenty codes.
  3. Clear it when you are done. Click the chip's close icon, or Show all links in an empty view, to get back to the whole workspace. The link filter replaces the folder picker rather than combining with it · they filter the same axis.

Three limits on filtered views

  • Filters are a 90-day surface · "The folder filter covers the last 90 days." Longer ranges come from the nightly rollup, whose dimensions are workspace-level, so a folder or link slice over them would be silently wrong and is not offered.
  • Unique visitors disappear in folder views · "Unique visitors are counted per workspace, so they are hidden in folder views." The estimate is a per-workspace structure; a per-folder or per-code figure carved out of it would be a number nobody measured, so it is not shown rather than shown wrong.
  • A folder past 500 codes reports a subset, and says so · "This folder holds N codes, more than one report can cover. Every number below is for the 500 most recently created." Newest first, so the codes currently being watched are the ones covered.

Watch scans arrive as they happen

Live in the sidebar opens Live scans: a feed that fills as codes are scanned, with a Scan pulse for the last 30 minutes and counters for scans seen, per-minute rate over the last 10 minutes and top country. Before the first scan it reads "Listening for scans…" with the hint "Scan any of your codes and watch it appear here instantly."

This is the screen to have open while you test a printed code, or during the hour after a mailing lands. Each row offers Edit link, View analytics, Copy short link and Open destination, so a code behaving oddly can be opened and fixed without leaving the feed. A status pill reads Connected, or Reconnecting… if the stream drops.

Get the numbers out

  • Export CSV · downloads a file carrying the filters currently on screen, so the file answers the same question the screen does. This is the one to attach to a report or load into a spreadsheet.
  • Scan log · at the bottom of the page, "every scan, newest first · last 90 days", with Load more to page back. Under heavy traffic some rows stand for several scans and are marked ×N.
  • Share report · mints a link to a hosted, unbranded report and opens it in a new tab. Read the box below before you use this one.

A shared report link is a key, not a page

  • It needs no login · anyone holding the URL can open it, including anyone it is forwarded to.
  • It covers the whole analytics history · not the range or the filter you were looking at when you minted it.
  • It lives 30 days · then stops working on its own.
  • Revoking is all-or-nothing · Revoke shared reports kills every report link the workspace has ever handed out, including ones colleagues sent to clients. Nothing stores the minted tokens, so there is no way to retire just one. The confirmation says so before you commit, and you can share a new report immediately afterwards.

Reading the numbers honestly

Most support conversations about analytics are not about missing data. They are about a number that was read as something it is not.

  • Unique visitors is a sum of days · the caption under the number says "Counted per day, then added up", so a regular who scans on ten days contributes ten. It is the right number for "how much reach did this get" and the wrong number for "how many people". New visitors, beside it, counts people first seen in the last 28 days and is the closer answer to the second question.
  • There is no per-code unique count · deliberately. The estimate is built per workspace, and slicing it per code would produce a figure that looks precise and is not.
  • Long ranges end yesterday · "Long ranges show data through yesterday", because they read from the nightly rollup rather than live events. If today's scans matter, use a 90-day range or shorter.
  • City detail starts when city detail started · "City-level detail accumulates from new scans · countries cover the whole range". An old campaign will have country data and thin city data, and that is a history artefact rather than a fault.
  • Campaign detail needs a shorter range · "Long ranges show sources only · pick 90 days or less for the full campaign tree".
  • High volume is sampled · at scale the page notes "Counts are sampled estimates". Trends stay honest; a single-digit difference does not.
  • Busiest hours are scanner-local · "in each scanner's local time", not yours. A code scanned at lunchtime in three countries peaks at lunchtime, not at three different points on your clock.
  • Bots are counted and labelled · totals note "incl. N bot scans" where relevant, and the scan log marks a bot row, so a link preview crawler does not quietly inflate a campaign.

What is deliberately not here

  • No GPS location · country, region and city come from the network the scan arrives on. Precise location was declined as a product direction, so it is not a feature waiting to be built.
  • No cookies and no identifiers · nothing is stored on the scanner's device, which is why there is no consent banner in front of your codes and why the uniqueness figure is an estimate rather than a count.
  • No retargeting pixels · also a decision rather than a gap.

How the measurement actually works · the event pipeline, the cookie-free uniqueness sketch and the nightly rollup · is on Analytics.

When there is nothing to read

  • The code is still a draft · a draft's address does not resolve, so a scan produces nothing to count. Open the code and press Publish · Create your first QR code walks it.
  • The code is static · the scan never reaches taproute, so there is nothing to report. Only dynamic codes can be counted, which is the difference between the two.
  • Scans are landing somewhere unexpected · check the routing before the analytics. Send one code to different destinations covers testing a scan against the rules that are live.

Questions

Does taproute track people who scan my codes?

No. There is no cookie, no identifier stored on the scanner and no cross-site profile. Uniqueness is estimated with a cookie-free per-workspace sketch, and location is derived from the network the scan arrives on. There is no GPS-level data and there will not be · it was declined as a product direction, not left as a gap.

Why does "Unique visitors" look too high?

Because it is a sum of per-day counts, which the card says under the number: "Counted per day, then added up". Someone who scans on ten different days is counted on each of those days. For an answer to "how many people", read New visitors beside it, which counts people first seen in the last 28 days.

Who can open a shared report link?

Anyone who has the URL. It carries no login, it covers the whole workspace analytics history rather than the view you were looking at, and it works for 30 days. Treat it as you would a document link you cannot recall · because the only recall available retires every report link the workspace has ever shared, all at once.

How far back does the data go?

Full history is retained on every pack. Ranges up to 90 days are served from live event data with every breakdown available; longer ranges are served from a nightly rollup, so they show data through yesterday and the city, folder and campaign detail is not sliceable at that depth.

Do analytics cost credits?

No. Reading analytics, exporting the CSV and sharing a report are all free. Scans bill 1 credit each whether or not you ever look at the numbers.