Command Palette

Search for a command to run...

SMS QR Code Generator: Let People Text You With One Scan

SMS QR Code Generator: Let People Text You With One Scan

T
Toolz Team
|Aug 31, 2026|15 min ler

Parte da coleção QR e códigos de barras

I run toolz.dev, and the QR family on the site started with a plain text-and-URL generator. Then the questions arrived. People did not want a code that opened a website. They wanted a code that opened the thing you do next: connect to the wifi, save the contact, start an email, send a text. So I built the payload-specific generators one at a time, and the SMS one turned out to be the request I heard most from people running physical campaigns, a flyer, a shop window, a table at an event, where the whole point is to get someone to message a number without making them type it.

TL;DR: An SMS QR code encodes an SMSTO: payload, so scanning it with a phone camera opens the messaging app with the recipient number and, optionally, a message body already filled in. The Toolz SMS QR code generator builds the SMSTO string, encodes it as a scannable QR code following ISO/IEC 18004, and lets you download SVG or PNG. Everything runs client-side: no upload, no signup, no scan tracking, and it works offline once the page has loaded.

What is an SMS QR code?

An SMS QR code is a QR code that stores a phone number and, optionally, a short message. When someone scans it with a phone camera, the device opens the texting app with a new message already addressed to that number and, if you set one, the body already typed. The person only has to press send. That is the entire trick, and it removes the two friction points that kill printed calls to action: reading a number correctly and typing it into the right app.

I think of it as the physical-world version of a mailto link. You already know that a link on a web page can pre-fill an email. An SMS QR code does the same job for a text message, except the trigger is a camera pointed at a printed square rather than a tap on a screen. That difference matters, because it means the code can live anywhere a printer or a screen can reach: a poster on a wall, a sticker on a product, a slide behind a speaker, a placard on a restaurant table.

The reason it works on essentially every modern phone is that there is nothing custom about it. The camera app on current iOS and Android recognises the SMSTO scheme natively and offers to open the messaging app. You are not asking people to install anything, and you are not depending on a particular scanner. That universality is exactly what you want for something you are going to print and cannot update after the fact.

How does the SMSTO payload work?

Under the pattern of black and white squares is a short piece of text, and getting that text right is most of the work. For SMS the format is SMSTO:number:message. The number comes first after the SMSTO: prefix, then a colon, then the message body. A complete example looks like SMSTO:+15551234567:JOIN to enter the draw. If you leave the message blank, the payload is just SMSTO:+15551234567, which opens an empty text to that number.

This format comes from ZXing, the open-source barcode library that became the de facto reference for how phones interpret QR payloads. There are two older alternatives you will still see mentioned, the SMS: prefix and the sms: URI, but SMSTO is the one with the widest and most consistent support across scanners, which is why the tool uses it and does not offer the others as a trap for the unwary. Choosing the most compatible format is not a small detail when the code is going to print; a payload that works in the developer's test phone but fails on a customer's three-year-old Android is a wasted campaign.

One consequence of the number:message structure is worth understanding. Only the first two colons are structural. If your message itself contains a colon, for example "Reminder: your appointment is tomorrow", the scanner still parses the number correctly and treats the rest as the body, colon included. The tool leaves colons in your message alone for exactly this reason, so you do not have to think about escaping them.

Should I include the country code?

Almost always, yes. A phone number without a country code only works for people whose phone is already on the same national network, and you rarely control who picks up a flyer or scans a code in a shop window. Writing the number in full international form with a leading plus, like +15551234567 or +442071234567, means the code works whether it is scanned by a local or by a visitor from another country. The tool normalises the number for the payload, so you can type it with spaces, dashes, and parentheses for readability and it will still produce a clean dialable string.

The one time you can skip the country code is a purely local audience where you are certain everyone is on the domestic network, such as an internal notice inside one country. Even then, adding the country code costs nothing and removes a failure mode, so my default advice is to always include it.

Here is how the pieces of the payload map to what the person scanning sees.

Field Required What it does When to use it
Number Yes The number the text is sent to Always, it is the whole point
Country code Recommended Makes the number work internationally Any public or mixed audience
Message No Pre-fills the message body To capture a keyword, request, or template
Empty message No Opens a blank text to the number When you want the sender to write freely

How do I create an SMS QR code with the tool?

The flow is short. Type the destination number into the phone field, including the country code, and that alone is enough to produce a working code. Add a message body if you want the text pre-filled, which is where most of the value is for a campaign, because a consistent keyword makes the incoming texts easy to sort. The preview updates the moment the number is valid, so you see the code form as you type.

From there you have the same rendering controls as the rest of the QR family. Error correction defaults to level M, which is the right balance for most printed codes. Raise it to Q or H if the code will be small, printed on a curved surface, or partly covered by a logo, because a higher level lets a scanner recover more of a damaged code. You can set the foreground and background colours to match a design, and the tool keeps the contrast strong enough to stay scannable. When you are happy, export an SVG for print and signage, which stays sharp at any size, or a PNG at a chosen pixel size for a screen or a slide.

For related codes in the same campaign, the QR cluster on the site covers the other payloads: a plain QR code generator for URLs and text, a WiFi QR code generator for guest network access, a vCard QR code generator for saving a contact, and an email QR code generator for pre-filled mail. They all use the same underlying encoder, so a code from any of them behaves the same way when scanned.

What error correction level should I choose?

