QR Code Capacity: How Much Data Fits, by Symbol Version and Encoding Mode

by KoloQR TeamBasics

A triangular yellow QR code built from small dots, with three ring-shaped finder patterns inside it, on a green background beside three white rounded labels reading "4,296 characters", "7,089 digits" and "2,953 bytes".

A QR code holds at most 7,089 digits, 4,296 alphanumeric characters, 2,953 bytes or 1,817 kanji characters, and those maxima all describe the same symbol: version 40 at 177 × 177 modules, at the lowest error correction level. Every smaller code holds proportionally less, and the number that matters in practice is never the maximum - it is how many modules your particular payload forces, because the module count decides how large the code has to be printed.

Key points

  • The maximum capacity of a QR code is 7,089 digits, 4,296 alphanumeric characters, 2,953 bytes or 1,817 kanji characters - all at version 40, 177 × 177 modules, at error correction level L.
  • Capacity is fixed by three things together: the symbol version, the encoding mode and the error correction level. Change any one and the number changes.
  • The smallest code, version 1 at 21 × 21 modules, holds 17 bytes at level L and 7 bytes at level H. A bare domain name is already a version 2 or 3 code.
  • A URL written in capitals can encode in alphanumeric mode at 5.5 bits per character instead of 8, which often saves a whole symbol version. Only the scheme and host are safe to capitalise; the path is case-sensitive.
  • Capacity is rarely the real limit. A 200-character URL at level H needs a 77 × 77 module symbol, which cannot honestly be printed below about 34 mm - the payload sets the size long before it approaches any maximum.

How Much Data Can a QR Code Hold?

A QR code holds at most 7,089 digits, 4,296 alphanumeric characters, 2,953 bytes or 1,817 kanji characters. Those four figures describe one symbol - version 40, 177 modules on a side, at error correction level L - and they are the ceiling for the format rather than a target anyone should design towards.

Error correction levelNumericAlphanumericByteKanji
L7,0894,2962,9531,817
M5,5963,3912,3311,435
Q3,9932,4201,6631,024
H3,0571,8521,273784
Maximum capacity at version 40 (177 × 177 modules), per encoding mode and error correction level. Raising the level from L to H removes about 57% of the capacity at every version.

The practical range is much narrower than the ceiling suggests. A version 40 symbol printed at the 0.4 mm module floor for coated stock is 71 mm across before its margin, and every module in it has to survive being photographed - so codes that size appear in industrial marking and almost nowhere in signage, packaging or print.

For ordinary use the useful question is the opposite of the maximum: given this payload, what is the smallest symbol that holds it, and what does that symbol cost in printed millimetres. The last two sections of this page answer that directly.

What a Symbol Version Is

The symbol version is the QR standard's name for a code's module count, running from version 1 at 21 × 21 modules up to version 40 at 177 × 177. A version V code is 4V + 17 modules on each side, so the versions step in fours: 21, 25, 29, 33, 37 and so on.

A version is not something you choose. The encoder picks the smallest version that holds the payload at the requested error correction level, which means the version is a result of two decisions you do make - what the code says and how much damage it should survive.

Two consequences follow, and both catch people out. First, capacity moves in steps rather than continuously: adding one character to a payload can be free or can push the code up an entire version. Second, a higher version is not a bigger picture - it is a denser one. At a fixed printed width, a version 10 code's modules are roughly 40% narrower than a version 4 code's - 57 cells across the same space instead of 33 - and small modules are what scan failures are made of.

Not all of a symbol is available for content. In a version 1 code, 233 of the 441 modules are function patterns and format information rather than data - finder patterns and QR code anatomy accounts for where they go. What remains after that is split between your data and its error correction.

The Four QR Encoding Modes

An encoding mode is the scheme a QR code uses to turn characters into bits, and the standard defines four: numeric, alphanumeric, byte and kanji. Each packs characters at a different density, so the same symbol holds a very different number of them depending on which mode the content permits.

