If your marketing already runs on an email platform, adding texting there looks easy: switch on the SMS channel, add a phone field to the signup form and send. Each of these four tools has a working SMS product. They differ in how they record consent, which sender numbers they give you, how they handle STOP and quiet hours, and how much of the 10DLC process they handle for you.
This post compares those details. It also covers where a dedicated SMS provider like Ready fits, and where it doesn't. We make Ready. Sometimes the answer is to stay inside your email tool, and we'll say when.
Why consent for texts is stricter than consent for email
Email consent law is forgiving by comparison. Text consent sits under the TCPA, where exposure is commonly cited at $500 to $1,500 per text. Carriers enforce their own rules on top of that law. Two separate things have to be true before a marketing text goes out:
- The contact agreed to texts specifically. Opting in to email does not cover SMS. The SMS checkbox or keyword needs its own disclosure: brand name, message type, frequency, "Msg & data rates may apply", and how to reply STOP and HELP.
- The sending number is registered for what you're sending. On 10DLC that means a registered brand and a campaign whose use case and sample messages match your real traffic. Carriers filter unregistered traffic.
Email platforms usually handle the first point well, because recording consent is close to what they already do. The second point varies by tool. If you're writing the disclosure now, our 10DLC opt-in examples cover wording that gets approved.
How each platform handles SMS consent and sending
The table reflects how these products are generally set up. Plans, regions and sender options change often, so check your account's current documentation before you rely on any row.
| HubSpot | Klaviyo | Mailchimp | Iterable | |
|---|---|---|---|---|
| Where SMS consent lives | SMS subscription types on the contact record | SMS consent status on the profile, with source and timestamp | SMS audience status, separate from email | Subscription and message-type preferences per user |
| Double opt-in for SMS | Possible through workflows | Built-in setting | Confirmation reply flow | Configured in your journey logic |
| Sender types | Provisioned by HubSpot; varies by region | Toll-free, short code or 10DLC, by country and setup | A provisioned number after an application review | Managed numbers or your own provider, by setup |
| Plan gating | SMS sits on higher Marketing Hub tiers | SMS add-on to email plans | SMS add-on, limited countries | Contract-dependent |
| Strongest at | Consent tied to CRM lifecycle | Ecommerce flows and consent capture | Simple campaigns for small lists | Event-driven cross-channel journeys |
| Common gap | Conversational two-way texting | One-to-one replies at scale | Two-way texting and number choice | Setup effort; often needs a separate provider account |
HubSpot
HubSpot's main advantage is that SMS consent sits on the same contact record as lifecycle stage, deal and owner. That makes "text only opted-in customers in this pipeline stage" a simple filter. The limits are cost and control. SMS is gated to higher tiers, and you don't choose much about the sending number. HubSpot built it for marketing sends, so a sales rep who wants to text back and forth from a local number will often find it limiting.
Klaviyo
For ecommerce, Klaviyo handles SMS consent most thoroughly of the four. It records consent with source and timestamp, supports double opt-in, and enforces quiet hours in flows. If your SMS is mostly abandoned-cart, back-in-stock and promotional campaigns to a Shopify list, Klaviyo is usually enough, and moving off it adds complexity you may not need.
Mailchimp
Mailchimp's SMS is fine for a small team sending occasional campaigns to a list it already emails. The application review and the limited country list are the main hurdles. You have little control over which number you send from, and Mailchimp isn't designed for two-way conversations.
Iterable
Iterable is the most flexible of the four. It is also the most work to set up. Teams often connect their own messaging provider, which means they handle the 10DLC brand and campaign registration themselves. Iterable stores preferences well. Registration, sending numbers and deliverability are left to whoever owns that provider account.
The compliance gaps these tools leave
Across all four, consent capture is generally solid. The gaps show up after the opt-in:
- Opt-outs that only apply within one tool. If someone texts STOP to your Klaviyo number, that opt-out lives in Klaviyo. If sales texts the same person from another tool, the STOP has to reach that tool too, or you've texted someone who opted out.
- Registration done by someone else. On managed numbers, the platform registers on your behalf. That's convenient, but your use case may get described in generic terms that don't match what you actually send. A mismatch can get you throttled even after approval. Our post on matching the use case to what you send covers why.
- No litigator or DNC screening. A consented list can still contain numbers belonging to people who file TCPA suits regularly. Email platforms generally don't screen for those numbers.
- One-way marketing numbers. Customers reply to marketing texts with real questions. If replies go to a place nobody checks, you lose sales and annoy customers who expected an answer.
The most common carrier-side problem is weak consent at signup, such as a single checkbox with no confirmation text. Double opt-in and deliverability explains why the confirmation step pays off.
When a dedicated SMS provider fills the gap
You don't have to choose one tool over the other. A common split is to keep the email platform as the consent record and segmentation engine, and send through an SMS provider whose job is registration, numbers and delivery. Ready handles these parts of that split:
- 10DLC registration in-app. You register the brand and campaign yourself, so the use case and sample messages describe what you actually send. Most approvals take 2 to 7 days. There's no setup fee. You pay $25 at submit for the first month, then $25/mo for registration + $2/mo per number.
- STOP handling across campaigns. Inbound STOP or UNSUBSCRIBE is honored, and the opt-out applies across campaigns. Opted-out and numbers on your Ban list are refused before sending and aren't charged. You can read the list from
GET /v1/opt-outsand sync it back to your email platform. That list holds only this account's opted-out contacts, so checkGET /v1/opt-outs/:phonebefore another tool texts a number. - Quiet hours by recipient area code. A text sent during the recipient's quiet hours is held and goes out later. It's charged only when it sends. Campaigns, drip campaigns and automations wait up to 24 hours for the window; a one-to-one or API text is held only if the window opens within 6 hours, otherwise it is refused and must be resent; a one-to-one reply to someone who texted you in the last 24 hours goes out at any hour.
- TCPA litigator and DNC scrubbing. This is optional and $0.003 per segment when switched on for an account. The standalone scrub is $0.005 per contact.
- Two-way inbox and local presence. Replies land in an Inbox. Local presence sends from your number closest to the contact's area code.
One caveat. Ready records the sender's attestation on every bulk send and every API send that sets consent_attested: who sent, to how many, and when. It does not store each recipient's opt-in time, wording or page URL. Your email platform keeps that consent record, so keep capturing it there. (A contact who signs up on a Ready-hosted opt-in page is the exception: Ready stores that sign-up, with the time, IP address and exact wording, and support@tryready.com can send you a copy.)
Wiring it up
HubSpot workflows, Klaviyo flows and Iterable journeys can all call a webhook on plans that support it. The webhook sends to Ready's API:
POST https://api.tryready.com/v1/messages
X-API-Key: <key>
Idempotency-Key: <uuid>
{"to": "+12125550199", "body": "Your order #1042 has shipped.", "consent_attested": true} The Idempotency-Key stops a retried webhook from sending the same text twice. To send one message to many numbers, POST /v1/messages/bulk accepts up to 100 recipients per call. The SMS API integration guide and the messages docs cover the full setup.
What it costs: a worked example
Here's the cost math, with the assumptions stated. Assume 3,000 opted-in contacts and a 150-character plain-text message with no emoji. That's one GSM-7 segment, because a segment holds up to 160 characters.
- Ready Standard rate: 3,000 × $0.0075 = $23
- Carrier fee: 3,000 × $0.0045, itemized separately on the bill
- Replies are billed like sent texts. If 300 people reply with one segment each, add 300 × ($0.0075 + $0.0045).
Ready's all-in prices per segment include the carrier fee but not screening: Scrub lists and Number validation, the two switches in Settings under Compliance, each add $0.003 per segment when switched on, shown as screening on your bill, and both are off by default. Unless you turn the opt-out footer off, the first text to each contact, and one again from time to time, also gets "Reply STOP to opt out" and your business name if the message does not already have them, so a text close to the segment limit can bill one more segment.
Add one emoji to the same message and it becomes 3 segments, because an emoji drops the per-segment limit to 70 characters. That triples the per-text cost. Ready replaces curly quotes and long dashes with plain ones, so those characters won't change your segment count.
On price per segment, raw CPaaS APIs like Twilio (around $0.0083 per segment) charge less. The case for Ready is what's included: self-serve registration, opt-out handling, quiet hours, the inbox and local presence. If you have engineers who want to build those parts themselves, a raw API is a reasonable choice.
Which setup fits you
- An ecommerce team sending flows and promos. Stay in Klaviyo. Its consent handling is strong and the flows are where your revenue comes from.
- A B2B team on HubSpot whose reps need two-way texting. Keep consent in HubSpot and send conversational texts through a dedicated provider.
- Mailchimp users who have outgrown occasional campaigns. Move SMS to a provider that lets you choose your numbers and handles two-way texting.
- Iterable teams already managing their own provider. You're already handling 10DLC registration yourself. Pick the provider that makes registration and opt-out sync the least work.
The practical takeaway
Your email platform probably records consent well. Check three other things: who registered your sending number and how they described your use case, whether a STOP in one tool stops texts from every tool, and whether anyone reads the replies. If any of those is unclear, fix that before you write another campaign.
To test the split setup, you can sign up, add a card, and use your first 20 free one-to-one texts before you register. Then register your own brand and campaign with your real sample messages.