Free tool · no sign-up

QR code size for a till receipt

Paste the link for the code at the bottom of your receipts and pick your printer. You get the printed width at every module size (the “QR size 1-16” setting in the till software), which one to use, the code drawn at the printer's exact dots and the ESC/POS bytes. It all runs in your browser.

29 characters
Paper roll
Printer resolution
Error correction

Most receipt printers are 203 dpi (8 dots a millimetre); some older Epson models are 180. 58 mm paper at 203 dpi prints 384 dots across (48.0 mm). Level M is the usual default.

Width at each module size

29 × 29 squares (version 3), plus a 4-square white margin on every side. Pick a row to draw it.

Dots a squareSquareWidthVerdict
10.13 mm4.6 mmtoo small
20.25 mm9.3 mmtoo small
30.38 mm13.9 mmsmallest that works
4USE THIS0.50 mm18.5 mmcomfortable
50.63 mm23.1 mmcomfortable
60.75 mm27.8 mmcomfortable
70.88 mm32.4 mmcomfortable
81.00 mm37.0 mmcomfortable

Under 0.3 mm a square, an older phone at arm's length can't see it (2 dots at 203 dpi failed every photo in our test); from 0.45 mm there's room for fading and scuffs.

QR code for the receipt

4 dots a square · 18.5 mm wide on the receipt

Print the link in text under it, so a faded code can still be typed.

384 pixels wide, one pixel per printer dot: for till software that prints a logo image. Upload it at 100%, no scaling.

ESC/POS bytes

Epson's QR commands (GS ( k): model 2, size 4, level M, store, print; centred. Send them raw to printers that take ESC/POS (Epson, Star in ESC/POS mode, most generic 58/80 mm models).

1B 61 01 1D 28 6B 04 00 31 41 32 00 1D 28 6B 03 00 31 43 04 1D 28 6B 03 00 31 45 31 1D 28 6B 20 00 31 50 30 68 74 74 70 73 3A 2F 2F 62 35 39 2E 6C 69 6E 6B 2F 72 2D 68 69 67 68 2D 73 74 2D 74 31 1D 28 6B 03 00 31 51 30 1B 61 00

Python (python-escpos)

from escpos.printer import Usb  # or Network("192.168.1.50")
from escpos.constants import QR_ECLEVEL_M
p = Usb(0x04b8, 0x0202)  # your printer's vendor and product id
p.set(align="center")
p.qr("https://b59.link/r-high-st-t1", ec=QR_ECLEVEL_M, size=4, native=True)
p.cut()

Before every till prints it

  • Print a test receipt and scan it with an old phone, in dim light, at arm's length. Then fold it, keep it in a wallet for a day and scan it again.
  • Keep the link short. A short link per till makes a 25 × 25 code; a survey address with a receipt number can need 49 × 49, with squares half the size.
  • Say what it opens in one line above the code (“Tell us how we did, 2 questions”), and keep it clear of the fold.
  • Pale print? Thin white lines through the code mean dead dots on the print head; they cut through the totals too.

What a receipt code should open, how many people scan one and what thermal paper does to it over time: a QR code on a till receipt. Need a short link per till first? Make the set in one go.