Automated Lead-to-Client Pipeline with Google Sheets Email Notifications & Time Tracking
Last edited 58 days ago
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.
Video Walkthrough Demo
You may also like
New to n8n?
Need help building new n8n workflows? Process automation for you or your company will save you time and money, and it's completely free!





