01 / WHAT THE STARTER DOES
A sheet that does the chasing
One row per quote. Every morning the script reads the sheet, works out which quotes are due a nudge, sends it from your own Gmail, and writes down what it sent. Replies land in your inbox like any other email, because that is where they were sent from.
| FIRST NAME | JOB | QUOTE SENT | STATUS | FOLLOW-UPS | LAST SENT | |
|---|---|---|---|---|---|---|
| Dana | dana@example.com | cedar fence | Sep 14, 9:40 | Open | 2 | Sep 21 |
| Marcus | marcus@example.com | kitchen repaint | Sep 18, 16:05 | Replied | 1 | Sep 21 |
| Priya | priya@example.com | paver patio | Sep 22, 11:20 | Open | 1 | Sep 25 |
| Tom | tom@example.com | gutter guards | Sep 10, 8:15 | Won | 1 | Sep 13 |
- DAY 0Your quote
Sent the way you always send it. You add the row.
- DAY 3Your quote for the cedar fence
Just checking it came through and made sense.
- DAY 7Any questions on the cedar fence?
If the timing or the scope needs changing, tell me.
- DAY 14Should I close out the cedar fence quote?
No problem either way.
02 / WAYS TO START
Four ways to start
All four do the same job: read your open quotes, send the follow-ups, and stop when someone replies. They differ in what you set up and what they cost to run.
| ROUTE | WHAT YOU SET UP | COST TO RUN | WATCH FOR |
|---|---|---|---|
| Sheet and script | The sheet and the script below | Free with a Google account | Gmail's daily sending limit |
| n8n | Import a ready-made workflow, connect Gmail and Sheets | Free to host yourself, or n8n Cloud from 20 euros a month paid yearly | Hosting and updates are yours if you host it |
| Zapier | A multi-step Zap with delays | $29.99 a month, or $19.99 paid yearly, for the plan with multi-step Zaps | The free plan allows two-step Zaps only, and 100 tasks a month |
| Make | A scenario with delays and a filter | Free up to 1,000 credits a month, then from $16 a month, or $12 paid yearly | Every step of every run uses a credit |
From each vendor's own pricing page, checked September 28, 2026: n8n, Zapier, Make. Prices change, so check before you choose.
One more subscription per job is how a stack of tools grows. Here is how to add up what yours really costs, hours included.
03 / BUILD IT FREE
The free version in six steps
You need a Google account. A free Gmail address works, and so does Google Workspace.
-
Make the sheet
Create a new Google Sheet and rename its tab to
Quotes. In row 1, columns A to G, type these headings:First name,Email,Job,Quote sent,Status,Follow-ups,Last sent.Add a row for each quote that is still open, with Status
Openand Follow-ups0. Write the job the way it reads in a sentence, such as "cedar fence". In Quote sent, put the date and the time you sent it: Ctrl + Alt + Shift + ; fills in both on Windows. The time matters, and section 06 says why. -
Write your three messages
Use the first prompt in section 04 to draft them in your own voice, then edit until they sound like you. Keep
{name}and{job}in place: the script swaps in each customer's first name and job. -
Add the script
In the sheet, open Extensions > Apps Script. Delete what is in the editor, paste the code below, put your three messages into
MESSAGESat the top, and save.Code.gs// Quote follow-ups: a polite nudge 3, 7 and 14 days after each quote. // It stops on its own when the customer emails you back. const SHEET = 'Quotes'; // the tab name const DAYS = [3, 7, 14]; // days after the quote for each follow-up // Your three messages. {name} and {job} are filled in for each customer. const MESSAGES = [ { subject: 'Your quote for the {job}', body: 'Hi {name},\n\n' + 'Just checking the quote came through and made sense. ' + 'Happy to walk you through any of it.\n\nThanks,\nYour name', }, { subject: 'Any questions on the {job}?', body: 'Hi {name},\n\n' + 'If the timing or the scope needs changing, tell me ' + 'and I will adjust the quote.\n\nThanks,\nYour name', }, { subject: 'Should I close out the {job} quote?', body: 'Hi {name},\n\n' + 'No problem either way. If it is still on your list, ' + 'reply and we can pick it up whenever suits you.\n\nThanks,\nYour name', }, ]; function sendFollowUps() { const sheet = SpreadsheetApp.getActive().getSheetByName(SHEET); const rows = sheet.getDataRange().getValues(); const now = new Date(); for (let i = 1; i < rows.length; i++) { const [name, email, job, sent, status, count] = rows[i]; const done = Number(count) || 0; if (status !== 'Open' || !email || !(sent instanceof Date)) continue; if (done >= DAYS.length) continue; // Has the customer written to you since the quote went out? const since = Math.floor(sent.getTime() / 1000); if (GmailApp.search('from:' + email + ' after:' + since, 0, 1).length) { sheet.getRange(i + 1, 5).setValue('Replied'); continue; } // Not due yet? const days = (now - sent) / 86400000; if (days < DAYS[done]) continue; const fill = (text) => text.split('{name}').join(name).split('{job}').join(job); GmailApp.sendEmail(email, fill(MESSAGES[done].subject), fill(MESSAGES[done].body)); sheet.getRange(i + 1, 6, 1, 2).setValues([[done + 1, now]]); } } -
Try it on yourself
Add a test row using a second email address of yours, one that has not emailed this inbox in the last few days, with the job
test joband a Quote sent time four days ago. In the Apps Script editor, choosesendFollowUpsfrom the function menu and press Run.Google asks you to allow the script to use your Gmail and your Sheets. It warns that the app is not verified, because you wrote it and Google has not reviewed it: choose Advanced, then Go to your project. Check the second inbox for the first follow-up, then delete the test row.
-
Run it every morning
In the Apps Script editor, open Triggers (the clock on the left), then Add Trigger. Choose
sendFollowUps, event source Time-driven, type Day timer, and a time such as 8am to 9am. Save. It now runs every day, with the sheet closed and your computer off. -
Keep one column honest
When a quote is won or lost, change its Status to
WonorLost. The script only acts on rows markedOpen, so any other status stops it. That is the whole upkeep.
04 / PROMPTS
Prompts for the fiddly parts
Paste these into Claude, ChatGPT or Gemini. Replace the highlighted parts first.
Write the three messages in your voice
I run a [kind of business] in [your area]. After I send a quote by email, a lot of customers go quiet. Write three short follow-up emails I can send 3, 7 and 14 days after a quote.
Rules:
- Under 60 words each. Plain and friendly, no pressure, no discounts.
- The first checks the quote arrived and offers to explain it.
- The second invites a change to the timing or the scope.
- The third politely asks whether to close the quote, and makes it easy to say no.
- Write {name} where the customer's first name goes and {job} where the job goes, for example "the cedar fence".
- Give each one a subject line, and sign off as [your name].
Two emails I have written before, so you can match how I sound:
[paste two of your own emails]
Change what the script does
Here is a Google Apps Script that sends follow-up emails from a Google Sheet: [paste the script] Change it so that [what you want, for example: each follow-up is sent as a reply in the same Gmail thread as my original quote; or it emails me a list every Monday of quotes that had all three follow-ups and no reply]. Keep the sheet's columns as they are. Explain each change in one line, then give me the complete script.
Turn the quotes you already sent into rows
Below are quote emails I sent in the last month. Make a table I can paste into Google Sheets with these columns: First name, Email, Job (three or four words, lower case, as it would read after "the"), Quote sent (date and time), Status (always Open), Follow-ups (always 0). [paste the emails]
05 / TEMPLATES AND TOOLS
Templates, tools and repos
Ready-made starting points if you would rather not paste code, and where to go when you want more.
-
N8N TEMPLATE
Follow up automatically if no reply
By David Roberts. Sends a sequence from a Google Sheet, and only follows up when nobody has replied to the thread. Built for email campaigns; use it for quotes people asked for.
n8n.io/workflows/2137 -
N8N TEMPLATE
3, 7 and 14 day quote follow-ups
By 43 Sunsets. The same pattern as this post. It leaves out checking for replies, which its author sells separately, so mark replied quotes yourself.
n8n.io/workflows/16975 -
GOOGLE SAMPLE
Google's mail merge
Google's own script that sends personal emails from a sheet, using a Gmail draft as the template. Good if you would rather write messages in Gmail than in code.
developers.google.com -
TOOL
Google Apps Script
The free scripting built into Sheets and Gmail. The free version in this post runs on it.
developers.google.com/apps-script -
GITHUB
n8n
The version of n8n you can host yourself. The two templates above run on it.
n8n-io/n8n -
GITHUB
Apps Script samples
Google's official collection of working scripts, the mail merge among them. The quickest way to see how a real script is laid out.
googleworkspace/apps-script-samples
06 / WHERE THE STARTER STOPS
Where the starter stops
- A date with no time. A Quote sent with no time counts from midnight, so an email the customer sent you earlier that day looks like a reply and the follow-ups never start. Put the time in.
- Replies it cannot see. It only notices email from the address in the sheet. A phone call, a text, or a reply from a partner's address goes unnoticed, so mark those rows yourself.
- Daily limits. Apps Script can email 100 recipients a day from a free Gmail account and 1,500 from Google Workspace, shared with anything else your scripts send.
- Plain email, from your Gmail. Every route above sends plain text from your own inbox, as a new email rather than a reply under your quote. The second prompt changes the threading; the look stays plain.
- Nobody is watching it. If a permission lapses or someone moves a column, it stops without telling you, and you find out when a customer mentions it.
- Quotes only. This is for people who asked you for a price. Emailing people who did not ask is cold outreach, which has its own rules (CAN-SPAM in the US).
- Customer details in a chat. The third prompt sends your customers' names and emails to the AI provider. Check its data settings first, or take the addresses out and add them back in the sheet.
07 / BUILT FOR YOUR BUSINESS
What a version built to run your business adds
The starter follows up on quotes. A version built for your business is part of how you quote: it starts the moment a quote goes out, looks like your business, and shows you where every quote stands.
| THE STARTER | BUILT FOR YOUR BUSINESS | |
|---|---|---|
| Where quotes come from | You type each one into a sheet | Added when the quote is sent, from your quoting tool or your website's quote form |
| What the customer receives | Plain text from your Gmail | Your branding, from your own domain, with the quote online to view and accept |
| Where a quote stands | Open or replied, by email only | Viewed, replied or accepted, on one board your team shares |
| The follow-up itself | The same three emails on fixed days | Timing and wording set for each kind of job, changed without touching code |
| When something breaks | You notice, eventually | We watch it and fix it |