TapCub is live — analytics, insights and live chat, free on one platform

Free tool QR code generator with UTM tracking

Flyers, posters, table tents, packaging and event booths all get scanned — and then the visits land in your analytics as plain direct traffic. Paste your landing page, add utm_source, utm_medium and utm_campaign, and make one code per placement so each scan can be counted against its campaign. The code updates as you type: change the size, error correction and colors, add a logo, and download a print-ready SVG or a sharp PNG. Plain text, Wi-Fi, contact card and WhatsApp codes are here too.

  • UTM tags built in
  • PNG and SVG
  • Made in your browser
Generator

Make a QR code

Pick a content type, fill it in, and the code appears on the right. Styling never changes what the code says; the checks list flags contrast, quiet zone and logo size problems that stop codes from scanning.

Content type

The page the code opens. https:// is added if you leave it out.

Where it is placed: flyer, poster, package, booth.

The kind of entry point. qr is a common choice for codes.

Campaign name with a date or edition, e.g. spring_sale_2026.

Tells placements or versions apart within one campaign: a store, a stand number.

Mostly for search ads; usually empty on a QR code.

Preview

1024 × 1024 px · version 7, 45 × 45 modules · level M · about 8.7 cm at 300 dpi

What the code contains
https://www.example.com/spring-sale?utm_source=flyer&utm_medium=qr&utm_campaign=spring_sale_2026&utm_content=table_tent

Which channel a scan lands in

TapCub (default channel rules)Direct
GA4 (default channel group)Unassigned

Scans usually open the page with no referrer. TapCub's default rules have no rule for the medium qr, so the channel table counts these visits as Direct. utm_source = flyer and utm_campaign = spring_sale_2026 are still recorded: read them under Sources → UTM, or add a channel rule that puts them where you want.

Checks

  • OKEncoded: version 7 (45 × 45 modules), level M, 119 bytes of content.
  • OKContrast 21.0:1.

Style

The SVG is vector and has no fixed size.

Higher survives more damage and leaves room for a logo, but the code gets denser.

The standard asks for at least 4 modules.

PNG, JPG, WebP or SVG up to 2 MB, read on this device only. Adding a logo switches to level H.

Batch (optional)

One placement per line. You get a set of codes with the same URL and UTM tags, differing only in utm_content. Write a name to use the URL above, or "name, URL" to use that line's URL. Up to 200 lines; the ZIP holds a PNG and an SVG per code plus an index.csv.

Share these inputs: the values go after the # in the link, so they never reach a server.

Runs entirely in your browser. Nothing you type here is uploaded or stored by TapCub.

Version v1.0Updated Update history

Reading the result

Preview, content, channel and checks

The four panels on the right answer the four questions to settle before printing: will it scan, what does it say, where will it show up in reports, and is anything risky.

Preview and version

The version is the grid size: version 1 is 21 × 21 modules, each version adds 4 per side, up to version 40. Longer content and higher error correction push the version up and the modules closer together. "About N cm at 300 dpi" converts the image pixels to a print size; printing much smaller than the code needs makes the modules blur.

What the code contains

Exactly what a phone reads. For URLs it is the full address with UTM tags, so copy it and open it in a phone browser once to confirm the page loads and no redirect drops the parameters.

Which channel a scan lands in

Worked out from TapCub's and GA4's default rules, assuming the scan opens with no referrer (the usual case). Neither has a dedicated offline or QR channel: utm_medium=qr counts as Direct in TapCub's channel table and Unassigned in GA4. UTM reporting is unaffected — source, medium, campaign and content are all recorded as written.

Checks

Everything that commonly stops a code scanning or skews the data: contrast, inverted colors, quiet zone, logo coverage, density, too few pixels, plus UTM clean-up and missing fields. Fix errors first, judge warnings case by case; notes tell you what the tool did for you.

The checks catch common problems only. After a print proof, scan it with two or three different phones at the real distance and in the real light.

How to use it

A trackable campaign QR code in four steps

One code per placement is what lets you compare locations afterwards.

  1. 1

    Pick URL and paste the page

    Use the URL type with your landing page. Posters, flyers and table tents for one campaign can share a landing page; the UTM tags tell them apart.

  2. 2

    Write the UTM tags

    utm_source says where (flyer, poster, booth), utm_medium is qr for all codes, utm_campaign names the campaign, utm_content names the exact spot. Values are lowercased for you.

  3. 3

    Style it

    Use SVG for print. Upload a logo if you want one; the tool moves to level H and estimates how large the logo can safely be. When changing colors, watch the contrast check and keep modules dark on a light background.

  4. 4

    Download, test, then print

    Download PNG or SVG, scan the proof with a phone, and confirm both the page and the parameters in the address bar. For many stores or spots, use Batch to export them all at once.

Rules

How the code is built and what the checks use

