Skip to content

SMS QR Code Generator for Text-to-Order and Text-to-Enquire

One scan opens a draft message: your number in the address line, your text in the body, waiting for the send key.

  • 100% free
  • No sign-up
  • Never expires
  • No watermark
Loading generator…

How to use the SMS QR Code generator

  1. 1

    Write the number in international form

    Include the country code and the plus, for example +919876543210. Spaces, dashes and brackets are stripped before the payload is written, and no country code is added for you.

  2. 2

    Draft the message they will send

    Type the text you want to arrive in your inbox, kept short and free of emoji if you want it to stay inside one billing segment. Whatever you write is what the customer sees, unedited.

  3. 3

    Test on an Android phone, then print the number as text too

    Scan the preview with an Android camera or a common scanner app and check a draft opens with both fields correct. Under the code, print the number and the keyword in words for anyone whose phone does not act on the payload.

Features

  • One scan opens a new message with the recipient and the text already filled in
  • SMSTO payload with the number reduced to digits and a leading plus automatically
  • The message body is carried exactly as typed, with nothing URL-encoded or rewritten
  • Carries a whole enquiry sentence, not just a number the way a phone code does
  • SVG and PNG export, generated locally with no sign-up and no watermark

The payload, character by character

An SMS QR code carries one short line and nothing else: SMSTO, a colon, the number, another colon, then the message. A camera app that knows the convention reads that line and opens a blank message addressed to the number with your text sitting in the body. The customer still presses send. The code cannot send anything by itself, and it cannot see whether they did, so there is no record of a scan and no record of a reply.

The number field is reduced to digits and plus signs before it is written, which is usually a help. A number typed as "+91 (80) 1234 5678" leaves the tool as a clean +918012345678, because brackets, spaces and dashes only confuse a dialling hand-off. The same stripping is also the trap: the tool has no idea which country you are in and will not add a country code. A bare ten-digit mobile number stays ten digits, so the message routes correctly only for a sender already on that numbering plan, and someone roaming or holding a foreign SIM gets a failed send.

The body is handled the opposite way. It goes in exactly as typed, with spaces, punctuation and capital letters intact. Nothing is percent-encoded, because SMSTO is not a URL and the colon is the only delimiter that matters inside the payload. That means a body containing a colon will not break anything downstream either, but it does mean there is no escaping layer to protect unusual text, so keep the wording simple and check it on a real handset.

You type in the number fieldThe code carriesWho it reaches
+919876543210+919876543210Anyone, anywhere, because the country code is present
0987 654-321009876543210Local senders only, since the format keeps it domestic
+44 20 7946 0958+442079460958Only if that number can receive SMS at all
Call the shop nownothingNobody. Letters are dropped, so the address line ends up empty
Diagram of the two SMS QR payload dialects, SMSTO and smsto, split into the fixed tag, the E.164 number and the message body
Both dialects hold the same two parts; only the tag differs.

160 characters, or 70

The length of your pre-written message decides what the customer is charged to send it, and the deciding factor is the alphabet rather than the word count. A single SMS segment carries 160 characters when the text fits GSM-7, the seven-bit alphabet the signalling systems were designed around: Latin letters, digits, spaces and ordinary punctuation. Switch the message to Unicode, because you added an emoji or wrote it in a non-Latin script, and a segment falls to 70 characters.

Longer text is split into segments and stitched back together by the receiving phone, so it still reads as one message while being billed as several. That is the practical reason to count the characters: a pleasant sentence with a smiley in it can triple the cost of a message that looks the same length to the sender.

  • Accented letters and a few symbols sit outside GSM-7 and can push a whole message into Unicode, so test the exact text on a handset rather than assuming.
  • If your audience reads and writes in Hindi, Tamil or another non-Latin script, accept the 70-character segment and keep the pre-filled line very short.
  • The recipient pays for the message on their own plan, which is another reason to keep it under one segment where you can.
Message you pre-fillAlphabet usedCharacters per segmentSegments for 150 characters
SEND MENU for today timingsGSM-71601
Send menu with an emoji at the frontUnicode703
कृपया मेनू भेजिए, written in HindiUnicode703 or more
150 characters of plain EnglishGSM-71601

Where a text-me code is the right choice

The honest limits come with those strengths. This tells the phone to prepare a message; it does not guarantee one arrives, and it gives you no list of people who scanned. If the whole point of the code is to measure interest, encode a link instead and count visits. If the point is to reach a number that receives texts, this is a very short path from camera to send key, and it works on a phone with no data plan at all.

  • A stall or a home kitchen with no working website, where "text MENU for timings" does the job a link would.
  • Enquiry lines that need routing: a pre-filled sentence such as a flat number or an order code lands on the right desk instead of a generic "hi".
  • Service vans, hoardings and pole posters, where a cold-handed customer would rather not type an address from memory.
  • Audiences on basic handsets, which covers a great many first-time smartphone users and older customers who still live in the messaging app.
  • Anything that should keep working when your server does not, because SMS is delivered by the mobile network rather than by a website you have to keep online.

Scanning behaviour, said straight

SMSTO as a printed payload is a de-facto convention rather than a formal standard, paired with the smsto URI scheme described in RFC 5724. Android camera software and most scanning libraries have acted on it for years, which is why a printed card can hand over a pre-filled text.

Apple built-in camera has never treated it the same way, so an iPhone pointed at your sign may show the raw string, or offer the number as a call, instead of opening Messages with your body attached. Some readers on either platform use the number and drop the text entirely. That is not a print-quality problem and a sharper code will not fix it.

So plan for a mixed audience in two cheap ways. Print the number and the keyword in plain words beneath the code, so anyone whose scan does nothing can type it in ten seconds. And if a meaningful share of your customers are on iPhones, consider putting a short link on the sign instead, made with the URL QR code type, that offers both a text and a call, and reserve the SMS code for the places where Android is the norm.

Frequently Asked Questions

Does the code send the message by itself?

No. It opens a draft with the recipient and the text in place, and the customer presses send. Nothing is recorded on your side either, so you will not know that someone scanned unless the message reaches your inbox.

Can I use it for WhatsApp instead of SMS?

Not with this payload. SMSTO hands the phone to the messaging app text path, and WhatsApp is not addressed by it. A WhatsApp click-to-chat address is an ordinary web link, so build that one with the URL QR code type and paste the link in full.

Why did the spaces disappear from my number?

The number is reduced to digits and plus signs before it is written into the payload, because spaces, dashes and brackets are not valid in the address line a phone will accept. Keep the country code and the leading plus in what you type, since nothing is added on your behalf.