WhatsApp QR code generator
100% Private & Local — Your data never leaves your browser. These QR codes are permanent and will never expire.
WhatsApp settings
Design
Add a centre logo
The image is read in this page and embedded in the code as a data: URL. It is not uploaded, and it stays inside the file you download.
More design options
The dark half of the code. Keep it well below the background in lightness.
Covers the quiet zone as well as the gaps between modules. A transparent background leaves it out of the file, so nothing is drawn with it.
Contrast 11.5:1 between the modules and the background.
PNG and WebP keep an alpha channel; the SVG simply omits the background rectangle. Whatever the code is placed on becomes the light half of the contrast.
A gradient fills the dark modules only. Its lighter end sets the contrast a scanner actually gets, so both ends have to stay dark.
The second colour, used only while a gradient is selected. It is measured for contrast alongside the first.
Degrees clockwise from a left-to-right sweep. A radial gradient spreads from the centre outwards, so the angle applies to a linear one only.
Rounded shapes cover less of each cell. The centre stays covered, which is where a decoder samples, but a small print of a dense code reads more reliably as squares.
The ring of the three finder patterns.
The eye inside each finder pattern.
The blank margin around the code, measured in modules. 4 is the specified minimum.
Higher recovery survives more damage and costs capacity, so the same content produces a denser symbol.
A logo sits at the centre and holds the level at H. Its width limit follows the symbol: 14% on the smallest code, 30% on a dense one.
Live preview & export
Enter the WhatsApp number, country code first.
Export
Raster, for screens
Complete the form to enable the downloads.
Export size and encoded text
- Payload
- Nothing encoded yet
- Symbol
- Not built yet
- Recovery
- M
Waiting for input
A WhatsApp QR code is a wa.me link: the number as bare international digits, optionally with a message the sender can edit before sending. WhatsApp is unforgiving about that number format, and a plus sign or a leading zero produces an error page rather than a chat.
When someone scans it
The camera opens wa.me, which hands off to WhatsApp and shows a chat with your number and the draft message ready to send.
The number format is the whole game
The payload is https://wa.me/447700900123?text=Hello%20there and the path segment must be nothing but digits. WhatsApp's own guidance is to use the full number in international format and to omit any zeroes, brackets or dashes. The plus sign goes too, and so does an international prefix typed as 00.
The national trunk zero is the trap. A UK number written 07700 900123 is +44 7700 900123 internationally, and the wa.me form is 447700900123 with that leading zero removed. Leaving it in produces 4407700900123, which is not a real number anywhere.
Failure is not loud. A malformed number, or a valid number with no WhatsApp account behind it, loads a wa.me page saying the number is invalid rather than raising anything at scan time, so a wrong digit can sit on a printed sign for weeks. Scan your own code with a phone that does not have your number saved before you print it.
- Strip the plus, any 00 prefix, brackets, dashes and spaces
- Drop the national trunk zero after the country code
- Keep the country code, always, even for local customers
- The result is one unbroken run of digits
What the pre-filled message does and does not do
Text after ?text= is percent-encoded and lands in the compose box as an editable draft. The sender can rewrite it or clear it entirely, so treat it as a prompt that tells you which poster, table or shelf they were standing at, not as a form field you control.
The draft is a plain chat message. It has nothing to do with the message templates of the WhatsApp Business Platform, it does not open a catalogue or a flow, and it does not identify the sender to you beyond their own WhatsApp profile.
Line breaks are encoded, and emoji are allowed. Each emoji costs four bytes of the QR payload, so a decorated opening line noticeably enlarges the symbol compared with the same sentence in plain text.
How this differs from the QR code inside WhatsApp
WhatsApp generates a contact QR code of its own, found next to your name in Settings. That one is tied to your account rather than to the digits of your number, and it can be reset from the same screen. Resetting invalidates every copy that has already been shared or printed, which is a genuine safety valve if a poster ends up somewhere you did not intend.
A wa.me code built here is the opposite trade. It encodes the number itself, so it keeps working for as long as that number has WhatsApp, cannot be revoked, and cannot be turned off remotely by anyone including us. It also means the number is readable by anyone who decodes the printed code.
Use the in-app code for personal contact you may want to withdraw. Use a wa.me code for a business number that is already printed on the door, where permanence is the feature and the number is public anyway.
Questions and answers
Do I include the plus sign?
No. wa.me expects the path to be digits only: country code followed by the subscriber number, with the plus, any 00 prefix, the national trunk zero, brackets, dashes and spaces all removed. 447700900123, not +44 7700 900123.
What happens if the number has no WhatsApp account?
The scan still works and the browser still opens wa.me, but instead of a chat the page reports that the number is invalid. There is no error at scan time, so a typo is only visible if you actually test the printed code.
Can the person change the pre-filled message before sending?
Yes. The text arrives in the compose box as an ordinary draft and can be edited or deleted like anything they typed. Nothing sends until they tap the send button, and you receive whatever they finally wrote.
Does a wa.me code work on a computer?
It does. wa.me opens in a browser and hands off to the WhatsApp desktop app if it is installed, or to WhatsApp Web if the person is signed in there. Without either, the page offers the app download rather than opening a chat.
How a static QR code works
Every code on this site is static: the payload is written into the black and white modules themselves. Nothing is looked up when the code is read, no server of ours takes part, and no subscription holds the printed code up. The same property is the limit — once it is printed, what it contains cannot be changed.
Three things then decide whether a printed code reads: how many bytes the payload came to, which recovery level absorbs the damage, and how wide a single module ends up on paper. These guides work through each of them with the numbers.