SMS links—URIs that begin with the sms: scheme—tell phones and tablets to open the default messaging app with a destination number ready in the “To” field and, when you add parameters correctly, a draft already sitting in the composer. They are the lightweight cousin of click-to-call tel: links: perfect for “Text us” buttons on mobile landing pages, appointment reminders that deep-link straight into a reply thread, QR codes on posters, and email signatures where some readers are on phones and want to bypass copying a number manually.
SynthQuery’s SMS Link Generator is a free, English-language utility that runs entirely in your browser. You pick a country calling code from a dropdown illustrated with regional flag emoji, enter the rest of the number using the same normalization rules as our WhatsApp builder, optionally type a pre-filled message body, and immediately see two fully encoded sms: variants side by side. One follows the Android-friendly pattern that starts query parameters with a question mark before body=. The other follows the classic iOS-oriented pattern that joins body= with an ampersand immediately after the subscriber portion. When there is no body text, both collapse to the same short link, because there is nothing to separate.
You can copy either string independently, set which variant powers the HTML button snippet and the QR code, open a test link that hands off to the OS messaging UI, and export a compact anchor tag for pasting into static HTML or CMS blocks. Nothing is uploaded to SynthQuery for this workflow: the page only concatenates digits, applies encodeURIComponent to the draft text, draws a QR bitmap with the qrcode package after lazy loading, and updates the DOM. Carrier routing, segment counts, and whether a desktop browser can open Messages at all remain under the control of the user’s device and network—not this page.
What this tool does
The interface mirrors other SynthQuery link utilities so marketing and support teams can switch between SMS, WhatsApp, and QR workflows without relearning field names. The country selector lists common markets alphabetically, shows a Unicode regional indicator pair for quick visual scanning, and displays the numeric dial prefix in parentheses so you can confirm +44 versus +1 before typing the national portion. The national field accepts spaces, dashes, and parentheses; we strip everything down to digits and, when helpful, remove a single leading trunk zero that would otherwise duplicate what the country code already encodes.
Optional message bodies support emoji, line breaks, marketing copy, and merge placeholders you plan to replace upstream—up to the same generous character ceiling used on the WhatsApp page, with an explicit validation message if you exceed it. Because SMS transports bytes differently than WhatsApp once the message leaves the composer, we surface a reminder that long drafts may split into multiple segments on the carrier side even though the URI itself is valid. Outputs always show both sms: spellings whenever a body is present so engineers can ship the Android default while support staff copy the iOS string into knowledge-base articles that skew toward iPhone readers.
The HTML snippet uses a high-contrast inline-styled button with system fonts for maximum paste survival inside email clients and hosted CMS editors that strip external stylesheets. The QR preview encodes whichever variant you designate as primary—handy when print collateral targets a single platform family. Clipboard actions reuse the same toast confirmations as the WhatsApp generator, and image copy attempts use the async ClipboardItem path when the browser allows it, falling back to PNG download when not. Keyboard focus order walks through country, phone, message, style selector, test buttons, copy targets, and QR actions without traps.
Why Android and iOS links can differ
Query strings normally begin with ? on the web. Many Android builds expect sms:+15551234567?body=Hello for pre-filled SMS bodies. Historical iOS documentation and community testing often cite sms:+15551234567&body=Hello—an ampersand-led parameter directly after the subscriber—because the scheme parser treated the subscriber and parameters differently than a generic HTTPS URL. Modern releases sometimes accept both, but shipping both strings avoids surprises when QA only tests one OEM.
Privacy posture
Phone numbers and draft messages remain in your browsing session until you refresh or navigate away. QR PNGs and copied anchors are yours to host or email. Use a private window on shared PCs when building unpublished campaigns.
Technical details
RFC 5724 defines the sms: scheme at a high level: the path carries an optional subscriber (your number) and parsers may accept query parameters such as body=. Real-world implementations diverge: Android’s Telephony stack historically maps ?body= into the SMS intent extras, while iOS URL handling examples in Apple’s archives show sms:number&body=message without an intervening question mark before body. SynthQuery therefore emits both literals whenever message text exists so integrators can choose per audience.
We normalize the subscriber to a plus sign followed by international digits only, then percent-encode the UTF-8 body via encodeURIComponent so spaces become %20, ampersands become %26, and emoji become percent sequences. Extremely long bodies can exceed practical URI limits on some browsers even though the spec is silent—treat two thousand characters as a soft ceiling and test on physical hardware. The generator does not validate carrier routes, short-code availability, or whether the destination accepts SMS at all; those checks belong to operations and compliance teams.
QR codes embed whichever primary string you select; error correction defaults suit typical print sizes. The page never dials numbers itself—it only assigns window.location.href during tests—so telephony billing remains unchanged until the user presses send inside their messaging client.
Use cases
Marketing teams embed SMS CTAs beside WhatsApp and voice options so regional audiences can pick the channel their carrier plan favors. Retailers print QR codes on receipts that pre-fill “RETURNS ” plus a store code, accelerating customer support chats without forcing consumers through a login wall first. Healthcare and appointment-driven services pair reminder emails with sms: links that open a reschedule keyword already typed, reducing thumb work on small screens.
Event organizers place dual QR codes—one for iOS-heavy guest lists and one for Android-heavy volunteer teams—when analytics show platform skew, or they standardize on the Android variant when testing proves iOS accepts it in their geography. Field-service businesses add “Text dispatch” buttons to lightweight PWA dashboards where technicians wear gloves and need fewer taps than a tel: call. Nonprofits running pledge drives combine short codes with web links but still publish sms: anchors for donors who prefer native messaging logs for their records.
Customer-support leaders link from knowledge bases directly into SMS when chat volume spikes and asynchronous texting beats waiting on hold. Product teams prototyping two-way SMS integrations use these links to exercise handset behavior before Twilio or carrier APIs enter the picture—knowing that the generator only creates the URI, not the server-side webhook. Whenever you also run WhatsApp Business entry points, generate parallel wa.me URLs from the WhatsApp Link Generator and keep messaging policies aligned across channels.
Mailto Link Generator and PayPal Me Link patterns
Pair desktop mailto: anchors that include subject= and body= query keys next to the sms: URLs you export here so every visitor sees a channel that matches their device. PayPal Me Link URLs are created on PayPal’s PayPal.Me setup flow; drop the resulting https://paypal.me/… address into an SMS body from this page or encode it with the QR Code Generator for table tents. The Email Signature Generator bundles tel:, mailto:, and messaging CTAs in polished HTML, while the Payment gateway comparison page helps finance teams interpret PayPal fees beside Stripe and Square when SMS campaigns push recipients toward checkout.
How to use this tool effectively
Follow this sequence whenever you are wiring a new “Text us” call to action, refreshing QR artwork, or documenting support paths for mixed Android and iOS user bases.
Step 1: Choose country and enter the national number
Open the country / region dropdown, pick the jurisdiction that matches how customers dial your hotline, then type the subscriber digits without repeating the country code. Watch the international preview update; if digits disappear, confirm you did not paste a leading + that conflicts with the dropdown.
Step 2: Add an optional pre-filled body
Leave the textarea empty for a blank composer—useful when you only want to populate the recipient—or paste starter text such as “RSVP YES” or an order ID token your agents recognize. Keep an eye on the character counter; extremely long marketing paragraphs may be better handled with a short CTA plus a tracked HTTPS link.
Step 3: Pick the primary format and test
Select Android-style or iOS-style for the QR code, HTML snippet, and Test button. Tap Test on a phone with a default SMS app configured. If nothing launches, verify you are not blocking custom protocols in enterprise browser policies.
Step 4: Copy or download assets
Copy the Android and iOS URLs independently for documentation, copy the HTML into your template, and copy or download the QR PNG for print. When you need custom module shapes or batch ZIP exports, open the full QR Code Generator linked below.
Compare PayPal, Stripe, Square, and other processors when SMS campaigns should continue into wallet or card checkout flows.
Frequently asked questions
An SMS link is a URI using the sms: scheme. When a user activates it on a capable device, the operating system opens the default text-messaging application with the destination address filled in and, if you supplied parameters, a draft message ready to edit or send. It is not the same as an SMS sent through a web API—you still rely on the user to press send.
Android and iOS have historically parsed optional body text differently. Many Android builds expect the first query parameter to begin with ?body=. Classic iOS examples often show &body= attached immediately after the subscriber without a question mark beforehand. SynthQuery prints both so you can match platform documentation during QA. When there is no body text, both strings are identical.
Sometimes. macOS may hand sms: links to Messages if the user is signed in; Windows might open Phone Link or another companion app; Linux desktops often have no handler and will appear to do nothing. Always provide a visible phone number as fallback text and test in the environments your audience actually uses.
The generator allows up to 2,048 characters of raw text before encoding, mirroring other SynthQuery messaging utilities. SMS itself is limited to 160 GSM-7 characters per segment (or shorter when Unicode characters force UCS-2 encoding), and carriers concatenate segments automatically. A very long URI might also hit browser limits, so treat huge drafts as experimental and verify on target phones.
No. The tool applies encodeURIComponent to the body parameter. You will see percent sequences for spaces, punctuation, and emoji in the final link—that is correct. If you manually edit the string afterward, re-encode any new special characters you insert.
If your carrier or vendor publishes a dialable short code, you can try placing it after sms:. Behavior varies widely: some regions require different routing for short codes versus long codes, and not every SMS app accepts them from hyperlinks. Validate with carrier documentation before launching a campaign.
No. All string assembly, validation, clipboard helpers, and QR rendering happen locally in JavaScript. Network activity is limited to loading the page assets themselves, the same as any static marketing page.
mailto: opens email clients with optional subject and body query pairs; WhatsApp uses HTTPS wa.me links that Meta intercepts. sms: targets the native SMS/MMS composer. Pick the channel your audience monitors. SynthQuery hosts dedicated WhatsApp and QR utilities, and MDN documents mailto syntax for email fallbacks.
The sms: scheme does not execute HTTP requests, so UTM query pairs on sms: itself are not meaningful. Track engagement by wrapping a short HTTPS redirect URL inside the message body, using unique phone numbers per campaign, or logging sends from your SMS API provider once users actually transmit a message.
No. This page only builds hyperlinks. Delivery, throughput, consent, and compliance are governed by carriers, regulations such as TCPA or GDPR, and whichever messaging platform you integrate after the user initiates a text. Consult qualified counsel for jurisdiction-specific rules.
SMS Link Generator - Free Online Text Message Link Maker
LINK-003 · sms: URLs, optional pre-filled body, Android ? vs iOS &, HTML snippet, QR — 100% client-side.
Free tools · Link & Communication GeneratorsAbout & FAQ
0 / 1,500 chars
Build your link
Enter a phone number.
0 / 2048 characters — URL-encoded in the link. SMS segments may split long text on the device; test on real phones.
With a pre-filled body, many Android builds expect sms:+1…?body= while classic iOS patterns use sms:+1…&body=. Both full links are shown on the right; pick which one powers the QR, HTML, and “Test” button.
International digits preview: —
Preview & export
Live preview
“Test” assigns window.location.href so your default SMS app opens on phones; on desktop you may see a prompt or no handler.
Browse more utilities on /free-tools or the full tools directory. Carrier and OS behavior for sms: links is defined by the device vendor, not SynthQuery.