What is a WhatsApp QR code?

A WhatsApp QR code is a QR code that contains a click-to-chat link — a normal web address in the form https://wa.me/<number>. There is no special "WhatsApp mode" inside the QR specification. The code holds a URL string, the phone's camera hands that URL to the operating system, and the OS recognises the wa.me domain and hands it to WhatsApp instead of a browser tab. If WhatsApp is not installed, the link falls back to a web page.

That indirection is why these codes are so reliable. You are not asking the customer to open an app, search for your business, type a 12-digit number and hope they got it right. You are asking them to point a camera at a square. The chat window opens on your number, and if you added a prefilled message, the text is already sitting in the input box waiting for them to tap send.

Two things about the prefilled message trip people up. First, it never sends by itself. WhatsApp deliberately requires the human to press the send arrow, so you cannot use this to blast messages at people. Second, the customer can edit or delete it before sending. Treat the prefill as a helpful starting line, not a form field you control.

Everything the generator produces here is a static code: the link is baked into the pixels. Print it and it works for as long as that number stays on WhatsApp. The trade-off is that you cannot change the number later or count scans. For a phone number you have had for years, that is a good deal. If you expect the number to change, see the workaround in the format section below.

When to use it

WhatsApp codes earn their keep wherever a customer has a question that a static web page cannot answer, and where a phone call feels like too much effort.

  • Trade and home services. A plumber's van, a roofer's scaffold banner, a leaflet through the door. The homeowner wants to send a photo of the leak, not describe it on a call. Prefill with "Hi, I'd like a quote — sending a photo now."
  • Estate agent boards. Someone walks past a property at 9pm on a Sunday when the office is shut. A board QR gets the enquiry recorded with the address already in the message.
  • Product packaging and instruction inserts. Cheaper and faster than a support hotline for "which screw goes where" questions, and the customer can send a picture of what they assembled.
  • Restaurant and salon bookings. Bookings by chat suit small venues that do not want a reservation platform taking a cut. Prefill with the venue name so you know which site the walk-past came from.
  • Trade show and market stalls. A code on the backdrop collects leads without the clipboard-and-business-card dance. Everyone who scans is already in your chat list afterwards.
  • Wholesale and B2B reordering. Put a code inside the lid of the delivery crate. The chef reorders by chat at 11pm instead of waiting for the sales rep's Tuesday call.
  • Invoices and receipts. A code on the payment reminder line labelled "query this invoice" cuts down on disputed payments sitting silently in an inbox.
  • Recruitment posters. Shift work and hospitality hiring converts far better over chat than through an application form. A code in the window with "Hi, I'm interested in the kitchen role" lowers the barrier to almost nothing.

The pattern in all of these: the code sits at the exact moment the question forms, and the prefilled text saves the customer from staring at an empty message box wondering how to open.

How to create one

  1. Pick the number that will actually be watched. It must be a number already registered on WhatsApp. A landline or a virtual number works only if you completed WhatsApp verification on it. If nobody monitors it during opening hours, fix that before you print anything.
  2. Write the number in full international form, digits only. Drop the +, every space, every dash and every bracket. Add the country code. Drop the national trunk zero: a UK mobile written 07700 900123 becomes 447700900123; a German 0151 23456789 becomes 4915123456789. This is the single most common failure point.
  3. Draft the prefilled message. Keep it to one short sentence. Write it from the customer's side, in their voice, because they are the one sending it: "Hi, I'd like to book a table for Saturday" reads naturally, "Thank you for contacting us" does not.
  4. Generate the code using the WhatsApp type in the generator. Leave error correction at M unless the code will be printed on something that gets handled, creased or splashed — then go to Q.
  5. Download SVG for print, PNG for screens. SVG stays sharp at any size, which matters the moment a printer scales your artwork. If you only have PNG, export at least 1000 px wide.
  6. Test on a phone that is not yours. Ideally an iPhone and an Android, one of them without your number saved as a contact. Confirm the chat header shows the right number and the prefilled text is intact, not a string of %20 characters.
  7. Print one proof at final size on the final material and scan it from where the customer will actually stand. A code that works on your monitor can fail on kraft paper at 20 mm.

The link and data format

Here is exactly what gets encoded. Nothing else is in the code — no tracking, no redirect, no account:

https://wa.me/447700900123?text=Hi%2C%20I%27d%20like%20a%20quote%20for%20the%20patio%20job

