What a WhatsApp QR code is
It is a QR code containing a WhatsApp link. Scanning it opens the WhatsApp app — or WhatsApp Web, on a computer — on a conversation with one specific phone number. The visitor does not have to type the number, and, more importantly, does not have to save it as a contact first.
That last point is the reason this type exists. Messaging someone new normally means: read the number, save a contact, open WhatsApp, find the contact, start a chat. Each step loses people, and the saving step loses the most, because it feels like a commitment. A QR code collapses all five steps into pointing a camera.
It is not a WhatsApp feature that has to be switched on, and it does not need a business account. It is just a link, encoded in a picture, that WhatsApp recognises and opens.
What the link actually contains
A WhatsApp QR code is not a special payload like a Wi-Fi code. It contains
an ordinary web address on WhatsApp's wa.me domain, with the
phone number in the path:
https://wa.me/15550109999
Add a pre-filled message and it becomes a query parameter:
https://wa.me/15550109999?text=Hi%2C%20I%27d%20like%20a%20quote
Because it is a normal https link, anything that can open a URL can handle
it: the phone's camera app, Google Lens, a scanner app, a desktop browser.
That is a deliberate choice over the alternative, WhatsApp's own
whatsapp:// scheme, which looks more direct but fails silently
on any device without the app installed — a desktop, a tablet, a phone where
WhatsApp was never installed. The https form always resolves to something.
The number format is the whole game
Almost every WhatsApp code that fails is a number-formatting mistake, and it
is worth understanding exactly why. The wa.me link takes the
number as a run of digits in full international form, with:
- No plus sign.
+1 555 010 9999becomes15550109999. The plus is how you write an international number on paper; the link does not want it. - No spaces, dashes or brackets. The punctuation people naturally type is not part of the number.
- The country code included. A number written for local dialling cannot work, because WhatsApp has no idea which country the scanner is in.
So this:
+1 (555) 010-9999
becomes this:
https://wa.me/15550109999
You do not have to strip the punctuation yourself. The generator accepts a
number the way a human writes it — spaces, dashes, brackets, a plus sign at
the start — and normalises it. It is strict about one thing on purpose: a plus
sign anywhere other than the start is treated as a typo rather than
quietly removed, because 1555+0109999 is a mistake and
stripping it would encode a link that reaches nobody.
The number is also length-checked: at least seven digits and no more than fifteen, which is the E.164 maximum. A number shorter than that is usually a local number missing its country code — the single most common error with this type.
One warning worth taking seriously: a wrong digit usually does not fail. If it happens to be a number that exists on WhatsApp, the link opens a chat with a stranger. Scan your own finished code and check the conversation that opens before you print a thousand of them.
Pre-filling a message
The optional message is written into the code as the text
parameter, URL-encoded. That encoding is not cosmetic. A message is free
text, and free text contains characters that mean something in a URL:
| In your message | Encoded as | Why it matters |
|---|---|---|
& |
%26 |
An unencoded ampersand starts a new query parameter, so everything after it is read as a setting rather than as your message. |
| A line break | %0A |
A raw newline can end the request line. Encoded, it survives and WhatsApp renders it as a real line break. |
# |
%23 |
An unencoded hash truncates the URL at that point — the rest of your message disappears. |
? |
%3F |
Only the first ? starts the query. The generator encodes it so it stays text. |
The practical benefit is that your message can be more than one line. A multi-line draft — a greeting, a request, a signature — arrives intact because the line breaks are encoded rather than stripped. The generator does the encoding for you, so the only thing to decide is what to say.
Keep it short and specific. The message is a head start, not a form. "Hi, I'd like to book a table for Friday" gets sent; a paragraph of terms and conditions gets deleted.
It opens a draft, it does not send
This is the most common misunderstanding about WhatsApp codes, and it is worth stating plainly: the pre-filled message is a draft in the message box. The sender still has to press send.
That is a limitation of the platform rather than of the code, and it is the right behaviour. A QR code should not be able to send a message from someone's phone without them agreeing to it — that is the pattern phishing relies on. So a WhatsApp code can put the words in their mouth, but not press the button.
In practice this changes nothing for a genuine enquiry, and it is worth knowing before you promise a client that "one scan sends you a message". It does not.
What a desktop visitor sees
If someone scans a WhatsApp code with a phone, the app opens and they land in the conversation. If they open the link on a computer — from an email, a document, or a web page — the browser goes to a WhatsApp page that offers to continue in WhatsApp Web or the desktop app, and to download the app if it is not installed.
This is exactly why the link uses https://wa.me rather than
whatsapp://. Both work on a phone with WhatsApp installed, but
only the https form does anything sensible anywhere else. A custom-scheme
link on a desktop is usually a dead end with no explanation.
Groups and channels are a different link
This type opens a conversation with a person. If what you actually
want is a group join link or a channel, that is a different address
entirely — chat.whatsapp.com, with its own invite code — and
it is not a phone number, so this form cannot produce it. Make that code
with the website link type instead, pasting the
invite URL directly.
Worth knowing because group invite links can be revoked and regenerated from inside WhatsApp, while a printed WhatsApp number cannot be changed without reprinting. If the destination is likely to change, a dynamic code pointing at a page you control gives you the same one-code-many-destinations flexibility.
Printing and placing it
A WhatsApp code is usually scanned from close range, by someone who is already looking at the thing it is printed on — a price tag, a menu, a delivery van, a receipt, a shop window. That means it can be small, and that its placement matters more than its size.
Put it where the decision happens. On a product, next to the price. On the van door, where someone stuck in traffic behind you can read it. At the bottom of an invoice, where the customer is already holding the paper. A code on a wall that nobody stops in front of will not be scanned, however well it is printed.
Label it. "WhatsApp us" above the code does more for scan rates than any amount of size, because the visitor needs to know the code opens a chat before they point a camera at it. And give it a reason: "Order on WhatsApp" outperforms a bare code every time, because it answers the question the visitor is actually asking.
The usual print rules still apply — dark modules on a light background, the clear margin left intact, matte rather than glossy material so a reflection cannot blind the camera — and the size calculator will work out a minimum size for the distance you expect. For a code read at arm's length, most of these are easy to satisfy.
When not to print one
There is one real caution with WhatsApp codes, and it is about the number rather than the code.
A published WhatsApp number can be messaged by anyone who scans it, and it cannot be unpublished. A code on a poster in a public place is an open invitation, and the number behind it will collect messages from people who are not customers. A personal mobile number on a shop window is the wrong choice; a separate business number is the right one. If you do not have a second number, many businesses use a second SIM or a WhatsApp Business number for exactly this reason.
The other cases are mostly mismatches of intent:
- When you want them to visit a page instead. A WhatsApp code opens a chat, not a website. If the goal is a menu, a booking form or a catalogue, use a URL code — and note that a WhatsApp chat gives you no analytics at all, because nothing is requested when the code is scanned.
- When you need a written record. WhatsApp is fine for enquiries, but an order, a booking or a complaint that must be traceable belongs in a system with a reference number.
- When the visitor may not use WhatsApp. In some markets it is universal; in others, a phone number or an email address reaches more people. If you are unsure, print the number as text alongside the code so the code is an accelerator rather than the only route.
For the case it is built for — a customer who wants to ask a question right now — nothing is faster, because it removes the step where they would have given up.
Make one in the generator
The generator has a WhatsApp type with a live preview: enter the number,
optionally add a message, and it builds the wa.me link, strips
the punctuation from the number, and encodes the message. Download it as PNG
or SVG. Codes are free, carry no watermark and never expire.
Open the WhatsApp QR code generator
Tip: before printing, scan your own code with a phone that does not have your number saved, and check that the conversation which opens is the one you expect. A number with one wrong digit usually reaches a real person rather than failing.
Frequently asked questions
What does a WhatsApp QR code do?
It opens a WhatsApp conversation with a specific number. The person scanning does not have to save the number as a contact first, which is the whole point: saving a contact is the step where most people give up. If you include a pre-filled message, the chat opens with that text already typed in.
Why does the number need no plus sign or spaces?
The wa.me link format takes the international number as
digits only, so the plus sign, spaces, dashes and brackets that people
normally write are not valid. The generator strips them for you, but if
you are building the link by hand, remember that the plus has to go.
Can I pre-fill a message that the sender just has to send?
Yes, but only as a draft. The text appears in the message box and the sender still presses send, which is deliberate: a QR code cannot send a message on someone's behalf. The message can be several lines, because line breaks are encoded rather than dropped.
What happens if someone scans it on a computer?
The wa.me link opens in the browser and lands on a WhatsApp
page that offers to continue in WhatsApp Web or the desktop app, or to
download WhatsApp. That is why the link uses https rather than the
whatsapp:// scheme, which fails outright on a device
without the app.
Can a WhatsApp QR code open a group chat instead?
Not this type. A group join link is a chat.whatsapp.com
invite address, which is a different URL entirely, so make it with the
website link type instead. The WhatsApp type opens a one-to-one
conversation with a number.
What if the number is not on WhatsApp?
WhatsApp will tell the visitor that the phone number shared by the link is not valid, and no chat opens. Check the number by scanning your own code before printing it, because a mistyped digit reaches a real stranger rather than failing quietly.
Does a WhatsApp QR code expire?
No. The link is encoded directly in the code, so it works with no server involved and never expires. It stops working only when the number changes, and then it has to be reprinted.