Most teams shopping for a CRM with texting are really making two decisions. The first is which CRM to buy. The second is who actually sends the texts: the CRM itself, through whatever carrier deal it has behind the scenes, or a messaging provider you plug in. Close, HubSpot, Microsoft Dynamics and most others offer some version of the first option. The second is what we build at Ready: a messaging API with registration, opt-outs and scrubbing built in, which you connect to whatever system holds your contacts.

Neither answer is right for everyone. A five-person sales team texting leads one at a time is usually well served by the CRM's own SMS. A software platform texting on behalf of hundreds of its own customers, or a team that expects to switch CRMs in two years, should usually integrate a provider. This post covers the three things that decide it: cost, number ownership and compliance control.

What "built-in SMS" usually means

Built-in texting varies a lot from CRM to CRM. Here are the general patterns. Check current plan pages, because packaging changes often.

  • Close treats texting as a core sales channel. Reps text from the lead record, and numbers are provisioned inside Close. It is built for one-to-one sales conversations, not large marketing sends.
  • HubSpot offers native SMS tied to specific plan tiers, plus a large marketplace of third-party texting apps. Many HubSpot teams end up on an integration anyway. The HubSpot SMS options breakdown on our blog walks through the paths.
  • Microsoft Dynamics 365 generally has you connect an SMS provider to its marketing and customer service modules instead of selling you carrier service directly. In practice it already sits closer to the "integrated" model.
  • Other CRMs (Pipedrive, Zoho, Salesforce and the vertical CRMs) range from no texting at all, to a marketplace app, to a resold carrier service under their brand.

In every case, the CRM is reselling carrier infrastructure from a messaging provider. That isn't a criticism, just how it works. It means the questions below have answers, and the answers are often buried in a help-center article. For a wider survey of CRMs with texting, see best CRM for B2B and small business with built-in texting.

Built-in vs integrated at a glance

QuestionBuilt-in CRM textingIntegrated provider (e.g. Ready via API)
Setup effortLow: toggle it on in the CRMMedium: connect via API, or a native connection for GoHighLevel or Close
Per-message pricingBundled into a plan, credits or a seat add-on; often opaquePer segment, published, carrier fee itemized
Who holds the numberUsually the CRM's provider accountYour provider account (or your customer's sub-account)
10DLC registrationHandled by the CRM, often with limited visibilityVisible per brand and campaign; on Ready, done in-app or via API
Opt-out scopeUsually within that CRM onlyEnforced at the sending layer, across every tool that sends
Quiet hours, DNC scrubVaries widely; often absentBuilt into the send path on Ready
Switching CRMs laterNumbers and registration may not come with youNumbers and registration stay put; you repoint the integration
Two-way inbox in the CRMNativeNative in GoHighLevel and Close; built by you (webhooks and API) elsewhere

The last row is the honest cost of integrating. Outside GoHighLevel and Close, where Ready connects natively and logs texts on the contact, getting replies to show up on a HubSpot record is something you build or wire through a connector.

Cost: what you can actually calculate

The biggest practical difference is legibility. Built-in texting is often priced in credits, message bundles or per-seat add-ons, which makes it hard to answer "what does one more text cost me?" An integrated provider usually publishes a per-segment rate, so you can model it.

A worked example on Ready Standard

Assumptions: 2,000 opted-in contacts, two texts a month each, every text a single segment of 160 GSM-7 characters or fewer, and an assumed 25% reply rate with single-segment replies. Replies are billed like sent texts.

  • Outbound: 2,000 × 2 = 4,000 segments
  • Inbound replies: 4,000 × 0.25 = 1,000 segments
  • Total: 5,000 segments × ($0.0075 + $0.0045)
  • That's $38 in per-segment charges, plus 5,000 × $0.0045 in carrier fee

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.

If you turned on scrubbing for those 5,000 segments, add $15.

Add registration: the first charge at submit is $25, then $25/mo for registration and $2/mo per number. Most approvals take 2 to 7 days.

Where segments quietly double your bill

Segment math hits every provider the same way, built-in or not. A 175-character promo with one emoji drops to the unicode limit of 67 characters per multipart segment, so it bills as 3 segments instead of 2. On a 2,000-contact send that's 6,000 segments instead of 4,000. Ready swaps curly quotes, long dashes and ellipses for plain characters before sending, so those don't push you into unicode. Emoji still do.

Being straight about per-segment price

If your only metric is the lowest possible price per segment, a raw CPaaS API wins. Twilio's list rate is around $0.0083 per segment, and GoHighLevel's LeadConnector is around $0.0083 per message, roughly $0.0128 all-in. Both sit below our Standard rate. What you're paying for with Ready is self-serve 10DLC registration, opt-out propagation, quiet-hours holds, scrubbing, number validation and sub-accounts, already built. With a raw API, your team builds those. Our best SMS API for developers post goes through that tradeoff in detail.