ModeWhat it acceptsBits per characterCapacity at version 40, level L
NumericThe digits 0 to 93⅓7,089 digits
Alphanumeric0 to 9, A to Z, space, and $ % * + - . / :4,296 characters
ByteAny byte, which in practice means UTF-8 text82,953 bytes
KanjiShift JIS double-byte characters131,817 characters
Numeric mode packs three digits into 10 bits and alphanumeric packs two characters into 11, which is where the fractional figures come from. A UTF-8 character outside ASCII costs two to four bytes in byte mode, not one.

Alphanumeric mode is the one worth understanding, because it is the only one that applies to URLs. It is the QR encoding scheme that packs two characters into 11 bits, using a 45-character set of digits, capital letters, space and eight punctuation marks. Lower-case letters are not in that set, and neither are the question mark, the ampersand, the equals sign or the underscore.

The mode is chosen by the encoder, not by the person typing the payload. Some encoders analyse the content and switch modes automatically, some split a payload into segments and use a different mode for each, and many encode everything in byte mode regardless. That last case is common enough that the only reliable way to know is to generate the code and count its modules.

QR Code Capacity by Version and Mode

The table below is the reference the rest of this page is built on: how many characters each symbol version holds, in each mode, at each error correction level. Read it by finding the row for your level and the version whose figure first exceeds your payload.

VersionModulesLevelNumericAlphanumericByteKanji
121 × 21L41251710
121 × 21M3420148
121 × 21Q2716117
121 × 21H171074
225 × 25L77473220
225 × 25M63382616
225 × 25H3420148
329 × 29L127775332
329 × 29M101614226
329 × 29H58352415
433 × 33L1871147848
433 × 33M149906238
433 × 33H82503421
537 × 37L25515410665
537 × 37M2021228452
537 × 37H106644427
641 × 41L32219513482
641 × 41M25515410665
641 × 41H139845836
1057 × 57L652395271167
1057 × 57M513311213131
1057 × 57H28817411974
1577 × 77L1,250758520320
1577 × 77M991600412254
1577 × 77H530321220136
2097 × 97L2,0611,249858528
2097 × 97M1,600970666410
2097 × 97H919557382235
25117 × 117L3,0571,8531,273784
25117 × 117M2,3951,451997614
25117 × 117H1,286779535330
40177 × 177L7,0894,2962,9531,817
40177 × 177M5,5963,3912,3311,435
40177 × 177H3,0571,8521,273784
Computed from each version's data codeword count and character count indicator width, then checked against the version 40 maxima in ISO/IEC 18004. Level Q sits between M and H throughout and is omitted here for length; as a rule of thumb it holds about 70% of what M holds.

Two cells in this table are worth reading together. Version 25 at level L holds 1,273 bytes, and version 40 at level H holds exactly the same 1,273 bytes - a symbol with more than twice the module area, spending the whole difference on recovery. Capacity gained by growing the code and capacity lost by raising the level are the same currency, which is why both decisions belong in one table rather than two.

Why the Same URL Fits in a Smaller Code in Capitals

A URL written in capitals can encode in alphanumeric mode at 5.5 bits per character instead of byte mode's 8, which is a 31% saving and frequently drops the symbol by a whole version. HTTPS://EXAMPLE.COM/MENU uses only characters from the 45-character alphanumeric set; https://example.com/menu does not, because lower-case letters are not in it.

Payload lengthByte mode, level MCapitals, level MByte mode, level HCapitals, level H
30 charactersVersion 3Version 2Version 4Version 3
45 charactersVersion 4Version 3Version 6Version 4
70 charactersVersion 5Version 4Version 8Version 6
120 charactersVersion 7Version 5Version 11Version 8
200 charactersVersion 10Version 8Version 15Version 11
The same character count, encoded two ways. At 120 characters and level H the saving is three versions - a 65 × 65 symbol instead of an 81 × 81, which is 24% larger modules at the same printed width.

The catch is that only part of a URL is safe to capitalise. Schemes and host names are case-insensitive, so HTTPS://EXAMPLE.COM and https://example.com reach the same server. Everything after the host is case-sensitive on most web servers, so capitalising a path can produce a code that scans perfectly and lands on a 404.

