Local presence texting means sending each text from whichever of your phone numbers is closest to the recipient's area code, so a contact in Denver sees a 720 number and a contact in Atlanta sees a 404. You use it when your contacts are spread across many area codes and you want each one to see a familiar local number, not a random out-of-state one.

The feature itself is simple. The questions worth answering are how the number gets chosen, what it costs per text, how it fits A2P 10DLC registration, and how "number rotation" done carelessly gets an entire pool of numbers filtered within days. This post covers all four, for platform teams building texting into a product and for sales teams who text leads from a CRM.

What local presence texting actually does

Without local presence, every text from an account goes out from one default number, or from whichever number you name in the request. With it, the platform reads the contact's number, looks at its area code, and picks the account's number closest to it.

A few things it does not do:

  • It does not create numbers. It chooses among numbers the account already owns. A contact in an area code where you have no number gets your geographically closest one.
  • It does not change who can be texted. Consent rules stay the same. Local presence is for leads who opted in or replied to you. It is not a way to make cold texting look friendlier. In our view, cold outreach belongs on phone and mail, and SMS goes to people who asked to hear from you.
  • It does not bypass registration. Every number still sits on the account's registered 10DLC campaign. More on that below.

Why teams turn it on

The reasoning is human, not technical. People decide in about a second whether a text from an unknown number is worth opening, and a local area code reads as "someone nearby," not "a call center." That is why sales teams, home-service companies and multi-region platforms ask for it. We don't publish a reply-rate lift as a Ready statistic, because the effect varies too much by list, industry and message. Test it on your own traffic. Split a campaign, send half with local presence and half from one number, and compare replies and opt-outs.

How number selection works on Ready

Local presence is on for every account. Which number it picks depends on where you send from.

From the API

With local presence on (it's on unless you switched it off), an API send that names no from goes out from the account's number closest to the recipient's area code. With it switched off, it goes out from your primary number:

curl https://api.tryready.com/v1/messages \
  -H "X-API-Key: YOUR_KEY" \
  -H "Idempotency-Key: 6f1c2a9e-4b7d-4e2a-9c3f-1d8e5b7a0c42" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+13035550142",
    "body": "Hi Dana, your estimate for Thursday is ready. Reply here with any questions.",
    "consent_attested": true
  }'

from_strategy also accepts even and random. With local presence on, they choose among your numbers in the contact's local area-code group; with it switched off, among all your numbers. The messages API docs explain how each one behaves. If you pass an explicit from, you are choosing the number yourself. The Idempotency-Key header matters here as much as anywhere: a retried request with the same key never sends twice, so a network timeout can't produce two texts from two different numbers.

From GoHighLevel

For accounts connected to GoHighLevel, two tags handle it:

  • #from:local# picks the number closest to the contact's area code.
  • #from:even# spreads new contacts across the numbers inside the local area-code group, and a contact keeps the number it already texts with.

That second detail is the important one. A contact who has been texting your 512 number keeps getting texts from that 512 number. Rotation only applies to people you haven't texted yet.

For platforms with sub-accounts

If you run a platform where each customer has its own sub-account, local presence picks among that sub-account's numbers. One customer's pool of Texas numbers is never used for another customer's contacts. Each sub-account buys the numbers it needs for its own footprint, through the app or POST /v1/numbers.

How local presence fits A2P 10DLC

This is the part most often misunderstood, so it gets its own section.

Every 10-digit long-code number that sends application-to-person texts in the US has to be attached to a registered 10DLC campaign. Unregistered traffic gets filtered by carriers. Local presence doesn't change that. It chooses among registered numbers. It isn't a workaround for registration and it doesn't create a separate registration per area code.

In practice:

  • One brand and one campaign can cover many local numbers, as long as they all send the same kind of traffic the campaign was registered for. We cover the specifics in Local presence SMS and 10DLC: can many local numbers share one campaign?
  • Each number adds to the monthly registration cost. On Ready the monthly is $25 for registration + $2 per number. Registration has no setup fee, and the charge at submit is the first month, $25.
  • Throughput doesn't multiply with numbers. The per-second rate is set per campaign, roughly 1 to 4 segments per second for a fresh standard campaign without vetting, and T-Mobile's daily cap is set per brand by trust score, starting around 2,000 messages a day at the lowest tier. Ten numbers on one campaign share that same ceiling. If you're adding numbers to send faster, that won't work. See why a 50,000-contact campaign takes hours for the full picture.

Most approvals take 2 to 7 days. An account that bought its numbers before registering can send on Ready's shared registration at the same per-text rate while its own registration is in review.

What local presence costs

Local presence has a listed price of $0.0015 for each segment of a delivered text.

The text's own rate is the Standard per-segment price: $0.0075/segment plus a $0.0045 carrier fee per segment.

Worked example: a regional sales follow-up

Assumptions, stated plainly:

  • 10,000 opted-in leads across 8 area codes
  • One single-segment message each (under 160 GSM-7 characters, no emoji)
  • All 10,000 delivered (to keep the math clean)
  • Compliance surcharges off
  • 8 numbers on the campaign, one per area code
