Yes, many local numbers can sit on one registered 10DLC campaign, as long as every number sends the same consented use case and the number count matches where your contacts actually live. Local presence SMS is compliant when it picks the nearest registered number for each contact. It becomes snowshoeing when numbers are added or rotated to spread volume and dodge carrier filtering.
The line between those two is mostly about intent and pattern, and carriers judge both from your traffic. This post covers how many numbers a campaign can reasonably hold, what snowshoeing looks like to a carrier, why a contact should keep the number it already texts with (sticky sender), and how to set up local presence in the Ready API or in GoHighLevel with #from:local#.
How numbers attach to a 10DLC campaign
A2P 10DLC registration has two layers. Your brand is the legal business. Your campaign is a declared use case, such as appointment reminders, customer care or marketing, with sample messages and an opt-in description. Phone numbers get attached to a campaign, and every number on it inherits that campaign's approval, throughput and trust. If the registration layer is new to you, our 10DLC explainer covers it from the start.
Three facts follow from that structure, and they shape everything else here:
- A number on the campaign is registered. A number off it is not. Local presence never bypasses registration. On Ready, every number used for local presence sits on the account's registered campaign, and Local presence only chooses among those numbers.
- Throughput belongs to the campaign and the brand, not the number. A fresh standard campaign with no vetting gets roughly 1 to 4 segments per second. T-Mobile's daily cap is set per brand by trust score, starting around 2,000 messages a day at the lowest tier. Adding a tenth number does not add a tenth of anything. It splits the same allowance across more senders.
- Content and consent rules apply per campaign. Ten numbers on a "customer care" campaign are all bound by that use case. If one of them starts sending promos, the whole campaign carries the mismatch.
Point 2 is the one people miss. If your reason for adding numbers is "send more, faster," local numbers won't get you there. That's a throughput question, and our post on the TPS ceiling explains where those limits come from and what actually raises them.
How many numbers is too many?
No carrier publishes a per-campaign number count that is automatically safe. The test they apply in practice is whether the count is plausible for the declared business. Industry discussion often cites T-Mobile asking for a separate number-pool review once a campaign passes roughly 50 numbers. Rules shift, so treat that as an approximate signal, not a guarantee in either direction.
A workable rule of thumb is one number per area-code region where you have a real concentration of consented contacts:
| Business shape | Reasonable number count | Why |
|---|---|---|
| Single-location dentist | 1 | All patients share one area code |
| HVAC company covering a metro with 3 area codes | 3 | One per overlay or neighboring code |
| Home services brand in 6 states | 6 to 15 | One or two per major metro served |
| National SaaS texting trial users | A handful, or 1 | Contacts are scattered; local match rarely lands |
| "We bought 80 numbers so each sends less" | Red flag | The count tracks volume, not geography |
The last row is the pattern carriers are trained to catch.
Why rotating numbers to dodge filtering is snowshoeing
Snowshoeing is spreading message volume across many numbers so that no single number looks busy enough to trip a filter. The name comes from snowshoes spreading your weight so you don't sink. Carriers treat it as filter evasion and prohibit it in their messaging policies. A carrier that spots it can block the numbers, suspend the campaign and, in bad cases, damage the brand's standing for future registrations.
Here's how carriers tell the difference between local presence and snowshoeing from the outside:
- Same content, many senders, spread evenly. A single promo going out from 40 numbers in round-robin, each sending a near-identical slice, looks like evasion. Local presence produces lopsided traffic, because the number for your biggest metro sends the most.
- Numbers added after filtering starts. If delivery drops and the response is to buy more numbers, the timeline tells the story. Filtering is a content, consent or reputation signal. Adding senders treats the symptom and makes the pattern worse.
- Numbers that don't match the contacts. A 212 number texting Phoenix contacts isn't local presence. It's just another sender in the pool.
- Contacts that get a different number every time. If one person hears from three of your numbers in a week, you look like a spammer cycling senders, because that's the pattern spammers produce.
If your messages are getting filtered on an approved campaign, the fix lives elsewhere: message content, link domains, consent quality, or a number that went out too hard on day one. Our posts on content-level filtering after approval and warming up a new number cover those causes.
Sticky sender: a contact keeps its number
Sticky sender means that once a contact has texted with one of your numbers, every later message to that contact comes from the same number. It is the single most important rule for running many numbers cleanly.
It matters for three reasons:
- Conversation continuity. The contact's phone threads messages by sender. If your next text arrives from a different number, it starts a fresh thread with no history, and it looks like a stranger texting.
- Opt-out clarity. A contact who replied STOP to one number and then hears from another may reasonably think the opt-out was ignored. On Ready, inbound STOP is honored automatically, and the opt-out propagates so the contact can't be messaged again across campaigns. Sticky sender keeps the contact's own understanding in line with what the system is doing.
- Carrier pattern. One contact talking to one number is how a real business behaves. Many numbers rotating through one contact is how snowshoeing behaves.
In practice, local presence decides which number a new contact gets. Sticky sender governs everyone after that, even if the contact moves to another state and their area code no longer matches.
Setting up local presence SMS safely
What it costs
Local presence has a listed price of $0.0015 for each segment of a delivered text. Numbers are $2 each per month on top of the registration monthly of $25 for registration.
Here's an example with stated assumptions: a home services company with 3 local numbers on one campaign, sending 5,000 single-segment texts a month, with all 5,000 delivered.
- Registration monthly: $25/mo for registration and $2/mo per number for 3 numbers
- Messages: 5,000 × $0.0075 = $38
- Carrier fee: 5,000 × $0.0045
That's the registration, number and message lines above plus the carrier fee, which is itemized separately on the bill. That total excludes the compliance surcharge. Scrubbing and landline validation are each $0.003 per segment when switched on for an account, and both are off by default. Replies you receive are billed like a sent text, so a two-way conversation adds to the segment count. If a message runs past 160 GSM-7 characters, or includes an emoji, the segment count rises and every per-segment line rises with it. Current rates are on the pricing page.
The honest comparison: going from 1 number to 3 adds 2 × $2 = $4 a month in number fees, and local presence has a listed price of $0.0015 for each segment of a delivered text. Whether that's worth it depends on how spread out your contacts are. Teams turn local presence on because a familiar area code tends to look less like a stranger. We don't publish a measured reply-rate lift for it, and you should test it against your own list before assuming one.
In the Ready API
With local presence on (it's on unless you switched it off), leave from out and Ready picks the account's number closest to the contact's area code. With it switched off, the send goes out from your primary number. (A team member's own key sends from the number assigned to that member.)
curl -X POST https://api.tryready.com/v1/messages \
-H "X-API-Key: $READY_API_KEY" \
-H "Idempotency-Key: 6f2b8c1e-4d7a-4b9e-9a31-2c5e7f0d1a44" \
-H "Content-Type: application/json" \
-d '{
"to": "+12125550199",
"body": "Hi, this is Acme Plumbing confirming your visit tomorrow at 9 AM. Reply STOP to opt out.",
"consent_attested": true
}' consent_attested is your promise that this recipient agreed to texts. Ready records the sender's attestation per send as an audit trail, but it isn't a per-contact consent record. The opt-in time, wording and page URL are yours to keep. The Idempotency-Key makes sure a retried request never sends twice, which matters more than usual when a timeout could otherwise produce a duplicate from a different number.
Sticky sender takes no code on your side: leave from out and Ready keeps sending to a contact from the number it used before.
The even and random strategies spread sends across your numbers. Use them only when you have a reason that isn't volume-spreading, and leave from out for existing conversations either way. The full field reference is in the messages API docs, and the quickstart covers keys and your first send.
A few guardrails apply automatically regardless of which number sends. Opt-outs, numbers on your Ban list and known landlines are refused up front and not charged. A campaign text that would land in the recipient's quiet hours is held and sent later, based on the recipient's area, and charged only when it sends; a one-to-one or API text is held only if the window opens within 6 hours, and is otherwise refused.
In GoHighLevel
Ready installs natively into GoHighLevel over OAuth, with two-way message sync mapped per GHL location. Two tags control number selection:
#from:local#picks the number closest to the contact's area code.#from:even#spreads new contacts across numbers inside the local area-code group, while a contact keeps the number it already texts with.
The second behavior is sticky sender built in. Rotation applies only to new contacts within the matching local group. It doesn't cycle existing conversations through different senders. If you're still getting the registration itself approved, our GoHighLevel 10DLC guide walks through what gets accepted.
A pre-launch checklist
Before you attach a second number to a campaign, check that you can answer yes to each of these:
- [ ] Every number is on the registered campaign, with no strays sending outside it.
- [ ] The number count maps to real area-code clusters in your consented list.
- [ ] All numbers send the same declared use case, and the samples on file match what you send.
- [ ] Existing contacts are pinned to the number they already know.
- [ ] You're adding numbers for geography, not because delivery dropped.
- [ ] New numbers ramp up gradually instead of taking a full campaign on day one.
- [ ] Opt-in records (time, wording, source) live in your own system.
If filtering is the problem you're trying to solve, stop at the fifth box. More numbers won't fix it.
The practical takeaway
Many local numbers on one campaign is normal and allowed when the numbers follow your customers' geography and each contact sticks to one sender. It turns into snowshoeing when numbers multiply to spread volume or rotate to slip past filters. Carriers can tell the difference from traffic patterns alone. Remember too that throughput and daily caps sit at the campaign and brand level, so extra numbers buy familiarity, not speed.
Compliance stays the sender's responsibility. The tools reduce risk by keeping numbers registered, honoring STOP, holding quiet-hours sends and keeping contacts sticky, but they don't replace good consent. If you want to try it, create an account, use your first 20 free one-to-one texts before you register, and add a number in each area code you serve once your campaign is approved; Local presence is on by default. Most approvals take 2 to 7 days.
FAQ
Can I use multiple phone numbers on one 10DLC campaign?
Yes, a single registered 10DLC campaign can have multiple numbers attached, and all of them share its approval and limits. The numbers should all send the same declared use case. Very large pools may draw extra carrier review, so keep the count tied to where your contacts are.
Is local presence texting legal?
Yes, sending from a local number is legal when that number is registered and the recipient consented to your texts. Local presence only changes which of your registered numbers sends. Consent, opt-out and quiet-hours rules still apply exactly as they would to a single number.
What is snowshoeing in SMS?
Snowshoeing is spreading message volume across many numbers so no single number trips carrier spam filters. Carriers prohibit it and may block the numbers or suspend the campaign. Rotating numbers after delivery drops is the classic example.
Does adding more numbers increase my SMS throughput?
No, adding numbers does not raise throughput, because per-second rates are set per campaign and T-Mobile's daily cap is set per brand. A fresh standard campaign gets roughly 1 to 4 segments per second whether it has 1 number or 10. Brand vetting or a higher use-case tier is what moves those limits.
What is sticky sender?
Sticky sender means a contact keeps getting messages from the same number once a conversation has started. It keeps threads intact, makes opt-outs clear to the contact, and avoids the multi-sender pattern carriers associate with spam. In GoHighLevel on Ready, #from:even# keeps existing contacts on their number automatically, and in the API Ready keeps it for you when you leave from out.