You fire off a test workflow in GoHighLevel, but the message never lands on your phone. You open the conversation thread or LC Phone logs and get hit with error 30007 or 30034. Outbound SMS is completely dead across the sub-account.
The culprit is almost always unverified US A2P 10DLC (Application-to-Person 10-Digit Long Code) registration. In this guide, I’ll walk you through diagnosing carrier error codes, formatting your brand and campaign submissions so human reviewers actually approve them on the first try, and binding your numbers to the approved campaign pool.

The Real Reason GoHighLevel SMS Drops Out
US carriers (AT&T, T-Mobile, Verizon) flat-out drop automated or commercial SMS sent from unregistered 10-digit long codes. If your agency or client sub-account tries sending texts without an approved A2P campaign, carrier firewalls discard the packets at the gateway.
You’ll typically see one of three error codes in your HighLevel logs or Twilio console:
- Error 30034: US A2P 10DLC – Message Filtered. Your sending number isn’t linked to an active, approved A2P campaign. This is by far the most common blocker.
- Error 30007: Carrier Violation. The downstream carrier blocked the text because your number lacks an approved campaign or the content triggered spam filters.
- Error 30008: Delivery timeout or unknown error, usually from attempting to text a landline or a defunct mobile number.
Before tweaking your workflows, confirm whether the sub-account uses LeadConnector (LC) Phone or your own custom Twilio pool under Settings > Phone Numbers.
Check Sub-Account Setup and Error Logs
Always inspect the raw failure first. In the sub-account, head to Conversations, open the failed thread, and hover over the red warning icon next to the message.
If you’re managing multiple client accounts, grab the specific location ID first. If you need a refresher, check out our guide on how to find sub-account Location IDs in GoHighLevel.
If you’re firing messages through external webhooks or custom API endpoints, check your response payloads. A standard delivery status failure looks like this:
{ "type": "SMSDeliveryStatus", "locationId": "loc_98a76bc4e2", "contactId": "cnt_55102ab389", "messageId": "msg_01HXYZ7894K", "status": "failed", "errorCode": "30034", "errorMessage": "Message filtered due to missing A2P 10DLC registration", "to": "+15550192834", "from": "+15550148822"
}When errorCode is 30034, no amount of workflow rebuilding will fix it. You have to complete both Brand Registration and Campaign Registration.
Step 1: Pick Sole Proprietor vs Standard Brand
Under Settings > Phone Numbers > Trust Hub (or A2P Brand), HighLevel gives you two registration paths:
- Sole Proprietor: For individuals or freelancers without an official EIN/tax ID in the US or Canada. You get 1 phone number and low throughput (capped under 1,000 messages/day across carriers).
- Standard (Low / High Volume): For registered legal entities with a valid EIN, CCN, or corporate tax number. This supports multiple numbers and higher throughput.
If your business has an EIN, don’t try cutting corners with Sole Proprietor. Carrier registries cross-check legal names against IRS databases. A mismatch triggers an immediate rejection, and appeal queues can drag on for weeks.
Step 2: Submit Brand Info Without IRS Mismatches
The single biggest reason brand registrations get rejected is a clerical mismatch. Automated validation checks your inputs directly against IRS Form CP-575 or 147C.
- Legal Business Name: Match the IRS letter character-for-character. If your official letter says “ACME HVAC SERVICES LLC”, do not submit “Acme HVAC” or your DBA name.
- EIN: 9 digits. Don’t add hyphens if the UI auto-masks the field.
- Business Address: Use the exact physical address from your corporate filings.
- Business Type: Select the exact legal structure (LLC, Corporation, Partnership, Sole Proprietorship).
Check the HighLevel Knowledge Base for the latest carrier pass-through fees before you submit your brand verification.
Step 3: Configure Campaign Details and Sample Messages
Once your Brand is approved (or in “Pending” for standard setups), submit the Campaign Registration. Human reviewers at the Campaign Registry and carrier aggregators manually audit this section, and they reject vague descriptions on the spot.
1. Campaign Description
Clearly state who you are and why you send SMS. Keep it simple and precise.
Solid example: “Acme Dental uses this campaign to send appointment confirmations, reminder notices, and customer support follow-ups to existing patients who booked via our website form.”
2. Sample Message 1 and Sample Message 2
Your sample messages must include your sender identity, explicit context, and standard opt-out keywords (STOP).
// Sample 1: Appointment Confirmation
const sampleOne = "Hi [Contact Name], this is Alex from Acme Dental. Your appointment is confirmed for [Date/Time]. Reply STOP to opt out or HELP for help.";
// Sample 2: Customer Support Follow-up
const sampleTwo = "Hello [Contact Name], thanks for reaching out to Acme Dental. Our team is reviewing your question and will reply shortly. Text STOP to cancel.";3. Opt-in Workflow and Verification Link
Explain exactly how users opt in. Writing “Customers agree verbally” will fail review every single time. The cleanest method is an online form with an explicit, unchecked consent box.
Include a direct link to your live opt-in form. If you host funnels inside GHL, make sure your domain is properly mapped. See our guide on how to connect a custom domain to GoHighLevel funnels if your form URL isn’t live yet.
Step 4: Update Your Privacy Policy and Consent Checkbox
Carriers automatically reject campaigns if your Privacy Policy lacks an explicit non-sharing clause for mobile data. A standard cookie-cutter privacy policy won’t pass muster.
Make sure your privacy policy contains a dedicated clause like this:
No mobile information will be shared with third parties/affiliates for marketing/promotional purposes. All the above categories exclude text messaging originator opt-in data and consent; this information will not be shared with any third parties.
Your lead forms also need an unselected-by-default checkbox or prominent disclaimer text right above the submit button:
“By providing your phone number and clicking submit, you agree to receive SMS communications from [Business Name]. Message frequency varies. Standard message and data rates may apply. Reply STOP to unsubscribe or HELP for assistance. View our Privacy Policy and Terms of Service.”
If you run automated response pipelines on top of your forms, take a look at our walkthrough for setting up a local AI SMS auto-responder with Ollama and GoHighLevel to ensure your inbound and outbound webhooks stay structured properly.
Step 5: Assign Numbers to the Approved Campaign
An approved campaign doesn’t mean your numbers start working automatically. Once the campaign status flips to Verified or Approved, you have to manually assign your numbers to that campaign pool.
- Go to Settings > Phone Numbers.
- Open the Phone Numbers tab.
- Check the A2P Campaign column next to each number.
- If it says “Unassigned”, click the pencil icon to edit the number.
- Select your approved campaign from the dropdown and save.
If you also send automated onboarding emails alongside SMS, it’s worth setting up a dedicated email sending domain in GoHighLevel so both channels clear authentication checks at once.
Testing SMS Delivery with a Test Contact
Don’t run a bulk workflow test right after approval. Start with a single manual SMS to a real mobile number outside your platform.
Here is the quick check:
- Create a contact record with your own personal cell number.
- Ensure the contact’s DND (Do Not Disturb) toggle is disabled.
- Open the conversation panel and send:
Test message from [Business Name]. Reply STOP to opt out. - Verify the message shows two green checkmarks (Delivered).
If the manual text fails, review your automation logs or webhooks. If workflows aren’t triggering properly, check our guide on fixing GoHighLevel webhooks that are not firing.
Frequently Asked Questions
How long does A2P 10DLC approval take in GoHighLevel?
Brand approval usually clears within 15 minutes to 24 hours if your EIN details match IRS records. Campaign manual reviews by carrier aggregators take anywhere from 2 to 10 business days, though review backlogs can push this to 3 weeks during peak registration periods.
Can I send SMS while my A2P registration is in ‘Pending’ status?
No. US Tier-1 carriers filter all unregistered long-code traffic with error 30034. International messages outside the US might still go through depending on local regulations, but all domestic US SMS will fail until verification is approved and assigned.
Why was my campaign rejected for ‘Direct Lending / Affiliate Marketing’?
Carriers enforce zero-tolerance policies on payday loans, debt relief, crypto offers, multi-level marketing, and third-party affiliate promotions under the CTIA Messaging Principles and Best Practices. If your copy touches financial relief or affiliate offers, revise your samples and use case before appealing.
What should I do if my brand registration failed due to a tax ID error?
Pull up your original IRS CP-575 confirmation letter or Form 147C. Check the legal entity spelling down to commas and periods, then resubmit the brand in Trust Hub. If your LLC was formed within the last 2 to 3 weeks, wait a few days for the IRS database to sync with third-party verification registries before submitting again.
Next Steps
With your A2P campaign approved and SMS delivering reliably, make sure you maintain a stable deployment setup for your sub-accounts. Check out our tutorial on updating GoHighLevel snapshots without overwriting sub-account assets to push workflow changes safely across all client locations.

