🔳 QR Codes

WhatsApp QR Code Generator

Quick answer: Make a QR code that opens a WhatsApp chat with your number and a message already waiting, like "Hello, I would like to know more about your product." No WhatsApp Business account and nothing to install. The number has to be in full international form — country code, no leading zero — and this tool checks that before you print, because WhatsApp only reports a bad number after someone has scanned it.

A WhatsApp QR code is a link to wa.me drawn as a pattern. Scanning it opens a chat with your number, with a message already typed and waiting to be sent. Nobody installs anything, you do not need a WhatsApp Business account, and there is no service in the middle that could switch it off.

Make a WhatsApp QR code →

The leading zero that breaks most of these

This is the reason a WhatsApp code fails, far more often than anything to do with the pattern. The link needs the number in full international form: country code first, digits only, and no national trunk prefix. The number on your business card is almost certainly not in that form.

Written asWhat wa.me needsWhat happens otherwise
07700 900123447700900123WhatsApp says the number is invalid
+44 7700 900123447700900123Fine — the + and spaces are removed
0044 7700 900123447700900123Fine — 00 is the dialling prefix, stripped
(555) 123-4567No country code, so there is nothing to dial

What makes this expensive is when you find out. The link builds either way. The QR code scans either way. WhatsApp only tells the customer the number is invalid after they have scanned it — by which point the sticker is in the window and the menus are printed.

So this tool checks the shape before you print. Spaces, dashes, brackets and a leading + are stripped for you, and so is a 00 international prefix, since no phone number legitimately begins with a zero and the intent there is unambiguous. A remaining leading zero is flagged rather than silently removed: making it into a working number means knowing which country it belongs to, and a wrong guess would point your customers at a stranger’s phone. Numbers too short to contain a country code, or longer than the fifteen digits an international number is allowed, are flagged too.

One thing it cannot tell you: whether that number is actually on WhatsApp. That is a shape check, not an existence check, and finding out would take a request to WhatsApp — which this page does not make. Send yourself a test scan before you print a hundred of them.

What the pre-filled message costs you

The message is the part that makes the code work — it gives a customer who does not know what to say a way to start. It is also the only part whose length you control, and it travels inside the URL percent-encoded, so a space costs three characters and an emoji twelve. That lands directly on the printed code as finer modules. The same number, printed 30 mm square:

Pre-filled messageModules acrossModule size at 30 mm
None25 × 250.91 mm
“Hello, I would like to know more about your product.”41 × 410.61 mm
The same, plus one 👋 emoji45 × 450.57 mm
Two sentences (85 characters)49 × 490.53 mm

A one-sentence opener costs 64% more modules than no message at all; two sentences cost 96%, which makes the code nearly twice as fine at the same printed size. The working floor is around 0.4 mm per module. The single emoji costs more than the entire sentence it decorates.

None of that means skip the message. It means keep it to one line, and print the code a few millimetres larger than you were going to. Every figure above came from generating the real link and decoding it back.

It is a draft, not a sent message

Worth being clear about, because businesses sometimes treat it as a form. The text lands in the customer’s message box; they can edit it, or delete it, before sending. It is an opener, not a submission. Two consequences follow.

The shop window is the hardest place to put one

It is read through glass, often at an angle, sometimes into direct sun, by someone standing on a pavement rather than leaning in. Three habits follow, and the first is the one businesses get wrong: put it at eye level, not at the bottom of the door. A code at knee height is read by nobody, however well it is made. Second, give it a white tile of its own rather than dropping it onto a dark vinyl panel — the clear margin around the pattern is part of the code, not styling. Third, size it for the pavement, not for the desk you designed it on: a code reads from roughly ten times its own width, so a 50 mm sticker is about half a metre, and somebody standing back from the glass is further away than that.

The rest of the printing question — minimum size, contrast, error correction, what file to send a printer — is the same for every kind of code, and it has a page of its own with the measurements on it: printable QR codes and what actually makes them scan.

One thing that is specific to WhatsApp, though: test it with a stranger’s phone before you print a run. Not yours. Yours already has the number in its address book and a WhatsApp session open, which hides exactly the failure this page opens with — a number in the wrong format behaves very differently on a device that has never seen it.

Where a WhatsApp code earns its place, and where it does not

The code is worth printing wherever somebody is already holding their phone and has a question you can answer in a sentence. It is a poor fit wherever the next step is a form.

PlacementOpening message that worksWhy
Shop window, after hours“Hello, are you open tomorrow?”The question people actually have at a closed door, and it answers itself in one reply
Table tent or menu“Hello, I’d like to order from table __”Leaves a blank the customer fills, so the first message already carries the table
Delivery note or invoice“Hello, about order __”Turns a support email into a thread, and the customer supplies the reference
Trade stand“Hello, we met at __”A conversation that survives the journey home, unlike a business card
Product packaging“Hello, I have a question about __”Cheaper than a printed manual and it reaches a person

