QR Ledger

Automated tests: what we observed, not what vendors say

Three tests a script can run against any vendor without an account, each dated and repeatable.

Static decode: Redirect domains: Security scan:

Test 1: what a free static code actually contains

We typed the same address, https://example.com/qr-test-2026, into each generator, downloaded the free static code without signing in where that was possible, and decoded the image with an open-source QR reader. "Your URL, directly" means the pattern holds your address and no vendor sits between the scan and your page.

VendorFree static code without an accountDecoded contentImage sizeTested
The QR Code GeneratorYesYour URL, directly1000x10002026-10-09
HovercodeYesYour URL, directly1100x1100 (PNG)2026-10-09
QR TIGERNoDownload needs an account (on-screen preview encodes your URL directly)2026-10-09
FlowcodeNoDownload needs an account (on-screen preview encodes a vendor link)2026-10-09
ScanovaYesYour URL, directly256x2562026-10-09
ME-QRNo (static codes are a paid feature)Vendor link (q.me-qr.com); the free download is a dynamic code1000x10002026-10-09
QRStuffYesYour URL, directly405x4052026-10-09
QRFYNoDownload needs an account2026-10-09
QR.ioNoDownload needs an account (on-screen preview encodes your URL directly)2026-10-09
UniqodeNot testedNot tested: the generator widget did not load in our browser2026-10-09
QRCodeKITNoDownload needs an account2026-10-09
QR PlanetYesYour URL, directly1584x1584 (PNG)2026-10-09
Adobe ExpressNoDownload needs an account (on-screen preview encodes your URL directly)2026-10-09

The QR Code Generator, Hovercode, QRStuff, Scanova and QR Planet produced a direct static code without an account. QR TIGER, Adobe Express, QRFY, QR.io, Flowcode and QRCodeKIT required an account before any download. QRStuff defaults both "Update later" and "Enable analytics" to on, which makes a dynamic code unless you switch them off. ME-QR's free download is a dynamic code through its own domain; its static option is Premium only. Uniqode's generator widget did not load in our headless browser in four of five attempts, so it is marked for a manual re-test.

Test 2: which domain your dynamic code points to

A dynamic code never holds your address. It holds a short link on a domain the vendor controls, and that domain is the single point of failure. We decoded sample codes on each vendor's own site and help pages to find the domain, then requested each one over HTTPS on the test date and recorded the response and whether it sent an HSTS header. Whether plain HTTP is redirected to HTTPS was not tested.

VendorRedirect domainHow sureResponseHSTSHTTP redirects to HTTPS
The QR Code Generatorqr-codes.iomedium-high200 in 795 msYesNot tested
Hovercodescango.tohigh200 in 539 msNoNot tested
QR TIGERqr1.behigh200 in 950 msYesNot tested
Flowcodeflowcode.comhigh301 in 483 msYesNot tested
Scanovascnv.iohigh200 in 668 msYesNot tested
ME-QRq.me-qr.comhigh301 in 524 msYesNot tested
QRStuffqrs.lyhigh302 in 1234 msNoNot tested
QRFYNot found without an account
QR.ioNot found without an account
Uniqodeqrcodes.prohigh301 in 594 msYesNot tested
QRCodeKITqrkit.comedium-high200 in 501 msNoNot tested
QR Planetqrplanet.commedium-high200 in 862 msYesNot tested
Adobe ExpressStatic codes only; no redirect domain

Some vendors use more than one redirect domain. Hovercode's pricing FAQ also names qrgo.is and hov.to; its help centre names scango.to. Sample codes on ME-QR's homepage decode to me-qr.com links, QRCodeKIT also uses uqr.to, and QR Planet also uses qrd.by, qr.vc and qr1.at. The HSTS value on qr-codes.io and qrcodes.pro is 300 seconds.

Test 3: security headers on each vendor's website

What the vendor's main site sends to a browser. HSTS tells browsers to use HTTPS only; a header sent with max-age=0 switches it off, so we count it as not enabled. X-Frame-Options stops the site being embedded in an invisible frame for clickjacking. These are observed facts about the public site, not an audit of the product.

VendorHostHSTSX-Frame-OptionsChecked
The QR Code Generatorwww.the-qrcode-generator.comYesSAMEORIGIN2026-10-11
Hovercodehovercode.comYesDENY2026-10-11
QR TIGERwww.qrcode-tiger.comSent with max-age=0 (disabled)Not set2026-10-11
Flowcodewww.flowcode.comYesSAMEORIGIN2026-10-11
Scanovascanova.ioYesNot set2026-10-11
Canvawww.canva.comYesSAMEORIGIN2026-10-11
ME-QRme-qr.comYesSAMEORIGIN2026-10-11
QRStuffwww.qrstuff.comNoNot set2026-10-11
QRFYqrfy.comSent with max-age=0 (disabled)SAMEORIGIN2026-10-11
QR.ioqr.ioNoNot set2026-10-11
Uniqodewww.uniqode.comYesSAMEORIGIN2026-10-11
QRCodeKITqrcodekit.comYesSAMEORIGIN2026-10-11
QR Planetqrplanet.comYesSAMEORIGIN2026-10-11
Adobe Expresswww.adobe.comYesNot set2026-10-11

How these tests run

  1. The decode test uses a headless desktop browser, types the address with keystrokes, downloads the file, and reads it with jsQR, falling back to ZXing. Every step is screenshotted.
  2. Redirect domains come only from first-party evidence: sample codes on the vendor's own pages or a help article naming the domain. Where neither exists, the row says so instead of guessing.
  3. The security scan reads each vendor's homepage response headers on every run; the date of the last run is shown above.
  4. Prices are checked monthly against each vendor's live page; see how our dates work.