Google Sheets CRM Automations: Lead Stages → Emails, Client Tracking & Delivery Duration
Turn a simple Google Sheet into a lightweight CRM powered by n8n.
Overview
This template monitors edits in your Leads and Clients tabs and reacts automatically:
-
Qualified? → sends to Cal.com booking email
-
Internship → Awaiting Proposal → sends a “proposal coming soon” email
-
Stage → Won → appends the client to Clients with a Start Date & Time
-
Clients: Project Status → Delivered → stamps End Date & Time and computes Time to Deliver (eg,
2d 5h 30m
)
What This Template Does
-
Lead Qualification → Email : When do you mark Qualified? in Leads , a booking email is sent automatically.
-
Awaiting Proposal → Email : Sends a heads-up email that a proposal is coming soon.
-
Won → Client Append : Adds the client to Clients and records the start timestamp.
-
Delivered → Completion Metrics : Looks up the client, stamps the end timestamp, and calculates the delivery duration.
How It Works
-
Google Apps Script → Webhooks (onEdit)
- A small Apps Script (provided in the workflow's Sticky Note) watches the sheet and posts JSON to these n8n webhooks:
-
/webhook/lead-stage-changed
-
/webhook/lead-qualified
-
/webhook/client-status-changed
-
n8n Flow & Branching
-
lead-stage-changed
- If Awaiting Proposal → send proposal heads-up email
- If Won → format timestamp → append to Clients
-
lead-qualified
- If
qualified = true
→ send Cal.com booking email
-
client-status-changed
- If Delivered → lookup client row → stamp End Date & Time → compute Time to Deliver → update row
Prerequisites
- Google Sheet with two tabs: Leads and Clients
- Gmail account (or use your preferred email/notification node)
- n8n instance with:
-
Google Sheets OAuth2 credentials
-
Gmail OAuth2 credentials (if using the Gmail node)
Suggested columns
-
Leads :
Name (A)
, Client Email (C)
, Lead Source (D)
, Stage (E)
, Qualified? (H)
-
Clients :
Name (A)
, Client Email (C)
, Project Status (D)
, Start Date & Time (F)
, End Date & Time (G)
, Time to Deliver (H)
Setup Steps
-
Copy/prepare the Google Sheet
- Ensure both Leads and Clients tabs exist with the columns above.
-
Install the Apps Script
- In Google Sheets: Extensions → Apps Script → paste the script from the workflow's Sticky Note.
- Replace webhook URLs with your n8n endpoints:
-
https:// {{YOUR_N8N_DOMAIN}} /webhook/lead-stage-changed
-
https:// {{YOUR_N8N_DOMAIN}} /webhook/lead-qualified
-
https:// {{YOUR_N8N_DOMAIN}} /webhook/client-status-changed
- Run
createInstallableTrigger()
once to enable onEdit
.
-
Open the workflow in n8n & replace placeholders
-
{{GOOGLE_SHEETS_DOC_ID}}
-
{{LEADS_GID}}
-
{{CLIENTS_GID}}
-
{{CAL_COM_BOOKING_URL}}
-
{{SENDER_NAME}}
-
{{GMAIL_CREDENTIAL_ID}}
, {{GMAIL_CREDENTIAL_NAME}}
-
{{GSHEETS_CREDENTIAL_ID}}
, {{GSHEETS_CREDENTIAL_NAME}}
-
Connect credentials
- Authorize Google Sheets OAuth2 and Gmail OAuth2 (or switch to SMTP/another email node).
-
Activate & test
- Toggle Qualified? on a test row or change Stage to Awaiting Proposal/Won .
- Verify the email, client append, and duration updates flow end-to-end.
Customization Ideas
- Swap Gmail with SMTP , Outlook , or Slack messages.
- Add a Stage = Lost branch to trigger a re-engagement sequence.
- Add guards to prevent duplicate appends to Clients .
- Localize email copy and date formats.
Troubleshooting
-
Nothing activates : Confirm Apps Script URLs and that
createInstallableTrigger()
was run.
-
Wrong tab/GID : Open each tab and copy its
gid
from the URL; update placeholders.
-
Credential errors : Re-authorize Google Sheets/Gmail OAuth2 in n8n.
-
Wrong first name : Ensure
Name
in Leads follows First Last
; the workflow splits the first token.
Video Walkthrough Demo
Screen Studio Template Demo Video