Internal SOP · Team
Working draft. First written from the live Awesome Renovations registration, 2026-08-24. Fills the "A2P/texting registration per sub" gap in SOPs/README.md. Expands Group C of GHL-Subaccount-Onboarding-SOP-WORKING.md.
What this is. A2P 10DLC is the carrier registration a business needs before its number can send business texts. Every contractor we onboard needs their own, because the registration is per legal entity. Until it clears, their missed-call text-back and SMS follow-ups stay dormant.
When it runs. Start it as early in onboarding as the documents allow. Our own registration cleared in about two days, so plan for days, not hours.
Collected on the onboarding call. The list lives in Onboarding-Call-Script-WORKING.md, section 10.
| Item | Note |
|---|---|
| CP-575 or EIN confirmation letter | Must be a PDF. Hard requirement. |
| Legal business name | Exactly as printed on that letter, suffix included. |
| EIN | 9 digits, formatted 12-3456789. |
| Business type | LLC, sole proprietor, corporation. |
| Business industry | |
| Business email | |
| Region of operation |
The legal name comes off the tax document, not off their sign. Awesome Renovations' CP-575 reads VEVA INVESTMENTS LLC. That is what registers. The trading name goes in the display or DBA field. Whether the DBA is filed with the state does not matter to the carrier; they verify the entity against the EIN.
Gotcha: they will send the EIN letter as a photo or a PNG. Convert it before uploading:
convert EIN.png -units PixelsPerInch -density 300 -compress Zip EIN.pdf
Open the PDF and read it before you upload. That is where you find out the legal name is not the name you expected.
Gotcha: an EIN issued in the last 15 days can be rejected. Flag a brand-new EIN and wait.
The form asks for a business website URL and then asks you to confirm that the chat widget is the only thing on that page collecting a phone number for SMS consent. No contact form, no lead capture form, no appointment form. That confirmation is what makes the URL choice hard.
Three candidates. Only the third works.
| Candidate | Why it fails or works |
|---|---|
| The contractor's own website | Adding the widget needs their login, and on Wix or Squarespace it needs a paid plan. Their site almost always already has a contact form, so the compliance confirmation would be false. |
Their mini-site profile page at ttscontractors.com/pros/<slug>/ |
The profile page carries no form, so the confirmation would be true. But there is no per-contractor place to paste a script, so it takes a code change and a deploy to the shared site. |
A dedicated funnel page in their own GHL sub, on a subdomain of ttscontractors.com |
The widget is a GHL widget, so on a GHL page it is native. No code, no deploy, and it cannot leak onto another contractor's mini-site. This is the one we use. |
What that page must carry:
Pick a subdomain of ttscontractors.com and add it in the contractor's own sub under
Settings, Domains.
GHL adds the DNS records itself. It detects Cloudflare and runs an OAuth authorization, then writes the records. You do not add them by hand.
Gotcha: authorize the right Cloudflare account. ttscontractors.com lives on Dan's
account, e76592b5b0e2601d73fa64425a9a613d. If the authorization screen offers a choice,
pick that one.
Gotcha: check the cloud color afterward. The new record must be DNS only (grey), not proxied (orange). An orange cloud blocks GHL from issuing SSL and the page serves an error.
The widget is a text opt-in form, not live chat. The visitor types a name, a phone number and a message, and it opens an SMS thread. Nobody sits watching a chat window. Say this on the onboarding call, because a contractor hears "chat widget" and pictures a job he cannot do.
Someone still has to answer that text. Confirm the auto-reply and the routing workflow are live in the sub before the widget goes on a page.
Gotcha: the phone field can default to a non-US country flag. Fix it under Customise widget before you save.
Gotcha: the consent text carries a "See terms" and a "privacy policy" link. Both must resolve to something real in that sub before you submit. That is the policy the carrier reads.
The consent text pulls the legal entity name from the brand automatically, so it will read correctly even when the page around it does not. That is why item 2 in section 2 above is a separate step.