Two follow-ups, sender-matched, skipped the hour someone replies.
An 18-node n8n workflow that runs Monday–Friday at 6pm. FU1 three days after silence. FU2 four days after that. Same Gmail account that sent the first email. Cap of 8 per type per day. Reply or bounce ends the sequence.
First email is not the sequence
The Cold Email Sender handles day 0 at 5pm. This workflow is only the two touches after that. Without it, a no-reply row sits forever. With a sloppy follow-up, you chase someone who already answered or bounce a dead address again.
Both follow-up copies are pre-written in the workflow — not Claude on each send. They are short, reference the original, and use a reply-only ask. The first email is the AI-written one from the scraper.
Three touchpoints. Then it stops.
Initial email
AI-written. Sent by the 5pm sender — not this workflow.
Follow-up 1
Re-surfaces the offer. Only if no reply and no bounce.
Follow-up 2
Soft close. Door left open. Final automated touch.
Sequence ends
No more automated contact. The row stays in the sheet.
Desks that already split sending across two inboxes
The published build routes on a sent_from column (nick or david). If the first email went from Nick, both follow-ups come from Nick in the same thread. Same for David. The lead never gets a second name on a “Re:” of the original subject.
Outbound teams with a first-touch machine
You already have sent_at and a written body. This workflow only asks who still needs a bump.
Anyone pairing the bounce tracker
replied and bounced are checked before every send. The hourly tracker can stop the sequence within an hour of a reply landing.
FU1 and FU2 are separate filters in the same 6pm run
Follow-up 1 — all must be true
- Status = Sent
- replied is empty
- bounced is empty
- followup_1_sent is empty
- followup_2_sent is empty
- sent_at is more than 3 days ago
Follow-up 2 — all must be true
- Status = Sent
- replied is empty
- bounced is empty
- followup_2_sent is empty
- followup_1_sent is not empty
- followup_1_sent is more than 4 days ago
One weekday cron. Two independent paths.
6pm, Monday to Friday
Cron 0 18 * * 1-5. One hour after the initial sender so the two workflows do not contend for the same rows in the same minute.
Full sheet into both filters
Same read feeds FU1 and FU2 independently. A row can only match one path on a given night because FU2 requires followup_1_sent to already exist.
Cap 8 → loop → wait 2–5 min → route → send → stamp
Each type is capped at 8 per day. Random wait 120–300 seconds. Gmail chosen by sent_from. FU1 writes followup_1_sent; FU2 writes followup_2_sent.
Subject: Re: [original subject]
Hi {{ Company }} team, Just floating my last note back up. I still have the audit findings on your Google Maps and local search presence, happy to send them over by reply. Worth a quick look?
Subject: Re: [original subject]
Hi {{ Company }} team, Last note from me. If local search visibility is not a priority right now, no problem at all. If it becomes one later, the audit notes are here whenever you want them. Just reply anytime.
A second machine, not a longer first email
Follow-up stack
n8n weekday schedule, Google Sheets, Gmail (Nick) and Gmail (David) as published on the live write-up. Copies are swapped per client offer — the timing, caps, and sender match stay the architecture.
This build
Need the two-touch loop?
We walk sender routing and the reply-stop filters on a call.
Get a proposalDepends on
The other seven in this portfolio
Follow-Up Automation — short answers
Does this send the first email?
Will it follow up after a reply?
Why are the follow-ups hardcoded?
What does “sender-matched” mean?
Can the copies change for our offer?
Want day-3 and day-7 on the same thread?
We will walk the 18-node weekday run — dual filters, 8-cap, sender routing, and the reply-stop fields — against your sheet.