Part Value in the example Rules that matter
Host wa.me The short form. The older api.whatsapp.com/send?phone= works identically but adds about 25 characters, which makes the QR grid denser for no benefit.
Number 447700900123 Digits only, country code first, no +, no spaces, no leading trunk zero.
text parameter Hi%2C%20I%27d... Optional. Must be percent-encoded: space is %20, comma %2C, apostrophe %27, line break %0A, ampersand %26. Encode once, never twice.
Short link variant https://wa.me/message/7AB2CDEFGHIJK1 Generated inside the WhatsApp Business app. Hides the phone number and cannot carry a text parameter.

Length is not just cosmetic. A bare https://wa.me/447700900123 is 27 characters and fits in a small, forgiving grid. Add a 90-character prefilled message and you roughly triple the data, the modules shrink, and the code that scanned fine at 20 mm now needs 28 mm. Every emoji costs four bytes once encoded. Write the message, then count it.

If you need the ability to change the number later, encode a short URL on your own domain (example.com/chat) that redirects to the wa.me link. You keep the printed code, you can repoint it, and your server log gives you a rough scan count. The cost is one extra hop and a dependency on your own hosting.

Placement and sizing

The working rule for QR codes is printed width ≈ scan distance ÷ 10. A code read from 2 metres wants to be about 200 mm across. Add 20—25% on absorbent stock like kraft paper, corrugated card or newsprint, where ink spread blurs the module edges. Always keep a quiet zone of four module widths — the blank margin is part of the code, not decoration.

Placement Scan distance Recommended width Notes
Business card back 20—25 cm 18—22 mm Below 18 mm the prefilled message becomes a liability. Keep the message out or very short.
Table tent / counter card 30—45 cm 25—30 mm Matte laminate, not gloss. Gloss under a downlight reflects straight into the lens.
Takeaway bag or packaging 25—35 cm 25—30 mm Kraft absorbs ink; size up. Avoid printing across a glue seam or a fold.
Counter standee (A5/A6) 40—60 cm 35—45 mm Angle it toward the queue, not toward the till operator.
Shop window, read from the pavement 1—1.5 m 90—150 mm Mount at 130—150 cm height. Check reflections at the times of day you are open.
Pavement A-board 1.5—2 m 120—200 mm Keep it in the upper half of the board so it is not blocked by passing legs.
Trade show backdrop 2—3 m 200—300 mm Place at 100—160 cm from the floor. Codes above head height get missed.
Van or vehicle livery 3—5 m 250—400 mm Rear doors and the lower rear quarter. Nobody scans a moving van, so aim for when it is parked.
Estate agent / site board 2—4 m 200—350 mm Weatherproof laminate. A code that has faded for one winter reads as an abandoned listing.

Common mistakes and how to fix them

Symptom Cause Fix
WhatsApp opens and says the number is not on WhatsApp, or shows an invalid-number error The number was entered with a +, spaces, dashes, a leading national zero, or with no country code Strip to digits only and prefix the country code. Verify by opening wa.me/<number> in a browser before generating.
The prefilled message shows %20, + signs or mojibake The text was double-encoded, or encoded with a form encoder that turns spaces into + Encode once, using %20 for spaces. Paste plain text into the generator and let it handle the encoding.
Scanner hunts for several seconds, or only reads from 5 cm away Too much data for the printed size — usually a long prefilled message on a small code Cut the message, or increase the printed width by 30%. Drop error correction from Q to M if data length is the real constraint.
Reads on Android but not on iPhone (or the reverse) Inverted colours (light modules on a dark field), weak contrast, or a logo covering too much of the centre Dark modules on a light background, nothing subtler than a clear contrast step. Keep any logo under roughly 20% of the area and re-test.
Works on screen, fails once printed A PNG scaled up until it is soft, missing quiet zone, or ink bleed on porous stock Print from SVG, keep the four-module margin, and size up 20—25% on kraft, card or newsprint.
Chats arrive on a personal phone The code was generated with whichever number was to hand, often the owner's own SIM Regenerate on the business line. Reprint. There is no way to repoint a static code.
Scans happen but nobody ever replies The number is registered but unattended, or notifications are off on a shared shop phone Move to the WhatsApp Business app and set greeting and away messages so the customer at least gets an acknowledgement and your hours.
Customers complain the code "did nothing" They do not have WhatsApp installed, so the fallback web page appeared and confused them Print the plain phone number next to the code as a fallback, and label the code WhatsApp so expectations are set.
A code that used to work now fails The number was ported, recycled or deregistered from WhatsApp Test printed codes quarterly. This is the argument for encoding your own redirect URL instead.

