How I Onboard Clients on GoHighLevel (My 12-Step Checklist)
-
Farhad Hossen - Automation
- 28 Sep, 2026
Over the last few months, I have onboarded 5+ businesses on GoHighLevel.
In the beginning, I had no checklist. Each setup took a long time. Sometimes I missed important things. Over time, I built this checklist. Now I use it for every client. It works great.
In this post I will share the full checklist. For each step, I will tell you where to find it in GHL and why I do it in this order. The order matters more than the steps.
The whole process at a glance
I split the work into 4 parts and 12 steps.
- Before I touch the dashboard. I collect info and access. (Steps 1 and 2)
- Start the slow approvals. I do the things that need outside approval first. (Steps 3 to 6)
- Build. I connect the tools and set up the system. (Steps 7 to 9)
- Test and hand over. I prove it works. Then I train the client. (Steps 10 to 12)
How long each part takes depends on the project. A small business with one calendar is quick. A team with five staff and three locations is not. So I do not promise dates. I promise the order.
The one rule that never changes: the client goes live when the phone number shows “A2P Verified.” Not before.
I track every client in a pipeline inside my own agency sub-account. Each stage is one step. I use GHL to onboard people onto GHL.
Part 1: Before I touch the dashboard
Step 1: Kickoff call and intake survey
I start with a short call. Then I send an intake survey. I build the survey in GHL. Go to Sites > Surveys.
The answers land on the contact record as custom fields. So everything stays in one place.
Here is what I ask for, and why:
- Legal business name, exactly as on the IRS papers. Needed for A2P. If one letter is off, the carrier will reject it.
- EIN. Also for A2P. If they have no EIN, there is a slower path. More on that in Step 5.
- Business address, phone, and website URL. The carrier checks that the website matches the business.
- Owner name, email, and phone.
- A notification email. This is where lead alerts go.
- Time zone. Calendars and workflows depend on it.
- Preferred area code for the new number.
- Current phone number. In case they want calls forwarded.
- Staff list. Name, email, and what each person should be able to do.
- Two or three texts they would send to a customer. I use these as sample messages for A2P.
- Logo and brand colors.
- Do they have a Stripe account?
- Their booking hours.
Each field feeds a later step. That is the point. I never want to go back and ask again.
Step 2: Access, not passwords
I do not ask for website passwords or DNS passwords in the form.
Survey answers sit in custom fields. Any user with contact access can read them. A password does not belong there.
Instead, I ask for access:
- Cloudflare: Add me as a member.
- GoDaddy or Namecheap: Give me delegate access.
- WordPress: Make an admin user for me.
I send a short template with the exact steps. When it is done, I add a note on the contact: “DNS access granted.”
If a client still wants to share a password, I ask them to use a password manager link that expires.
Part 2: Start the slow approvals
These steps come first because someone outside GHL has to approve them. Carriers approve the phone number. DNS has to update. If I do these last, the client waits.
Step 3: Create the sub-account and set the Business Profile
Go to the Agency view > Sub-Accounts > Create Sub-Account. I pick my snapshot in the same window. A snapshot is a copy of funnels, workflows, and settings that I built once and reuse.
Then I open the new sub-account and go to Settings > Business Profile. I set:
- Time zone
- Address
- Logo
- Business hours
I set the time zone first, before anything else. If the time zone is wrong, every calendar and every timed message is wrong. Fixing it later is painful.
Step 4: Add the client and their team
Go to Settings > Team > Add User.
GHL has two settings for each person:
- User Type: Agency or Account. Clients always get Account.
- Role: Admin or User.
There is no “Sales” role. You build it with the permission toggles.
Here is what I do:
- Business owner: Account type, Admin role. Full access.
- Front desk or sales staff: Account type, User role. I turn on Conversations, Contacts, Calendars, and Opportunities. I turn off Settings, Payments, and Workflows.
I also turn on two-factor login for the owner.
Step 5: Buy the phone number and submit A2P right away
This is the step most people do too late.
A2P 10DLC is a registration for business texting in the US. Without it, texts from a local number get blocked or filtered. The carriers approve it, not GHL. I cannot speed it up.
Brand approval is usually quick. Campaign approval is not. It can take a long time when the carriers are busy. And after approval, carriers still need time to update their systems.
So I start this as soon as the sub-account exists. Everything else can move while we wait.
Buy the number. Go to Settings > Phone System > Phone Numbers > Add Number. I pick the area code the client asked for. Then I assign it to the main user.
Submit A2P. Go to Settings > Phone System > Trust Center. There are two parts:
- Brand: Who is sending. Legal name, EIN, address. It must match the IRS records. If the client has the CP-575 letter, I upload it.
- Campaign: What they send and why. Use case, sample messages, website, and how people say yes to texts.
The campaign needs a live website with an opt-in form, a Privacy Policy, and Terms. That is why I build the website part (Step 9) to match exactly what I put here.
No EIN? There is a Sole Proprietor path. It is slower and allows fewer texts. GHL sometimes pauses it. I tell the client the truth about this up front.
My hedge. I also submit a toll-free number for verification at the same time. Toll-free approval is often faster. If A2P is slow, the client can still text.
Done means one thing: the number shows a green A2P Verified label. Not “submitted.” Verified.
Step 6: Connect the domains
Two domains, done now.
Funnel domain. Something like go.clientsite.com. Go to Settings > Domains > Add Domain. I add the DNS records using the access from Step 2.
Email sending domain. Something like mail.clientsite.com. Go to Settings > Email Services > Dedicated Domain. I add the records and wait until SPF, DKIM, and DMARC all show verified.
Why now? Because every test email I send in Step 8 should come from the real domain. And a new domain needs time to warm up before it can send in volume.
Part 3: Build
Step 7: Integrations the client has to click themselves
Some things the client must connect. They log in with their own accounts. I cannot do it for them.
- Facebook and Instagram: Settings > Integrations. The client must be an admin of the Facebook Page. If an old agency still owns the Page, this stalls.
- Google Business Profile: Settings > Integrations > Google. This pulls in reviews. It does not connect their calendar. That is a different setting.
- Stripe: Payments > Integrations, not Settings. People look in the wrong place.
- Calendar sync: Calendars > Calendar Settings > Connections. Each person connects their own Google or Outlook calendar.
- TikTok and LinkedIn: Only if they post on social. You connect these from Social Planner.
I make this easy. I record one short Loom video. Or I do it with them on a quick call while they share their screen.
Step 8: Load the snapshot, then make it theirs
If I did not load the snapshot in Step 3, I do it now. From the Agency view, go to Sub-Accounts. Click the three dots next to the client. Then Manage Client > Load Snapshot.
A snapshot is a starting point. It is not the finished work. Here is my customize pass, in order:
- Custom Values first. Settings > Custom Values. Business name, phone, booking link, review link. Every template pulls from these. Set them once, and they update everywhere.
- Re-point the triggers. Open each workflow. Make sure it points to this client’s calendar and this client’s form. Not the ones from the snapshot.
- Rewrite the messages. Every SMS and email gets the client’s voice. A dentist and a roofer do not sound the same.
- Assign users. Who gets the lead? Who gets the task?
- Fix the pipeline stages. Match them to how the client actually sells.
- Delete what they will not use. Fewer workflows means fewer surprises.
Step 9: Website: forms, calendar, chat, and SMS consent
Now I put GHL on the client’s website.
- Form: Sites > Forms. I use the native GHL embed code. Not a custom HTML form. Custom forms do not fire workflows.
- Calendar widget: Embed code from the calendar.
- Chat widget: Sites > Chat Widget.
- Tracking scripts: Google Analytics, Hotjar, and pixels go on the site directly. These are not GHL features.
Then the part most people skip: the SMS consent checkbox. This is what the carrier looks at in Step 5. Get it wrong and the campaign gets rejected.
My rules:
- The box is unchecked by default. The visitor must click it.
- It is a separate box from “I agree to the Privacy Policy.”
- Marketing texts and appointment texts get two boxes, not one.
- The text says how often they will get messages. It also says they can reply STOP or HELP.
- The Privacy Policy says how SMS data is used. It does not say data is shared with affiliates.
- If the chat widget is the opt-in method I told the carrier about, I take the checkboxes off the other forms.
Part 4: Test and hand over
Step 10: One test lead, end to end
Nothing ships until this passes.
I go to the live website. I fill in the form like a real customer. Then I follow that one lead through the whole system:
- Contact is created with the right tags.
- Workflow fires. I check Automation > Workflows > Execution Logs.
- SMS arrives on my phone, from the client’s number.
- Email arrives, from the client’s domain, in the inbox and not in spam.
- I book a slot. It shows on the client’s synced Google calendar.
- The opportunity moves in the pipeline.
- The client gets the alert on their phone.
If any one of these fails, I fix it and run it again.
I also push new leads to Discord for some clients. I wrote about that here: How I Send Instant Discord Alerts for New GHL Leads.
Step 11: Training and the walkthrough call
Two parts.
Videos first. I send a short set of videos before the call. One video per topic. Conversations, Calendar, Pipeline, and the mobile app. The client watches them on their own time.
Then a live call. I share my screen and we go through:
- The dashboard
- Conversations: how to reply to a lead
- Calendar: how bookings show up
- Pipeline: how to move a deal
- The mobile app: install it and turn on notifications
- Reports: the two or three numbers that matter
I record the call and send them the link. Nobody remembers everything from one call.
Step 12: Go-live checklist
Before I say “you are live,” every box here is checked:
- Number shows A2P Verified and is linked to the approved campaign
- Email domain shows all records verified
- Test lead passed, end to end
- Client has logged into the mobile app
- We agreed on who pays for text and email usage
- Follow-up check-in calls are booked
Then I move the client to the last stage of my pipeline.
Where onboardings go wrong
Things I have hit:
- A2P campaign rejected. The consent box was checked by default. Or the Privacy Policy had no SMS line. Fix the site, then resubmit.
- Brand rejected. The business name did not match the IRS record. One word off is enough.
- Facebook will not connect. An old agency still owns the Page. The client has to get admin access back first.
- Calendar is off by hours. The time zone was set after the snapshot loaded. Check Business Profile first.
- Form submits, but nothing happens. The site uses a custom HTML form. Swap it for the GHL embed.
- Test emails landed in spam. The email domain was not verified yet. Wait for DMARC, then test again.
- Texts fail after approval. Carriers still need time to update. Also check that the number is linked to the campaign.
FAQ
How long does onboarding take?
It depends on the project. The number of staff, calendars, and locations changes the work. The biggest wait is A2P approval, and the carriers control that, not me. I share a plan with each client after the kickoff call.
Do I need the $497 plan?
Not for this checklist. The $497 plan adds SaaS mode. In SaaS mode a client can sign up and pay on their own, and GHL makes the sub-account for them. Every other step stays the same.
Can you onboard a business outside the US?
Yes. Phone rules change by country. Some countries need documents before you can buy a number. In some markets WhatsApp works better than SMS. Everything else on this list is the same.
What do you need from me as the client?
The intake survey. Access to your DNS and website. A few clicks to connect Facebook, Google, and Stripe with your own logins. And one walkthrough call.
Do I need my own Twilio or Mailgun account?
No. I use the built-in phone and email system in GHL. It is simpler and billing stays in one place.
I already have a GHL account. Can you still use this checklist?
Yes. I skip Step 3 and run the rest. Most existing accounts are missing A2P, a verified email domain, or a real test lead.
Want this done for your business?
This is what I do. If you want your GoHighLevel set up this way, book a free call.
If you want the checklist itself, send me a message on LinkedIn. It is a simple sheet with an owner, a blocker, and a done column for each step. It is the same one I use.