# QR code grids and sheets

> When printing many QR codes on one sheet, give every cell its own quiet zone of at least 4 modules so the cutting knife can wander through the gutter without shaving readable margin. Generate the codes in bulk, lay them out to the label geometry, and decode a sample from the printed sheet.

Source: https://useqr.app/docs/design/qr-code-grids-and-sheets · Last reviewed 2026-08-21 · UseQR is free forever, MIT licensed, no signup.

---

## The rule that survives the knife

Sheets get cut, and cutters drift — a millimetre or two of wander is normal for a
guillotine, and even die-cut label sheets tolerance their registration. The design rule
that absorbs all of it: **every cell carries its own quiet zone**, at least 4 modules on
each side, *inside* the cell boundary. Then any cut that lands in the gutter — even a
crooked one — leaves each code's readable margin intact.

The anti-pattern is one big grid of codes sharing white space, on the logic that the
space between codes "counts" for both neighbours. It does — until the knife divides it
unevenly and one sticker in three has a [quiet zone](/glossary/quiet-zone) on the wrong
side of the [minimum](/docs/troubleshooting/qr-code-quiet-zone-too-small).

## Gutter maths, worked

Take a **25 mm square label** carrying a version 2 URL code (25 modules). With the
4-module quiet zone on each side the cell spans 33 module-widths:

- module size = 25 mm ÷ 33 ≈ **0.76 mm** — comfortably above the **0.5 mm** print floor,
  and a clean 9 dots per module at **300 DPI**
- code proper = **19 mm**, quiet zone = **3 mm** per side
- a cutter drifting ±1 mm consumes a third of the quiet zone and leaves the code legal

For guillotine-cut sheets (as opposed to pre-die-cut stock), add a further **≥ 2 mm
gutter between cells** beyond the quiet zones, so the blade has territory that belongs to
no code. Print crop marks in the gutters, never touching any cell.

## Production, not design

Sheets are a manufacturing workflow, and the tooling matters more than the aesthetics:

- **Generate in bulk** from a CSV with the [bulk generator](/bulk), or programmatically
  via `POST /api/v1/qr/batch` (up to **1,000 items** per call) — the workflow is written
  up in [making QR codes in bulk](/docs/how-to/how-to-make-qr-codes-in-bulk).
- **Lay out to the label geometry** with the [sticker sheet tool](/sticker-sheet), or
  follow [the label-sheet walkthrough](/docs/how-to/how-to-make-a-sheet-of-qr-code-labels);
  Avery-style die-cut stock has its own template guide in
  [Avery labels with QR codes](/docs/how-to/how-to-make-avery-labels-with-qr-codes).
- **Keep the master vector.** Cutting services and print shops want scale-independent
  artwork — the reasons are in [printing from SVG](/docs/print/why-you-should-print-qr-codes-from-svg).

## Verify like a manufacturer

Sheets usually mean serialised payloads — asset tags, ticket codes, per-unit URLs — so a
single spot check proves nothing about the rest. The discipline:

1. Before printing, decode a sample of the *generated artwork* — the
   [validator](/validate) for single files, `POST /api/v1/decode` in a loop for batches.
2. After printing, scan **at least the four corner cells and the centre cell** of the
   first sheet with a phone. Corners betray feed skew and edge fade first.
3. Confirm the *payloads*, not just "it scanned" — a mis-sorted CSV produces perfectly
   scannable stickers pointing at the wrong things.

The wider pre-press routine lives in the
[print checklist](/docs/print/qr-code-print-checklist).

## FAQ

### How much space do QR codes need between them on a sheet?

Each cell needs its own four-module quiet zone inside its boundary, plus at least 2 mm of
true gutter between cells on sheets that will be cut by blade. Shared margins between
neighbouring codes do not survive an off-centre cut.

### What size QR code fits a 25 mm label?

A version 2 code (25 modules) with full quiet zones gives 0.76 mm modules — a 19 mm code
with 3 mm margins, comfortably above the 0.5 mm module floor. Longer payloads push the
version up and shrink modules, so shorten URLs before generating.

### How do I generate hundreds of QR codes at once?

From a spreadsheet: one payload per row, through a bulk generator or the batch API (up to
1,000 codes per call), then into a layout tool that knows your label geometry. Keep the
output as SVG so any print size stays sharp.

### How many codes should I test on a printed sheet?

At minimum the four corners and the centre of the first sheet, checking decoded payloads
against the source data. Corner cells fail first under feed skew, and payload checks catch
sorting errors that scan tests cannot.

## Try it

- https://useqr.app/bulk
- https://useqr.app/sticker-sheet
- https://useqr.app/validate
