WhatsApp Click-to-Chat Links: The Complete Format and Tracking Guide
A wa.me link opens a WhatsApp chat with your number and a message pre-filled. Here is the exact URL format, the encoding rules that break links, and how to track which link a lead came from.
Key takeaways
- The format is https://wa.me/<number>?text=<url-encoded message> with the number in E.164 and no plus sign, spaces, or dashes.
- The pre-filled text must be URL-encoded — a raw space, ampersand, or line break silently truncates the message.
- A pre-filled message with a hidden reference code is the only reliable way to know which link a lead came from.
- api.whatsapp.com/send and wa.me do the same thing; wa.me is shorter and better for print and QR codes.
- Click-to-chat works for any WhatsApp number, business account or not, with no API or approval required.
What it contains
A click-to-chat link opens WhatsApp with your number already selected and, optionally, a message already typed. It works from a website, an email, a QR code on a poster, or an Instagram bio. No API, no approval, no WhatsApp Business account required — it works with any WhatsApp number.
It is the single highest-conversion WhatsApp feature most businesses are not using properly, mostly because of encoding mistakes that break the message.
The Exact Format
https://wa.me/<phone>?text=<url-encoded message>
The phone number must be in full international format with no plus sign, no spaces, no dashes, no parentheses, and no leading zeros.
| Input | Correct link |
|---|---|
| +1 (555) 123-4567 | https://wa.me/15551234567 |
| +880 1712-345678 | https://wa.me/8801712345678 |
| +44 20 7946 0958 | https://wa.me/442079460958 |
| 020 7946 0958 (UK local) | https://wa.me/442079460958 |
That last row is the one that catches people: drop the national trunk prefix (0 in the UK) and use the country code instead.
The text parameter is optional. When present it must be URL-encoded.
Encoding Is Where Links Break
This is the cause of nearly every “the message gets cut off” report.
| Character | Encode as |
|---|---|
| space | %20 |
| line break | %0A |
& | %26 |
? | %3F |
# | %23 |
+ | %2B |
% | %25 |
The ampersand is the dangerous one. In a URL, & starts a new parameter — so text=Hi, I want the tea & coffee bundle sends “Hi, I want the tea ” and drops the rest. It fails silently. Nothing in the link looks wrong.
A correctly encoded link with a multi-line message:
https://wa.me/15551234567?text=Hi%2C%20I%27d%20like%20to%20book%20a%20table.%0A%0ADate%3A%20%0APeople%3A%20
Which arrives in the message box as:
Hi, I'd like to book a table.
Date:
People:
Note the trailing labels with nothing after them. That is deliberate — it prompts the customer to fill in exactly the fields you need, and it converts far better than an empty box.
You can encode by hand, use encodeURIComponent() in a browser console, or use a generator. WAPlus includes a click-to-chat generator that handles the encoding and produces the link and a QR code together, which removes the whole class of error.
wa.me vs. api.whatsapp.com
Both work and do the same thing:
https://wa.me/15551234567?text=Hello
https://api.whatsapp.com/send?phone=15551234567&text=Hello
Use wa.me for anything a person sees or types — it is shorter, produces a denser QR code, and prints better. Use api.whatsapp.com/send if you have a legacy integration expecting it. There is no functional difference.
There is also https://wa.me/message/<code>, the short link WhatsApp Business generates for you. It is convenient but you cannot control the pre-filled text or vary it per placement, which rules out the tracking technique below.
Tracking Which Link a Lead Came From
WhatsApp gives you no referrer. A message arrives with a phone number and nothing else — no UTM parameters, no source, no campaign.
The workaround is simple and reliable: encode the source into the pre-filled message itself.
| Placement | Pre-filled message |
|---|---|
| Website contact page | Hi! I have a question. [WEB] |
| Instagram bio | Hi! I found you on Instagram. [IG] |
| Printed flyer QR | Hi! I scanned the flyer. [FLY] |
| Email signature | Hi! Following up from your email. [EML] |
| Google Business profile | Hi! I found you on Google. [GBP] |
The tag arrives in the first message. Search your chats for [IG] and you have your Instagram lead count, with no analytics tooling at all.
Two refinements worth making:
- Keep tags short and bracketed so they read as a reference rather than as noise, and are trivially searchable.
- Vary the whole sentence, not just the tag, so the message still sounds natural for that context. Someone scanning a flyer in your shop should not open a message that says “I found you on Google.”
If you also want click-side data, wrap the link in your own redirect with UTM parameters, then 302 to the wa.me URL. That gives you clicks in your analytics and conversations tagged in WhatsApp — the two halves of the funnel.
QR Codes
For anything physical — a shop counter, a flyer, a vehicle, a business card — encode the click-to-chat URL into a QR code.
Practical rules that actually matter:
- Keep the pre-filled message short. Longer URLs mean denser codes, which scan worse in poor light.
- Print at 2 cm minimum, larger for anything scanned from more than arm’s length.
- Test on a real phone, in the actual lighting, at the actual distance, before printing a thousand of them.
- Label it. A bare QR code gets ignored; “Scan to message us on WhatsApp” gets scanned.
- Leave the quiet zone. The white margin around the code is part of the code — designers crop it and the code stops working.
Where to Put Them
In rough order of return:
- Website floating button. Persistent, on every page, thumb-reachable on mobile.
- Instagram and Facebook bio. The only clickable link in most social profiles.
- Google Business Profile. High-intent traffic that is already looking for you.
- Email signature. Costs nothing and runs on every email you send.
- Order confirmations. The moment a customer most wants a support channel.
- Physical QR codes. Counter, packaging, receipts, vehicle.
- Ad landing pages. A WhatsApp conversation converts better than a contact form for high-consideration purchases.
Common Mistakes
- Leaving the
+in the number.wa.me/+15551234567fails. Digits only. - Leading zeros.
wa.me/0442079460958fails. Country code, then the national number without its trunk prefix. - Unencoded ampersands. Silently truncates the message.
- A pre-filled message that is too long. Anything past a sentence or two reads as a form and gets deleted before sending.
- No pre-filled message at all. An empty box makes the customer compose from scratch, which is the highest-friction possible start.
- Not testing on iOS and Android. Behaviour when the app is not installed differs; both should land somewhere sensible.
A Two-Minute Setup
- Write your number in E.164 with the plus and spaces removed.
- Write a one-sentence pre-filled message ending in a source tag.
- URL-encode it.
- Assemble
https://wa.me/<number>?text=<encoded>. - Open it on your own phone and confirm the message arrives intact.
- Generate a QR code from the same URL for physical placements.
Step 5 is not optional. Encoding errors are invisible in the link and obvious in the message.
Frequently asked questions
What is the format of a WhatsApp click-to-chat link?
https://wa.me/15551234567?text=Hello — the number is in full international format without a plus sign, spaces, or dashes, and the text parameter must be URL-encoded.
Why is my WhatsApp link message getting cut off?
Almost always an encoding problem. An unencoded ampersand ends the parameter, and unencoded spaces or line breaks can truncate it. Run the message through a URL encoder so spaces become %20 and newlines become %0A.
Do I need WhatsApp Business for click-to-chat links?
No. Click-to-chat works with any WhatsApp account. No API access, approval, or business verification is required.
How can I tell which click-to-chat link a customer used?
Give each placement a different pre-filled message with a distinct reference code, such as REF-IG for Instagram. The code arrives in the first message, so you can attribute the lead without any analytics tooling.