STARTER / QUOTES & FOLLOW-UP

How do I follow up on quotes that go quiet, without chasing each one by hand?

THE SHORT ANSWER

Start with a Google Sheet and a short script that sends a polite follow-up 3, 7 and 14 days after each quote, and stops when the customer writes back. It is free and takes about an hour. It is a starting point: the last section shows what a version built to run a business adds.

  • Starter
  • About an hour
  • Free to run

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 NAMEEMAILJOBQUOTE SENTSTATUSFOLLOW-UPSLAST SENT
Danadana@example.comcedar fenceSep 14, 9:40Open2Sep 21
Marcusmarcus@example.comkitchen repaintSep 18, 16:05Replied1Sep 21
Priyapriya@example.compaver patioSep 22, 11:20Open1Sep 25
Tomtom@example.comgutter guardsSep 10, 8:15Won1Sep 13
  1. DAY 0
    Your quote

    Sent the way you always send it. You add the row.

  2. DAY 3
    Your quote for the cedar fence

    Just checking it came through and made sense.

  3. DAY 7
    Any questions on the cedar fence?

    If the timing or the scope needs changing, tell me.

  4. DAY 14
    Should 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.

ROUTEWHAT YOU SET UPCOST TO RUNWATCH FOR
Sheet and scriptThe sheet and the script belowFree with a Google accountGmail's daily sending limit
n8nImport a ready-made workflow, connect Gmail and SheetsFree to host yourself, or n8n Cloud from 20 euros a month paid yearlyHosting and updates are yours if you host it
ZapierA multi-step Zap with delays$29.99 a month, or $19.99 paid yearly, for the plan with multi-step ZapsThe free plan allows two-step Zaps only, and 100 tasks a month
MakeA scenario with delays and a filterFree up to 1,000 credits a month, then from $16 a month, or $12 paid yearlyEvery 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.

  1. 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 Open and Follow-ups 0. 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.

  2. 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.

  3. 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 MESSAGES at 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]]);
      }
    }
  4. 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 job and a Quote sent time four days ago. In the Apps Script editor, choose sendFollowUps from 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.

  5. 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.

  6. Keep one column honest

    When a quote is won or lost, change its Status to Won or Lost. The script only acts on rows marked Open, 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

PROMPT
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

PROMPT
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

PROMPT
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.

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 STARTERBUILT FOR YOUR BUSINESS
Where quotes come fromYou type each one into a sheetAdded when the quote is sent, from your quoting tool or your website's quote form
What the customer receivesPlain text from your GmailYour branding, from your own domain, with the quote online to view and accept
Where a quote standsOpen or replied, by email onlyViewed, replied or accepted, on one board your team shares
The follow-up itselfThe same three emails on fixed daysTiming and wording set for each kind of job, changed without touching code
When something breaksYou notice, eventuallyWe watch it and fix it
THE FOLLOW-UP YOUR CUSTOMER GETS
WHERE EVERY QUOTE STANDS
An illustration of what a built version can look like, not a real customer's system.