How to Write Follow-Up Emails for Quiet Sales Leads Automatically (Drafts Only)
Many deals stall for a simple reason: nobody followed up. The prospect got busy, your reply slid down their inbox, and a week later the thread is cold. Following up is easy to agree with and hard to keep doing when the day fills up.
This guide shows how to build an n8n workflow that finds quiet sales threads in Gmail each morning and prepares a follow-up as a draft in the same thread. Nothing is sent automatically. You open Gmail, read each draft, adjust it and decide whether to send.
Why drafts instead of automatic sending
Automated follow-ups that send themselves can go wrong in quiet ways: a prospect replied on another channel, a deal closed by phone, or the tone is off for this particular person. Drafts keep the speed of automation while leaving judgment with you. They also keep replies in your own voice, because you edit before anything goes out.
What counts as a "quiet" lead
Define it precisely so the workflow can check it. A useful rule:
- The thread has your sales label (for example
AI/Sales Lead). - The last message in the thread is from you. If the prospect wrote last, the ball is in your court, which is a different task.
- That last message is older than a set number of days, such as 3 or 4.
- The thread hasn't already received the maximum number of follow-ups you allow.
What you need
- n8n (Cloud or self-hosted) with a Gmail credential.
- An OpenAI credential in n8n. A follow-up is short, so model costs per draft are small, though they depend on volume and model.
- A Gmail label for sales conversations. You can apply it by hand, with Gmail filters, or with an AI triage workflow (see How to auto-label Gmail with AI in n8n).
Step 1: Schedule a morning run
Add a Schedule Trigger set to run once each weekday morning. Running before your workday starts means the drafts are waiting when you open Gmail.
Step 2: Find candidate threads
Add a Gmail node:
- Resource: Thread (or Message)
- Operation: Get Many
- Filters: select your sales label, and in the search field add an age filter such as
older_than:3d.
Gmail's older_than works on individual messages, so this narrows the list but doesn't yet prove the thread is quiet. The next step handles that.
Step 3: Confirm the last message is yours
For each thread, use the Gmail node with Resource: Thread, Operation: Get to load all its messages. Then add a Code or IF node that:
- Picks the most recent message in the thread.
- Checks that its sender is your address.
- Checks that its date is older than your threshold.
Threads that pass are your quiet leads. Everything else drops out of the run.
Step 4: Cap the number of follow-ups
Endless nudges hurt more than they help. Track follow-ups with a label such as AI/Followed Up 1, AI/Followed Up 2, or count how many of your own messages appear after the prospect's last reply. A common rule is to stop after two or three follow-ups and move the thread to a "Closed - no reply" label for later review.
Step 5: Write the follow-up with OpenAI
Add an OpenAI node (or a Basic LLM Chain with an OpenAI model). Give it the thread context: the prospect's last message, your last message and the subject. A prompt that tends to produce good follow-ups:
You write short, polite sales follow-up emails for a business.
Write a follow-up to the thread below. Rules:
- 3 to 5 sentences.
- Refer to something specific from the earlier conversation.
- Offer one clear next step (a quick call, a sample, an answer to a question).
- Friendly and calm. No guilt, no pressure, no "just checking in."
- Do not invent prices, dates or promises that aren't in the thread.
- Plain text only, no subject line.
Prospect's last message:
{{ $json.prospectLastMessage }}
Our last message:
{{ $json.ourLastMessage }}
The "don't invent" rule matters. Models will happily make up a discount or a deadline unless told not to.
Step 6: Save the draft in the same thread
Add a Gmail node:
- Resource: Draft
- Operation: Create
- Subject:
Re:plus the original subject - Message: the OpenAI output
- Options > Thread ID: the thread's ID, so the draft appears inside the conversation
- Options > To Email: the prospect's address
Keeping the draft in the thread matters for context. The prospect sees your earlier message quoted below, and you see the whole history when reviewing. Then add the follow-up label from Step 4 so the next run knows a draft was prepared.
Step 7: Review and send
Each morning, open Gmail's Drafts folder. Read every draft, edit what needs your touch, delete the ones that no longer fit, and send the rest. A few minutes here keeps the pipeline moving without risking an awkward message.
Writing tips for better follow-ups
- Short wins. A follow-up that fits on a phone screen gets read.
- Add something new. A useful link, a relevant detail or an answer to an earlier question gives the prospect a reason to reply.
- Make the next step small. "Would a 15-minute call Thursday work?" is easier to accept than "Let me know your thoughts."
- Space them out. A few days before the first nudge, a week before the second, works better than daily reminders.
Common problems and fixes
- Drafts appear outside the thread. Make sure the Thread ID is passed and the subject starts with
Re:plus the original subject. - Drafts for threads where the prospect replied. Your "last message is mine" check is probably comparing the wrong field. Compare the sender's email address, not the display name.
- Too many drafts at once. Tighten the age filter or limit the run to a set number of threads.
A ready-made option
If you'd rather not build and maintain this yourself, our AI Lead Pursuit template does it for you. Each morning it finds sales leads that went quiet and prepares follow-ups in the same thread, working from the AI/Sales Lead label. It only writes drafts; every follow-up waits for you to send it. It runs on your own n8n with your own OpenAI key.
- AI Lead Pursuit ($29)
- Lead Catcher Bundle ($45, with AI Inbox Triage), which also applies the Sales Lead label for you
- Walkthrough video
Paid templates include a 14-day refund window.
n8n is a trademark of n8n GmbH. ReadyUpAgents is independent and not affiliated with or endorsed by n8n.
