# QR codes on receipts

> Receipt printers are 203 DPI direct-thermal devices, so each QR module must be a whole number of dots — in practice a 2–2.5 cm code. Use error correction Q because direct-thermal print fades within weeks in a wallet, and keep the URL short since 58 mm paper cannot fit dense codes.

Source: https://useqr.app/qr-codes-on/receipts · Last reviewed 2026-08-21 · UseQR is free forever, MIT licensed, no signup.

---

| Typical scan distance | **15–25 cm** |
|---|---|
| Minimum code width | **2–2.5 cm** |
| Error correction | **M–Q** |

## The module arithmetic

Receipt printers are overwhelmingly **203 DPI** — 8 dots per millimetre, one dot =
**0.125 mm**. A module must be a whole number of printer dots, or the raster driver
rounds rows unevenly and the grid distorts. That quantises your choices:

| Dots per module | Module size | Version 4 code (33 modules + 8 quiet) |
|---|---|---|
| 3 | 0.375 mm | 15.4 mm — marginal |
| 4 | 0.5 mm | 20.5 mm — the sweet spot |
| 5 | 0.625 mm | 25.6 mm — comfortable |

Four dots per module at version 4 gives a **2 cm code** that scans reliably at hand
distance. The [thermal printing page](/docs/print/thermal-printer-qr-codes) covers driver
settings; the wider size logic is in [size for print](/docs/print/qr-code-size-for-print).

## Paper width caps your version

Printable width is about **48 mm on 58 mm paper** and **72 mm on 80 mm paper**. At the
0.5 mm module floor, 48 mm holds 96 modules — but long before that, density defeats the
thermal head's edge sharpness. Treat **version 5–6** as the practical ceiling on 58 mm
paper and design the payload down: a short URL, not a long one with tracking parameters
bolted on. If the link will not fit cleanly, [shorten it first](/glossary/short-url) —
the [capacity table](/docs/reference/qr-code-capacity-table) shows what each version holds.

## Fading is the failure mode

Direct-thermal paper has no ink; heat darkens a chemical coating, and the image keeps
reacting after printing. Heat, sunlight, friction, and — notoriously — the plasticisers in
PVC wallets and card sleeves all degrade it. A receipt code that scans at the till can be
**unreadable after a few weeks in a wallet**, which matters for exactly the use cases
receipts carry: warranty claims and returns.

- Error correction **Q** buys margin against uniform fade; it cannot rescue a fully
  greyed-out code.
- If the code must last months — warranties, [asset records](/docs/ecommerce/qr-code-for-warranty-registration) —
  print it on a separate [thermal-transfer label](/docs/print/direct-thermal-vs-thermal-transfer-for-qr),
  which uses real resin ink and does not fade.
- Tell customers to scan promptly, or photograph the receipt.

## What receipt codes are used for

The three payloads that earn the paper: a [review request](/google-review-qr-code) at the
moment of purchase, a feedback form, and a digital copy of the
receipt itself. Payment-on-receipt codes are a separate topic with their own formats — see
[QR codes on receipts for payment](/docs/payments/qr-code-on-a-receipt).

## FAQ

### What size should a QR code be on a receipt?

Two to two and a half centimetres. At 203 DPI use a whole number of dots per module —
four dots (0.5 mm) per module at version 4 gives a 2 cm code. Smaller codes force
fractional-dot rounding and the grid distorts.

### Why does my receipt QR code stop scanning after a few weeks?

Direct-thermal paper fades. The image is a heat-darkened coating, not ink, and warmth,
sunlight, friction and plastic wallets all bleach it. Print codes that must last on
thermal-transfer labels instead, and use error correction Q for margin.

### Can a receipt printer print a dense QR code?

Not well. A 58 mm printer has about 48 mm of printable width and limited edge sharpness,
so treat version 5–6 as the ceiling. Shorten the URL rather than shrinking the modules —
short payloads make low-version, big-module codes.

### What error correction level should a receipt QR code use?

M if the code is scanned at the till and discarded; Q if it needs to survive in a wallet.
Q keeps a code readable through roughly 25% module damage, which is meaningful against
partial thermal fade.

## Try it

- https://useqr.app/url
- https://useqr.app/google-review
- https://useqr.app/feedback
- https://useqr.app/validate
