The migration itself isn't the scary part. The scary part is the two-week window where a client is technically live on both providers — old numbers still receiving, new numbers already registered — and you end up paying two carrier fees on the same brand while a workflow fires from the account you thought you'd shut off. Multiply that by 12 sub-accounts and the "quick weekend migration" turns into a month of reconciliation nobody budgeted for.
Full disclosure: I work for Ready, and yes, we'd like you to move your clients to us. But the sequence below works regardless of where you land. The failure modes — overlapping charges, orphaned in-flight messages, consent gaps — are provider-agnostic. Get the order wrong and you'll pay for it no matter whose logo is on the invoice.
The three things that go wrong (and cost money)
Before any port, name the enemies. Every mid-month agency migration that goes sideways trips one of these:
- Double carrier billing. Both providers keep the brand/campaign registration active in the same calendar month, so you pay ~$10/mo brand + ~$20/mo campaign twice per sub-account. At 12 clients that's an extra ~$360 for a month of overlap you didn't need.
- Orphaned in-flight messages. A drip workflow queued a text on the old number Tuesday night; you cut the number over Wednesday morning; the reply lands on a number nobody's watching. Now the lead thinks you ghosted them.
- Consent gaps. The opt-in list lives in one system's format, the STOP suppression list in another. If those don't move together, you re-text someone who opted out — and that's the $500–$1,500-per-text TCPA exposure you were trying to avoid.
The whole playbook exists to close those three gaps, in an order that never leaves two of them open at once.
Step 1: Register the new brand and campaign before you touch a single number
This is the counterintuitive part. Most agencies port the number first and register 10DLC after, then sit in an approval queue while live traffic gets carrier-filtered. Do it backward.
Register the brand and campaign on the new provider while the old one is still fully live. Your clients don't feel a thing — they're still sending on the old numbers. You're just pre-staging the destination.
On Ready, brand + campaign registration is self-serve and in-app, and most approvals come back same-day (carrier processing can take 1–3 days at the outside). That's the difference between overlapping for one day versus overlapping for three weeks while a manual A2P onboarding grinds through email threads. If you're batching a lot of sub-accounts, the brand-then-campaign batch order matters more than doing them one at a time — register brands first, then fan out campaigns.
Do not skip the consent import here. When you set up each campaign, load the opt-in attestation and the existing STOP/suppression list at the same time. Ready records opt-in attestation for bulk and API sends, but it can only suppress what you give it. Export your old provider's opt-out list and import it before the first send — that's your consent-gap insurance.
Step 2: Freeze new automated sends on the old provider
You want a clean drain, not a moving target. In each GHL sub-account, pause the outbound SMS workflows before you port — not the two-way conversations, just the automated blasts and drips.
Why: a runaway or misfired workflow can text one contact 40 times before anyone notices, and doing that mid-port means those messages fire from a number that's about to disappear. Pausing automations first means the only traffic left on the old number is inbound replies and manual conversations — a much smaller, controllable trickle.
Keep the old inbox monitored. You're not shutting it off yet. You're just stopping it from generating new outbound.
Step 3: The drain window
Here's the piece agencies rush. After you freeze automations, leave the old number live for a 24–48 hour drain window before you port. This lets already-queued messages deliver and lets the replies to them land where someone's still watching.
A worked example. Say a client fired a Tuesday-evening blast to 800 contacts before you froze things Wednesday. Opted-in SMS lists often see replies land somewhere in the 30–50% range over the following day or two — call it ~300 inbound replies trickling in. If you port Thursday morning, those 300 replies hit a dead number. If you drain through Friday, they land in the old inbox, get handled, and then you port.
The drain window is the single cheapest insurance in the whole sequence. It costs you two days of patience and saves you a pile of "why didn't anyone text me back" complaints.
Step 4: Port the number — one client at a time, not all twelve
Number porting is the irreversible step, so stagger it. Port one sub-account, confirm two-way messaging works on the new provider (send a test, reply to it, watch it thread), then move the next.
For GHL agencies specifically, the reason to care about native sync here is threading. Wiring SMS in over a webhook loses two-way threading — replies come in as orphaned inbound events instead of landing in the contact's conversation. Ready's GHL integration is OAuth-based two-way sync mapped per location, so each client's inbound and outbound stay isolated in their own sub-account and thread correctly. Test that on client #1 before you bet 11 more ports on it.
If number reputation matters — a real-estate brokerage or anyone with an aged, warmed sending number — read the port-and-warm sequence before you move. Porting a number doesn't reset its reputation, but re-registering it under a new brand can change throughput behavior, so warm it back up gradually rather than blasting day one.
Step 5: Cancel the old registration on the right date
Now the billing part. Carrier brand/campaign fees are billed monthly, so the goal is to cancel the old registration inside the same billing month you activated the new one — but only after the port is confirmed live.
The clean sequence per client:
| Order | Action | Provider | Billing effect |
|---|---|---|---|
| 1 | Register brand + campaign | New | Starts new ~$10 + ~$20/mo |
| 2 | Freeze automations | Old | None |
| 3 | Drain 24–48h | Old | None |
| 4 | Port number, test two-way | New | None |
| 5 | Confirm live for 24h | New | None |
| 6 | Cancel brand/campaign | Old | Stops old fees |
You'll eat some overlap — you can't cancel the old registration before the port confirms, and you can't register the new one after. Realistically that's a few days of double registration fees per client, not a full month. Across 12 clients, a few days of overlap is maybe $40–$60 total instead of the ~$360 you'd burn leaving both live for a month.
Step 6: Reconcile before you rebill
The month you migrate is the month your invoice math gets weird. You'll have partial sends on the old provider and partial sends on the new one, and if you rebill clients per-segment you need both numbers to reconcile the line item.
This is exactly the reconciliation nobody runs until renewal — a client who "sent 22,000 messages" can show 38,000 billed segments once multipart and unicode splits are counted. During a migration month, run it deliberately: pull segment counts from both providers, add them, compare to what you're rebilling. On Ready the carrier pass-through ($0.0045/segment) is itemized separately from the $0.02 send rate, so the split is legible instead of baked into a rounded number you have to reverse-engineer.
What this actually buys you
The honest version: migration is annoying and there's no way to make it zero-overlap. Number porting is irreversible and carrier fees are monthly, so a few days of double-billing is the cost of doing it safely. What you can eliminate is the weeks of overlap — and that comes down to same-day 10DLC on the destination so you're not sitting in an approval queue with two live registrations bleeding money.
The order that survives contact:
- Register + import consent on the new provider first, while the old one runs.
- Freeze automations, drain 24–48 hours, then port.
- Stagger ports one client at a time; test two-way threading on #1.
- Cancel the old registration only after the new one is confirmed live.
- Reconcile both providers' segment counts before you rebill.
If you're weighing where to land those 12 clients, the agency buyer's guide for GHL walks the tradeoffs, and you can start a brand registration on Ready with 2,500 free credits and no card to test one sub-account before you commit the rest. Move one client, watch the threading, then run the sequence eleven more times.