What that leaves is a rule with a narrow but real application: capitalise the scheme and domain, keep the path exactly as the server expects it, and check whether the symbol actually shrank. A payload that mixes cases falls back to byte mode entirely, so a single lower-case character in the path removes the whole saving.

Two further limits are worth stating honestly. The alphanumeric set has no question mark, ampersand, equals sign or underscore, so any URL carrying query parameters is in byte mode whatever its case. And the encoder has to support mode switching at all - many generate every payload in byte mode, in which case capitalising changes nothing. Generate the code both ways, count the modules on one side, and compare: if the number is the same, the mode did not change.

Error Correction Is Half the Capacity Question

Raising the error correction level from L to H removes about 57% of a symbol's capacity, because the recovery codewords and the data codewords come out of the same fixed budget. At every version, the four levels divide the same total: level L spends about 7% of it on recovery, M about 15%, Q about 25% and H about 30%.

LevelBytes at version 2Bytes at version 5Bytes at version 10Approximate recovery
L321062717%
M268421315%
Q206015125%
H144411930%
Byte-mode capacity at three common versions. A code that needs a centre logo needs level H, and level H at version 2 holds 14 bytes - which is not enough for a bare https:// domain.

The interaction that surprises people runs the other way as well. Because capacity moves in steps, raising the level often costs nothing at all: if your payload is 40 bytes, level M and level Q both land you on version 4, and the higher level is free. Generate the code at your chosen level, note the module count, generate it one level higher, and take the higher level whenever the grid is unchanged.

Error correction levels L, M, Q and H covers what the recovery capacity actually buys, how large a logo each level tolerates, and why raising the level after a scan failure usually makes the code worse rather than better.

From URL Length to Printed Size

Payload length decides the symbol version, and the symbol version decides the smallest size the code can honestly be printed at. This is the chain that matters in a layout, and it is why shortening a URL is a print decision rather than a tidiness decision.

URL lengthVersion at level MSmallest printed widthVersion at level HSmallest printed width
25 characters2 (25 × 25)13.2 mm4 (33 × 33)16.4 mm
50 characters4 (33 × 33)16.4 mm6 (41 × 41)19.6 mm
75 characters5 (37 × 37)18.0 mm8 (49 × 49)22.8 mm
100 characters6 (41 × 41)19.6 mm10 (57 × 57)26.0 mm
150 characters8 (49 × 49)22.8 mm12 (65 × 65)29.2 mm
200 characters10 (57 × 57)26.0 mm15 (77 × 77)34.0 mm
300 characters13 (69 × 69)30.8 mm18 (89 × 89)38.8 mm
Smallest printed width is the whole footprint - symbol plus its four-module quiet zone - at the 0.4 mm module floor for coated stock. On uncoated stock the floor is 0.5 mm, so every figure rises by a quarter.

The last two rows are the argument for link shortening in one place. A 200-character tracking URL at level H cannot be printed below about 34 mm on coated stock, and a 25-character one can go to 16 mm - the same information, delivered by the same code, at less than a quarter of the area.

These are floors, not recommendations. A code should also be sized for its reading distance, which is roughly 1 cm of width for every 10 cm of scanning distance, and whichever of the two numbers is larger is the one that governs. The minimum size for print takes that calculation end to end, and the QR print size calculator runs it for a given distance.

What to Do When a Payload Does Not Fit

