Skip to main content
One Scale System logo
Book a CallGet My Free Website
Get Free Website
Automation

GoHighLevel A2P 10DLC for Contractors, With Sample Messages

GoHighLevel A2P registration for roofers, HVAC, plumbers and cleaners: fees, brand type, opt-in wording, sample messages and how to fix rejection codes.

Muhammad Asif Khokhar·Founder & CEO, One Scale System·Published ·20 min read
Illustration of a contractor's A2P 10DLC registration: brand, campaign, opt-in and an approved text message in GoHighLevel
Quick answer: To text customers from GoHighLevel on a local number, register a Brand and a Campaign in Settings > Phone System > Trust Center. Contractors with an EIN register as a Standard brand ($22.50 one-time for Low Volume, per HighLevel's November 2026 fee page). Approval depends on everything matching: your legal name, a real multi-page website, a privacy policy with the SMS clause, an unticked SMS consent box on your form, and sample messages that name your business. Copy-ready examples for roofers, HVAC, plumbers and cleaners are below.

Most contractors meet A2P 10DLC the same way. Missed-call text back stops working, or HighLevel shows a banner saying texts can't go out until you register. You fill in the forms, wait a few days, and get a rejection code you've never seen before.

It isn't a HighLevel quirk. U.S. carriers want to know who is texting, what they send, and how the person on the other end agreed to it. Twilio, which runs HighLevel's LC Phone, blocks messages sent from a local number that isn't linked to an approved campaign. Twilio documents this as error 30034. If your missed-call replies, estimate reminders and review requests run through HighLevel, this registration is what keeps them running.

HighLevel's help center explains the forms. What it doesn't give you is wording for a roofing company, an HVAC shop, a plumber or a house cleaner. This guide covers both. Everything below was checked against HighLevel's and Twilio's documentation on 12 November 2026. Every sample is an example to adapt, not a guaranteed approval, because carriers make the final call.

Start with the readiness check. It tells you which brand type fits your business and what reviewers will look for that you don't have yet.

Before you open Trust Center

Are you ready to register?

Tick what's true. You'll see the brand type that fits and what reviewers will look for that you don't have yet. Fees are from HighLevel's fee page, 10 November 2026.

Register as

Sole Proprietor brand

$22.50 one-time, then $2 a month

Fix before submitting (6)

  • A Gmail-style public email and a personal U.S. or Canadian mobile for the one-time code. Business-domain emails and VoIP numbers aren't accepted.
  • More than one page with your services and an about section (error 30919).
  • Your legal business name on the site. The footer, terms or privacy policy is fine.
  • The privacy policy sentence about not sharing mobile information (error 30908).
  • A text messaging section in your terms (error 30882).
  • An unticked, optional SMS consent box with full wording next to it (errors 30896 and 30909).

What you're registering: a Brand and a Campaign

HighLevel's overview of A2P brand and campaign registration splits the job in two. The Brand answers who is sending: your legal business name, EIN, address and an authorized contact. The Campaign answers what you send and why: the use case, a description, sample messages, how people opt in, and links to your website, privacy policy and terms.

Reviewers compare all of it against each other. HighLevel's own wording is that completing every field isn't the same as being compliant. A campaign can have something in every box and still be rejected if the name on your website doesn't match your EIN record, or your samples describe offers your opt-in form never mentions.

Sole Proprietor or Standard brand?

This is the first fork, and choosing wrong costs you a rejection that resubmitting can't fix. HighLevel's brand registration guide (updated 29 September 2026) puts it simply:

  • Standard brand: you have an EIN or another accepted business registration number. Use the legal name and EIN exactly as they appear on IRS records. HighLevel suggests uploading your CP-575 letter to fill these in, and warns that a newly issued EIN can take time to reach verification systems.
  • Sole Proprietor brand: you have no EIN, no registered entity and only one employee. You must use a public email address such as Gmail, not a business domain, and a U.S. or Canadian mobile number that can receive a one-time code. VoIP and LeadConnector numbers aren't accepted, and one mobile number can be used for up to three Sole Proprietor brands.
  • Sole Proprietor accounts are limited to one campaign and one phone number. If you add a second local number, texts from it can fail with error 30034 even though the brand is approved.

Most contractors with a truck, a crew and a business bank account have an EIN, so most should register as Standard. HighLevel's rejection list is blunt about the alternative. Error 30903 says an LLC, Inc. or any incorporated business can't register as a Sole Proprietor, and carriers will keep rejecting it until the registration type changes.

Low Volume or High Volume?

Standard brands then choose a messaging volume. HighLevel's campaign registration guide lists Low Volume Standard at up to 6,000 SMS segments a day and High Volume Standard at up to 600,000, both with multiple numbers. A segment is roughly 160 plain-text characters. A 300-character review request counts as two. Even a busy home-service company sending missed-call replies, reminders and review requests rarely gets close to 6,000 a day, so Low Volume is the usual starting point.

What it costs and how long it takes

These numbers come from HighLevel's A2P fee page, last updated 10 November 2026. HighLevel says they're pass-through charges from The Campaign Registry, Twilio and the carriers with no markup, and that they can change at any time. Check the price shown in Trust Center before you submit.

Brand typeOne-time fee (brand, first campaign vetting, Fast Track)Limits
Sole Proprietor$22.501 number, 3,000 segments a day
Low Volume Standard$22.50Multiple numbers, 6,000 segments a day
High Volume Standard$64.00Multiple numbers, 600,000 segments a day

On top of that you pay a monthly campaign fee: $2 for a Sole Proprietor campaign, $10 for standard use cases, $1.50 for Low Volume Mixed, $3 for charities and $5 for emergency services. A second campaign under the same brand costs a $15 vetting fee. Resubmitting a rejected campaign costs nothing extra. Carrier fees per message are separate. Twilio's A2P pricing article gives the underlying registry fees: a $4.50 brand registration, a $15 campaign vetting fee and $41.50 for secondary vetting on Standard brands, after The Campaign Registry raised its fees on 1 August 2025. Add them up and you get HighLevel's bundles: $4.50 + $15 + $3 = $22.50, and $4.50 + $41.50 + $15 + $3 = $64.

On timing, HighLevel says its bundled fee includes $3 Fast Track processing "to expedite approval within 3 business days". Twilio's campaign vetting FAQ says standard campaigns take up to 5 business days and suggests contacting support if vetting is still running after 10 days. Twilio's error documentation adds that Sole Proprietor campaigns are usually decided within hours to days. Treat these as targets, not promises. A rejection sends you back to the start of the queue.

Getting your website ready before you start

Many contractor rejections start with the website, not the forms. Reviewers open your site and try to confirm three things: this is a real business, it's the business named on the brand, and people can opt in to texts there. HighLevel's rejection guide describes what fails.

  • A one-page site. Error 30919 says a single page with no about section and no description of your services will be rejected. "Consulting" isn't specific enough, and neither is "home services". Say what you do and where: roof repair and replacement in Plano and Frisco, for example.
  • The wrong URL. Submit your main website, not a funnel page or the page your form sits on. The domain should match the one on your brand registration.
  • Broken pieces. Buttons that go nowhere, leftover placeholder text like [company name], and social icons linking to facebook.com instead of your own page all count against you.
  • A different name. If you trade under a name that isn't your legal name, put the legal name somewhere on the site. The footer, terms or privacy policy is fine.
  • A free email address. Error 30881 rejects a Gmail or Yahoo support email on a Standard brand. Use an address on your own domain, ideally the same domain as your website.

If your site is thin, fix that before registering. A rejection only costs you time, since resubmission is free, but it can cost a week of texting while you sort it out. If you don't have a proper site yet, our free website for service businesses is built in GoHighLevel with the pages reviewers expect.

The privacy policy clause carriers look for

Error 30908 is a rejection for a missing or non-compliant privacy policy. HighLevel's guidance for that error gives a sentence to add word for word:

No mobile information will be shared with third parties or affiliates for marketing or promotional purposes. Information sharing with subcontractors in support services, such as customer service, is permitted.

Put it on a live page on your own domain. HighLevel says a pop-up or modal doesn't count. Link it from the page with your opt-in form, not only from the footer of the home page. HighLevel's opt-in, privacy and terms guidelines add that if your policy talks about sharing personal information elsewhere, you should state that SMS opt-in data and consent are excluded from that sharing. Look for words like "share", "sell" and "affiliates" in your existing policy. Error 30885 and 30897 rejections can follow if your policy suggests phone numbers or consent are passed to third parties, and those two can't simply be fixed and resubmitted.

Terms that cover your texts

Error 30882 covers terms and conditions. HighLevel's fix lists what your SMS terms need: your business name and what you send, how often, that message and data rates may apply, how to opt out (reply STOP), how to get help (reply HELP), that carriers aren't liable for delayed or undelivered messages, and a link to your privacy policy. A short "Text messaging" section in your existing terms is enough, as long as the campaign points to it.

The opt-in form: where most contractor campaigns fail

Contractors collect phone numbers everywhere: estimate request forms, quote calculators, chat widgets, Facebook lead forms, the phone. HighLevel's campaign approval best practices (updated 2 September 2026) put one line in a box of its own: collecting a contact's phone number doesn't by itself establish consent to receive SMS messages.

For a website form, HighLevel lists what reviewers need to see:

  • An SMS consent checkbox that isn't ticked by default.
  • Consent that isn't required to submit the form. Someone should be able to request an estimate without agreeing to texts.
  • A checkbox for texts only, not combined with accepting your terms or signing up for email.
  • Wording next to the box that names your business, says what you'll send, gives the frequency, says message and data rates may apply, and explains HELP and STOP.
  • Live privacy policy and terms links on the same page as the form.
  • Separate boxes for marketing and non-marketing texts if you send both.

Twilio's documentation for error 30924 (missing consent language) adds a detail people miss: the wording has to be at or right next to the checkbox, not buried in a linked document. It also shows a checkbox that just says "I agree to the Terms of Service" as an example that would be rejected.

Here's a starting point for a home-service estimate form. Swap in your details, and adjust the message types so they match what you actually send:

[ ] Yes, text me about my request. I agree to receive appointment reminders, job updates and replies to my enquiry by text from [Business Name] at the number above. Message frequency varies. Message and data rates may apply. Reply HELP for help or STOP to opt out. See our Privacy Policy and Terms.

[ ] Yes, send me occasional offers. I agree to receive marketing texts, such as seasonal service offers, from [Business Name]. Up to [4] messages a month. Message and data rates may apply. Reply HELP for help or STOP to opt out. Consent is not a condition of purchase.

Only include the second box if you'll really send offers. Your opt-in wording, campaign description and samples all have to describe the same program. If your form also lives somewhere a reviewer can't open, like a paper estimate sheet or a form behind a login, HighLevel asks for a public link to a screenshot of it. A common gap is the contact form itself. The SMS box gets added to the website, but the funnel page you actually run ads to still has the old form without it.

Chat Widget setup or Manual setup?

HighLevel's campaign flow opens in Chat Widget Setup by default. It generates an opt-in widget for your site and fills in the description, samples and opt-in fields for you. It's the quickest path, with one catch for contractors. HighLevel says the widget must be the only form on the submitted page that collects SMS consent. If your home page also has a quote form asking for a phone number, reviewers may assess that form instead, which is a 30909 rejection waiting to happen.

If your leads come through your own estimate form, a Facebook lead form, a paper sheet or the phone, switch to Manual Setup and describe each method. HighLevel's guide notes that in Manual Setup you should use plain placeholders in samples, not HighLevel custom fields. So write [First Name], not a merge tag.

Campaign descriptions that read like a real contractor

HighLevel's best-practice guide says a description should answer five questions: who sends the messages, who receives them, what types of messages, why, and how recipients opt in. Its weak example is "This Campaign sends messages to customers." Most contractor rejections for error 30886 look a lot like that.

A description that works for a home-service business names the trade and service area, lists the real message types, and says where consent happens. Here's a roofing example to adapt:

[Legal Business Name] is a roofing contractor serving [City and surrounding area]. We send text messages to homeowners and property managers who request an estimate through the form at https://[yourdomain].com/contact and tick the optional SMS consent box. Messages include replies to missed calls and enquiries, inspection and estimate appointment reminders, crew arrival updates, job completion notices and review requests. Message frequency varies. Recipients can reply HELP for help or STOP to opt out at any time. We do not share mobile numbers or SMS consent with third parties.

If you use a trading name, HighLevel's guide suggests adding "We are doing DBA as [Business Name]" to the description, then making sure the website, policies and opt-in wording show the same legal name and DBA. Use the builder below to generate a description for your trade, with sample messages, opt-in wording and HELP and STOP replies, all with a copy button.

Examples to adapt

Build your campaign wording

Pick your trade and what you'll send. You get a description, sample messages, opt-in wording and HELP and STOP replies that all tell the same story. Not a guaranteed approval.

Suggested use case: An informational use case such as Customer Care

Campaign description

[Business Name] is a roofing company serving [City and surrounding area]. We send text messages to homeowners and property managers who request service through the form at https://[yourdomain].com/contact and tick the optional SMS consent box. Messages include replies to missed calls and enquiries, roof inspection reminders and review requests. Message frequency varies. Recipients can reply HELP for help or STOP to opt out at any time. We do not share mobile numbers or SMS consent with third parties.

Sample messages

1. [Business Name]: Sorry we missed your call. What do you need help with, and what's the property ZIP code? A team member will reply during business hours. Reply STOP to opt out. 2. Hi [First Name], this is [Business Name]. Your roof inspection is booked for [Date] at [Time]. Reply C to confirm or R to reschedule. Reply STOP to opt out. 3. Hi [First Name], thanks for choosing [Business Name]. Would you leave us a quick review? https://[yourdomain].com/review Reply STOP to opt out.

Opt-in checkbox wording

[ ] I agree to receive replies to my enquiry, roof inspection reminders, review requests by text from [Business Name] at the number provided. Message frequency varies. Message and data rates may apply. Reply HELP for help or STOP to opt out. Privacy Policy: https://[yourdomain].com/privacy Terms: https://[yourdomain].com/terms

HELP and STOP replies

STOP: [Business Name]: You're unsubscribed and won't receive more texts from us. Reply START to resubscribe. HELP: [Business Name]: For help, call [Office Phone] or email support@[yourdomain].com. Reply STOP to opt out. Msg & data rates may apply.

Your samples include a link, so tick the embedded link option in the campaign. Use the full address on your own domain, never bit.ly.

Choosing the use case

The use case has to fit the messages. Inside Chat Widget Setup you choose Marketing, Informational or Mixed, and HighLevel says choosing Mixed automatically sets the campaign to Low Volume Mixed. That's the $1.50 a month use case, limited to 2,000 segments a day to T-Mobile with lower throughput. For a contractor who sends service messages plus the odd seasonal offer, Mixed is usually the honest choice. If you'll never send promotions, an informational use case such as customer care is cleaner. Check HighLevel's use case list in Trust Center before you pick, because the use case and opt-in message may not be editable on resubmission.

Sample messages for home-service businesses

HighLevel's rejection guide (error 30893) asks for samples that reflect what you'll really send, mark changing details with brackets, and include your business name in at least one message. Error 30892 rejects public link shorteners like bit.ly or tinyurl. A branded short link on your own domain is fine. These are examples to adapt. Each has the business name, brackets for details that change, and opt-out wording:

  • Missed call (any trade): [Business Name]: Sorry we missed your call. What service do you need, and what's the property ZIP code? A team member will reply during business hours. Reply STOP to opt out.
  • Estimate reminder (roofing): Hi [First Name], this is [Business Name]. Your roof inspection is booked for [Date] at [Time] at [Street Address]. Reply C to confirm or R to reschedule. Reply STOP to opt out.
  • Technician on the way (HVAC): [Business Name]: [Technician Name] is on the way for your AC service and should arrive around [Time]. Reply HELP for help or STOP to opt out.
  • Review request (plumbing): Hi [First Name], thanks for choosing [Business Name] for your water heater install. Would you leave us a quick review? https://[yourdomain].com/review Reply STOP to opt out.
  • Seasonal offer (house cleaning, only with marketing consent): [Business Name]: Spring deep-clean dates for [Month] are open. Book online at https://[yourdomain].com/book Reply STOP to opt out.

Two settings trip people up. If any sample includes a phone number, tick the embedded phone number option, or vice versa, because error 30889 checks that the two agree. The same goes for links. Paste your own samples into the checker below before you submit. It flags a missing business name, missing STOP wording, link shorteners, non-secure links, merge tags and messages that will split into extra segments.

Paste a sample

Will this sample message pass?

Checks the things HighLevel's rejection codes name most often. Reviewers also judge whether the message matches your use case, so a clean result isn't an approval.

Paste a sample message or try an example.

STOP and HELP replies

Errors 30887 and 30890 cover opt-out and help handling. HighLevel's guide says the reply to STOP should confirm the request, say no more messages will be sent and name the business. The reply to HELP should name the business and give a phone number or email. For example:

STOP reply: [Business Name]: You're unsubscribed and won't receive more texts from us. Reply START to resubscribe.

HELP reply: [Business Name]: For help, call [Office Phone] or email [support@yourdomain.com]. Reply STOP to opt out. Msg & data rates may apply.

HighLevel's SMS compliance settings also add sender identification and opt-out wording to the first outbound message in a conversation when they're missing, and can repeat them every 1 to 60 days. Sub-accounts created within the last 15 days can't turn this off. Leave it on, and check how the first message actually arrives on a real phone.

Opt-outs also come in plain English. CTIA's Messaging Principles and Best Practices expect senders to honor opt-out requests, and since 11 April 2025 FCC rules let people revoke consent to automated texts by any reasonable means. "Stop texting me" or "please remove me" should be treated like STOP, so make sure someone in the office knows to mark the contact DND. This isn't legal advice. If you're unsure, ask a lawyer who knows the TCPA.

Submitting, waiting and fixing a rejection

When everything is ready, HighLevel runs an AI compliance review before you can submit. Its campaign guide says you can't submit until all the required checks pass, and that passing them doesn't guarantee approval. Then the campaign sits in Pending. HighLevel's advice is not to create another campaign or resubmit while it's pending.

If it comes back rejected, open Trust Center, go to Brands & Campaigns, then Campaigns, and click View required fixes next to every reason. HighLevel's rejection reasons and resolutions page (updated 12 October 2026) lists each error code with the fix. Its advice is to fix every listed reason and recheck the whole campaign, not just the field named, because the next review can find something new. Some rejections, such as banned content (30883), spam flags (30884) and disallowed categories like third-party lead generation (30897), can't be resubmitted at all.

Pick a status or error code in the guide below to see what it means for a contractor and what to change.

Status or error code

What does it mean, and what do you change?

Based on HighLevel's rejection reasons page (updated 12 October 2026). Open View required fixes in Trust Center for the exact wording on your campaign.

Pending: Still under review

Carriers and the vetting partner haven't decided yet. HighLevel's Fast Track targets 3 business days; Twilio quotes up to 5 for standard campaigns.

  1. Don't create a second campaign or resubmit while it's pending.
  2. If it's still pending after 10 business days, contact HighLevel support with your brand and campaign names.

Next step: Not needed

Approved, but texts still fail

Approval isn't the last step. HighLevel's guide to linking a number to an approved campaign says each local number needs the green A2P Verified label under Settings > Phone System > Phone Numbers. If it's missing, open the number's menu and choose the campaign to link. Repeat this every time you buy another number. A missed-call text back setting pointed at an unlinked number is a quiet way to lose leads. HighLevel also notes carriers may need several business days to receive the updated registration after approval.

A hypothetical example: an HVAC company's second try

Here's how this could play out for a hypothetical three-van HVAC company. The owner registers as a Standard brand with the EIN from the CP-575 letter, chooses Chat Widget Setup, and submits. Four days later the campaign is rejected with 30909 and 30908. The home page has the chat widget and a "Book a tune-up" form asking for a phone number, so reviewers looked at the wrong form. The privacy policy, generated years ago, says the company may share information with partners.

The fix takes an afternoon. The office manager switches to Manual Setup, adds an unticked SMS checkbox with full consent wording to the booking form, and removes the chat widget from the page. She adds the carrier sentence to the privacy policy along with a line excluding SMS consent from any sharing, adds a text messaging section to the terms, and rewrites the description to name the trade, the service area and the booking form URL. She also replaces a bit.ly link in the review request sample with the full review URL on the company's own domain. The resubmission costs nothing, and the campaign is approved later that week. The figures and timings here are illustrative, not a promise of how long yours will take.

Where this fits in your HighLevel setup

A2P registration is the plumbing behind most of what contractors use HighLevel for. Our missed call text back guide covers the replies and testing once you're approved, and our post on automated lead follow-up in GoHighLevel covers where SMS fits in the sequence. If you buy leads, an approved campaign is what lets HighLevel text a homeowner a minute after the lead lands. That's the whole point of the intake workflows in our guides to Angi leads in GoHighLevel, the Thumbtack GoHighLevel integration and Google Local Services Ads in GoHighLevel.

One warning for lead buyers: you can text a marketplace lead about the job they asked about, but that isn't consent to your marketing list. Keep the two separate in your workflows, and only send offers to contacts who ticked the marketing box.

Common mistakes we see

  • Registering an LLC as a Sole Proprietor because it looked cheaper and faster. It's the same $22.50 as Low Volume Standard, and it gets rejected.
  • Submitting the funnel page instead of the main website, or a one-page site with no services or about section.
  • A pre-ticked SMS checkbox, or one that's combined with agreeing to the terms.
  • Sample messages without the business name, or with bit.ly links.
  • A privacy policy that mentions sharing data with partners and has no SMS exclusion.
  • Using a Gmail support address on a Standard brand.
  • Forgetting to link a newly bought number to the approved campaign.

Where to start this week

Run the readiness check above and fix whatever it lists before you open Trust Center. Then generate your description and samples with the builder, paste the samples into the checker, and submit once. If you'd rather hand it over, our GoHighLevel automation service covers A2P registration along with the texting workflows, and our CRM setup for service businesses covers the forms, consent fields and pipelines behind them. If the texts are for marketplace leads, our lead source integration service connects Thumbtack, Angi, Yelp and Google LSA to the same workflows. You can also book a call and we'll look at your current registration with you.

Frequently asked questions

Do contractors need A2P 10DLC registration to text from GoHighLevel?

Yes, if you text U.S. customers from a local 10-digit number, including missed-call text back, appointment reminders and review requests. HighLevel requires Brand and Campaign registration in Settings > Phone System > Trust Center, and Twilio blocks messages from local numbers that aren't linked to an approved campaign (error 30034). Toll-free numbers use a separate verification process.

How much does GoHighLevel A2P registration cost?

HighLevel's fee page (updated 10 November 2026) lists a one-time $22.50 for Sole Proprietor or Low Volume Standard brands and $64 for High Volume Standard. That covers the brand, the first campaign's vetting and $3 Fast Track processing. Monthly campaign fees are $2 for Sole Proprietor, $10 for standard use cases and $1.50 for Low Volume Mixed. Extra campaigns cost $15 each, and resubmitting a rejected campaign costs nothing extra. These are pass-through fees and can change, so check Trust Center before you submit.

How long does A2P approval take in GoHighLevel?

HighLevel's bundled fee includes Fast Track processing that aims for approval within 3 business days. Twilio, which runs LC Phone underneath, says standard campaigns take up to 5 business days and Sole Proprietor campaigns usually hours to days, and suggests contacting support if vetting runs past 10 days. Neither is a guarantee, and a rejection restarts the wait.

Can an LLC register as a Sole Proprietor brand?

No. HighLevel's rejection guide (error 30903) says an LLC, Inc., Co. or any incorporated business can't register as a Sole Proprietor, and resubmitting won't fix it. Sole Proprietor is only for individuals or one-person businesses with no EIN or registered entity. If you have an EIN, register as a Standard brand.

What should a contractor's A2P campaign description say?

Name the business and trade, the service area, who receives texts, what you send (missed-call replies, estimate reminders, job updates, review requests and any offers), how people opt in with a link to the form, message frequency, and that recipients can reply STOP or HELP. It should match your sample messages, website and opt-in form word for word on the business name.

Why was my A2P campaign rejected?

The most common reasons in HighLevel's rejection list are a vague campaign description (30886), sample messages without your business name (30893), public link shorteners like bit.ly (30892), a website reviewers can't load or verify (30891, 30919), an opt-in form without proper SMS consent wording (30896, 30909) and a privacy policy missing the SMS clause (30908). Open View required fixes in Trust Center and fix every listed reason before resubmitting.

Muhammad Asif Khokhar — Founder & CEO, One Scale System

Muhammad Asif Khokhar

Founder & CEO, One Scale System

Part of the One Scale System team, helping small and local businesses grow with websites, CRM, automation, and digital marketing done for you.

Ready to grow your business?

Get a free professional website and a lead system that captures every customer — built and run for you.

Related articles

All articles
Back to all articles