Daily
Send a personalised email sequence to leads in a sheet
Each lead in your sheet gets a short, personal sequence of emails through SendGrid, and the sheet shows who is at which step.
- Runs
- Daily
- Apps
- Google Sheets, SendGrid
- AI
- Optional
- Access
- sheet edit; Mail Send
Send this to your assistant
Create a ClickRuntime automation: every weekday at 9, email the leads in my Leads sheet through SendGrid: a first email, then follow-ups 3 and 7 days later. Personalise the opening line from their company and note, and update the step and date in each row.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A two-person agency keeps a sheet of a few hundred prospects gathered from events and referrals. They know follow-ups win most replies, but nobody remembers who got the first email when, so most leads get one message and are never contacted again.
The sheet now drives the whole sequence. Each weekday the next email goes to every lead that is due, with an opening line written from the company and notes in the row, and the step and date are updated so you can see exactly where each lead stands.
What you get out of it
Follow-ups actually happen
The second and third emails are where most replies come from, and they go out on time without anyone setting reminders.
Personal without the typing
An opening line drawn from the lead's company and your notes reads like a real email, not a mail merge.
The sheet stays the source of truth
Step, last sent date and status sit in each row, so the whole team can see the campaign at a glance.
Easy to stop for anyone who replies
Mark a row as replied and the sequence stops for that lead the next morning.
How it works
What happens, step by step
Every weekday morning, ClickRuntime reads your leads sheet.
It finds the leads due for their next email, based on the step and the date of the last one.
AI writes a short personal opening line from the lead's company and your notes, and the email goes out through SendGrid.
The step and date are updated in the row, so no one gets the same email twice.
Before it runs live
- Connect your Google Sheets account and pick the spreadsheets it may use
- Connect SendGrid
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Run it at a different time, more or less often, or only on weekdays
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Slack
- Combine it with other Google Sheets and SendGrid steps into one automation
Under the hood
The code that runs this automation
from datetime import date, timedelta
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, credentials, http, ai
SHEET_ID = "your-spreadsheet-id"
STEPS = [(0, "Quick idea for {company}"), (3, "Following up"), (7, "Last note from me")]
@on_trigger
def run(event):
values = build("sheets", "v4", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False).spreadsheets().values()
rows = values.get(spreadsheetId=SHEET_ID, range="Leads!A2:F").execute().get("values", [])
key, sent = credentials.secret("SENDGRID_API_KEY"), 0
for i, r in enumerate(rows):
name, email, company, note, step, last = (r + [""] * 6)[:6]
step = int(step or 0)
if step >= len(STEPS) or note == "replied" or (last and date.fromisoformat(last) + timedelta(days=STEPS[step][0]) > date.today()) or sent >= 50:
continue
opener = ai.generate(f"One friendly opening line to {name} at {company}. Context: {note}", max_output_tokens=60).text.strip()
http.post("https://api.sendgrid.com/v3/mail/send", headers={"Authorization": f"Bearer {key}"},
json={"from": {"email": "hello@acme.example"}, "subject": STEPS[step][1].format(company=company),
"personalizations": [{"to": [{"email": email}]}], "content": [{"type": "text/plain", "value": opener}]})
values.update(spreadsheetId=SHEET_ID, range=f"Leads!E{i + 2}:F{i + 2}", valueInputOption="RAW",
body={"values": [[step + 1, date.today().isoformat()]]}).execute()
sent += 1
return {"sent": sent}FAQ
Common questions
How many emails does it send per day?
What stops the sequence when someone replies?
Can I write the emails myself?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Email the team a weekly metrics report from a sheet
Every Monday your team gets an email with last week's numbers from your sheet, the change from the week before, and a short summary.
See how it worksSend your newsletter to everyone in a subscriber sheet
AI drafts your newsletter, you approve it, and it goes to every subscriber in your sheet through SendGrid, with each send logged.
See how it worksScreen applicants in a sheet and email each one
Every new applicant in your sheet is scored against the job, the score is written back, and they get the right email.
See how it worksKeep exploring
Set up “Send a personalised email sequence to leads in a sheet” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.