# Minimum on-screen duration for a QR code

> A primed viewer needs about 8–12 seconds — 2–3 to unlock and open the camera, 2–3 to aim, 1–2 to focus, under 1 to decode, plus reaction time. Show a QR code for at least 15–20 seconds, or keep it persistently in a corner for the whole segment.

Source: https://useqr.app/docs/design/minimum-on-screen-duration-for-a-qr-code · Last reviewed 2026-08-21 · UseQR is free forever, MIT licensed, no signup.

---

## The time budget

Walk through what a viewer physically does between seeing a code and landing on the page.
The steps are fixed; only practice changes their speed:

| Step | Primed viewer | Unprimed viewer |
|---|---|---|
| Notice the code, decide to scan | — (already decided) | 3–6 s |
| Pick up and unlock the phone | 2–3 s | 2–3 s |
| Open the camera | 1–2 s | 1–2 s |
| Aim and frame the code | 2–3 s | 2–3 s |
| Focus and expose | 1–2 s | 1–2 s |
| Decode | < 0.5 s | < 0.5 s |
| Read the prompt and tap | 1–2 s | 1–2 s |
| **Total** | **≈ 8–12 s** | **≈ 12–19 s** |

The decode itself is nearly free — [good codes decode in a camera frame or two](/docs/scanning/scan-latency-why-some-codes-scan-instantly).
Everything expensive is human. A "primed" viewer knew the code was coming and has the
phone in hand; most viewers are not primed.

## The recommendation

**Hold the code on screen for at least 15–20 seconds**, and treat that as a floor, not a
target. If the format allows it, the better answer is no timer at all: a **persistent
code in a corner** for the whole segment converts everyone who decides to scan at any
point, instead of only those who react inside your window.

| Context | Guidance |
|---|---|
| TV advert | ≥ 15–20 s, or corner placement for the full spot — see [QR codes in TV ads](/docs/marketing/qr-codes-in-tv-ads) |
| Presentation slide | leave the code up through the whole section, and again on the closing slide — see [slide decks](/qr-codes-on/slide-decks) |
| Livestream | persistent [overlay](/docs/how-to/how-to-add-a-qr-code-to-a-livestream-overlay) beats a flashed graphic |
| Digital signage loop | code visible ≥ 15 s per loop and recurring every loop — see [digital signage](/qr-codes-on/digital-signage) |

## Duration cannot fix size

The two budgets are independent: a code held for a minute still fails if it breaks the
10:1 distance rule. Check size against
[the size-by-distance table](/docs/reference/qr-code-size-by-distance-table) and the
frame-fraction arithmetic in [QR codes on video](/docs/design/qr-code-on-video) first —
then worry about seconds.

## Priming buys back seconds

Announcing the code before it appears — a presenter saying "there's a code coming up on
the next slide", a lower-third saying "scan in 5 seconds" — moves viewers from the
unprimed to the primed column and saves 4–7 seconds of the budget. Conversely, visible
countdowns on the code itself add pressure and fumbling; if people can miss it, pair the
code with a [readable short URL](/docs/design/qr-code-next-to-a-short-url-fallback) so a
missed scan is not a dead end.

## FAQ

### How long should a QR code stay on screen?

At least 15–20 seconds. A viewer needs roughly 8–12 seconds to unlock, aim, focus and
decode when already intending to scan, and several seconds more to notice and decide. A
persistent corner placement is better than any timed window.

### How long does a QR code need in a TV ad?

Fifteen to twenty seconds minimum, which in practice means most of a 30-second spot.
Many campaigns instead keep a smaller code on screen for the full duration — every second
it is absent is a viewer who cannot convert.

### Is 5 seconds enough for a QR code?

No. Five seconds barely covers unlocking a phone and opening the camera. Even a fully
primed viewer needs about 8–12 seconds; viewers who first have to notice the code need
15 or more.

### Does animating the QR code help people scan it in time?

Animation can attract attention to the code's location, but the code itself must stay
still and continuously decodable while people aim. Position or scale animation during the
scanning window resets the viewer's aim and wastes the seconds you paid for.

## Try it

- https://useqr.app/url
- https://useqr.app/validate
