Zoho CRM is good at storing who your leads are, what stage they're in and what happened last. It is not, by itself, a texting tool. If your team wants a text to go out when a deal moves stages, or wants reps replying from a thread instead of a personal phone, you have to bolt something on. The real choice is which bolt-on fits your volume, your compliance needs and how much admin work you're willing to own.

This guide covers the main routes: Marketplace SMS extensions, SMS inside Zoho Marketing Automation, templates, how the credit and per-segment costs work, the 10DLC registration every US sender needs, and wiring a Ready API connection into Zoho workflows for two-way texting. We make Ready, so we'll be specific about where it fits and where it doesn't.

The three ways teams add SMS to Zoho CRM

1. A Marketplace SMS extension

Zoho Marketplace lists SMS extensions from third-party providers. You install one, connect your account with that provider, and usually get a "Send SMS" button on records plus a workflow action. This is the fastest route for a sales team that mostly needs one-to-one texts from the record view.

Tradeoffs to check before installing:

  • Who handles 10DLC registration. Some extensions assume you already registered with the provider. Others never mention it, which is how teams end up with filtered messages.
  • Where replies land. Some extensions write inbound texts back to the record's notes or a custom module. Others leave replies in the provider's own dashboard.
  • Billing. You pay the provider, not Zoho. Prices vary a lot, so read the provider's rate card and not the extension listing.

2. Zoho Marketing Automation SMS

Zoho Marketing Automation, which syncs with CRM, supports SMS campaigns alongside email. It's built for one-to-many sends: list-based campaigns, journeys and scheduled promos. Depending on your edition, SMS is sold as credits or routed through a connected gateway. Credit pricing changes and varies by country, so check Zoho's current pricing page and not a number from a blog post, including this one.

It works well if marketing already lives in Zoho and your texts are mostly campaigns. It is weaker for sales conversations, where a rep needs to see and answer a reply within minutes.

3. A direct API connection

Zoho CRM can call any REST API from a workflow rule using a Deluge function or a webhook. That means you can send through a messaging API like Ready, Twilio or similar, with full control over when and what gets sent. It's more setup, but it's the route with the most flexibility. We walk through it below.

Credits vs. per-segment pricing: what you actually pay for

Whatever route you pick, US carriers bill by segment, not by message. Credit systems usually map one credit to one segment, so the math is the same either way:

  • A plain-text (GSM-7) SMS fits 160 characters in one segment. Longer messages split into 153-character segments.
  • One emoji or other non-GSM character drops the limit to 70 characters, or 67 per segment once the message splits.

A 140-character follow-up with no emoji is 1 segment. Add a single emoji and it's 3 segments (140 ÷ 67, rounded up). That's 3x the cost for one smiley face.

Worked example: a stage-change follow-up

Assumptions: 2,000 opted-in contacts a month get a follow-up when their deal hits "Proposal Sent." The message is 200 characters with no emoji, so 2 segments each.

  • Segments: 2,000 × 2 = 4,000
  • On Ready Standard: 4,000 × $0.0075 = $30, plus 4,000 × $0.0045 = $18 in carrier fees
  • Replies are billed like sent texts: if 30% reply with one segment each, that's 600 more segments, 600 × $0.012 = $7.20
  • Total: $55.20 a month

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.

Some options cost less per segment, and you should know that. Twilio runs around $0.0083 per segment, and GoHighLevel/LeadConnector around $0.0083 per message (roughly $0.0128 all-in), both below our Standard rate. If all you want is the lowest raw rate and you have a developer to build registration, opt-out handling and quiet hours yourself, a raw CPaaS is a reasonable pick. What you get with Ready is that work already done: self-serve registration, STOP handling, quiet-hours holds and scrubbing in one place. You can see the rate card at tryready.com/pricing.

10DLC: the step nobody can skip

Every business texting US numbers from a standard 10-digit number needs A2P 10DLC registration: a brand, meaning your company, and a campaign, meaning your use case and sample messages. Unregistered traffic gets filtered by carriers, and no Zoho extension changes that. If you're new to it, our 10DLC explainer covers the basics.

On Ready, registration happens in-app:

  • No setup fee. You pay $25 at submit, which covers the first month.
  • After that it's monthly: $25/mo for registration + $2 per number.
  • Most approvals take 2 to 7 days.

Write sample messages that match what your Zoho workflows will actually send. "Hi {First Name}, your proposal from Acme is ready to review. Reply STOP to opt out" passes. Vague or promotional samples are the most common reason a campaign gets bounced. If yours was rejected, this rewrite guide walks through what reviewers flag.

Throughput matters if you plan big sends from Zoho. A fresh standard campaign with no vetting typically gets about 1 to 4 segments per second, and T-Mobile caps daily volume by brand trust score, starting around 2,000 messages a day at the lowest tier. A 4,000-segment send at an assumed 2 segments per second takes about 33 minutes. Plan your workflows around that rather than expecting every text to go out at once.

