The number you've been texting from for two years is an asset. Your customers have it saved. It's stamped on order confirmations, appointment reminders, and reply threads going back hundreds of conversations. The single thing that scares people out of leaving an overpriced reseller is the fear of losing that number — or worse, keeping the number but going dark for a week mid-port because the 10DLC registration didn't follow.
Both of those outcomes are avoidable. They almost always come from doing the steps in the wrong order. Port first, register later, and you can sit with a "ported but unregistered" number that carriers quietly filter. Register the new brand before the number arrives and you're paying campaign fees for traffic you can't yet send. Sequence matters more than any single step.
Full disclosure: I work for ReadySMS, and yes, we'd like you to port to us. But the sequencing below is provider-agnostic — it works whether you land here or somewhere else. I'm writing it because I've watched too many teams go dark on a switch that should have been seamless.
The core problem: a number and its 10DLC registration are two separate things
Here's the mental model that prevents most disasters. When you send business SMS in the US, two things have to be true at once:
- You own (or control) the phone number at a provider.
- That number is associated with an approved 10DLC brand and campaign at that provider.
A port moves #1. It does not move #2. Your old 10DLC registration lives at your old provider and does not travel with the number. The moment a number lands at a new provider with no campaign attached, it's effectively unregistered traffic — and unregistered traffic gets carrier-filtered. Recipients silently don't receive your texts. No bounce, no error you'll necessarily notice. Just a slow leak of undelivered messages.
So the whole game is: get the new 10DLC registration approved and ready to attach before — or right as — the number arrives, then bind them together fast. If you want the deeper background on what 10DLC actually is, the 10DLC explainer covers it, and the registration cost breakdown covers the fees I'll reference below.
The 9-step order that avoids downtime
This is the sequence. Don't reorder it.
| Step | Action | Why this position |
|---|---|---|
| 1 | Inventory & freeze | Know what you're moving before you touch anything |
| 2 | Submit new 10DLC brand registration | Brand approval can take 1–3 days; start the clock early |
| 3 | Submit new 10DLC campaign(s) | Campaign approval also runs 1–3 days; runs in parallel |
| 4 | Gather port-out info from old provider | Slow vendors drag here; do it while registrations bake |
| 5 | Submit the port request | Only after registrations are approved or near-approved |
| 6 | Keep sending on the OLD provider | Don't decommission anything yet |
| 7 | Port completes → attach number to approved campaign | The critical binding moment |
| 8 | Send a verified live test through the new route | Confirm delivery before flipping production traffic |
| 9 | Cut production traffic over, then decommission old | Last, not first |
Now the detail on the steps people actually get wrong.
Step 1 — Inventory and freeze
Write down every number you're porting, the brand and campaign each one is registered under today, your monthly segment volume, and where the number is referenced (CRM, email footers, printed material). If you're an agency, do this per client / per sub-account — a partial port is worse than no port. Freeze new campaign launches during the window so you're not chasing a moving target.
Step 2 — Register your new brand first
At the new provider, submit your A2P 10DLC brand registration before anything else. In ReadySMS this is handled in-app — legal business name, EIN, address, the standard fields. Carrier brand fees run roughly ~$10/month, and approval typically lands in 1–3 days. This step has no dependency on the port, so there is zero reason to wait. Start it the day you decide to move.
Step 3 — Register the campaign(s) in parallel
Once the brand is in, submit your campaign(s) — the use case, sample messages, opt-in description. Carrier campaign fees are roughly ~$20/month per campaign, approval again 1–3 days. This is the step most likely to get rejected, usually for sample messages that don't match the declared use case or that trip SHAFT filters. If you get bounced, the SHAFT rejection rewrite guide and the what-actually-gets-approved breakdown will save you a resubmit cycle.
Reuse the sample messages and opt-in language from your old approved campaign where you can. It cleared once; it'll likely clear again.
Step 4 — Pull your port-out credentials
While brand and campaign bake, request what you need from the old provider: account number, port-out PIN/passcode, and a recent bill or LOA (Letter of Authorization) with your business details exactly matching. Mismatched LOA info is the #1 cause of port rejections — the name on the LOA must match the name on the losing carrier's account, character for character. Resellers sometimes drag their feet here because you're leaving. Ask early, ask in writing.
Step 5 — Submit the port only after registration is approved (or close)
This is the linchpin. Do not submit the port request until your new brand and campaign are approved, or so close to approved that the timelines will overlap. A port can complete in as little as 1 business day for simple numbers (longer for some). If the number lands and your campaign is still "pending," you have an unregistered, filterable number in production. Submit the port so it lands after registration is ready, not before.
Step 6 — Keep sending on the old provider
Until the number actually moves, your old provider still controls it and your old 10DLC registration is still live there. Keep running production traffic on it. Don't cancel the old plan, don't delete the old campaign, don't "clean up" early. The old route is your safety net right up until the moment the number physically ports.
Step 7 — The number arrives: bind it immediately
Port completion is the moment of truth. As soon as the number lands at the new provider, attach it to the already-approved campaign. Because you front-loaded steps 2 and 3, this is now a fast association, not a 3-day wait. The gap between "number arrives" and "number is registered and sendable" is what you've spent the whole sequence shrinking — ideally to minutes.
Step 8 — Send a real, verified test before flipping production
Send a live message to a phone you physically hold, on a major carrier, through the new route. Confirm it arrives. Then reply STOP from that phone and confirm the opt-out is honored — that tells you inbound handling and compliance plumbing are wired up. ReadySMS handles STOP/opt-out propagation and quiet-hours enforcement automatically, but you still verify it with your own eyes before trusting it with your list.
Step 9 — Cut over, then decommission
Only now do you flip production traffic to the new provider and, after a day or two of clean delivery, decommission the old account. Decommissioning is the last step, never an early one. Cancel before you've confirmed the new route, and a hiccup leaves you with nowhere to send from.
Where teams actually lose days (and how to not)
A few failure modes I see repeatedly:
- Porting before registering. The classic. Number lands, traffic gets filtered, nobody notices for three days because there's no hard error. Steps 2–3 before step 5 prevents this entirely.
- LOA name mismatches. "Acme LLC" on the LOA vs. "Acme, LLC" on the carrier account = rejected port. Match it exactly.
- Decommissioning the old account to "save money." You save maybe a few dollars and risk going dark. Keep it live through step 8.
- Forgetting agency sub-account isolation. If you run multiple clients, each location needs its own brand/campaign mapping. ReadySMS maps registration per location / sub-account via the GoHighLevel integration, so clients stay isolated — but you still have to register each one.
A quick word on cost, since that's usually why you're leaving
The reason most people port off a reseller is the markup. Worth running your own numbers on the cost calculator, but the shape of it: ReadySMS bills per outbound segment plus a flat $0.0045/segment carrier pass-through that's itemized separately rather than buried in a marked-up rate. On the Starter tier, a 50,000-segment month is 50,000 × ($0.0155 + $0.0045) = $1,000 in send cost — and anything over 50K/month drops you to the Growth rate ($0.0125 + $0.0045 per segment), plus the ~$10 brand and ~$20 campaign carrier fees. The transparent split is the point — you can read the bill and see exactly what's carrier cost versus platform.
If a fuller migration walkthrough helps, the Twilio-to-ReadySMS playbook and the agency transition best practices go deeper than this porting-specific piece.
The takeaway
Going dark mid-migration is almost never a porting problem — it's a sequencing problem. The number moves in one step; its 10DLC registration does not move at all and has to be rebuilt at the new provider. Front-load the brand and campaign registration so they're approved before the number arrives, keep the old route live until you've sent a verified test on the new one, and decommission last. Do it in that order and your customers never notice the switch happened.
When you're ready to map out your specific numbers and timelines, start an account — 20 free test sends, plus a $25 credit when you submit 10DLC registration — and submit the brand registration first. That's step 2, and there's no reason to wait on it.