
QR code for WhatsApp: how to build a trackable click-to-chat code
WhatsApp's own QR code tool gives you no scan data and locks you to one phone number once it's printed. Here is how the wa.me link actually works, where WhatsApp's tool falls short, and how to build a click-to-chat QR code you can track and repoint after print.
ScanKit · Organization
· 13 min read
QR code for WhatsApp: how to build a trackable click-to-chat code
Search "WhatsApp QR code generator" and every result on the first page is a chat-tool vendor showing you how to turn a phone number into a scannable square. What none of them mention is that the code you get out of that process, and the one WhatsApp generates for you inside its own app, both share the same limitation: once it's printed, it's frozen. Change the number, change the message, or find out how many people actually scanned it, and there's nothing you can do without printing a new one.
For a consumer sticking a code in an email signature that's a non-issue. For an agency committing a code to a real estate sign, a restaurant table tent, or a 5,000-unit print run, it's the whole problem. This post covers exactly how a WhatsApp click-to-chat link works, where WhatsApp's own QR tool stops short, and how to build one that you can repoint and measure after it's already on paper.
How a WhatsApp QR code actually works
A "WhatsApp QR code" isn't a special format. It's an ordinary QR code encoding an ordinary URL, and that URL follows a pattern WhatsApp documents itself: https://wa.me/<number>?text=<message>. The <number> is the full phone number in international format, digits only, with no +, no leading 00, no spaces, brackets or dashes. A Dutch number written as +31 6 12345678 becomes 31612345678 in the link. Get that wrong, most commonly by leaving in a local trunk zero or the plus sign, and the link either fails outright or opens a chat with the wrong contact.
The text parameter is optional and, when present, pre-fills the message box with whatever you put there (URL-encoded) without sending it automatically. The person still has to hit send. There's no officially documented character limit on that parameter for a hand-built wa.me link; keep it to a short, natural sentence rather than testing the edges. The one place a hard limit does exist is if you generate the code through WhatsApp's own Business Platform API rather than a plain URL, which caps a pre-filled message at 140 characters.
If you're curious what's happening under the hood, wa.me isn't its own system. It's a short redirector that forwards to api.whatsapp.com/send with the same phone number and text carried over as query parameters. Both forms work and neither is deprecated; wa.me is just shorter to type and print.
What happens when someone scans it
On a phone with WhatsApp installed, the link opens the app directly with the chat and message ready to send. Without WhatsApp installed, mobile browsers typically route to the relevant app store listing instead of failing silently, though the exact behaviour depends on the browser. On a desktop or laptop, the same link opens WhatsApp Web or the desktop app, whichever is registered as the handler, with no install prompt in between.
One genuine edge case worth planning for: links tapped from inside another app's built-in browser (Instagram's, TikTok's, or WhatsApp's own in-chat browser) sometimes fail to hand off to the native WhatsApp app correctly, even when it's installed, and drop the person on a store page instead. It's an inconsistent, platform-dependent quirk rather than a documented failure mode, but it's common enough that if a scan comes from a source where the code might be opened inside another app's browser, a plain landing page with a visible WhatsApp button as a fallback is worth having.
WhatsApp's own QR code tool, and where it stops
WhatsApp Business lets you generate a QR code and short link straight from the app, under Business Tools, with an optional pre-filled message. It's a legitimate, free way to get a scannable code with no third party involved, and it has one advantage a plain wa.me link doesn't: the short link masks your actual phone number from anyone who inspects the code.
It also has three limits worth knowing before you print it. First, WhatsApp states plainly that analytics aren't available for these codes, because it deliberately limits how much scan data it logs to protect user privacy. There's no scan count, no timestamp, no location, nothing. Second, the code is tied to editing the message behind it, not the destination itself. You can update or delete the pre-filled text at any time, but you can't repoint the same code at a different phone number, so if the number changes, the code is dead. Third, a single WhatsApp Business number can carry no more than 2,000 of these codes and short links in total, which sounds generous until an agency is managing dozens of client numbers, each hitting its own ceiling independently, with no shared view across any of them.
None of that makes WhatsApp's tool bad. It makes it a single-number, single-business tool, built for exactly that use case, not for an agency running QR campaigns across multiple clients who need to compare scan volume, swap a destination after print, or prove the code did anything at all.
Why that's a problem once you're running a campaign
Every other channel in a QR campaign gets measured. A landing page gets a visit count. A dynamic code pointed at a URL gets a scan count, a timestamp, and usually a device and rough location. A WhatsApp click-to-chat code, whether it's a raw wa.me link or one built through WhatsApp's own tool, gets none of that. It's the one line item on the report you can't back up with a number, which is an awkward gap when everything else in the deck has one.
The same gap applies to the destination itself, not just the data. A code that's already on 500 yard signs or a vehicle wrap needs to survive a staff member leaving, a client renaming their business WhatsApp, or a campaign message that needs tightening after week one. Static and dynamic QR codes differ in exactly this way: a static code is the destination, permanently, while a dynamic code is a pointer to it, which is what lets the destination change without a reprint.
Building a QR code for WhatsApp you can actually track
The fix isn't a different kind of QR code. It's treating a WhatsApp click-to-chat link the same way you'd treat any other campaign destination: as a URL a dynamic code points at, rather than the thing the code encodes directly.
- Build the wa.me link first. Format the number as WhatsApp requires (country code, digits only) and write a short pre-filled message if you want one, for example
https://wa.me/31612345678?text=Hi%2C%20I%27m%20calling%20about%20the%20listing%20on%20Elm%20Street. - Create a dynamic QR code and point it at that link, rather than encoding the
wa.meURL directly into a static image. The code that goes on the sign, the table tent, or the flyer now encodes a short redirect URL you control. - Track scans the way you would any other code: count, first-scan versus repeat, rough location and device, and time of day, the metrics that actually matter for a QR report.
- Repoint it when something changes. If the staff WhatsApp number changes, the campaign message needs updating, or the destination needs to become a landing page instead of a chat for a while, you edit the redirect once. Every sign, card, and flyer already in the field starts working with the new destination the next time it's scanned, with no reprint.
- Use it anywhere a single call to action makes sense, not just signage: a business card that opens a chat instead of saving a contact, a real estate sign where "message the agent" often converts better than a static listing page, or a restaurant table tent for reservation or catering enquiries.
This costs nothing extra over WhatsApp's own free tool in terms of what the customer experiences. The scan, the redirect, and the chat opening all happen in well under a second either way. What changes is entirely on your side of the QR code: you get a number, you can move the destination, and it isn't tied to WhatsApp's per-number ceiling because the tracking layer sits outside WhatsApp entirely.
The WhatsApp Web login QR is a different thing entirely
Worth a clear line of separation, because the phrase "WhatsApp QR code" gets used for two unrelated mechanisms. The click-to-chat code covered above is a permanent, shareable link to start a conversation. The QR code shown when you open WhatsApp Web or the desktop app to log in is a session-pairing token: it's generated per login attempt, expires within a couple of minutes, and links a browser session to your phone rather than opening a chat with anyone. Scanning one does nothing useful with the other. If you're building marketing material, you want the click-to-chat link; the login QR code is not something you'd ever put on a sign.
One number, or the WhatsApp Business Platform
The free WhatsApp Business app is built around a single phone number, with a small number of linked companion devices for shared access. That's the version most small clients use, and it's the one whose native QR tool caps out at 2,000 codes per number with no cross-account view.
Agencies managing several clients, or a client with a genuinely high-volume support line, eventually outgrow that shape and move to the WhatsApp Business Platform (the API-based tier), which removes the single-device ceiling and supports shared inboxes and multiple agents. That's a separate decision from how you build and track the QR code itself: whichever tier a client is on, the number is still just a number, and a dynamic code pointed at a wa.me link built from it works the same way in both cases.
The privacy paperwork a WhatsApp QR code triggers
A "scan to chat" code is a data collection point, even though it doesn't feel like a form. Once someone messages a business over WhatsApp, that conversation is a personal data flow the business needs a lawful basis and a privacy notice for, the same as any other channel. WhatsApp itself acts as a data processor on the business's behalf for messages sent through its platform, retains message content on its own servers for a limited period as part of delivering the service, and relies on the EU-U.S. Data Privacy Framework for transfers out of the EU (a mechanism worth knowing is legally live but not universally settled, given past challenges to its predecessors). None of this is unique to a QR-triggered chat over messaging a WhatsApp number directly, but a code on printed signage is often the first time a business has put "start a WhatsApp conversation with us" in front of the public at scale, which is exactly the moment to make sure the privacy notice actually mentions it.
Frequently asked questions
What is a WhatsApp QR code?
It's an ordinary QR code that encodes a wa.me link, WhatsApp's own click-to-chat URL format. Scanning it opens a chat with a specific number, with an optional pre-filled message, rather than linking to a website.
How do I make a QR code that opens a WhatsApp chat?
Format the number in international digits-only form (country code first, no +, no leading zero), build a link like https://wa.me/<number>?text=<your message>, and generate a QR code from that URL. For anything you're printing at scale, point the code at a dynamic redirect rather than the raw link, so the destination can change later.
Can I add a pre-filled message to a WhatsApp QR code?
Yes, using the text parameter on the wa.me link. The person still has to press send themselves; it doesn't message on their behalf. Keep the message short and specific to where the code appears, so the context is obvious when the chat opens.
Can you track how many people scan a WhatsApp QR code?
Not with WhatsApp's own QR code and short link tool. WhatsApp states directly that it doesn't provide analytics for these codes, to limit the data it logs. You can track scans if the QR code itself is a dynamic code pointing at the wa.me link, because the scan count then happens at the redirect layer, outside WhatsApp.
Can I change the phone number behind a printed WhatsApp QR code?
Not if the code encodes the wa.me link directly; the number is baked into the code and a new number needs a new code. If the QR code instead points at a dynamic redirect that you control, you can update the destination number at any time and everything already printed picks up the change on the next scan.
Does a WhatsApp QR code work if the person doesn't have WhatsApp installed?
On mobile, most browsers redirect to the relevant app store rather than failing outright. On desktop, the link opens WhatsApp Web if you're logged in there, or shows a prompt to do so; there's no automatic install flow on desktop the way there is on mobile.
Is the WhatsApp Web login QR code the same as a click-to-chat QR code?
No. The login QR pairs a browser session with your phone and expires within minutes; it has nothing to do with starting a chat with a business. A click-to-chat code is a permanent link to a wa.me URL. They're unrelated mechanisms that happen to both be called "WhatsApp QR code" in casual use.
Does a WhatsApp QR code cost anything to make?
No. The wa.me link format and WhatsApp's own in-app QR tool are both free. What isn't included for free is scan tracking or the ability to change the destination after printing, which is the gap a dynamic QR code fills.
The short version
A WhatsApp QR code is nothing more than a QR code encoding a wa.me link, and both the raw link and WhatsApp's own free QR tool share the same two gaps: no scan data, and no way to change the destination once it's printed. Point a dynamic QR code at the wa.me link instead of encoding it directly, and both gaps close: you get a scan count you can report, and a destination you can repoint the moment a number, a message, or a campaign changes. If you're about to print a WhatsApp code onto anything you can't reprint cheaply, build it as a dynamic code from the start.
Keep reading

· 17 min read
QR codes for multi-location and franchise businesses: one code design, per-location tracking, and a rollup report
QR codes for chains and franchises: when to use a shared geotargeted code versus a unique code per store, how to bulk-generate and name them without mix-ups, and how to build a rollup report that gives corporate one number and each location its own.
Read more
· 15 min read
Time-based QR codes: how scheduled redirects work
A time-based QR code changes destination automatically on a schedule, no reprinting or manual swaps needed. How the mechanism works, which timezone governs it, why 301 redirects break it, and where DST and caching quietly cause problems.
Read more