Most deals are not lost to a "no". They are lost to silence: the first email goes out, nobody replies, and the follow-up never happens.
When follow-ups do happen, the opposite goes wrong. The sequence keeps emailing someone who already replied, booked a call or signed.
Sales follow-up automation fixes both, if you build three things: a trigger that knows who is due, a sequence with sensible timing, and stop rules that know when to shut up.
30-Second Summary
- Sales follow-up automation has three parts: a trigger (who is due), a sequence (when and how) and stop rules (when to end).
- Stop rules matter most: end on a reply, a meeting, an open deal, an unsubscribe or a customer, and after a follow-up limit.
- You can build it in your CRM, a cold email tool, n8n or with a short script; we show a tested HubSpot, Claude and Instantly workflow as the example.
- AI writes better follow-ups with context: give it the lead and the previous email, plus one page of writing rules.
- In our test of 8 contacts, the workflow wrote 3 follow-ups, stopped 4 contacts for the right reason, and caught the one reply within minutes.
There is no single right tool for this. What matters is reliable activity data, clear stop rules and messages that add something each time.
We built the full workflow on a real HubSpot and Instantly account to show what each step looks like. Copy it below, or follow the same method with your own stack.
We will walk you through the process step by step.
Everything is in one public GitHub repo: the script, the writing rules, the agent instructions and the n8n workflow. Paste the prompt into your AI agent, or pick the n8n tab to run it without code.
Let your AI agent set it up
Paste this prompt into Claude Code, Codex or Cursor. Your agent clones the public repo, follows its instructions and asks before every change.
Follow up with my HubSpot contacts who did not reply. Clone https://github.com/evaboot-labs/ai-sales-follow-up, read AGENTS.md and follow the follow-up skill. Show me a dry run with every draft before you send anything.
In the repo
- A Python script that finds who is due, applies the stop rules, writes each follow-up with Claude and sends it through Instantly
- FOLLOW_UP.md: your offer and the writing rules the AI follows
- AGENTS.md and a follow-up skill, so your agent runs it for you
- The n8n workflow, with its setup guide
Set it up in n8n
Paste this prompt into your AI agent and it walks you through the import, one step at a time. Or open the workflow JSON on GitHub and import it yourself.
Set up the AI sales follow-up workflow in my n8n. Clone https://github.com/evaboot-labs/ai-sales-follow-up and follow docs/n8n.md. Walk me through importing n8n/hubspot-ai-sales-follow-up.json, adding the HubSpot, Anthropic and Instantly credentials, and filling in Your settings, one step at a time.
In the repo
- The workflow JSON: runs every weekday at 9am
- docs/n8n.md: the three credentials and the settings, step by step
- The same stop rules as the script: reply, meeting, open deal, unsubscribe, customer
We used HubSpot, Claude and Instantly in our example, but with a few tweaks, the same logic works with another CRM, model or sending tool.
In this guide
- What Is Sales Follow-Up Automation?
- The 3 Parts of a Follow-Up System
- Ways to Automate Sales Follow-Up
- How to Automate Follow-Ups With HubSpot, Claude and Instantly: Step by Step
- Sales Follow-Up Automation Example: 8 Test Contacts
- Where Does AI Drafting Fit?
- How to Know Your Follow-Up Automation Works
- Common Sales Follow-Up Automation Mistakes
What Is Sales Follow-Up Automation?
Sales follow-up automation sends the next message to a prospect without a rep having to remember it.
It decides who is due, writes or picks the message, sends it at the right time and stops when the conversation moves on.
It matters because the follow-up is where replies come from. In Backlinko's analysis of 12 million outreach emails, a single follow-up lifted replies by 65.8%.
Yet manual follow-up is the first task to slip in a busy week.
It replaces two fragile habits:
- Memory: "I'll follow up on Thursday." By Thursday there is a fire drill, and the lead has gone cold.
- Blind sequences: five emails on a fixed calendar, sent whether or not the prospect already answered.
Here is where follow-up really breaks:
Most failures happen in the logic, not the tool. The software sends perfectly; it just sends to the wrong people, at the wrong time, or forever.
The 3 Parts of a Follow-Up System
Every follow-up system that works has the same three parts. Get each one right before you pick a tool.
- Triggers: Who Is Due?
- The Sequence: When and How?
- Stop Rules: When to End?
1. Triggers: Who Is Due?
A trigger is the event that starts a follow-up. There are two kinds:
- Time-based: "no reply 3 days after the last email". Simple, works for every lead, and the backbone of most systems.
- Behavioral: "visited the pricing page", "opened the proposal three times". Higher signal, but it needs reliable tracking.
The two kinds work best together:
A behavioral trigger usually deserves a human action, not another email.
In HubSpot, for example, a workflow can create a call task the moment a contact visits a URL containing /pricing (workflows need a Professional plan):
Before you automate any trigger, check three things: the event is logged reliably, the next action is the same every time, and there is a clear stop rule.
2. The Sequence: When and How?
Space follow-ups a few days apart. Mixmax's rule of thumb is 2 to 5 days: close enough to stay in context, far enough not to read as pressure.
Send inside working hours in the prospect's time zone, on weekdays. A cold email tool handles this with a sending schedule:
Keep each follow-up short, and add one new thing each time: an idea, an example, a question. The last follow-up should say you will stop.
Mixing channels helps too: a LinkedIn message or a call between two emails reaches people who ignore their inbox.
3. Stop Rules: When to End?
Stop rules are the part reps skip, and the part that protects your reputation.
A follow-up sent after a "yes, let's talk" looks careless; one sent after "please stop" damages your sender domain and your email deliverability.
Every follow-up system needs these exits:
| Stop when | Where the fact lives |
|---|---|
| The prospect replies | Your sending tool, then your CRM |
| A meeting is booked | CRM or calendar tool |
| A deal is open | CRM |
| The prospect unsubscribes | Sending tool and CRM |
| They are already a customer | CRM lifecycle stage |
| The follow-up limit is reached | Your workflow |
Put each rule where the fact lives. Your sending tool knows about replies first; your CRM knows about meetings, deals and lifecycle stage.
In HubSpot, for example, a workflow can unenroll a contact from a sequence when their lifecycle stage becomes Opportunity:
Ways to Automate Sales Follow-Up
You do not need a specific tool. Pick the one that already holds your emails and your deal data.
| Option | How it works | Good for |
|---|---|---|
| CRM sequences | HubSpot Sales Hub sequences, Salesforce cadences: timed emails and tasks, unenrolled on a reply or a meeting | Teams that send from the CRM |
| Cold email tools | Instantly, lemlist or Smartlead send multi-step campaigns with stop-on-reply, from warmed mailboxes | Outbound at volume |
| n8n or Make | A scheduled workflow reads the CRM, applies your rules and sends through your email tool | Custom stop rules across tools |
| A script or an AI coding agent | A short script calls the CRM, an AI model and the sending tool. Claude Code, Codex or Cursor can run it for you | Full control, lowest cost |
Whatever you pick, two choices matter more than the tool:
- Keep the CRM as the source of truth. If the sending tool and the CRM disagree about who replied, someone gets chased after saying yes. Write every follow-up and every reply back to the contact.
- Write the rules down once. Your offer and your writing rules in one file, the stop rules in one place. When they live in five campaign templates, nobody updates them.
How to Automate Follow-Ups With HubSpot, Claude and Instantly: Step by Step
We use HubSpot because its free plan has the API, Claude to write each follow-up, and Instantly to send it from a connected mailbox.
The same steps work with Pipedrive, another model or lemlist: only the API calls change.
- Write Your FOLLOW_UP.md File
- Create a HubSpot Service Key and Three Properties
- Set Up the Instantly Campaign
- Find Who Is Due and Apply the Stop Rules
- Write Each Follow-Up With Claude
- Send With Instantly and Log It in HubSpot
- Catch the Replies
- Automate It
We tested it on 8 HubSpot test contacts with our own inboxes, each in a different state: no reply, replied, meeting booked, open deal, customer and too recent.
Every screenshot below comes from that run.
1. Write Your FOLLOW_UP.md File
Put your offer and your writing rules in one page. The model reads it for every follow-up.
Copy the template below, or download FOLLOW_UP.md from GitHub, then replace the offer with yours:
FOLLOW_UP.md
# How to write a follow-up
You write a short sales follow-up to a B2B lead who did not reply to our last email.
## What we sell
Evaboot exports LinkedIn Sales Navigator searches to a clean list with verified emails.
## Rules
- 40 to 80 words. Plain text, no links, no images.
- Refer to the previous email in one short phrase; do not repeat it.
- Add one new thing: a useful idea, a short example or a question about their team.
- One clear, low-effort ask, such as a yes/no question.
- Sound like a person: no "just checking in", no "I hope this email finds you well", no exclamation marks.
- Use the lead's first name. Sign with the sender's first name only.
- Follow-up 2 is the last one: make it shorter and say you will not follow up again.
- Subject: 2 to 5 words, lowercase except names, no "Re:".
- Never invent facts about the lead or their company. If you do not know something, do not mention it.The last rule matters most: a model that cannot see a fact must not claim it.
2. Create a HubSpot Service Key and Three Properties
In HubSpot, open More > Development > Keys > Service Keys and click Create service key. Add five scopes: crm.objects.contacts.read, crm.objects.contacts.write, crm.schemas.contacts.read, crm.schemas.contacts.write and sales-email-read.
The last one lets the workflow read your previous email:
Then create three contact properties: AI follow-up status, AI follow-ups sent and AI follow-up last sent. The script does it for you with python3 follow_up.py --setup.
Your first emails must be logged in HubSpot, which happens when you send from the CRM or log the email. The workflow reads Last Contacted to know who is due.
3. Set Up the Instantly Campaign
Connect a sending mailbox, then create a campaign with one step. The subject is {{followup_subject}} and the body is {{personalization}}: the workflow fills both for each lead.
In Settings, turn on Stop sending emails on reply. Instantly then stops the moment the lead answers:
Further down, turn on Stop Campaign for Company on Reply, so a reply from one person at a company stops the follow-ups to their colleagues too:
We also turned open tracking off and sent text-only: tracking pixels and HTML hurt deliverability, and a follow-up should look like a normal email.
4. Find Who Is Due and Apply the Stop Rules
Ask HubSpot for every contact last contacted more than 3 days ago that is not already stopped:
HubSpot contact search
POST https://api.hubapi.com/crm/v3/objects/contacts/search
{"filterGroups": [{"filters": [
{"propertyName": "notes_last_contacted", "operator": "LT", "value": <now minus 3 days, in ms>},
{"propertyName": "ai_followup_status", "operator": "NOT_IN",
"values": ["replied", "meeting", "deal", "unsubscribed", "customer", "finished"]}]}],
"properties": ["email", "firstname", "jobtitle", "company", "lifecyclestage", "notes_last_contacted",
"hs_sales_email_last_replied", "hs_latest_meeting_activity", "num_associated_deals",
"hs_email_optout", "ai_followup_count"], "limit": 100}Then check each contact against the stop rules.
Every rule uses a property HubSpot already fills in: the last reply date, the last meeting, the number of deals, the unsubscribe flag and the lifecycle stage.
In n8n, the Check stop rules node returns a reason for each contact, or nothing if a follow-up is due:
The reason is saved on the contact, so you can see in HubSpot why each follow-up stopped:
5. Write Each Follow-Up With Claude
For each contact still due, read the last email you sent from HubSpot (GET /crm/v4/objects/contacts/{id}/associations/emails, then a batch read), and send Claude the lead, that email and FOLLOW_UP.md:
Claude request
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-5-5",
"max_tokens": 2000,
"messages": [{"role": "user", "content": "<FOLLOW_UP.md>\n\nWrite follow-up number 1 from Roy.\n\nLead:\nFirst name: Nina\nJob title: Head of Sales\nCompany: Halden Robotics\n\nPrevious email subject: Prospect lists for the Halden sales team\nPrevious email:\nHi Nina, I saw Halden is hiring two SDRs...\n\nAnswer with JSON only: {\"subject\": \"...\", \"body\": \"...\"}"}]
}'Claude answers with a subject and a body. Our first email to Nina mentioned that her team was hiring SDRs; the follow-up built on that, without repeating it:
6. Send With Instantly and Log It in HubSpot
Add the lead to the Instantly campaign with the draft as personalization and the subject as a custom variable. Instantly sends it inside the campaign schedule:
Instantly API call
POST https://api.instantly.ai/api/v2/leads
Authorization: Bearer <INSTANTLY_API_KEY>
{"campaign": "<campaign id>", "email": "<lead email>", "first_name": "Nina",
"company_name": "Halden Robotics", "personalization": "<the follow-up body>",
"custom_variables": {"followup_subject": "<the subject>"}}In n8n, the Send with Instantly node makes this call for each lead:
Then log the follow-up on the HubSpot contact (POST /crm/v3/objects/emails) and update the three properties.
The email appears in the timeline, and Last Contacted moves forward, so the contact is not due again for another 3 days:
7. Catch the Replies
When Claire, one of our test contacts, answered "yes happy to chat", Instantly stopped her sequence, tagged her Interested and even drafted a reply for us to send:
HubSpot does not know about that reply yet.
So every run starts by copying Instantly replies into HubSpot: it lists the campaign's leads, keeps those with a reply, and sets their AI follow-up status to Replied.
From then on, no other workflow or rep chases them by mistake.
8. Automate It
With an AI coding agent, clone the repo, add your keys to .env, open the folder in Claude Code, Codex or Cursor and ask "Follow up with my HubSpot leads." The agent instructions make it check FOLLOW_UP.md, run a dry run and send only after your yes.
Without an agent, the same script runs from a terminal. python3 follow_up.py --dry-run prints the stops and the drafts, and sends nothing:
With n8n, copy or download the template from the workflow box at the top of this guide.
Add three credentials (HubSpot Service Key, Anthropic, and Header Auth for Instantly with `Authorization:
Bearer <key>`), then fill in Your settings: the days to wait, the follow-up limit, your campaign ID, your name and your writing rules.
Publish it and it runs every weekday at 9am. Our run checked 6 contacts, stopped 4 and queued 2 follow-ups in Instantly, in 11 seconds:
Sales Follow-Up Automation Example: 8 Test Contacts
Here is what happened to each of our test contacts, all with our own inboxes:
| Contact | State in HubSpot | What the workflow did |
|---|---|---|
| Claire, Head of Sales | First email 4 days ago, no reply | Sent follow-up 1; she replied, Instantly stopped, HubSpot marked Replied |
| Nina, Head of Sales | First email 4 days ago, no reply | Wrote follow-up 1, referring to her SDR hiring; Instantly sends it in the next sending window |
| Leo, Head of RevOps | First email 5 days ago, no reply | Wrote follow-up 1; Instantly sends it in the next sending window |
| Marc, VP Sales | Replied 2 days ago | Stopped: replied |
| Sofia, Head of Business Development | Demo booked | Stopped: meeting |
| Daniel, Sales Director | Open deal | Stopped: deal |
| Emma, Head of Growth | Already a customer | Stopped: customer |
| Lucas, Head of Sales | First email yesterday | Waited: not due yet |
The two things that went wrong in our first run were technical, not logical. Instantly blocks requests with Python's default user agent, and Claude needed more output tokens than we first allowed.
Both are fixed in the repo.
Where Does AI Drafting Fit?
AI drafting works best as a writer with a short brief, not as a strategist.
It does well on:
- Follow-ups to a known email: it can build on what you said without repeating it.
- Recaps after a call, when it has the notes.
- New angles for quiet leads: a question or an example instead of "bumping this".
Keep a human on pricing discussions, objections and senior stakeholders, where the right answer depends on context the model does not have. And always review a dry run before a new FOLLOW_UP.md goes live.
How to Know Your Follow-Up Automation Works
Track three numbers per campaign:
- Reply rate on follow-ups, compared with the first email.
- Reply-to-meeting rate: replies only count if they turn into conversations.
- Stop reasons: if most contacts stop at "finished", your follow-ups are not adding enough; if many stop at "replied" with a no, your targeting is off.
Together, these numbers show where to adjust:
Start with one rep and one campaign for 2 to 4 weeks, read the drafts and the replies, then roll it out.
Common Sales Follow-Up Automation Mistakes
Four mistakes cause most broken follow-up automations:
- Stop Rules Only in the Email Tool
- Following Up Forever
- Letting the AI Invent Facts
- Not Writing Back to the CRM
1. Stop Rules Only in the Email Tool
The email tool knows about replies, but not about the meeting booked by phone or the deal opened by a colleague. Check the CRM before every follow-up, as step 4 does.
2. Following Up Forever
A sequence with no limit turns persistence into spam. Two or three follow-ups is plenty; make the last one say you are stopping.
3. Letting the AI Invent Facts
A model asked to "personalise" will happily congratulate a lead on a funding round that never happened. Give it only real context, and forbid invented facts in the rules.
4. Not Writing Back to the CRM
If follow-ups and replies stay in the sending tool, the CRM thinks nobody was contacted, and the next workflow or rep starts again. Log every email and every reply on the contact.
Frequently asked questions
What is sales follow-up automation?
Software that sends the next message, and knows when to stop.
Sales follow-up automation sends the next message to a prospect without a rep remembering to do it. It has three parts: a trigger that decides who is due, a sequence that decides when and how to follow up, and stop rules that end it.
The stop rules fire when the prospect replies, books a meeting, becomes a deal or unsubscribes.
How many follow-ups should you send?
Two or three after the first email.
Space them a few days apart, make each one add something new, and make the last one say you will stop.
Our workflow sends at most two AI-written follow-ups, three days after the last contact, and stops earlier on any reply, meeting, deal or unsubscribe.
When should automated follow-ups stop?
On a reply, a meeting, a deal, an unsubscribe or a customer.
And after your follow-up limit. Put the rules where the facts live: replies in your sending tool, meetings, deals and lifecycle stage in your CRM.
Instantly can stop on a reply and stop for the whole company when one person answers.
What is a good sales follow-up message?
Short, new and easy to answer.
Keep it to 40 to 80 words. Refer to your previous email in one phrase without repeating it, add one new thing such as an idea, an example or a question, and end with an ask that takes seconds to answer.
Avoid "just checking in": it adds nothing for the reader.
Can AI write sales follow-ups without losing personalisation?
Yes, with real context and clear rules.
In our test, Claude read each lead's job title, company and the previous email, plus a one-page FOLLOW_UP.md, and wrote follow-ups that built on that email.
Review a dry run first, and forbid invented facts in the rules: the model must not claim things about the lead it cannot see.
Rate this article