QR codes are built with Reed-Solomon error correction, which is what lets a scanner read a code that is scuffed, partly covered, or printed imperfectly. The specification, ISO/IEC 18004, defines four levels, and the tradeoff is simple: a higher level recovers more damage but makes the code denser, because the recovery data takes up space that would otherwise hold your payload.

Level Recovers about Good for
L 7% Clean digital display, large print, short payload
M 15% The sensible default for most printed codes
Q 25% Small print, busy backgrounds, light wear
H 30% Logos over the code, harsh environments, tiny sizes

For an SMS code the payload is short, a number and a brief message, so even level H rarely pushes the code to an unwieldy size. My habit is to leave it on M for a poster or a screen, and step up to Q or H only when the code is small or will take physical abuse, like a sticker on a product that gets handled.

Static versus dynamic SMS QR codes: what is the difference?

This is the distinction that separates a free tool from most of the ones that ask you to sign up. The code this tool produces is static, meaning the SMSTO payload is encoded directly into the pattern. The number and message live in the image itself, with no intermediary, so the code works forever, has no running cost, and cannot be switched off by anyone. Nobody, including me, can see when or how often it is scanned, because there is nothing in the middle to count.

A dynamic code, by contrast, encodes a short link that redirects through a provider's server, which then hands off to the SMS action. That indirection buys you two things, editability and scan analytics, at the cost of a dependency: the code stops working if the service ends or the subscription lapses, and the provider sits in the middle of every scan. For a phone number that is not going to change, a static code is the better deal, and it is what you get here. If you genuinely need to change the destination number after printing, a dynamic code from a paid service is the honest answer, and I would rather tell you that than pretend a static tool does something it does not.

Where does an SMS QR code fit in a real workflow?

The strongest use is a printed call to action where a text is the natural response. A "text JOIN to 555..." promotion works far better when the number and keyword are pre-filled, because the drop-off between "I am interested" and "I sent the text" is where campaigns leak. A restaurant can put a code on the table for "text FEEDBACK to leave a review". An event can use one for "text to confirm your seat". A field service business can put one on a van or a leaflet for "text for a callback", so a busy person captures the lead in five seconds instead of saving a number for later and forgetting.

The pre-filled keyword is the part people underuse. If every scan produces a text with the same recognisable word, your incoming messages sort themselves, and you can wire the keyword into an autoresponder or a simple routing rule. That turns a printed code into the front end of a tidy pipeline rather than a pile of unlabelled texts.

If you are assembling a set of these for a launch, it is worth reading the wider picture in the developer productivity tools roundup, which covers how the small utilities fit together, and the web developer toolkit guide for the surrounding pieces you tend to need at the same time.

What are the limits worth knowing about?

A few honest constraints. First, message length: the SMS QR code only pre-fills the body, it does not send anything, and it does not change the carrier's own message length rules. A very long pre-filled message will produce a denser code and may be split into multiple parts by the carrier once sent, with the usual per-message charges applying to whoever sends it. Keep the body short and purposeful.

Second, the sender always has the final say. The code opens a pre-filled message; it never sends on its own. That is a privacy feature, not a bug, and you should design your call to action assuming the person reads the message before pressing send.

Third, scanning support. Current iOS and Android cameras handle SMSTO natively, but a small number of older Android phones need a dedicated QR scanner app, and a very old device may not offer the SMS action at all. For a mixed audience, printing the number in readable text next to the code is a cheap fallback that costs you nothing.

Finally, privacy of the number itself. Anyone who scans a printed code can read and message the number, which is the point for a public contact code but a reason to think about placement. If the number is personal, consider a dedicated line for public codes. The encoding side is private, since it happens entirely in your browser, and you can read more about how that client-side model protects your data in the data privacy online tools guide.

Frequently asked questions

What is an SMS QR code? An SMS QR code is a QR code that stores an SMSTO payload containing a phone number and, optionally, a message. When a phone camera scans it, the device opens the texting app with a new message already addressed and pre-filled, so nobody has to type the number.

How do I create a QR code for a text message? Enter the destination phone number, then add the message body you want pre-filled if you need one. The tool builds the SMSTO payload and encodes it as a scannable QR code you can download as SVG or PNG and print.

What happens when someone scans the SMS QR code? On iPhone and most Android phones, opening the camera and pointing it at the code shows a prompt to open the messaging app. Tapping it starts a new text with the recipient number and any message body already filled from the code, ready for the sender to review and send.

Can I include the message text in the QR code? Yes. The message body is an optional field that pre-fills the text. It is stored as plain text inside the SMSTO payload, so spaces and punctuation are preserved and the sender sees the message ready to send when the code is scanned.

Which SMS QR format does this tool use? It uses the SMSTO:number:message format, which ZXing defined and which the widest range of scanner apps support. It is more broadly compatible than the older SMS: format or the sms: URI, so the same code works across current iOS and Android devices.

Do I need to include the country code? Include the country code with a leading + whenever the code might be scanned from another country, because a bare local number only works for people on the same national network. For a purely local audience a national-format number is fine.

Does the SMS QR code expire or track scans? No. It is a static QR code: the SMSTO link is baked into the image, so there is no short URL to expire and no dashboard counting scans. Generators that require a signup often produce dynamic codes that route through their servers; this one does not.

Is this SMS QR code generator free for commercial use? Yes. The QR standard is open and royalty-free, and codes produced here carry no watermark and no usage cap. Use them on packaging, flyers, posters, and event signage without restriction. Standard carrier message rates still apply to whoever sends the text.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!