Google Sheets to HighLevel, leads scored and routed
New leads come in. Then someone has to read the row, guess if it’s any good, copy it into the CRM, and ping a rep. That’s not “sales process.” That’s busywork (and it quietly kills response time).
This is where sales managers feel the pain first. But agency owners juggling multiple pipelines and ops folks trying to keep data clean deal with the same mess. With this lead scoring automation, every new Google Sheets lead gets qualified, labeled, and routed without you babysitting it.
Below you’ll see how the workflow runs, what results you can expect, and what you need to connect Google Sheets, AI scoring, HighLevel, and email alerts into one clean system.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets to HighLevel, leads scored and routed
flowchart LR
subgraph sg0["New Lead Form Submission1 Flow"]
direction LR
n0@{ icon: "mdi:code-braces", form: "rounded", label: "Categorize Lead Priority1", pos: "b", h: 48 }
n1@{ icon: "mdi:play-circle", form: "rounded", label: "New Lead Form Submission1", pos: "b", h: 48 }
n2@{ icon: "mdi:robot", form: "rounded", label: "AI Lead Qualification Agent1", pos: "b", h: 48 }
n3@{ icon: "mdi:brain", form: "rounded", label: "Azure OpenAI Model1", pos: "b", h: 48 }
n4["<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/>Parse AI Response to JSON"]
n5@{ icon: "mdi:database", form: "rounded", label: "Save Lead to Status Sheet", 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/highLevel.svg' width='40' height='40' /></div><br/>Add Contact to CRM"]
n7@{ icon: "mdi:message-outline", form: "rounded", label: "Send Email to Sales Rep", pos: "b", h: 48 }
n6 --> n7
n3 -.-> n2
n0 --> n6
n1 --> n2
n4 --> n5
n5 --> n0
n2 --> 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 n1 trigger
class n2 ai
class n3 aiModel
class n5 database
class n0,n4 code
classDef customIcon fill:none,stroke:none
class n4,n6 customIcon
The Problem: Leads arrive faster than you can qualify them
Google Sheets is a great intake tool. It’s also where good leads go to die. A new row lands from a form submission, and now someone has to interpret half-filled fields, decide if it’s real, assign a priority, then create or update the contact in HighLevel. Do that a few times a day and it’s annoying. Do it 30 times on a Monday and you start delaying follow-ups, missing context, and duplicating records. The worst part is the inconsistency. One rep calls it “hot,” another ignores the same lead because they were busy.
It adds up fast. Here’s where it breaks down.
- Someone has to read every row manually, which turns into about 1–2 hours of admin work on a normal week.
- Lead priority becomes “who looked at it last,” not a consistent scoring system tied to value, stage, and company details.
- Copy-paste CRM updates create duplicates and messy notes, so your reporting starts lying to you.
- Reps get notified late (or not at all), which means response time slips right when the lead is most motivated.
The Solution: AI lead scoring + automatic HighLevel routing
This workflow watches your “Incoming Leads” Google Sheet for new form submissions. As soon as a row appears, it sends the lead details to an AI Agent using an Azure OpenAI GPT-4o-mini deployment. The AI reviews what you already collect (name, email, phone, company, opportunity value, stage) and returns structured output with a score plus clear action items. That response gets cleaned into reliable JSON, then logged to a separate “Lead Status” sheet so you have a consistent audit trail. Next, the workflow assigns a tier like Hot, Warm, or Cold and syncs the contact into HighLevel, updating existing records instead of creating chaos. Finally, the assigned rep gets an email with a plain-language summary, priority, and what to do next.
The workflow starts with a new Google Sheets row. From there, Azure OpenAI generates the score and recommended next actions, which get stored for tracking. HighLevel is updated with the contact, and an email alert goes out so a rep can act immediately.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you get 20 inbound leads a week in a Google Sheet. Manually, it’s maybe 6 minutes to read the row, decide priority, create/update in HighLevel, and send a message to a rep. That’s about 2 hours weekly, plus the interruptions. With this workflow, you spend about 10 minutes once to set up the sheet headers and routing rules, then each new lead is processed automatically while you keep working. Reps only jump in when the email says “Hot” or “Warm,” with action items already written.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for capturing inbound form submissions
- HighLevel (GoHighLevel) to create/update CRM contacts
- Azure OpenAI API access (get it from your Azure OpenAI resource)
Skill level: Beginner. You’ll connect accounts, map a few fields, and paste in your sheet ID and model deployment name.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A new lead hits your Google Sheet. The workflow triggers when a new row appears in your incoming leads sheet (the one tied to your form or lead source). No one has to “check the spreadsheet” again.
The lead gets scored and summarized by AI. n8n sends the row fields to an AI Agent powered by Azure OpenAI GPT-4o-mini, then receives a structured response containing a score and recommended next steps. This matters because free-text AI output is hard to trust if you can’t parse it cleanly.
The workflow turns that output into usable data. A decode step converts the AI response into tidy JSON, then the workflow appends the lead plus action items into a separate “Lead Status” sheet. You get visibility without opening the CRM.
HighLevel is updated and the rep is alerted. Based on the score, the workflow assigns Hot/Warm/Cold, creates or updates the HighLevel contact, and sends an email summary to the right person so they can respond fast.
You can easily modify the scoring thresholds to match your pipeline stages and your sales motion based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Google Sheets Trigger
Set up the workflow to start whenever a new lead row is added in your sheet using Incoming Lead Sheet Trigger.
- Add Incoming Lead Sheet Trigger and set Event to
rowAdded. - Set Document ID to
{{ $json.id }}and Sheet Name to{{ $json.id }}. - Set the polling schedule to
everyMinuteunder Poll Times. - Credential Required: Connect your googleSheetsTriggerOAuth2Api credentials.
Tip: Make sure your sheet has headers that match fields like Lead Name, Lead email, and Lead Contact No. so downstream expressions resolve correctly.
Step 2: Connect Google Sheets
Store the AI-enriched lead status using Append Lead Status Sheet.
- Add Append Lead Status Sheet and set Operation to
append. - Set Document ID to
{{ $json.id }}and Sheet Name to{{ $json.id }}. - Credential Required: Connect your googleSheetsOAuth2Api credentials.
Step 3: Set Up Lead Scoring AI
Use the AI agent to score and prioritize leads, then clean the JSON with code before storing it.
- Add Lead Scoring AI Agent and set Prompt Type to
define. - Paste the full prompt into Text exactly as shown in the workflow, including the JSON formatting and field placeholders such as
{{ $json["Lead Name"] }}and{{ $json['Stage of Lead'] }}. - Connect Azure GPT Mini Model as the language model for Lead Scoring AI Agent and set Model to
gpt-4o-mini. - Credential Required: Connect your azureOpenAiApi credentials in Azure GPT Mini Model. This provides credentials for the AI agent.
- Add Decode AI JSON Output and keep the provided JavaScript Code to parse the AI response and add
processedAt.
⚠️ Common Pitfall: The AI must return valid JSON. The parsing logic in Decode AI JSON Output will fall back to default values if the JSON is malformed.
Step 4: Configure Output and Routing Actions
Classify the lead tier, sync it to your CRM, and notify sales by email.
- Add Assign Lead Tier and keep the provided Function Code that sets
stagebased onscore. - Add Sync Contact to CRM and set Email to
{{ $json["Lead email"] }}and Phone to{{ $json["Lead Contact No."] }}. - In Sync Contact to CRM, set First Name to
{{ $json["Lead Name"].split(' ')[0] }}and Last Name to{{ $json["Lead Name"].split(' ').slice(1).join(' ') }}. - Credential Required: Connect your highLevelOAuth2Api credentials.
- Add Notify Sales via Email and set Subject to
New {{ $('Assign Lead Tier').item.json.stage }} Lead Assigned. - Set Text to the provided message template, including
{{ $json.score }}and{{ $('Assign Lead Tier').item.json.stage }}. - Set To Email to
{{ $json.salesRepEmail || '[YOUR_EMAIL]' }}and From Email to{{ $json.senderEmail || '[YOUR_EMAIL]' }}. - Credential Required: Connect your smtp credentials.
Execution order follows the workflow: Incoming Lead Sheet Trigger → Lead Scoring AI Agent → Decode AI JSON Output → Append Lead Status Sheet → Assign Lead Tier → Sync Contact to CRM → Notify Sales via Email.
Step 5: Test and Activate Your Workflow
Validate the workflow end-to-end before turning it on for production.
- Manually add a new row to your lead sheet with all required fields to trigger Incoming Lead Sheet Trigger.
- Run the workflow once and confirm Append Lead Status Sheet receives a new row with
score,priority, andprocessedAt. - Verify Sync Contact to CRM creates or updates the contact, and Notify Sales via Email sends a message to the sales rep.
- When successful, toggle the workflow to Active for ongoing lead qualification.
Common Gotchas
- Google Sheets permissions are usually the culprit. If the trigger stops picking up new rows, check the sheet is shared with the same Google account used in n8n credentials.
- If you’re relying on any waiting/processing time (AI calls, CRM API), responses can arrive slower during peak hours. If downstream nodes fail with missing fields, increase the wait or add simple “empty value” checks.
- HighLevel contact updates can look “successful” while still creating duplicates if your matching field is wrong. Make sure you’re matching on email (or phone) consistently, and don’t let the AI generate identifiers.
Frequently Asked Questions
About 30 minutes if your accounts and sheet are ready.
No. You’ll mostly map fields and connect credentials. The only “technical” part is making sure your Google Sheet headers match what the workflow expects.
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 Azure OpenAI usage costs (often a few cents per lead, depending on your prompt size).
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 it’s a common tweak. Keep the scoring as-is, then swap or duplicate the “Notify Sales via Email” step with a Slack message node for Hot leads only. You can do this by adding an If condition after “Assign Lead Tier,” then sending Hot to Slack while Warm stays as email. Many teams also customize the AI prompt in the AI Agent node so the action items match their script and qualification rules.
Usually it’s an expired OAuth connection or missing permissions on the HighLevel account you connected. Reconnect the HighLevel credential in n8n and confirm the user has access to the right sub-account (location). If it fails only on some leads, check which field you’re using to find existing contacts, because blank email/phone values can cause matching to fail.
A lot.
Often, yes, if you care about control and cost as volume grows. This workflow benefits from n8n’s branching and data handling, which means you can parse AI output, add conditions, and write to multiple destinations without paying extra for each tiny step. Self-hosting is also a real advantage when lead volume spikes. Zapier and Make can be simpler for basic “new row → create contact” automations, but AI scoring plus structured logging usually gets messy there. If you want help deciding, Talk to an automation expert and get a quick recommendation based on your lead flow.
Once this is running, leads stop sitting in a spreadsheet waiting for attention. Your reps see priority, context, and next steps right away, and you get your week back.
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.