Skip to content
Processing locally — files never leave your device

SMS QR Code Generator

Build a QR that opens the SMS app with a pre-filled recipient and message text. Great for business cards and event flyers.

How to use SMS QR Code

  1. Enter the destination phone number, ideally in full international format with the country code (for example +15550100).
  2. Type the message you want pre-filled in the recipient’s SMS app — a keyword, a confirmation, or a vote response.
  3. The preview re-renders on every keystroke, wrapping your number and text into an SMSTO: URI.
  4. Test it with your own phone camera first to confirm the number and message land correctly.
  5. Click Download PNG and place the code on a flyer, poster, packaging, or business card.

How an SMS QR code works

A QR code is just a container for a text string. The clever part is convention: scanner apps and phone cameras look at the first few characters of the decoded string and decide what to do. When the string starts with SMSTO:, the phone knows to open its messaging app rather than a browser. This tool builds exactly that string and renders it as a scannable image.

The SMSTO: URI format

The payload follows a simple, two-colon structure:

SMSTO:+15550100:Hi there!

Everything between the first and second colon is the destination number; everything after the second colon is the pre-filled message body. So the general shape is SMSTO:<number>:<message text>. If you leave the message empty the app simply opens a blank message addressed to the number.

Why the user still has to press send

Phone operating systems deliberately stop short of sending the message. The QR code can pre-address and pre-fill, but the final tap is always the user's. That guardrail prevents a malicious code from silently texting a premium-rate number, and it means the person can edit the text before it goes out — handy for feedback or vote responses where they add their own comment.

SMSTO: versus the sms: URI

There are two competing ways to encode a text-message action, and they are not interchangeable. The form this tool emits puts the body after a second colon:

SMSTO:+15550100:Text JOIN to enter

The alternative, defined in RFC 5724, uses a query parameter instead: sms:+15550100?body=Text%20JOIN%20to%20enter. On paper the sms:form is the more "official" URI, but in practice the body parameter is honoured unevenly: some Android builds and older iOS versions open the thread but discard the prefilled text. SMSTO:predates the RFC, comes from the original Japanese feature-phone era, and is the form the widest range of camera and scanner apps still parse correctly — which is why it is the safer default for a printed code you cannot revise later.

Carrier limits and message length

A single SMS segment holds 160 characters in the standard GSM-7 alphabet. The moment you include a character outside that set — a curly quote, an em dash, or any emoji — the message switches to UCS-2 encoding and the per-segment limit drops to 70 characters. Longer text is split into concatenated segments that the recipient's carrier reassembles and, crucially, may bill as multiple messages. Because the prefilled body is just a starting draft the sender can edit, keep it well under one segment: a short keyword such as JOIN or YES is ideal, both for billing and because shorter payloads make a less dense, easier-to-scan code.

Keeping the message compatible

Since the colon separates the number from the body, a stray colon inside your text can split the payload in the wrong place on stricter parsers. Semicolons, hard line breaks, and emoji are the other usual offenders — some apps silently drop them. Stick to one short line of plain letters, digits, and basic punctuation, and dry-run the finished code on both an iPhone and an Android handset before sending it to print.

Where SMS QR codes shine

They are perfect anywhere you want a frictionless text-message action: opt-in keyword campaigns on posters, "text us to book" on shop windows, quick event RSVPs, or a feedback prompt printed on a receipt. Pairing the code with a short instruction ("Scan, then tap send") noticeably improves completion rates.

Pick the right action code

An SMS code is one option in a family of "do something on scan" codes. If a text thread is not quite the right call to action, one of these encodes a different next step for the same poster or receipt.

  • QR code generator — use a tel: or mailto: link if you would rather a scan place a call or draft email.
  • vCard QR code generator — when you want the scanner to save your number rather than text it right away.
  • QR code decoder — confirm the number and body decode correctly before the flyer goes to the printer.

Frequently asked questions

What format does this QR code use?
It encodes an SMSTO: URI in the form SMSTO:<number>:<message>. This is the most widely recognised convention across phone operating systems. When scanned, the phone opens its messaging app with the recipient and message body already filled in — the user just reviews and taps send.
Does it send the message automatically?
No, and that is by design. A QR code can never send an SMS on its own. Scanning only opens the messaging app pre-filled; the person always has to press send. This keeps it safe — nobody is charged or messaged without consent.
Why does my message arrive blank or cut off?
A few phones and scanner apps only honour the number and ignore the message body, while others choke on special characters like colons, semicolons, line breaks, or emoji inside the text. Keep the pre-filled message short and plain (letters, numbers, basic punctuation) for the widest compatibility.
Should I include the country code?
Yes. Use full international format with a leading plus and country code (for example +442071234567). A bare local number may fail when scanned by someone roaming or in another country, because the phone cannot infer the correct dialling prefix.
What is this useful for?
Common uses are SMS keyword campaigns (text a keyword to a shortcode to opt in), event check-ins, quick feedback or voting, contact-us shortcuts on signage, and ordering or support flows where you want the customer to reach you by text with a subject already filled in.
Is SMSTO different from the sms: URI?
Slightly. Both aim to open the messaging app. SMSTO:number:body is the older, very broadly supported form used here. The newer sms:number?body=text form is part of the URI spec but message-body support is inconsistent across platforms. SMSTO tends to behave most predictably across the widest range of phones.
Is my phone number or message sent to a server?
No. The number you type is the sensitive part here — printing it on a flyer already publishes it, but nothing extra leaks during generation. The SMSTO: string is built and rasterised by code on this page, so your phone number and draft text are never transmitted to or stored by us. Worth knowing: the destination number is plainly readable to anyone who decodes the finished code, so use a number you are happy to make public, such as a business or campaign line rather than a personal mobile.
Can I use a shortcode instead of a full phone number?
Yes — if your SMS campaign uses a 5 or 6 digit shortcode, put that in the phone field. Shortcodes are local to a country, so make sure your audience is in the region where the shortcode is valid before printing the code.

More tools you might find useful in the same flow.

Built by Muhammad Tahir · About