Internal SOP · Team

A2P / 10DLC Registration SOP (per contractor)

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.


1. What you need before you open the form

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.


2. The website URL, and why it is the whole job

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:

  1. Their trading name.
  2. A line naming the legal entity, for example "Awesome Renovations is a d/b/a of VEVA Investments LLC." The reviewer compares the registered brand name against the page.
  3. Enough real content that it reads as a business website rather than a stub.
  4. A privacy policy link, pointing at a policy with an SMS and Text Messaging section. L-4a section 10 exists for this reason.
  5. A terms link.
  6. The chat widget.
  7. Nothing else that collects a phone number.

3. Connecting the subdomain

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.


4. The chat widget

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.


5. Order of operations

  1. Collect the documents on the onboarding call.
  2. Convert the EIN letter to PDF and read it. Note the legal name.
  3. Start the registration and upload the documents.
  4. Build the dedicated page in the contractor's sub, with the legal entity line on it.
  5. Connect the subdomain, then confirm the record is DNS only and the page loads over HTTPS.
  6. Set the widget's country default, confirm both consent links resolve, and install the widget on that page and nowhere else.
  7. Enter that page as the website URL and tick the compliance confirmation.
  8. Submit, then watch for approval.

Open items