Automated lead-to-client pipeline with Google Sheets email notifications & time tracking
$20/month : Unlimited workflows
2500 executions/month
THE #1 IN WEB SCRAPING
Scrape any website without limits
HOSTINGER 🎉 Early Black Friday Deal
DISCOUNT 20% Try free
DISCOUNT 20%
Self-hosted n8n
Unlimited workflows - from $4.99/mo
#1 hub for scraping, AI & automation
6000+ actors - $5 credits/mo
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 a Cal.com booking email
- Stage → 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 (e.g.,
2d 5h 30m)
What This Template Does
- Lead Qualification → Email: When 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
- A small Apps Script (provided in the workflow’s Sticky Note) watches the sheet and posts JSON to these n8n webhooks:
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
- If
- client-status-changed
- If Delivered → lookup client row → stamp End Date & Time → compute Time to Deliver → update row
- lead-stage-changed
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-changedhttps://{{YOUR_N8N_DOMAIN}}/webhook/lead-qualifiedhttps://{{YOUR_N8N_DOMAIN}}/webhook/client-status-changed
- Run
createInstallableTrigger()once to enableonEdit.
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 triggers: Confirm Apps Script URLs and that
createInstallableTrigger()was run. - Wrong tab/GID: Open each tab and copy its
gidfrom the URL; update placeholders. - Credential errors: Re-authorize Google Sheets/Gmail OAuth2 in n8n.
- Wrong first name: Ensure
Namein Leads followsFirst Last; the workflow splits the first token.