Templates that work in Zoho workflows

Keep templates short, put the business name in the first few words, and use Zoho merge fields so every text is personal. A few starting points:

  1. New lead (sent within minutes): "Hi ${Leads.First Name}, it's Dana at Acme. Got your request about ${Leads.Product Interest}. Is now a good time for a quick call? Reply STOP to opt out."
  2. Demo reminder: "Reminder: your Acme demo is tomorrow at ${Events.Start Time}. Reply C to confirm or R to reschedule."
  3. Proposal follow-up: "Hi ${Deals.Contact Name}, just checking you got the proposal. Any questions I can answer by text?"
  4. Closed-won handoff: "Welcome aboard! Your onboarding lead is ${Deals.Owner}. They'll text you from this number to schedule kickoff."

Each of these stays under 160 characters for typical names, so it's one segment. For more ready-made copy, see our appointment reminder and request templates.

Only text contacts who opted in or who contacted you first. Cold outreach belongs on the phone or in the mail, not in an SMS workflow.

Wiring Ready into Zoho with a Deluge function

There's no native Ready app in Zoho Marketplace, so the connection is an API call from a workflow. Setup:

  1. In Ready, create an API key and finish registration (or use your first 20 free one-to-one texts to test before you register; a card on file is required to send).
  2. In Zoho CRM, go to Setup → Automation → Workflow Rules and create a rule, for example "Deal Stage is Proposal Sent."
  3. Add a Function action and paste a Deluge function like this:
headers = Map();
headers.put("X-API-Key", "YOUR_READY_API_KEY");
headers.put("Idempotency-Key", "zoho-deal-" + dealId + "-proposal-sent");
headers.put("Content-Type", "application/json");

payload = Map();
payload.put("to", mobile);
payload.put("body", "Hi " + firstName + ", your proposal from Acme is ready. Reply STOP to opt out.");
payload.put("consent_attested", true);

response = invokeurl
[
  url: "https://api.tryready.com/v1/messages"
  type: POST
  parameters: payload.toString()
  headers: headers
  detailed: true
];
if(response.get("responseCode") != 200 && response.get("responseCode") != 202)
{
  // add a task on the deal naming the error
}
info response;

Map mobile, firstName and dealId as function arguments from the Deal or Contact record. Build the Idempotency-Key from the record and the event (here the deal id plus the stage), so a retried function reuses the same key and the contact gets one text. A fresh UUID on each run would not help, because a retry would get a new key and send again. Never reuse one key for different contacts: Ready answers a reused key with the first request's result and sends nothing. consent_attested: true is your promise that the recipient agreed to texts, so only set it on contacts with recorded opt-in. Ready logs the attestation (who sent, to how many, when) as an audit trail, but the opt-in record itself, meaning the time, wording and form, should live in Zoho.

For sending to a list, POST /v1/messages/bulk takes up to 100 numbers per call, so batch larger Zoho views. Full request details are in the messages API docs and bulk docs. For a broader walkthrough of error handling and retries, see our SMS API integration guide.

What Ready handles on its side

  • Opt-outs: STOP replies are honored automatically, and later sends to that number are refused before they go out, with no charge.
  • Quiet hours: campaigns, drip campaigns and automations wait up to 24 hours for the recipient's window, and are charged only when they actually send. A text sent from this function is an API text: it is held only if the window opens within 6 hours. A deal that moves at 11 PM in the contact's time zone opens its window at 8 AM, so Ready answers 409 QUIET_HOURS_BLOCK, queues nothing and charges nothing. Have your function check for a 409 and resend after the window opens with a new Idempotency-Key (for example, add the retry time to the key); a resend with the same key gets the same 409 back.
  • Optional scrubbing: switch on TCPA/DNC scrubbing ($0.003 per segment) to screen known litigator and DNC numbers. TCPA claims run $500 to $1,500 per text, so the scrub is cheap risk reduction. It is not immunity, and compliance stays the sender's responsibility.

Two-way replies

Replies land in Ready's Inbox, where reps can answer. Getting them back onto the Zoho record means catching Ready's webhook and writing to Zoho's API, for example as a note or a custom module entry. That's a piece you build. Check the webhooks docs for the inbound_reply event and its setup, and don't assume threading happens on its own.

Which route should you pick?

NeedBest fit
Reps send occasional one-off texts from recordsMarketplace extension
Marketing campaigns and journeys already in ZohoZoho Marketing Automation SMS
Lowest raw per-segment rate, developer on staffRaw CPaaS (e.g. Twilio)
Workflow-triggered texts plus registration, opt-outs and quiet hours handledAPI connection to Ready

The practical takeaway

Start by deciding whether your texts are mostly conversations or mostly campaigns. Then count segments, not messages, and register for 10DLC before you scale any workflow past a test. If the API route fits, set up one workflow rule, such as the proposal follow-up, send your free test texts to your own phone, and expand from there. You can create an account here when you're ready to try it.