GoHighLevel + Google Drive: onboarding runs itself
Your deal closes. Everyone’s excited. Then the messy part starts: folders, contracts, kickoff decks, task lists, and that “did anyone email them yet?” scramble. It’s not hard work, it’s just a lot of tiny work.
Agency owners feel it when clients pile up. A sales lead feels it the moment they hand off to delivery. And ops managers usually end up policing the process. This onboarding automation takes the manual steps off your plate so every “Won” deal turns into a clean, consistent onboarding.
You’ll set up an n8n workflow that reacts to a GoHighLevel win, builds the client’s Google Drive structure, copies templates, schedules kickoff, emails the client, creates tasks, and posts updates in Slack. Then you can tweak it to match your own process.
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: GoHighLevel + Google Drive: onboarding runs itself
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>GHL Webhook - Deal Won"]
n1@{ icon: "mdi:cog", form: "rounded", label: "Copy Contract Template", pos: "b", h: 48 }
n2@{ icon: "mdi:cog", form: "rounded", label: "Copy Kickoff Deck Template", pos: "b", h: 48 }
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Send Slack Welcome"]
n4@{ icon: "mdi:message-outline", form: "rounded", label: "Send Welcome Email", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Validate Client Data", pos: "b", h: 48 }
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Format Client Data"]
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Error Notification"]
n8@{ icon: "mdi:location-exit", form: "rounded", label: "Schedule Kickoff Call", pos: "b", h: 48 }
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/highLevel.svg' width='40' height='40' /></div><br/>Fetch Won Deals from GHL"]
n10@{ icon: "mdi:cog", form: "rounded", label: "Create Client Folder", pos: "b", h: 48 }
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/highLevel.svg' width='40' height='40' /></div><br/>Create GHL Onboarding Task"]
n6 --> n10
n3 --> n8
n10 --> n1
n10 --> n2
n5 --> n6
n5 --> n7
n8 --> n4
n1 --> n3
n0 --> n9
n9 --> n5
n2 --> n11
n11 --> n4
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n5 decision
class n0 api
class n6 code
classDef customIcon fill:none,stroke:none
class n0,n3,n6,n7,n9,n11 customIcon
Why This Matters: Onboarding Falls Apart After “Won”
The moment an opportunity flips to “Won,” your team has to switch contexts. Sales is done, delivery begins, and now someone has to create folders, find the right templates, rename files, schedule a kickoff call, send a welcome email, and log tasks so nothing gets missed. Usually that “someone” is whoever noticed first. It works… until it doesn’t. A missed contract template becomes an awkward follow-up. A kickoff deck copied late delays momentum. And inconsistent folder structures make every future handoff slower.
The friction compounds. Here’s where it breaks down.
- Each onboarding has 8–12 little steps, and the “little” steps are the ones people forget.
- Client info arrives messy (company name variations, missing email), so your Drive naming and docs get sloppy fast.
- Templates get copied inconsistently, which means account managers start from different starting lines.
- Slack updates rely on someone remembering to post, so visibility becomes luck instead of process.
What You’ll Build: “Won” Deal → Full Onboarding Package
This workflow starts the second a GoHighLevel opportunity is marked “Won.” n8n pulls the won opportunity details, checks that the key client fields are actually present, and then cleans up the payload so names, emails, and identifiers are consistent. With that normalized client data, it creates a dedicated Google Drive location for the new customer, then duplicates your contract and kickoff deck templates into that space with client-specific naming. From there, it alerts your team in Slack, schedules the kickoff meeting in Google Calendar, sends a branded welcome email through Gmail, and generates onboarding tasks back inside GoHighLevel so the account manager has a clear checklist. If something goes wrong, it routes an alert to a Slack error channel so you know immediately.
The workflow begins with a win event in GoHighLevel. Then Google Drive handles the folder and document setup while Slack keeps everyone in the loop. Finally, Calendar and Gmail finish the “first-touch” steps so the client feels taken care of right away.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say you onboard 5 new clients a week. Manually, a pretty standard flow is about 10 minutes to create folders and subfolders, 10 minutes to copy/rename templates, 10 minutes to schedule kickoff, 10 minutes to send a welcome email, and another 10 minutes to create tasks and post updates. Call it about 50 minutes per client. With this workflow, your “work” is marking the deal as Won (or having it marked). The rest runs in the background, and your team gets a Slack message when it’s ready.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- GoHighLevel for opportunity events and task creation.
- Google Drive to create folders and copy templates.
- Google Workspace access (Gmail + Calendar credentials inside n8n).
- Slack Bot Token (create it in Slack API apps).
Skill level: Intermediate. You won’t code much, but you will map fields, connect OAuth credentials, and paste a few IDs for Drive templates.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
GoHighLevel triggers when a deal is marked Won. A webhook fires and n8n pulls the won opportunity record so you’re not relying on manual exports or “someone tell ops.”
Client data gets checked and cleaned. The workflow verifies key fields (like client name and email), then normalizes the payload so folder names and document titles don’t end up with weird formatting or missing info.
Google Drive builds the onboarding workspace. n8n creates the client folder, duplicates your contract template, and clones your kickoff deck template with a client-specific name so it’s instantly usable.
Slack, Calendar, Gmail, and GoHighLevel finish the handoff. Slack posts the “welcome/onboarding created” message, Calendar schedules the kickoff meeting, Gmail sends the welcome email, and GoHighLevel gets the onboarding tasks so the account manager has a clear next-action list.
You can easily modify the folder structure and which templates get duplicated based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Webhook Trigger
Set up the inbound webhook that starts the onboarding flow when a deal is marked as won in GHL.
- Add and open GHL Deal Won Trigger.
- Set Path to
ghl-deal-won. - Set Response Mode to
responseNode. - Copy the generated webhook URL and add it to your GHL “Deal Won” webhook configuration.
Step 2: Connect HighLevel and Validate Deal Data
Retrieve won opportunities and ensure core identifiers are present before processing.
- Open Retrieve Won Opportunities and set Resource to
opportunityand Operation togetAll. - Confirm Filters → Status is set to
wonand Return All is enabled. - Credential Required: Connect your HighLevel credentials in Retrieve Won Opportunities.
- Open Verify Client Details and ensure the conditions check id and name with
isNotEmptyusing{{ $json.id }}and{{ $json.name }}.
id and name.Step 3: Set Up the Data Normalization Script
Transform the GHL opportunity data into a consistent structure for downstream nodes.
- Open Normalize Client Payload and review the JavaScript Code to ensure it matches your data model.
- Keep the output fields such as clientName, clientEmail, folderName, and contractName intact, as they are referenced later.
- Verify that default fallbacks like
'Unknown Client'and empty strings are acceptable for your process.
Step 4: Configure Google Drive Assets and Parallel Branching
Create a client information file and duplicate onboarding documents. This step includes parallel execution.
- Open Create Client Drive File and set Operation to
createFromText. - Set Drive to
My Driveand Folder toYOUR_PARENT_FOLDER_ID_HERE. - Keep the Content field as the multi-line template provided (it includes
{{ $json.clientName }},{{ $json.dealValue }}, and{{ $json.timestamp }}). - Credential Required: Connect your Google Drive credentials in Create Client Drive File, Duplicate Contract Template, and Clone Kickoff Deck.
- In Duplicate Contract Template, set Operation to
copyand Name to{{ $('Normalize Client Payload').item.json.contractName }}, with File ID set toYOUR_CONTRACT_TEMPLATE_FILE_ID_HERE. - In Clone Kickoff Deck, set Operation to
copyand Name to{{ $('Normalize Client Payload').item.json.contractName }}, with File ID set toYOUR_KICKOFF_DECK_TEMPLATE_FILE_ID_HERE.
Step 5: Configure Slack, Calendar, GHL Task, and Gmail Actions
Post the internal Slack message, create a kickoff meeting, generate a GHL task, and send the welcome email.
- Open Post Slack Welcome and set Channel to
YOUR_SLACK_CHANNEL_ID_HEREwith the message template intact. - Credential Required: Connect your Slack credentials in Post Slack Welcome.
- Open Schedule Kickoff Meeting and select Calendar as
YOUR_CALENDAR_EMAIL_HERE. - Set Additional Fields → Description to
{{ $json.message.blocks[0].elements[0].elements[2].text }}. - Credential Required: Connect your Google Calendar credentials in Schedule Kickoff Meeting.
- Open Generate GHL Task and set Title to
Onboard {{ $('Normalize Client Payload').item.json.clientName }}and Due Date to{{ $now.plus(7, 'days').toISO() }}. - Set Contact ID to
{{ $('Normalize Client Payload').item.json.contactId }}and connect HighLevel credentials. - Open Dispatch Welcome Email and keep Send To as
{{ $('Normalize Client Payload').item.json.clientEmail }}and Subject asWelcome to [Your Company Name] - Let's Get Started! 🚀. - Ensure the HTML message includes
{{ $json.htmlLink }}and{{ $node['Create Client Drive File'].json.id }}for booking and folder links. - Credential Required: Connect your Gmail credentials in Dispatch Welcome Email.
Step 6: Add Error Handling
Route failed validation or execution errors to Slack for manual intervention.
- Open Slack Error Alert and set Channel to
YOUR_ERROR_CHANNEL_ID_HERE. - Keep the message template so it outputs
{{ $json.node }}and{{ $json.error }}. - Credential Required: Connect your Slack credentials in Slack Error Alert.
Step 7: Test and Activate Your Workflow
Verify the workflow end-to-end before enabling it in production.
- Click Execute Workflow and send a test payload to GHL Deal Won Trigger.
- Confirm Create Client Drive File creates a file and that Duplicate Contract Template and Clone Kickoff Deck both run in parallel.
- Check that Post Slack Welcome posts the message and Schedule Kickoff Meeting creates a calendar event.
- Verify Generate GHL Task creates a task and Dispatch Welcome Email sends the email with working links.
- If any validation fails, confirm Slack Error Alert receives the error message.
- When everything works, toggle the workflow to Active for production use.
Troubleshooting Tips
- GoHighLevel API access can be limited by account permissions. If the workflow can’t “retrieve won opportunities,” confirm your GHL API key/OAuth scope and that the pipeline/opportunity endpoints are allowed.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Google Drive template IDs are easy to mix up, especially if you’re copying links from the browser. Double-check the template file IDs in the two “duplicate/clone” steps before blaming Slack or Gmail.
Quick Answers
About an hour if your GoHighLevel, Google, and Slack accounts are ready.
No. You’ll mostly connect accounts and map fields like client name, email, and company.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Google Workspace and GoHighLevel costs (no per-email fee from n8n itself).
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and you probably should. You can change the Google Drive “Create Client Drive File” step to build your exact folder tree, swap which templates get duplicated in “Duplicate Contract Template” and “Clone Kickoff Deck,” and adjust the Slack message to tag the right owner. Some teams also tweak the “Verify Client Details” check to block onboarding unless a billing email and legal business name are present. Small changes here save a lot of cleanup later.
Usually it’s expired or incorrect API credentials, so regenerate your GoHighLevel API key (or re-auth OAuth) and update the credential in n8n. If the trigger fires but “Retrieve Won Opportunities” fails, it can also be missing permissions to read that pipeline. And if you’re onboarding many deals at once, you may hit rate limits, which shows up as intermittent HTTP errors.
In practice, plenty for most small teams: dozens of onboardings a day is fine as long as your Google and GoHighLevel APIs aren’t being hammered by other systems.
Often, yes, because this flow benefits from branching, validation, and error handling in one place. n8n makes it easier to stop the workflow when required client fields are missing, then route errors to a dedicated Slack channel without duct-taping extra Zaps together. It also plays nicely with more complex “do X, then Y, but only if Z” onboarding rules. Zapier or Make can still be fine for a simple “Won → Slack message” style automation. If you’re unsure, Talk to an automation expert and get a quick recommendation.
Once this is live, a “Won” deal stops being a scramble and starts being a system. Your onboarding stays consistent, even when you’re busy.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.