How to Automate Your Email Follow-Ups with a Simple Script

Every founder knows the drill: you send a proposal, wait three days, hear nothing. So you send a follow-up. Then another. It’s tedious, and it’s easy to let things slip through the cracks.

That’s why I built a small Python script that handles follow-up emails automatically. It checks your outbox or a spreadsheet for pending items and sends a polite nudge after a set number of days. You just set the rules and let it run.

The core logic is simple: read a CSV with columns for prospect name, email, and last contact date. If today’s date is X days later, send a templated email. The script uses smtplib, so it works with any SMTP provider, including Gmail.

Here’s a snippet:

“`python
import csv
import smtplib
from datetime import datetime, timedelta

FOLLOW_UP_DAYS = 3

with open(‘leads.csv’) as f:
reader = csv.DictReader(f)
for row in reader:
last = datetime.strptime(row[‘last_contact’], ‘%Y-%m-%d’)
if datetime.now() – last >= timedelta(days=FOLLOW_UP_DAYS):
send_follow_up(row[’email’])
“`

Of course, you need to define the send_follow_up function with your email template and SMTP credentials. I’ve included placeholders in the full script.

The key is to make the email feel personal. Don’t just say “Just checking in.” Reference something specific from your last conversation. The script can pull a note field from the CSV to customize each message.

One of the biggest mistakes I see is sending follow-ups on a rigid schedule. Sometimes the best time is different for each lead. You can adjust the script to only send on weekdays, or to skip if the lead has already replied (tracked with a status column).

What about timing? Our data shows that follow-ups sent between 8am and 10am local time get a 20% higher open rate. But don’t over-optimize. The real win is consistency — never letting a lead go cold.

I’ve been using this for my own outreach for six months. My response rate went up 30%, and I’ve closed deals that would have otherwise evaporated.

The script is available in the library, complete with documentation and a sample CSV. It takes about 15 minutes to set up, and you’ll never forget a follow-up again.