Encoding follows ISO/IEC 18004 (QR Code 2005): byte mode in UTF-8, the smallest version that fits, and the mask chosen by the standard's penalty rules. These are the rules behind the style options and checks.

  • Error correction: levels L, M, Q and H restore roughly 7%, 15%, 25% and 30% of codewords. Higher levels need a larger version for the same content.
  • Quiet zone: the standard asks for a clear border at least 4 modules wide, which matters most on dark or busy backgrounds.
  • Contrast (this tool's rule): the WCAG 2.2 relative luminance formula between modules and background; under 3:1 is an error and 3–4.5:1 a warning, with inverted colors flagged separately. The QR standard grades print reflectance instead; WCAG gives a quick on-screen estimate.
  • Logo coverage (this tool's rule): using the standard's codeword placement and block layout, the tool finds which codewords the logo (and its plate) covers and how many hit each error-correction block, then compares with what that block can correct (half its error-correction codewords). Up to 50% is fine, 50–100% is tight, over 100% will likely fail. Every covered codeword counts as damaged, so the estimate errs on the safe side.
  • UTM: the same rules as the UTM builder — lowercase, spaces to underscores, existing parameters kept, tags placed before any # fragment.
Choosing an error correction level
LevelRestores aboutGood for
L7%Very long content shown only on screens
M15%Most posters, flyers and web pages (default)
Q25%Outdoor, curved or rough surfaces that may wear
H30%A center logo, or packaging that gets scuffed
Worked example

One store campaign, four placements, four codes

A café chain runs a spring sale. Same landing page; a code on the window poster, the table tents, the receipt and the email newsletter image.

Landing page https://www.example.com/spring-sale, utm_medium=qr, utm_campaign=spring_sale_2026
Placementutm_sourceutm_contentHow to read it
Window poster (Main St)postermain_stSplit by content under Sources → UTM to see which store scans most
Table tent (Main St)table_tentmain_stCompare with the poster: which spot inside one store works
Receiptreceiptall_storesRepeat customers; good for watching later conversions
Newsletter imagenewsletterapril_issueScanned from a screen; whether a referrer arrives varies, the UTM tags are recorded either way

Build all four with Batch: fill in the URL and UTM tags, then write four names in the batch box (each becomes utm_content). After the campaign, compare scans and conversions by utm_content in the UTM report. In the channel table these visits count as Direct under the default rules; add a channel rule if you want them in a channel of their own.

Common mistakes

What goes wrong with campaign QR codes

Printed codes cannot be changed, so these are worth checking before the proof.

Printing a bare URL

Scans blend in with typed URLs and bookmarks as Direct traffic, and the campaign cannot be measured. Give every placement its own UTM tags.

Redirects that drop the tags

With a short link or redirect page, if the redirect does not pass ?utm_… through to the final page, analytics never sees it. Scan once and check the address bar.

Pale or inverted colors

Light gray modules, colored backgrounds and white-on-black codes fail on some phones. Keep modules dark on a light background, at least 4.5:1.

Oversized logo, no quiet zone

A logo covering more codewords than error correction can repair breaks the code, and a code jammed against artwork is hard to find. Use the coverage estimate and leave 4 modules of clear space.

FAQ

QR code generator FAQ

Still have a question?

Chat with the team behind TapCub — we usually reply within a few hours on business days.

How do I use this QR code generator?

Pick a content type (URL, text, Wi-Fi, contact or WhatsApp), fill it in, and the code appears on the right. Click Download PNG or Download SVG. For URLs, add UTM tags at the same time so scans can be separated by campaign and placement in your analytics.

Do these QR codes expire? Is it really free?

They do not expire and there is no charge. These are static codes: the content is encoded directly, and a scan opens your URL without passing through our servers, so there is no expiry date and no scan limit. The trade-off is that a printed code cannot be edited — to change the destination, redirect on your own site.

How can I count how many times a code was scanned?

A static code cannot count itself. Add UTM tags (for example utm_medium=qr&utm_campaign=…) and count visits with those tags in your analytics: that is the number of scans that opened the page. Scans that never opened the page cannot be seen by any tool.

Which channel do QR scans show up in?

Scans usually arrive with no referrer. Under TapCub's default channel rules, a medium like utm_medium=qr matches no rule, so the channel table counts it as Direct; GA4's default channel group puts it in Unassigned. Source, medium and campaign are still recorded, so read the UTM report; in TapCub you can also add a channel rule to group these visits on their own.

Should I download PNG or SVG?

SVG for print and design files: it is vector and stays sharp at any size. PNG for chat apps, slides and platforms that do not accept SVG; pick the size for the job, 2048 px or more for print.

Can I put a logo in the middle?

Yes. Uploading a logo raises error correction to H and estimates coverage block by block: how many codewords the logo covers, how close that is to the correction limit, and the largest size that keeps a safe margin. The estimate is cautious, but still test the proof with a phone.

Can I change the colors?

Yes, as long as modules stay dark on a light background with contrast of about 4.5:1 or more. White-on-black codes are not read by every scanner, and light gray or yellow modules struggle in poor light.

Is what I type uploaded?

No. The code is generated in your browser and the logo is read on your device only. The share link contains only the URL, UTM tags and style settings, after the # where it is not sent to a server; Wi-Fi passwords, contact details and phone numbers never go into the share link.

Changelog

Update history

New features, fixes and data refreshes for this tool, newest first.

  1. · v1.0

    LaunchedFirst release.

Data this tool relies on

  • GA4 default channel group source lists — checked 2026-11-09, reviewed every 6 months (next review by 2027-05-09)

Missing something or found an error? Tell us — requests that come up often go into the next update. All tool updates

Next step

Make every code accountable

Add the TapCub tracking code and break scan traffic down by UTM: which store, which poster, which spot brought visits and conversions.

See your data clearly. Find your growth.

Every click, backed by data. Install one line of code and see your first numbers in a minute.

No credit card · Free plans for analytics and chat · Cookieless analytics