How QR Code File Sharing Works

Knowledge Base · qr · Last updated 2026-09-24

A QR code stores a URL, so a shorter link means a lower QR version and physically larger modules at the same print size. Measured with the shipped generator: a real 30-character share link produces a version 3 code of 29x29 modules. Adding a 15-character tracking parameter pushes it to version 4 and 33x33 modules.

Measured Data

Measured: QR version and module count for real share links
PayloadLengthQR versionModule gridSVG size
https://filesq.link/f/xxxxxxxx30 chars329 x 299,789 B
https://uqidata.com/f/xxxxxxxx30 chars329 x 2910,023 B
https://filesq.link/f/xxxxxxxx?ref=newsletter45 chars433 x 3312,615 B
Re-measured 2026-09-24 with the same qrcode library and settings the site ships (error correction level M, 4-module border). SVG size grows with module count because the encoder emits the path geometry for every module. The isolation domain is the same length as the brand domain, so the link is identical in QR terms — the redirect costs nothing in scan reliability.

A QR Code Is a Fixed-Size Grid Holding a Variable-Length String

The part that surprises people is that QR codes do not scale smoothly. There are 40 discrete versions, and version 3 is a 29×29 grid while version 4 is 33×33 — a 30% jump in modules for a handful of extra characters.

That matters because a QR code is normally printed at a fixed physical size. If the grid gets denser while the square stays the same, every module gets smaller, and module size is what determines whether a phone camera resolves the code.

Measured on real share links, using the same generator the site ships:

Payload Length Version Module grid
https://filesq.link/f/xxxxxxxx 30 chars 3 29 × 29
https://filesq.link/f/xxxxxxxx?ref=newsletter 45 chars 4 33 × 33

Fifteen extra characters, one version jump, 30% more modules in the same square. Nothing about the file changed.

The Print Size Arithmetic

Module size is simple division once you know the grid. Total width is the module count plus the quiet zone — four modules of blank margin on each side, which scanners need and which people routinely crop off:

total modules = 29 + 4 + 4 = 37
module size   = print width / 37
Printed width Module size Practical result
40 mm 1.08 mm scans instantly, even in poor light
30 mm 0.81 mm very reliable
20 mm 0.54 mm reliable at normal phone distance
15 mm 0.41 mm borderline — needs a steady hand
10 mm 0.27 mm unreliable; expect repeat attempts

The roughly 0.4 mm floor is a widely used rule of thumb rather than a hard limit — modern phone cameras can do better in good light, and worse through a scratched plastic window. Treat the table as sizing guidance, not a guarantee.

The cheap optimisation: shorten the URL and every number above improves at the same print size. A shorter hostname or a shorter slug moves the code down a version, which makes each module bigger without spending a millimetre of paper.

Why the Code Points at a Page, Not a File

Encoding a direct file URL would mean the QR payload grows with the filename and the storage path — often 60-100 characters instead of 30. That is two or three version jumps, worth about half the module size at a fixed print.

Pointing at the share page instead buys three things:

  • The payload stays short and constant. A slug is a fixed-length token, so the code does not change shape file to file.
  • The code survives a re-upload. Send a corrected file with a new link and print a new code; the old code still explains itself.
  • The recipient gets context first. Scanning lands on a page with the filename, the size, an in-page viewer or player, and a download button — instead of a raw download prompt that many mobile browsers handle awkwardly.

There is one honest cost: an extra round trip. The scan opens filesq.link/f/..., which redirects to the isolation host that serves the content. In practice that is a few hundred milliseconds and invisible.

Error Correction, and the Size You Pay for It

Error correction lets a code survive damage — a logo over the middle, a torn corner, a smudge. Higher levels need more modules for the same data. Measured on the identical 30-character payload:

Level Version Module grid Recovery capacity
L 2 25 × 25 ~7% of the code recoverable
M 3 29 × 29 ~15%
Q 3 29 × 29 ~25%
H 4 33 × 33 ~30%

Note the plateau: M and Q produce the same grid for this payload, so choosing Q here is free durability. H then jumps a full version and costs 30% more modules.

That is the general pattern — you cannot reason about error correction and URL length separately. Change one and the grid may or may not move, and only measuring tells you which.

Where This Actually Gets Used

  • Print to phone. A flyer, a product insert, a poster, a museum label. The code is the bridge from paper to a file.
  • In-person handoff. Photographers, agents and designers showing a portfolio or a delivery folder without dictating a URL out loud.
  • Desktop to mobile. Scan from a screen to pull a file down onto a phone without typing.
  • Stickers on physical goods. Manuals, warranty cards, asset tags.

In every one of these, the constraint is the same: you get one printed square, and the module size decides whether it works. Which is why the length of the URL — a detail nobody thinks about — is the variable that decides whether the code scans on the first attempt.

Run it on your own file

This page explains the mechanism. The tool applies it — nothing is uploaded.

Open the tool

FAQ

Why does URL length matter so much for QR codes?

Because the code has to encode every character at a fixed error-correction level, and the module grid only comes in discrete sizes. Adding roughly four characters can be enough to jump a whole version — from 29x29 to 33x33 on our measured example — which means 30% more modules squeezed into the same printed square, so each module is smaller and the scan gets harder.

How small can I print a QR code and still have it scan?

Work backwards from module size rather than overall size. A version 3 code is 29 modules across; adding the standard four-module quiet zone on each side gives 37 modules of total width. At a 20 mm print that is 0.54 mm per module, comfortably above the roughly 0.4 mm floor usually cited for phone cameras. At 10 mm it drops to 0.27 mm and scans become unreliable.

What error correction level should I use?

Higher correction survives more damage but needs more modules, which shrinks each module at a fixed print size. Measured on the same 30-character payload, level L produced a 25x25 grid, levels M and Q both produced 29x29, and level H produced 33x33. For a clean screen or a well-printed label, M is the usual balance; reserve H for codes printed on something that will get scuffed.

Does the QR code point at the file or at a page?

At a page. Scanning opens the share link, which resolves to the recipient's preview page showing the filename, an in-page viewer or player where the format supports one, and a download button. That means the code never needs to change if the file does — and it keeps the code small, because a page URL is much shorter than a direct asset URL.

What happens when the link expires?

The same thing that happens when someone clicks an expired link: they get a page explaining that the file has expired and suggesting they ask the sender for a new link. A printed QR code is permanent, so pairing it with a 3-day free link is only sensible for short-lived things like an event handout. For anything durable, use a link that does not expire.

← All knowledge base topics