Line itemCost
Per-segment rate10,000 × $0.0075 = $75.00
Carrier fee10,000 × $0.0045 itemized separately
Local presencelisted at $0.0015 for each segment of a delivered text
Numbers on registration (monthly)8 × $2 = $16.00
Brand + campaign (monthly)$25 for registration

Local presence itself adds nothing to this total. The extra numbers add 8 × $2 = $16 a month. You only get that back if local numbers actually change how many people reply.

Watch the segment count

The rate is per segment, and local presence's listed price is per delivered text. A 175-character message with one emoji splits into 3 unicode segments. At 10,000 contacts that's 30,000 segments: 30,000 × ($0.0075 + $0.0045). The emoji costs you far more than local presence does. Replies are billed like a sent text, so a local number that gets more replies also generates more inbound segments. That's usually a good problem to have, but it belongs in the budget.

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.

Number rotation done wrong

"Local presence" and "number rotation" are often used as if they mean the same thing, and the difference matters to carriers.

Local presence matches a contact to a nearby number. Rotation spreads volume across many numbers. When rotation is used to keep any one number under carrier filtering thresholds, carriers call it snowshoeing, and they look for it specifically. The pattern of many numbers, identical content and volume spread thin is how a whole pool gets flagged together. We cover the failure mode, and the safe version, in Rotating local numbers to lift answer rates can get all of them flagged as spam in a week.

The common mistakes:

  1. A contact gets a different number every time. They can't tell it's the same business, replies scatter across threads, and some people report the second number as spam. On Ready, #from:even# keeps a contact on the number it already texts with, for this reason.
  2. Buying numbers to escape filtering. If one number is getting filtered, the cause is almost always content, consent or volume. Ten numbers sending the same filtered content get filtered ten times.
  3. New numbers that go straight into full volume. A brand-new number pushing thousands of texts on day one looks like a spammer's burner. Ramp new numbers up gradually. The 7-day warm-up applies to each number you add to a local pool.
  4. Numbers outside the registered campaign. Every number in the pool must sit on the campaign. One unregistered number in a rotation is filtered traffic you're paying for.
  5. Mixed traffic on one pool. 2FA codes, appointment reminders and promos registered under one use case, then rotated together, invites throttling on all of it.

A useful rule: if you'd be embarrassed to explain to a carrier why you own the numbers you own, you have too many.

When to use it and when not to

It helps most when:

  • Your contacts span several area codes and you actually own a number in each region you serve
  • You run two-way conversations (sales follow-up, scheduling, service updates), where a recognizable local number gets people to reply
  • You're a platform whose customers ask for "local numbers" and you want to offer it without writing selection logic yourself

It changes little when:

  • Your contacts are mostly in one metro. One local number already does the job.
  • Your texts are one-way and transactional, like order shipped or a code. People expect those from a known sender and rarely care about the area code.
  • You'd be buying numbers you don't otherwise need just to cover area codes with a handful of contacts. $2 a month per number to reach a few dozen people rarely pays back.

You don't need to switch anything. It is on for every account, and with one number it just sends from that number.

Worth saying plainly: if you have engineers and want to own number selection yourself, a raw CPaaS works fine. Twilio's per-segment price (~$0.0083/segment) is lower than our Standard rate, and area-code matching is a lookup table plus some routing code. What Ready includes is the selection logic, sticky numbers for existing threads, quiet-hours holds based on the recipient's area, opt-out propagation across every number, and in-app 10DLC registration covering the whole pool. Whether that's worth it depends on what your team would rather build and maintain.

Getting started

The practical sequence:

  1. Register your brand and campaign (or confirm they're approved) with GET /v1/registration.
  2. Buy numbers only in the area codes where you have meaningful contact volume.
  3. Warm each new number before it carries full volume.
  4. Send from the API without a from, or #from:local# in GoHighLevel. Use #from:even# only to spread new contacts within a local group.
  5. Split-test against a single number and watch replies and opt-outs, not just delivery.

If you want to try it, the first 20 texts on a new account are free one-to-one sends, so use them on test conversations 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. You can sign up here or check the pricing page first.

FAQ

What is local presence texting?

Local presence texting is sending each text from your number closest to the recipient's area code. A contact in Chicago sees a 312 or 773 number, not a number from another state. It only chooses among numbers you already own.

Does local presence texting need its own 10DLC registration?

No, it uses your existing registration. Every one of your numbers must be on your registered 10DLC campaign, and local presence picks among those numbers. Each number you add costs $2 a month on top of your brand and campaign fees.

How much does local presence texting cost?

On Ready its listed price is $0.0015 for each segment of a delivered text.

Is rotating phone numbers for texting considered spam?

Rotation used to dodge carrier filtering is considered snowshoeing, and carriers flag it. Matching contacts to a nearby registered number and keeping each contact on the same number is legitimate. The risk comes from spreading identical high-volume content thin across many numbers.

Does adding more local numbers increase how fast I can send?

No, more numbers don't raise throughput. The per-second rate is set per 10DLC campaign and T-Mobile's daily cap is set per brand, so all numbers on one campaign share the same limits. Brand vetting can raise the daily cap when it moves you up a trust tier, but it doesn't change the per-second rate.