Every modern phone camera scans QR codes natively without an app. That single fact is why QR codes have quietly become the default way to bridge the physical-to-digital gap: restaurant menus, business card vCards, WiFi passwords on a sticky note, conference booths, contactless payments, vaccine certificates. A free QR code generator is one of the highest-leverage tools on the web because the output is durable, universally readable, and costs nothing to print or display.
Our QR code generator handles eight data formats (URL, plain text, WiFi credentials, vCard contact, email, SMS, phone, geographic coordinates) and renders the result entirely in your browser. No signup, no third-party redirect, no scan tracking, no expiration date — the QR code you generate today still works in 2050. This guide explains exactly when to pick each data type, how to size for print, what error correction actually does, and the difference between “free static” and “free with strings attached” tools.
What data can a QR code actually contain?
QR codes don’t store URLs in any special way — they store text, and the device interpreting them recognises certain text patterns and triggers the matching app. The patterns are formal specifications (vCard 3.0, WIFI: scheme, mailto: URI, geo: URI) that every modern phone implements consistently.
| Type | Encoded as | Best use case |
|---|---|---|
| URL | https://example.com |
Marketing posters, menus, product packaging |
| WiFi | WIFI:T:WPA;S:NetworkName;P:password;; |
Cafés, hotels, vacation rentals — guest joins network in one tap |
| vCard | BEGIN:VCARD\nVERSION:3.0\nFN:... |
Business cards, conference badges, email signatures — saves contact in one tap |
mailto:[email protected]?subject=... |
Pre-filled email forms for support, RSVPs, lead capture | |
| SMS | SMSTO:+15551234567:Pre-filled message |
Two-way SMS opt-in, charity giving codes, event RSVPs |
| Phone | tel:+15551234567 |
Real estate signs, service-call posters, emergency contacts |
| Geo | geo:37.7749,-122.4194 |
Trail markers, event venue location, real estate listings |
| Plain text | Raw text string | Internal asset tracking, inventory tags, anything not URL-shaped |
The WiFi format is the under-appreciated one. Instead of writing your password on a chalkboard or printing it on every menu, encode it as a QR code — guests point their phone, tap “Join Network”, and they’re online. The encoded string never leaves your venue. We’ve seen cafés cut WiFi-help conversations from dozens per day to zero this way.
Static vs dynamic QR codes — what “free” really means
This is the trap most users hit. The QR-code-generator industry runs on a freemium model: every “free” tool generates static QR codes by default, but pushes you toward dynamic codes for the features people actually want — analytics, editability, A/B testing, redirect chains.
- Static QR codes encode the destination directly into the code itself.
https://example.combecomes the QR’s literal data. The code never expires, never depends on a service staying online, never reports scan counts. Trade-off: once printed, it’s permanent — you can’t change where it points. - Dynamic QR codes encode a short URL on a tracking service (e.g.,
qrco.de/x7Yp), and the service redirects to your real destination. You can change the destination later, see scan analytics, A/B test landing pages. Trade-off: the QR code stops working the moment that service shuts down or changes hands.
The dirty secret of dynamic QR services: many “free trials” embed a tracking URL into your printed materials, then charge a monthly subscription to keep the redirect alive. Once your physical posters are out in the world, you’re locked in — printing a replacement is more expensive than the subscription. Several companies have shut down with paid subscribers’ codes going dead overnight.
Our generator only produces static QR codes. They never expire, never depend on simpletool.io being online, never report your scan data anywhere. If you specifically need analytics, use a URL shortener like Bitly or a dedicated dynamic-QR service — but understand that’s a paid relationship, not a free QR code generator.
What does QR code error correction actually do?
Every QR code includes redundant data so it can be scanned even when partially damaged, blurred, or obscured. The Reed-Solomon algorithm baked into the QR specification adds extra bits that let scanners reconstruct missing pieces. You pick the redundancy level when you generate the code:
| Level | Recovery | Use when |
|---|---|---|
| L (Low) | ~7% of code restorable | Clean digital display, perfect printing, large size — minimum data, smallest code |
| M (Medium) | ~15% of code restorable | Default for most uses — balances data density with damage tolerance |
| Q (Quartile) | ~25% of code restorable | Outdoor signage, packaging that bends or scuffs, stickers on uneven surfaces |
| H (High) | ~30% of code restorable | Logo-embedded codes, industrial labels, anywhere you expect heavy damage |
The logo embedding rule: if you want to drop a centred logo into a QR code (a common branding move), you must use error correction level H. Putting a logo over level L or M obscures more than the redundancy can recover and the code stops scanning reliably. Even at level H, keep the logo to roughly 20% of the code’s area maximum — covering more reduces redundancy below the working threshold.
Higher correction makes the code denser, not bigger. A given amount of data at level H requires more modules (the small black squares) than at level L, but the physical size is whatever you render. The trade-off shows up indirectly: the same physical size at level H has tinier modules, which makes the code harder to scan from a distance or with a low-quality camera. Match correction level to the use case, not to “more is better”.
How to size a QR code for print
The most common reason a printed QR code fails to scan is being too small. The rule of thumb is the 10:1 distance-to-size ratio — the printed QR should be at least 1/10th the maximum scanning distance.
- Restaurant table menu (scanned from sitting position, ~30 cm): minimum 3 × 3 cm, comfortable at 4 × 4 cm.
- Business card (scanned from hand-held, ~20 cm): minimum 2 × 2 cm.
- Wall poster in a café (scanned from across a small room, ~3 m): minimum 30 × 30 cm.
- Highway billboard (scanned from a car, ~30 m at low speed): minimum 3 × 3 m — and even this is borderline; cameras struggle with focus during motion.
- Product packaging (scanned at point of purchase, ~25 cm): minimum 2.5 × 2.5 cm.
Quiet zone matters. Every QR code needs a clear margin of at least four module-widths of background colour around it — that’s the “quiet zone” defined by the QR specification. Printing a QR code right up to the edge of a card or against a busy background causes scanners to misidentify the code’s bounds and refuse to read it. Our generator includes this margin by default.
Contrast minimums. The dark and light areas need at least 40% luminance difference for reliable scanning. Dark blue (#0A2540) on cream works fine — both have plenty of contrast. Mid-grey on white doesn’t. Test your custom colour combinations on at least three different phones before printing 1,000 copies.
How to use the browser QR code generator
- Open the QR code generator
- Pick a data type tab — URL, Text, WiFi, vCard, Email, SMS, Phone, or Geo
- Fill in the fields. The QR re-renders instantly as you type — no “Generate” button required
- Pick error correction level — M for most uses, H if you’ll add a logo or print on uneven surfaces
- Customise foreground and background colours if needed (keep contrast ≥ 40% luminance)
- Set the output size — 512 px is fine for digital, increase to 1024-2048 px for print
- Download as PNG (raster) or copy the SVG (vector — use this for any final print work)
The SVG output is the right format for print pipelines because it scales infinitely without resolution loss. Designers can drop the SVG into Illustrator, Figma, or InDesign and resize freely. The PNG is convenient for web embed, social posts, and emails.
Generate QR codes in code (Python, Node, browser)
For batch generation — imagine printing 5,000 unique tracking codes for an inventory project — a script is faster than the UI. Each modern environment has a mature QR library.
Python (qrcode + Pillow):
import qrcode
img = qrcode.make(
"https://example.com",
error_correction=qrcode.constants.ERROR_CORRECT_M,
box_size=10,
border=4, # quiet zone
)
img.save("qr.png")
Node.js (qrcode):
import QRCode from "qrcode";
await QRCode.toFile("qr.png", "https://example.com", {
errorCorrectionLevel: "M",
margin: 4,
color: { dark: "#0A2540", light: "#FFFDF8" },
width: 1024,
});
Browser JavaScript (qrcode-svg via CDN):
// Same library our tool uses; renders to canvas or SVG without server roundtrip
import QRCode from "qrcode";
const dataUrl = await QRCode.toDataURL(
"https://example.com",
{ errorCorrectionLevel: "H", margin: 4, width: 512 }
);
document.querySelector("img").src = dataUrl;
The five mistakes that ruin QR code reliability
- Printing too small. The 10:1 rule isn’t optional — go below it and even fresh phones fail to focus. We’ve seen restaurant menus with QR codes the size of a postage stamp that nobody can scan.
- Insufficient contrast. Light grey on white might look elegant in your design mockup but produces 10-15% scan rates in the wild. Pure black on pure white scans every time; dark navy on cream is the lowest-contrast combination that still works reliably.
- Missing quiet zone. Printing the QR right up against a graphic, a logo, or a coloured background. Always reserve at least four module widths of clean background around the code.
- Logos that cover too much area. A logo over 25% of the code’s area defeats even level H error correction. Keep logos to 15-20% maximum, centred, with a small white box of padding around them.
- Using a free dynamic QR service for permanent print. Once your business cards, posters, or signage are out in the world, the QR codes need to keep working forever. Free dynamic services frequently shut down; switch to static for anything you’ll print and forget.
When NOT to use a QR code
- Anywhere with no internet. If the QR encodes a URL but your venue has no WiFi and no cell signal, scanning succeeds but the resulting page never loads. Encode the actual content (vCard, WiFi credentials, plain text) instead of a URL.
- For something that fits in 4-5 characters of text. Asking someone to scan a QR code to type “BOOK” into a search box is friction for no reason — just print “BOOK” larger.
- For very long URLs. A URL longer than ~250 characters produces a dense QR code with tiny modules that struggle to scan from anything other than perfect distance. Use a short link (or your own redirect) before encoding.
- For sensitive data. A QR code is plain text inside a square. Never encode passwords, private keys, or PII — anyone with a phone can read it.
- Where users won’t have phones in hand. Subway riders, drivers, swimmers — people whose phones are in pockets or absent need a different format.
Frequently asked questions
Do free QR codes expire?
Static QR codes (what our generator produces) never expire — the destination is encoded directly in the code, so as long as the destination URL or content stays valid, the code keeps working. Dynamic QR codes from third-party services depend on that service staying online; many free dynamic services shut down or revoke free codes after a trial period. For anything you’ll print, use static.
Does our QR code generator track or log scans?
No. Static QR codes can’t be tracked because the scanner reads the destination directly from the code without contacting our servers — we never see the scan. The QR code itself is generated entirely in your browser; we don’t see what data you encode either.
What’s the smallest QR code that still scans reliably?
Roughly 2 × 2 cm (3/4 inch) for hand-held scanning at 20 cm distance. Below 2 cm, modern phone cameras struggle to lock focus, and at 1 cm or smaller, scan rates drop below 50%. The minimum module size for reliable scanning is around 0.5 mm — meaning a typical 33-module QR code (the most common version) shouldn’t print smaller than 16-17 mm in either direction.
Can I edit a QR code after I’ve printed it?
Not if it’s a static QR code — the destination is encoded directly into the pixels. You’d need to reprint with a new code. To get post-print editability, use a dynamic QR code service that redirects through their server, where you can change the destination at any time. Trade-off: you depend on that service staying online forever.
How do I add a logo to my QR code without breaking it?
Use error correction level H, keep the logo to 15-20% of the code’s area maximum, centre it, and add 1-2 modules of clear space (the QR’s background colour) around the logo. Test the result by scanning with at least three different phones before mass-printing — some scanners are stricter than others.
What’s the difference between QR Code and Data Matrix or barcode?
QR codes are 2D matrix codes that hold up to 4,296 alphanumeric characters and any modern phone reads natively. Data Matrix is similar but smaller-form — used in industrial labelling and pharmaceutical packaging. Linear barcodes (UPC, EAN-13, Code 128) hold much less data (12-15 digits typically) and are designed for retail/inventory scanners. Use QR for anything reading on a phone; use barcodes for retail point-of-sale.
Related tools and guides
- QR Code Generator — the tool this guide is about
- Barcode Generator — for Code 128, EAN-13, UPC, and other linear barcodes
- URL Slug Generator — for clean URLs to encode in your QR codes
- Image Resizer — for resizing the QR PNG to exact print dimensions
- All miscellaneous tools — QR codes, barcodes, password generators, PDF tools
![Free QR Code Generator: Make Custom QR Codes [2026 Guide]](https://simpletool.io/blog/wp-content/uploads/2026/05/free-qr-code-generator.png)