The scary part of a provider migration isn't the number. You can port a number, or spin up a fresh one, and clients rarely notice. The scary part is everything downstream of the number: the workflow that fires when a lead texts "YES," the trigger link that tags a contact as hot, the branch that waits for an inbound reply before it advances the pipeline. Those pieces are wired to how messages flow into GoHighLevel — and if the new provider delivers inbound differently than the old one, half your automations go quiet without throwing a single error.

Full disclosure: I work for Ready, and we built a native GHL integration partly because I watched agencies torch their own automations trying to duct-tape a provider in over a webhook. This is the migration checklist I wish those agencies had run first.

Why a provider swap breaks triggers that a number port doesn't

A GHL workflow trigger like "Customer Replied" doesn't listen to a carrier. It listens to an inbound message event landing on the contact record inside GHL. If your new provider writes that message into the conversation thread the same way LC Phone did — same contact, same channel, same threading — your triggers keep firing. If it drops the message in through a webhook that creates a note, or posts to a generic inbox that isn't mapped to the contact, the trigger never sees it.

That's the whole ballgame. Two providers can both "deliver SMS to GHL" and only one of them keeps your automations alive, because only one is writing to the objects your triggers watch.

We wrote a whole piece on this distinction — native sync vs. webhook wiring — but the short version: webhook-based inbound loses two-way threading, and two-way threading is what most reply-based triggers depend on.

The four things a migration can silently break

Before you touch anything, know your blast radius. In a typical agency sub-account, these are the pieces tied to how messages enter and leave GHL:

  1. Reply-based triggers — "Customer Replied," "Conversation" triggers. Break if inbound doesn't land on the contact's SMS channel.
  2. Keyword routing — workflows that branch on "YES / STOP / MORE." Break if inbound text isn't parsed as an SMS message body.
  3. Trigger links inside SMS — the click-tracked URLs you drop into texts. These usually survive (they're GHL-native links), but they break if the send channel changes and the link stops rendering in the outbound message.
  4. Branch conditions that wait on message status — "if SMS delivered → continue." Break if delivery-status callbacks don't map back into GHL.

Write down which sub-accounts use each. Most agencies discover a client whose entire nurture leans on a single "replied YES" trigger nobody documented.

Step 1: Inventory the triggers before you migrate the number

Open each sub-account's Automation tab and export or screenshot every workflow that has an SMS-related trigger or SMS action. You're building a map of:

  • Which workflows start on an inbound SMS event
  • Which workflows branch on message content or status
  • Which trigger links live inside outbound SMS bodies
  • Which keywords are wired to which workflow

This is tedious and it's the step people skip. Twenty minutes per sub-account now saves you a support fire per client later. If you're auditing anyway, the four workflow mistakes that double-text contacts is worth a read — a migration is the perfect moment to fix the loops you've been ignoring.

Step 2: Confirm the new provider writes inbound the way triggers expect

This is the load-bearing check. Send yourself a test text to the new number and watch where it lands in GHL. You want to see it:

  • appear in the contact's conversation thread (not a note, not a task)
  • register as an SMS-channel message (so keyword triggers can parse the body)
  • fire a "Customer Replied" trigger on a throwaway test workflow

Ready connects through OAuth and does true two-way sync — inbound and outbound both write to the GHL conversation thread, mapped per location so each client's messages stay isolated in their own sub-account. That's the design goal: your existing reply triggers and keyword branches don't know the provider changed, because the message object they watch looks identical.

If your new provider can't pass this test, stop. No amount of workflow rebuilding fixes an inbound path that doesn't reach the contact record.

Step 3: Map the fields that carry consent and status

Migrations quietly reset two things people forget: opt-in status and delivery status mapping.

Opt-in matters because a STOP that was honored under the old provider needs to stay honored under the new one. If you export contacts and the "DND / SMS opt-out" field doesn't come across, you can re-text someone who unsubscribed — which is both a compliance problem and a deliverability one. Ready honors inbound STOP/UNSUBSCRIBE automatically and propagates the opt-out so a suppressed contact can't be messaged again across campaigns, but that only protects sends after the cutover. The historical opt-out state has to travel with your export. There's a full walkthrough of the export fields that prove consent survived in this migration piece — the fields are the same whether you're ecommerce or an agency.

Delivery-status mapping matters for any branch that reads "SMS delivered" or "SMS failed." Confirm the new provider's status callbacks land on the message so those branches still evaluate. If they don't, rewrite those branches to key off a different signal before go-live.

Step 4: Line up 10DLC so you're not sending unregistered on day one

Here's the timing trap. You cut over the provider, the automations survive, and then every message gets carrier-filtered because the new sender isn't registered on a 10DLC campaign. Now your triggers are firing perfectly and nothing is being delivered.

Register the brand and campaign on the new provider before the cutover. Standard 10DLC runs roughly ~$10/mo per brand and ~$20/mo per campaign in carrier fees, and approval typically lands in 1–3 days — with Ready most approvals clear same-day through self-serve registration in-app. For agencies moving a stack of clients at once, the order matters: brand first, then campaign, batched. We laid out that sequence in the batch registration flow and the sub-account registration order.

Don't schedule the number cutover for a Friday. Give registration a business day of runway.

Step 5: Sequence the cutover so clients aren't double-billed

If you're moving multiple clients, don't flip everyone at once, and don't flip mid-cycle without planning the billing overlap — you can end up paying both providers for the same contacts in the same month. The clean version is one sub-account at a time, with the old provider's sending paused only after the new one passes the inbound test. We wrote the full cutover sequence that avoids double-billing if you're doing this across a book of clients.

A go-live checklist you can actually run

CheckPass condition
Inbound test textLands in contact's SMS thread, fires "Customer Replied"
Keyword test"YES" routes to the correct branch
Trigger link renderLink appears and click registers a tag
Delivery-status branch"SMS delivered" branch advances
Opt-out importPreviously-STOP'd contacts show as suppressed
10DLC statusBrand + campaign approved on new sender
Quiet hoursSends outside local permitted hours held
First live sendDelivered (not carrier-filtered) to a real contact

Run this per sub-account, not once for the agency. The one client whose whole funnel hangs on a keyword branch is exactly the one you'll forget to test.

What actually preserves the automations

Nothing here is magic — it's mapping. A provider swap keeps your triggers alive when the new provider writes inbound messages into the same GHL objects your triggers watch, carries opt-out state across in the export, maps delivery status back, and is registered on 10DLC before the first send. Miss any one and something goes quiet without an error message, which is the worst kind of broken.

Ready's native OAuth integration is built to make the inbound-mapping part a non-event, and same-day 10DLC keeps the registration gap from turning into a dead sending week. That doesn't excuse you from running the checklist — it just means the parts most likely to break are the parts we designed around.

If you want to see whether your triggers survive the swap, the fastest test is a real one: start on the 2,500 free credits, connect a test sub-account, and send yourself a text. Watch where it lands. If it fires the trigger, the rest is paperwork. And if you're weighing the move more broadly, the agency buyer's guide walks through the tradeoffs without the sales gloss.