Internal SOP · Team
Phase 7 of the New Contractor Build Runbook. It runs after his mini-site is live, and it's the first time he gets inside his own account.
Just under 50 minutes. Book an hour. Recorded. Screen share. The nine parts below add to 47.5 minutes.
This call has three jobs, in this order:
Brian runs it, from the first one. The call is a GoHighLevel account tour plus a set of social connections, and both halves are his. The half he hasn't seen is our own pages, and Part 7 is where they come up.
Suzanne does the account prep in the table below. Every row is credential-locked or database work and none of it belongs in a rep's hands.
Suzanne sits on the first run only, muted, camera off. Not to help with the call. To catch anything that breaks on our own pages while he's looking at them. After run one she's off these calls.
A vendor is a supply house, lumber yard or rental shop that partners with us. The vendor technical call follows this document with these changes:
A call where one of these is undone is a call spent apologizing. If a row isn't done, move the call.
| # | What | Where |
|---|---|---|
| 1 | contractors.ghl_location_id set to his sub-account id |
Neon, TTS_WEBSITE_DB_URL. This is the row that makes his three custom pages work, and it's the one that gets missed. All three sign him in through getEditorUserByGhlLocationId, which runs select id, slug from contractors where ghl_location_id = $1 and status = 'active'. An empty column answers "No mini-site is linked to this account yet." load-contractor-handoff.mjs doesn't write this column, so every contractor that script loads arrives with the same hole. |
| 2 | Confirm the two Marketplace apps are on the sub | The Mini-Site Editor and Lead Billing pages ride in on the snapshot, so this is a confirm and not a build. The earlier runbook line saying each one has to be installed by hand was written before the snapshot carried them. If a page is genuinely absent, the per-account install link is in the developer portal and the app ids are in the runbook. |
| 3 | Custom values filled: logo, primary_color, secondary_color, minisite_url, license_number, notifications_from, TTS support contact |
GHL sub, Settings > Custom Values. His emails render these. A blank one ships a broken line to a homeowner. |
| 4 | One active consultation calendar, assigned to him, and the workflows book into that one | GHL sub, Calendar settings. This one can't be finished before the call, because a calendar is assigned to a user and his user doesn't exist until Part 1. Turn the calendar on and assign it to him during the call, right after he signs in. See the note under the table. |
| 5 | Phone number provisioned, renamed to him, and A2P submitted | GHL sub, then the A2P Registration SOP. It clears in days. Start it early so Brian can give him a real date on the call. Two names to check, and they are different fields. The friendly name is what he sees on his own Phone System screen, and a snapshot leftover reading somebody else's name is the first thing he finds there. The CNAM is what shows on the phone of the homeowner he calls. Both are capped short, so plan the wording before typing it. |
| 5b | His email sending address on our domain, his name on ttscontractors.com, the way beacon.ttscontractors.com works |
GHL sub, Email Services. The DNS records go on ttscontractors.com, which we run, so we never need his domain host. Until it exists, notifications_from sends from an unverified domain and his alerts can land in spam. |
| 6 | His Private Integration Token written to <client project>/.env as GHL_SOCIAL_API_KEY |
The client project root, gitignored. This is what the content engine posts through. Connecting his socials does nothing if the push tool can't reach his account. |
| 7 | A row in contractor_users for his email |
Neon, TTS_WEBSITE_DB_URL. The magic-link fallback, so a broken single sign-on doesn't leave him locked out entirely. |
Then walk the whole account once as if you were him, per Build Guide Step 11. Everything you find, you find before he does.
His user login isn't on this list on purpose. Brian creates it live in Part 1.
The Consultation calendar is switched off in every sub, not only his. Checked on 2026-08-25 across Awesome Renovations and Mendez: the snapshot's Consultation calendar is inactive with no team members on both. Four published workflows sit on top of it, including Consultation Appointment Notifications and No-Show Rebooking, so today they have no calendar behind them. That is a snapshot question rather than a per-contractor one and it's bigger than this SOP. Raised, not fixed.
It keeps the call on time. Each line is somewhere the call stalls while he hunts for a password. Ask for every account Part 4 asks him to connect, so the list and the call agree.
Before our call tomorrow, have these handy:
- The login for your Google Business Profile. You connect it on the call, so keep it open.
- The login for your Facebook page, and your Instagram if you have one.
- Your LinkedIn and Threads logins, if you use them.
- The login for the calendar you use, Google or Outlook.
- Your phone, unlocked, next to you.
- An hour where nobody needs you.
"I record these so I can send you the video afterwards and you're not sitting there taking notes. That good with you?"
Create his user now, on the call. Do it from the agency, not from inside his sub.
The Beacon demo user is the last time: it came out role admin and type agency with three extra toggles on, and had to be matched over the API afterwards.
That sends his welcome email while he's watching. He opens it, sets his password, and signs in at app.ttscontractors.com. If his email is a Google account, the Sign in with Google button is faster.
Watch him get in before moving on. Everything after this assumes he's looking at his own screen.
The left nav once, top to bottom, in one pass. Name the three that matter today and say the rest can wait: Conversations, Opportunities, Calendars.
The nav is long and he's never seen it. Name three, move on, and he stays with you. Don't teach anything here.
Open his live mini-site editor. It's the thing he already bought and it's already working, so he sees something finished before we ask him to do anything.
He edits it himself and it goes live. Verified in the code 2026-09-16: the editor writes straight to the live contractors row, no draft and no approval queue, and verifyPhoto auto-approves an uploaded photo unless its GPS is over 50 miles from the claimed city or the file carries stock-photo provenance. Tell him that plainly. He can also reply to the onboarding email and have us make a change, which is an offer rather than the route. The Mini-Site Editor is in his nav. We'll have training that explains deeper.
Lead with what each one gets him, never with the steps.
| Connect | Where | What it gets him |
|---|---|---|
| Google Business Profile | Reputation > Overview | Watch him do it. "This is what brings your Google reviews in, and it is what builds your review link, the one you send a homeowner who is happy with the job." The panel names his business with his review count beside it; if it offers Connect account, it is not done. |
| Facebook, Instagram, LinkedIn, Threads, Google Business Profile | Social Planner | "We write your posts whether you connect your social accounts or not. They go out under your own name on whatever you hook up here, so connect the ones you actually use. Anything you skip is a place we can't post for you." Once Facebook is connected, its messages come into Conversations automatically. Say: "And once your Facebook page is connected, its messages come into this account, so you're not sitting in Facebook waiting on one." |
| Right after the social accounts are connected: the post reviews | Social Planner | "And before we post anything, we send you a link to review each set of posts. You review them on [your One Link / your secure profile link], which we email you." Say One Link to a contractor and secure profile link to a vendor. Don't say where inside the account the link sits. |
| His own Google or Outlook calendar | Calendar settings | "A booked consultation shows up on the calendar you already live in." |
If his Google Business Profile was claimed by a past marketing company, or his nephew owns the Facebook page, stop. He can't finish this part, and grinding on it burns the call. Note it, move on, and hand it back as its own job.
Conversations. One inbox, four channels: text, email, Facebook Messenger, Google Business messages.
If his A2P registration hasn't cleared, text is the one channel that isn't live yet. Say it here, while he's looking at it, not at Part 8. Everything in this part that sends a text waits on the same clearance, the rebooking text below included.
Opportunities, the Leads pipeline. Walk the stages once: New Lead, Contacted, Appointment Set, Quoted, Follow Up, Closed, Completed Job, Lost.
Two things people get wrong:
Tell him to add his own jobs here too, the ones he got himself. Then the pipeline is his whole business, not just what comes through us.
Referral Tracking. His page in the left nav, for the $200 referral credit he earns on each contractor he refers to us. It lists the contractors he has referred to us and what he has earned. Say: "When you send another contractor our way, they show up on this page, and so does what you've earned."
NPS Report. His menu link in the left nav. It shows the results of the customer satisfaction survey his customers answer. Say: "This is where your customers' survey scores show up, so you see how they rate the job."
These five minutes decide whether a request reaches him while the homeowner is still sitting there.
His number is ours to set up. He has a business number, and we set it up and file the A2P registration (prep row 5), so he has nothing to do for it. Open Conversations, show him his number and where his texts and calls come in. Say: "This is your business number. We set it up and we handle the texting registration, so there's nothing for you to do. Your calls come into Conversations, right here, and your texts will too as soon as the registration clears."
The other page we built, in his left nav. His Mini-Site Editor is up there too, and Part 3 already showed him how to edit it:
Open it, name what it is, close it. It doesn't need teaching today.
Three things before you let him go.
Naming these keeps the call from running long. If he asks, say it gets its own session and move on.
| Who | What |
|---|---|
| Brian | Send the recording. Note anything that stalled, in his contact record. |
| Suzanne | Copy his review link from Reputation > Settings > Review Link into the review_link custom value. The review ask merges it, so it's filled once, and it's broken until it is. This depends on the Reputation connection in Part 4. If Reputation reads 0 out of 1, there is no link to copy and you cannot make one from your side: only a Google account that manages his profile can connect it, so it goes back to him. |
| Suzanne | Confirm the social accounts really connected. Read them back off the API rather than trusting the screen he saw. |