The shortest useful QR payload there is
A phone QR code encodes a tel: URI, defined in RFC 3966. It is about as simple as payloads get:
tel:+442079460018
Because the string is short and consists entirely of digits and a plus sign, the resulting code is one of the least dense you can produce. A version 1 or 2 code — a 21 × 21 or 25 × 25 grid — carries a full international number comfortably. That has a practical payoff: phone codes tolerate small print sizes and poor conditions better than almost any other type. A 1.5 cm code on a van door is genuinely readable from a metre away.
Use E.164 or accept that it will break
The single most consequential decision is number format. Write it in E.164: a +, the country code, then the subscriber number, with no spaces, brackets, dots or dashes.
| Written as | Result |
|---|---|
+442079460018 |
Works from any country, on any network |
020 7946 0018 |
Works only for callers already in the UK |
(020) 7946-0018 |
Punctuation may be dialled as tones or stripped inconsistently |
00442079460018 |
Works from most of Europe, fails from the US and much of Asia |
The + is not decoration. It tells the handset "what follows is a full international number, apply whatever exit code this network needs." Replacing it with 00 hard-codes the European exit code and breaks the number for anyone dialling from a country that uses 011 or 010.
This matters more than people expect for printed material. A flyer stays in circulation; a business card travels. The marginal cost of E.164 is zero and the failure mode of national format is a call that simply does not connect, with no explanation to the caller.
Extensions, and why they usually disappoint
RFC 3966 defines two ways to express an extension:
tel:+442079460018;ext=204
tel:+442079460018,,,204
The first is the standards-compliant form. The second is the pragmatic one: each comma is a two-second pause, and the digits after it are dialled as DTMF tones once the call connects.
Neither is reliable. ;ext= is widely ignored — most dialers strip it and place the call to the main number, silently dropping the extension. The comma-pause form works more often but depends on the timing of your phone system's greeting; if the auto-attendant takes five seconds to answer and you allowed six seconds of pause, the tones fire into an unfinished prompt and go nowhere.
If reaching a specific person matters, get a direct dial number. If you must use an extension, use the comma form, test it against your actual phone system at least three times, and be aware that it will fail for some callers.
What happens on each platform
iOS shows a confirmation banner from the Camera app, then a system dialog naming the number before dialling. Two taps. There is no way for a QR code to place a call without user confirmation, on any platform — this is deliberate.
Android hands the tel: URI to the default dialer, which pre-fills the number and waits. On most devices the user still has to press the call button.
Desktop and tablets are where it gets messy. A tel: link on a laptop may open Skype, Teams, FaceTime, a VoIP client, or nothing at all depending on what is registered as the protocol handler. If your code will be scanned by a webcam or appears in a PDF read on a desktop, print the number in readable text next to it.
Tablets without cellular behave like desktops. An iPad will offer to place the call via a paired iPhone if Continuity is set up, and will otherwise do nothing useful.
Where a call code beats every alternative
The value of a click-to-call code is proportional to how urgent the call is and how awkward the environment is for typing.
Vehicle livery and site hoardings. Someone is standing in the street, possibly in the rain, wanting a plumber. Scanning is one action; transcribing eleven digits from a moving van is not.
Emergency and out-of-hours contact. On a lift, a gate, a lock-up, a plant room. The person scanning is usually stressed and in poor light.
Estate agent boards and property listings. The scan-to-call rate on these is materially better than typed numbers, for the obvious reason that people are standing on a pavement holding a phone.
Menus and service points where a customer needs to reach the front desk.
Packaging for products with a support line, particularly where the target buyer is less comfortable with apps and web forms. A phone code is the most accessible QR type there is: it requires no account, no data connection beyond the call itself, and no literacy in app interfaces.
Accessibility is a genuine argument here
Phone codes deserve consideration on accessibility grounds that other QR types do not. For a user with limited dexterity, motor tremor, or low vision, accurately entering an eleven-digit number is a real barrier. Pointing a camera at a large high-contrast square and tapping one confirmation is substantially easier.
Two things make that work in practice:
- Print it large. Because the payload is tiny, you can print a phone code at 4 cm without any density penalty. Do it — a large target is easier to aim a camera at.
- Always print the number as text too. Some users will prefer to dial manually, some will use a screen reader on a digital version, and some will want to save the number rather than call it now. The code is an addition to the printed number, never a replacement for it.
Tracking calls from a QR code
There is no scan analytics in a tel: code — the call goes straight to your line with no intermediate step to measure.
If attribution matters, the standard approach is a dedicated number per placement: one for the van, one for the shopfront, one for the leaflet drop. Most business phone providers offer additional numbers cheaply, all forwarding to the same handset, and your call log then tells you which placement is working. This is more reliable than any web-based tracking because it measures the thing you actually care about.
The alternative — pointing the code at a landing page with a call button — gains you analytics and loses you the directness that made the code worth printing. For a van door, take the direct call.
Frequently asked questions
Does scanning place the call automatically?
No. Both iOS and Android show the number and require the user to confirm before dialling. No QR code can initiate a call without a deliberate tap — this is enforced by the operating system, not by the code.
What number format should I use?
E.164: a plus sign, the country code, then the number with no spaces or punctuation, for example +442079460018. This works whether the caller is next door or on another continent. National formats only work for callers already in that country.
Can I include an extension?
You can, but do not rely on it. The standards-compliant ;ext= form is ignored by most dialers, and the comma-pause form depends on your phone system answering within the pause you allowed. Test it repeatedly against your real system, or use a direct dial number instead.
Will it work on a tablet or laptop?
Unpredictably. A tel: link on a device without cellular is handed to whatever application registered the protocol — Skype, Teams, FaceTime, or nothing. Always print the number in readable text alongside the code for this reason.
How small can I print a phone QR code?
Smaller than most types. A full international number produces a version 1 or 2 code, so 1.5 cm is workable at arm's length. Since there is no density penalty, printing larger costs you nothing and makes the code easier to aim at.
Can I see how many people scanned it?
Not from the code itself — the call bypasses anything that could count it. Use a dedicated forwarding number for each placement and read the attribution from your call log, which is more accurate than scan counts anyway.
Is my phone number sent to your servers?
No. The tel: URI is assembled and the image rendered entirely in your browser. Nothing you type reaches us.