September 4, 2026 · 6 min read
Your workflow says it ran. The contact never got the text.
This is the most common GoHighLevel problem there is, and almost every guide answers it with check your A2P registration. A2P is on this list. It is third, not first, and if you start there you will burn a day on a form that was never the problem.
Here is the order to check, based on fixing this on a live account where estimates were silently vanishing for weeks.
1. Stop trusting the word Executed
Open the workflow history. You will probably see green checkmarks and the word Executed.
Executed does not mean delivered. It means the workflow fired the step. The message can fail after that and the workflow still reports success.
Do this instead. Go to the contact's Conversations tab and look at the actual message. A failed send shows a warning icon. Hover it. GoHighLevel puts the real reason in that tooltip, and it is usually the whole answer.
That one habit will save you more time than anything else on this page. Verify delivery, never execution.
2. Check the agency wallet, even if you are not the agency
This is the one that catches people hardest, because nothing about the error points at billing.
Every outbound SMS, call, and email in GoHighLevel bills from the agency level wallet, not the sub-account. If that wallet goes negative, every outbound text across every sub-account stops. Silently. The workflow still says Executed.
The tooltip from step 1 will read something like, agency has insufficient funds, negative balance.
The fix. Settings, then Billing, then Wallet and Recharge. Add funds. Retry the message and it goes straight through.
Then turn on Auto Recharge, and this is the part worth reading twice, auto recharge only works if the card actually charges. On the account we fixed, auto recharge was already switched on and the card had declined four times over two days. The wallet sat negative the whole time and every text failed. Confirm the charge is landing, not just that the setting is on.
A sensible starting configuration is a $25 recharge with a $10 low balance floor, and Smart Adjustment on.
3. Confirm A2P 10DLC is actually approved
Now check registration. In the United States, carriers require every business texting number to be registered under A2P 10DLC. Unregistered traffic gets filtered or blocked outright.
Where to look. Settings, then Phone Numbers, then Trust Center. You want to see Approved, not Pending and not Submitted.
Two things that get registrations rejected, your website has no visible SMS opt in, carriers check, a contact form with a checkbox that says how you will text them is usually enough, and your published privacy policy does not mention SMS or say that message and data rates apply.
If you are stuck in Pending for more than a couple of weeks, the campaign was probably rejected and resubmitted rather than approved. Read the rejection reason rather than resubmitting the same thing. Full walkthrough on getting A2P approved.
4. Replace the shared link shortener
If the wallet is funded and A2P says Approved and texts still are not arriving, this is your answer. It is the one almost nobody publishes.
GoHighLevel wraps every link in your SMS with a shared shortener domain, msgsndr.com. That domain is shared by every account on the platform. Carriers, Verizon and T-Mobile in particular, treat shared shortener domains as a spam signal and blocklist them.
So your text is sent, your number is fine, your registration is fine, and the carrier drops the message on the floor because of the link inside it.
The tell is specific, texts without links arrive, texts with links do not. Estimates, invoices, and review requests all carry links, which is why those are the ones that vanish while your plain reminders get through.
The fix is a branded link domain. Ten minutes, and it is permanent.
- Pick a subdomain you are not using, go.yourdomain.com or link.yourdomain.com both work.
- At your DNS host, add a CNAME record. Host is go, value is the branded domain target GoHighLevel gives you.
- In GoHighLevel, open Settings, then Business Profile, then Branded Domain. Enter go.yourdomain.com and click Verify records.
- Wait for the button to change to Modify. That means it is connected.
Once it is active, GoHighLevel uses your domain for every SMS link automatically. There is no toggle to flip per workflow and no template to update. Estimates, invoices, and review requests all switch over on their own.
On the account we did this for, deliverability went from customers keep saying they never got it, to arriving reliably, with no other change.
The shortcut when a customer is waiting
If you have someone on the phone right now who needs an estimate, send it by email. Email does not touch the shortener and it does not touch A2P. It arrives.
Fix the SMS path properly afterward. Do not let a deliverability problem cost you a job you already closed.
The order, one more time
| Check | Where | The tell |
|---|---|---|
| Delivery, not execution | Conversations, hover the warning | Workflow says Executed, message shows a warning |
| Agency wallet | Settings, Billing, Wallet | Agency has insufficient funds |
| A2P 10DLC | Settings, Phone Numbers, Trust Center | Status is Pending, not Approved |
| Shared shortener | Settings, Business Profile, Branded Domain | Texts with links fail, texts without links arrive |
Work down the list. Most accounts are fixed by step 2 or step 4.
This is one step in the full build. See the whole GoHighLevel setup order.
Get set up
Start your GoHighLevel trial: resourcepilot.net/gohighlevel
Want the setup done with you? resourcepilot.net/resources
*Disclosure: Resource Pilot may earn a commission if you sign up for GoHighLevel through our link, at no extra cost to you. We use GoHighLevel to run our own business and our clients' businesses every day.*
Put this to work
The Text Deliverability Checklist
Know exactly which of the five common causes is blocking your texts, in the order to check them.