How much data fits in a QR code?
The theoretical maximum is 4,296 characters. The practical maximum is closer to 300. Why the gap exists, and how to stay on the useful side of it.
The specification allows a lot. Reality allows much less. Understanding the gap is what stops you from generating a code that looks fine on screen and fails in print.
The theoretical ceilings
At the lowest error correction level, a version-40 QR code holds:
| Mode | Maximum |
|---|---|
| --- | --- |
| Numeric only | 7,089 digits |
| Alphanumeric (uppercase, digits, some symbols) | 4,296 characters |
| Bytes (UTF-8, mixed case, accents) | 2,953 bytes |
| Kanji | 1,817 characters |
Those are real numbers from the standard. They are also close to useless as guidance.
Why the practical limit is so much lower
A QR code is a fixed grid. Version 1 is 21×21 modules; version 40 is 177×177.
More data pushes you to a higher version, which means more modules squeezed into whatever physical space you printed. At 2 cm:
- A 25×25 code has modules of about 0,8 mm — comfortable
- A 177×177 code has modules of about 0,11 mm — thinner than most printers can resolve, and far below what a phone camera can distinguish
So the ceiling is not the specification. The ceiling is the physical size of a module at your printed size.
The number that actually matters
Forget character counts for a moment. What determines success is module size:
| Module size | Result |
|---|---|
| --- | --- |
| Above 0,5 mm | Scans reliably, including older phones |
| 0,3–0,5 mm | Works on good print, marginal on absorbent paper |
| Below 0,3 mm | Unreliable — ink spread closes the gaps |
Work backwards from this. If you are printing at 2 cm and want 0,5 mm modules, you can afford about 40 modules across — which is roughly 60 to 100 alphanumeric characters at medium error correction.
That is the real budget, and it is far smaller than most people assume.
Rough guidance by use
| Payload | Typical characters | Verdict at 2 cm |
|---|---|---|
| --- | --- | --- |
| Short URL | 20–40 | Comfortable |
| URL with tracking parameters | 80–150 | Getting dense |
| WiFi credentials | 40–70 | Fine |
| Minimal vCard (name, phone, email) | 90–130 | Acceptable |
| Full vCard with address and title | 200–300 | Print larger |
| PIX BR Code | 100–150 | Fine |
| A paragraph of text | 400+ | Print much larger, or do not |
Where the data goes without you noticing
Tracking parameters. example.com/page is 17 characters. example.com/page?utm_source=flyer&utm_medium=print&utm_campaign=summer2026&utm_content=table-tent is 103. That is six times the payload for information you could capture with a redirect on your own domain.
Error correction. Level H adds roughly 30% recovery data on top of your content. Necessary with a logo, but it is real weight.
Case mixing. QR codes have an efficient alphanumeric mode that only covers uppercase, digits and a few symbols. Introduce a single lowercase letter and the whole payload falls back to byte mode, which is less efficient. This is why HTTPS://EXAMPLE.COM/MENU encodes more compactly than the lowercase version — though most scanners handle URLs case-insensitively, so uppercase is a legitimate trick for a tight code.
Accented characters. Two bytes instead of one. Non-Latin scripts, three.
How to cut payload
In order of how much they buy you:
- Shorten the URL. Use a short path on your own domain, and move tracking into a redirect
- Drop optional fields. For vCard, the street address is usually the heaviest and least useful
- Lower error correction — but never below M, and never if there is a logo
- Consider uppercase for URLs, which unlocks the efficient alphanumeric mode
- Point at a page instead of embedding text. A link to a page with the paragraph is 30 characters instead of 400
That last one is the general principle: a QR code should be a pointer, not a container. The exceptions are WiFi, vCard and payment codes, where the data genuinely must work offline.
When embedding data is right
Not everything should be a link:
- WiFi — must work before there is internet
- vCard — should work without a network
- PIX, UPI, crypto — must not depend on a third-party redirect
- Serial numbers on equipment — the number *is* the information
For these, accept the density and print larger rather than reaching for a URL.
Check yours
Our generator shows the pattern updating as you type, so density is visible immediately — type a long URL and watch the squares shrink. And the QR code tester reports the actual module size of an existing code, which is the number that predicts whether it survives print.
In short
- Theoretical maximum: 4,296 alphanumeric characters. Practical: under 300, ideally under 100
- The real constraint is module size, not character count — keep modules above 0,5 mm
- Tracking parameters are the most common hidden bloat
- Treat a QR code as a pointer, except for WiFi, contacts and payments
- When data must be embedded, print larger instead of compromising