September 4, 2026 · 7 min read
In the United States, carriers will not deliver business texts from an unregistered number. A2P 10DLC is that registration. Until it is approved, GoHighLevel will let you build every workflow you want and none of the texts will land.
Most guides walk you through the form fields. The form is the easy part. What actually fails registrations is your website, and GoHighLevel's compliance scanner checking it.
Here is the whole path, including the two failures that cost the most time.
Fill the form once, correctly
Settings, then Phone Numbers, then Trust Center. Start the A2P registration.
Choices that matter:
- Use case, Mixed. Unless you send one narrow message type, Mixed covers you. Picking a narrow use case and then sending something else is a compliance problem later.
- Volume, Low, for a single local business. Expect a one time fee around $25 and a recurring carrier fee around $11 a month. That carrier fee is a pass through and is not included in your GoHighLevel plan. Budget for it.
- Business type, match your tax filing, not your instinct. If you file an 1120-S you are a Corporation, even if you think of yourself as an LLC. Mismatches against the EIN record get rejected.
- Industry, pick the closest available. GoHighLevel's list is incomplete. If there is no Construction or Professional Services option, choose the nearest neighbor and move on. It does not affect deliverability.
- Authorized representative, a real person with a real title from the list. If President is not offered, CEO or Owner is fine.
- EIN, copy it exactly from a filed return, not from memory.
Now the part that actually fails, your website
Carriers require proof that people consented to be texted. GoHighLevel scans your site to verify it. Two things must be true.
One, you need a visible SMS opt in. Either the LeadConnector chat widget, or a form with a consent checkbox that states you will text them and that message and data rates apply.
Two, your privacy policy has to mention SMS. If it is silent on texting, the check fails.
The collision that is not in any guide
Here is the trap. If you register using the chat widget as your opt in, then the chat widget must be the only SMS opt in on any page where it appears.
Put the widget site wide, and also have an estimate form that collects phone numbers, and GoHighLevel's scanner reports Multiple Opt ins and fails you. You signed an attestation saying the widget is the opt in. A second phone collecting form on the same page contradicts it.
The fix is to exclude the widget from the page that has the form. Not with JavaScript. At the render level, so the widget tag is simply absent from that page's raw HTML.
Which brings up the second trap.
Install the widget as a raw tag, never a JavaScript wrapper
GoHighLevel's scanner reads the raw HTML of your page. It does not execute JavaScript.
So if you install the chat widget through a script that creates the tag dynamically, the widget will work perfectly for your visitors and the scanner will report chat widget not integrated. You will stare at a live green chat bubble on your own homepage while the compliance check tells you it does not exist.
Install it as a plain script tag in the page source. In WordPress with Elementor, that means a Custom Code snippet set to raw HTML at End of body, with the page exclusion handled by Elementor's display conditions rather than by a JavaScript path check.
Verify by fetching your page source and searching for the widget id. If it is not in the raw HTML, the scanner cannot see it.
When the scanner is wrong
This is worth knowing before it happens to you.
On a registration we ran, the site was provably correct. Widget present with the right id on all nine content pages, absent on the one form page, no competing phone forms in the raw HTML anywhere, no broken links. We fetched and parsed every page to confirm it.
The scanner still failed. It even reached Passed 1 of 1 mid scan and then flipped both checks to Failed at the end. We disabled caching to rule out a stale page being served to their crawler. Same result.
The root cause was on GoHighLevel's side, their opt in validator was timing out after two and a half minutes.
The path that resolved it, open Help and Support, use the chat, and ask for a manual review by a human. State plainly that the requirements are met, that the widget is verifiably live, and that the validator is timing out. The bot will give you the generic checklist first. Push past it to escalation.
If your site is genuinely correct, stop editing it. More site changes will not fix a scanner problem, and every change risks breaking something that was already right.
After approval
Approval gets you the right to send. It does not guarantee delivery.
Two things still bite:
- The agency wallet. A negative balance silently blocks every outbound text account wide, regardless of A2P status.
- The shared link shortener. Carriers filter msgsndr.com links. Texts without links arrive, texts with links do not.
Both are covered in the delivery guide, and both are worth setting up the same week.
One compliance rule to keep
Once approved, only text people who consented. If you have an old customer list that never opted in, email them. Do not text them. TCPA penalties are per message and they are not small.
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 run our own business and our clients' businesses on GoHighLevel, and we would recommend it either way.*
Put this to work
The A2P 10DLC Submission Checklist
A submission that gets approved on the first try instead of bouncing back for missing information.