A payload that will not fit at a workable size is almost always a URL problem rather than a QR code problem. The symbol is doing what it was asked; the ask is too long. In rough order of how much they save:

  • Remove the tracking parameters. A full UTM set with a click ID routinely adds 80 to 120 characters, which is three or four symbol versions on its own. Attach the campaign data at the destination instead of in the printed code.
  • Drop www and the trailing slash. Small, free, and worth about a version on a short URL where every character counts.
  • Use a short path. example.com/menu rather than example.com/restaurant/our-menus/lunch-menu-2026. On print, the path is read by a camera, never typed by a person, so its readability buys nothing.
  • Point at a redirect you control. A short path on your own domain that forwards to the long URL keeps the code small and keeps the destination changeable, which a static code otherwise cannot be.
  • Encode the minimum for the payload type. A Wi-Fi code carries the network name, password and security type and nothing else; a phone code carries digits. Extra fields cost versions - see QR code types for what each payload actually needs.
  • Lower the error correction level, if there is no logo. Going from H to M is not a small saving. It nearly doubles the capacity at every version - 44 bytes to 84 at version 5 - and level M is entirely adequate for a clean code on flat, coated stock.
  • Split the job. If the content genuinely is long - a menu, a document, a certificate - put it behind a URL rather than inside the code. A QR code that holds 2,000 characters is a code nobody can scan.

One thing not to do: raise the printed size to fit a long payload and stop there. It works, but it hides the cause, and the next version of the artwork will hit the same wall with a slightly longer URL and less space to give it.

Why Capacity Thresholds Are Uneven

Capacity does not rise smoothly with version, and three separate mechanisms are responsible. Knowing them explains the jumps that otherwise look arbitrary in the table above.

The character count indicator widens. The character count indicator is the short header inside a QR code that states how many characters the payload contains, and its width in bits changes with the symbol version. In byte mode it is 8 bits at versions 1 to 9 and 16 bits from version 10 upward, so crossing that boundary costs a byte of overhead before any content is stored.

Error correction blocks divide unevenly. From version 5 the data is split into blocks of differing sizes so the recovery arithmetic stays tractable, and the block structure changes at almost every version. Two adjacent versions can therefore gain 20 bytes and then 38.

Remainder bits are left over. Some versions have 3, 4 or 7 modules left after the codewords are laid out, which are filled with zeroes and carry nothing. They are part of why the module count and the capacity do not track each other exactly.

None of this changes what to do. It does explain why adding one character to a URL sometimes costs nothing and sometimes adds four modules to every side - and why the only trustworthy way to know the version is to generate the code and count, rather than to estimate from the character count.

When Capacity Is Not the Real Limit

Most codes hit a physical limit long before a capacity limit, and mistaking one for the other is the common error on this subject. A version 20 symbol holds 666 bytes at level M, which sounds generous until the code has to be printed: 97 modules per side at the 0.4 mm floor is 42 mm of footprint, and squeezed onto a 30 mm table tent its modules fall to 0.29 mm - below what most print processes hold and below what a phone camera resolves at arm's length.

The limits that bite first, in the order they usually arrive:

  • Printed module size. Modules should be 0.4 mm or larger on coated stock and 0.5 mm or larger on uncoated. This is what turns a payload length into a minimum width, and it is not negotiable by the design.
  • Reading distance. A code needs roughly 1 cm of width for every 10 cm between it and the camera. A dense code on a wall sign fails at the distance people stand, not at the distance it was designed at.
  • Camera focus. Phone cameras have a minimum focus distance of about 10 cm. A very small, very dense code forces the reader closer than the camera can focus, which reads as a code that will not scan.
  • Contrast and finish. A dense code has less tolerance for low contrast and for glare, because each module contributes fewer pixels - check a colour pair with the QR contrast checker before committing to it.
  • Export resolution. A raster export needs whole pixels per module; a dense code at a small pixel size produces anti-aliased module edges. Resolution and DPI has the arithmetic, and SVG avoids the problem entirely.

KoloQR, a free QR code generator with circular and custom-shaped QR codes, exports both PNG and SVG, so a code whose payload forces a high symbol version can be placed as vector artwork and stay geometrically exact at any printed size. That solves the export half of the problem and none of the other four: a long payload still needs a physically larger code, whatever it is exported as.

Common Mistakes About QR Code Capacity

The most common mistake is treating the 2,953-byte maximum as a working budget. It describes a 177 × 177 module symbol at the lowest error correction level, which is not a code that belongs on a menu, a label or a poster - and a payload anywhere near it will have failed for physical reasons long before capacity becomes the constraint.