Two placements to think twice about. A receipt is usually thrown away before anyone scans it, and the moment for a question has passed. And anywhere the answer is really a booking, a payment or a form, the code should point at that instead — a chat that ends with “can you fill this in” has cost the customer a step rather than saving one.

One habit that saves more grief than anything else on this page: put a person behind it before you print it. A code on a window is an invitation to message at 9pm on a Sunday, and an unanswered WhatsApp reads as a closed business rather than as a business that is closed. Set an away message, or do not print the code.

Change your number and every printed code is dead

The number is inside the pattern, so there is no re-pointing it. Moving to a new number, or switching the business onto a different handset with a different SIM, means reprinting everything that carries the old one. That is the static trade in its most concrete form, and it is worth a moment’s thought before an order of several thousand flyers.

The hedge, if you expect the number to move, is to point the code at a short page on your own website that carries the WhatsApp link, rather than at wa.me directly. You lose the one-tap directness — the visitor gets a page with a button instead of a chat window — and you gain the ability to change the number without reprinting. For a sticker on a shopfront that will outlive the phone, that is usually the better trade; for a leaflet with a three-week life, it is not.

What happens on a laptop

Codes get scanned from screens more than people expect — somebody sees your post on a desktop and photographs it, or opens your PDF on a laptop. A wa.me link opened on a computer goes to WhatsApp’s web interface, which needs the visitor’s phone to have been paired with it already. If it has not, they land on a page asking them to scan a different QR code with their phone, which is a confusing place to send somebody who was simply trying to ask about your opening hours.

Nothing about the code fixes that, and it is not a reason to avoid one — the overwhelming majority of scans are from the phone that holds the WhatsApp account, which is exactly the case it is designed for. It is a reason to make sure a phone number or an email address appears somewhere near the code in plain text, so the desktop visitor has a route that does not depend on pairing.

No account, no tracking, and no expiry

The link is inside the pattern. There is no redirect, no short link and no dashboard, so nothing can stop working because a subscription lapsed, and nobody is keeping a list of who scanned your window. Generators that offer scan statistics do it by pointing the code at their own server first — that is what makes counting possible, and it is also what makes the code theirs rather than yours.

The honest trade: a static code cannot be re-pointed. If your number changes, you reprint. For a business phone number that is usually the right side of the bargain.

Making it is private too. The number and the message are turned into a pattern by code running in your own browser — the page has no fetch, no XMLHttpRequest and no form, so there is no route for either to leave your machine. You can confirm that from the Network tab in about thirty seconds.

Frequently Asked Questions

Choose the WhatsApp type, enter your number with its country code, and add the message you want customers to arrive with. The code appears as you type. Scanning it opens a chat with you, that message already in the box. You do not need a WhatsApp Business account, nothing is installed on either side, and the code is static so it never expires.
Almost always the country code. WhatsApp links need the full international number with the national trunk prefix removed: 07700 900123 in the UK has to be 44 7700 900123. The link builds and the code scans either way, so the problem only shows up after someone has scanned it. This tool strips spaces, dashes, a leading + and a 00 international prefix for you, and warns you if a leading zero is left, if the number is too short to contain a country code, or if it is longer than the fifteen digits an international number is allowed.
No. The code is just a link to wa.me with your number in it, and that works with an ordinary WhatsApp account. A Business account gives you other things — a catalogue, away messages, labels — but none of them are needed to make a code that opens a chat with a pre-filled message.
Yes, and it is what makes these worth printing. The message arrives as a draft in the sender’s message box — something like "Hello, I would like to know more about your product." They can edit or delete it before sending, so treat it as an opener rather than a form. Keep it to one line: a one-sentence message adds 64% more modules to the code than no message at all, and every module is smaller at the same printed size.
No. It travels inside the link in plain text and anyone can read it off the code with any scanner. Keep discount codes, order references, account numbers and customer details out of it. What is private is the making of the code: your number and message are turned into a pattern by code running in your own browser, which has no fetch, no XMLHttpRequest and no form, so neither has any route off your machine.
Bigger than you think, because it is read through glass from the pavement. A code scans from roughly ten times its own width, so a 50 mm sticker is comfortable at about half a metre. Keep the white margin — we measured that a code with no margin stops scanning as soon as it sits on a dark background, while the same code with the standard four modules carries on. Keep contrast above 4:1, and print from the PDF or EPS rather than scaling a PNG, because soft edges are exactly what a scanner struggles with.
Not these. The wa.me link is encoded into the pattern itself, so there is no redirect, no short link and no account behind it, and nothing that can be switched off. The trade is that a static code cannot be re-pointed after printing: if your number changes, you reprint. Generators offering scan statistics work the other way round, by sending every scan through their server first.
Not with a static code, and that is the point of it. Counting scans requires the code to point at a server that redirects, which means the destination belongs to whoever runs that server and stops working if you stop paying them. If you need the numbers, put a redirect on a domain you own and encode that — you get the statistics without handing your printed code to a third party.

Related tools