Number ownership: the question nobody asks until they switch

This is where built-in texting causes the most damage, and it's usually discovered late.

When a CRM provisions your number, the number typically lives on the CRM's account with its upstream provider. Your 10DLC brand and campaign registration may also live there. If you leave that CRM, ask these three questions before signing:

  1. Can I port the number out? Some CRMs support porting out, some make it painful, and some numbers can't move at all.
  2. Does my 10DLC registration come with me? Even if the number moves, the registration often has to be redone at the new provider, and that means another wait for approval.
  3. What happens to my opt-out list? If your STOP list stays in the old CRM, your first send from the new system could text people who already opted out.

With an integrated provider, the number, the registration and the opt-out list live at the sending layer. Your CRM is just the system that triggers the send. Swap Pipedrive for HubSpot and you repoint the integration. The numbers your contacts recognize don't change.

For platforms texting on behalf of customers

If you run a CRM or vertical SaaS product and want to offer texting to your own customers, this matters even more. On Ready, each of your customers gets a sub-account with its own numbers and its own 10DLC registration, created through POST /v1/sub-accounts and checked with GET /v1/registration. One customer's bad list doesn't drag down another's sender reputation. Our post on 10DLC for SaaS platforms covers who registers the brand in that setup.

Compliance control: who enforces the rules

TCPA exposure runs roughly $500 to $1,500 per text, and the sender carries it. Your CRM vendor doesn't. So the useful question isn't whether the CRM is "compliant." It's which safeguards run automatically and which ones you have to remember.

What Ready enforces at the send layer:

  • STOP handling across everything. 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 not charged. You can pull the list into your CRM with GET /v1/opt-outs. That list holds only this account's opted-out contacts, so check GET /v1/opt-outs/:phone before another tool texts a number.
  • Quiet hours. A text sent outside permitted hours in the recipient's area is held and sent later. It's charged only when it actually goes out. 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.
  • Litigator and DNC scrubbing. Known TCPA-litigator and DNC-complainer numbers can be screened out before send (the $0.003-per-segment surcharge when switched on; the standalone scrub is $0.005 per contact).
  • Attestation trail. Every bulk send and every API send that sets consent_attested records the sender's opt-in attestation: who sent, to how many, when. It isn't a per-contact consent record. Your CRM or signup form still has to store each contact's opt-in time, wording and source page.

The opt-out point is the one that most often separates integrated setups from built-in ones. When texting is built into one CRM, a STOP is usually only known to that CRM. If marketing also texts from a second tool, the two lists drift apart. When every tool sends through one provider, there is one opt-out list.

None of this makes anyone lawsuit-proof. Consent collection and list hygiene remain your responsibility. What it does is remove the failure modes that come from someone forgetting a step.

What integrating actually looks like

A single send from your CRM's backend, a workflow tool or a script is one request:

POST https://api.tryready.com/v1/messages
X-API-Key: <your key>
Idempotency-Key: 3f6c1b2e-8d4a-4c1e-9b7a-2f5e8c9d0a11

{"to": "+12125550199", "body": "Hi Dana, your demo is confirmed for Thursday at 2 PM. Reply STOP to opt out.", "consent_attested": true}

The idempotency key means a retried request never double-sends. For lists, POST /v1/messages/bulk takes up to 100 recipients per call, so split bigger lists into batches. Full reference: docs.tryready.com/api/messages.

The reply path is the part that takes real work. For Pipedrive, Salesforce, Airtable and similar tools, our CRM SMS integrations guide covers the connector and webhook options. For GoHighLevel there's nothing to build: Ready installs via OAuth as an LC Phone alternative, with two-way sync mapped per GHL location.

How to decide

Stay with built-in CRM texting if:

  • Reps send one-to-one texts at modest volume
  • You're confident you'll keep this CRM for years
  • No other tool needs to text the same contacts
  • Nobody on the team wants to touch an API

Integrate a provider if:

  • More than one system texts the same people, and you need one opt-out list
  • You want the number and registration to survive a CRM switch
  • You need quiet hours and DNC scrubbing enforced, not just remembered
  • You're a platform giving texting to your own customers, each needing an isolated sub-account
  • You want a per-segment bill you can forecast

The practical takeaway

Built-in texting trades control for convenience, and for a small sales team that's often a fair trade. The trouble starts when you need to leave, when a second tool starts texting, or when compliance has to be enforced instead of trusted. Before you pick, ask your CRM vendor three things: who holds the number, where the 10DLC registration lives, and what happens to opt-outs if you go.

If you want to see the integrated side, you can sign up. The first 20 texts are free one-to-one sends; use them to test before you register. To send, you add a card and get a number, which is $2 a month with the first month charged when you get it. Pricing details are at tryready.com/pricing.