Getting more scans

Most codes underperform because of the four words printed underneath them, not the code itself. "Scan me" tells the customer nothing about what happens next, and that uncertainty is enough to stop the hand reaching for the phone. Name the destination and the payoff instead: "Scan to WhatsApp us — replies within 15 minutes, Mon–Sat 9–6." That single line answers what app opens, what it costs, and how long they will wait.

It also helps to defuse the fear of accidentally messaging a business. A short reassurance — "opens WhatsApp; nothing sends until you tap send" — removes the objection that stops cautious scanners. Adding the WhatsApp glyph next to the square does the same job in less space.

Placement beats design. A code works when the customer is standing still, has a free hand and has just formed a question. That means next to the price list, on the fitting room mirror, on the shelf edge where a product is out of stock, on the invoice, in the lid of the box. It fails on a door people are walking through, in a basement with no signal, and anywhere both hands are full.

Three details that consistently pay off:

  • One code per surface. Two codes side by side make people read labels, hesitate, and scan neither.
  • Prefill the first line for them. The blank message box is the real drop-off point. Even "Hi — question about..." is enough to get them typing.
  • Fake your analytics with reference codes. Static codes cannot be tracked, but you can generate one code per location with a marker in the prefilled text — "(ref: WINDOW)", "(ref: VAN)", "(ref: BAG)". After a month you know which placement is earning its space. It costs a few characters and tells you more than most dashboards.

Finally, answer fast in the first hour after a scan. Chat sets a different expectation from email, and a reply four hours later reads as a shrug. If you cannot staff it, an away message with a realistic response time beats silence.

FAQ

Does scanning send the message automatically?

No, and it cannot. WhatsApp opens the chat with your text in the input box and waits for the person to tap send. They can also edit or delete it first. This is a deliberate anti-spam design, so treat the prefill as an opening line rather than data you control.

Do I need WhatsApp Business, or does a normal account work?

A normal account works fine — the link points at a phone number, not an account type. The Business app is worth it for greeting and away messages, labels for organising chats, a visible profile with your hours, and the short link that hides your number. It is free.

Can I hide my phone number in the code?

Yes. The WhatsApp Business app generates a short link in the form wa.me/message/XXXXXXXX that resolves to your chat without exposing the digits. The trade-off: that format cannot carry a prefilled message, so you lose the opening line.

What happens if the person does not have WhatsApp installed?

The link opens a WhatsApp web page inviting them to install or continue in the browser, which is a dead end for most walk-past traffic. Print your phone number or email next to the code so there is always a second route.

Will the QR code expire?

Static codes have no expiry date and no subscription behind them. The code keeps working as long as the number stays registered on WhatsApp. The realistic risk is not the code — it is changing your number, or a business line being recycled by the carrier.

Can I change the number or the message after printing?

Not in the code itself; the data is fixed in the pixels. If you expect changes, encode a redirect URL on your own domain instead of the wa.me link, then repoint that redirect whenever you like. Otherwise you reprint.

How long can the prefilled message be?

Technically quite long, but practically keep it under about 100 characters for printed use. Each character adds modules to the grid, and past roughly 120 characters you will need to print noticeably larger for the same scan reliability. One sentence is the right target.

Can I track how many people scanned it?

Not directly — a static code has nothing to report to. Two workarounds: put a reference marker in the prefilled text so you can count incoming chats per placement, or encode a URL on your own server that redirects to WhatsApp and read the hits from your logs.

Do emoji work in the prefilled message?

They do, but each emoji costs about four bytes once percent-encoded, so a couple of them can push a borderline code into needing a larger print size. They also render inconsistently across older Android builds. Use them sparingly, and never as the only content.

Can I use a landline or a virtual number?

Only if that number has been verified on WhatsApp. Many VoIP and virtual numbers can receive the verification code and work normally; some carriers block it. Test the number by opening wa.me/<number> in a browser before you commit it to print.

Related QR code guides

  • URL QR codes — the base format behind click-to-chat links, and what to use if you want your own redirect in the middle.
  • vCard QR codes — save your full contact details in one scan instead of opening a chat.
  • Google Review QR codes — the natural follow-up after a chat conversation ends well.
  • WiFi QR codes — pair with a chat code so guests on no data can still reach you.
  • Restaurant menu QR codes — for venues taking bookings and orders over chat.
  • PDF QR codes — link a price list or spec sheet you would otherwise send by chat.
  • EPC payment QR codes — collect a SEPA bank transfer once the quote is agreed.
  • amount.