DoWhy
Check the module count after generating, not the character count beforeCapacity moves in steps, and the version is the number that decides the printed size
Decide the error correction level before measuring capacityLevel H removes 57% of a symbol's capacity, so a capacity figure without a level is not an answer
Shorten the URL before enlarging the codeRemoving a UTM set is worth three or four versions and costs nothing in the layout
Try one level higher and compare the gridStepping up a level is often free, because the payload already fits the same version
Size the code from the version, then from the reading distanceBoth produce a minimum width, and the larger of the two is the one that governs
Don'tWhy
Quote a capacity figure without naming the version and levelThe same mode ranges from 7 bytes to 2,953 bytes depending on those two numbers
Capitalise a whole URL to save spaceOnly the scheme and host are case-insensitive; capitalising the path can produce a scannable code that 404s
Put long content inside the code instead of behind a URLA code dense enough to hold a document is a code no phone camera resolves at a normal distance
Assume a longer URL only makes the picture biggerIt makes the picture denser at the same width, which is the direct cause of most print scan failures
Estimate the version from the character countIndicator widths, block structures and remainder bits make the thresholds uneven; generate and count instead

Make Your QR Code

Free, with no account and no watermark. Choose a shape, add a logo, check the contrast, and export SVG, PDF, EPS or PNG - a static code with no subscription behind it.

Generate QR Code

Questions? Answered

7,089 digits, 4,296 alphanumeric characters, 2,953 bytes or 1,817 kanji characters. All four figures are for version 40 - a 177 × 177 module symbol - at error correction level L. At level H the same symbol holds 1,273 bytes, because recovery codewords come out of the same budget as data.

Technically up to 2,953 characters, practically about 100. Beyond roughly 100 characters the symbol version climbs fast, and a version 15 code at level H cannot be printed below about 34 mm on coated stock. Removing tracking parameters is worth three or four versions and is almost always the better fix.

Version 1, at 21 × 21 modules, holds 17 bytes at level L, 14 at M, 11 at Q and 7 at H. That is not enough for most URLs: https://example.com is 19 characters, so even a bare domain is usually a version 2 or version 3 code.

It makes it denser, which forces it to be printed bigger. A longer payload raises the symbol version, which adds modules to each side without changing the picture's dimensions, so each module shrinks at a fixed printed width. To keep the modules readable, the printed size has to grow with the version.

Capital letters, digits and eight punctuation marks belong to the 45-character alphanumeric set, which packs two characters into 11 bits instead of byte mode's 8 bits per character. That is a 31% saving and often drops a whole version. Capitalise only the scheme and host - paths are case-sensitive on most servers.

Yes, substantially. Data codewords and recovery codewords share one fixed budget per version, so level L leaves about 7% for recovery and level H about 30%. Moving from L to H removes about 57% of the capacity at every version. A version 5 code holds 106 bytes at L and 44 at H.

A centre logo means error correction level H in practice, which is the lowest-capacity column of every version. At level H a version 4 code holds 34 bytes, version 6 holds 58 and version 10 holds 119. A URL with tracking parameters plus a logo is what pushes codes past version 12.

Only in the sense that 2,953 bytes is smaller than any usable image file. QR codes hold text, and a file has to be encoded as text to fit at all, which multiplies its size. Host the file and put the URL in the code - a 30-character link scans from across a room and a 2,953-byte payload does not.

The symbol version is the standard's name for a code's module count, from version 1 at 21 × 21 modules to version 40 at 177 × 177. A version V code is 4V + 17 modules per side. The encoder picks the smallest version that holds your payload at the error correction level you asked for.

Why KoloQR?

  • Create QR codes for websites, menus, Wi-Fi, PDFs, and business cards
  • Customize colors, logos, and unique shapes
  • Download high-quality PNG and SVG files
  • Built for both print and digital
Generate QR Code
A plain black QR code beside the same code restyled as a circle with brand colors