Skip to content

Daily

Send client follow-up emails from Notion on schedule

Leads in Notion whose follow-up date is today get the right email from your Gmail, and Notion moves them to the next step.

Runs
Daily
Apps
Gmail, Notion
AI
Optional
Access
Notion read+write; Gmail gmail.send

Send this to your assistant

Create a ClickRuntime automation: every weekday at 9am, find Notion leads whose next follow-up date is today, send them the email for their current step from Gmail and move them to the next step.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

A one-person marketing consultancy tracks leads and new clients in a Notion database. The follow-up plan is sensible, a thank-you after the call, a case study a week later, a check-in after two weeks, but it lives in her head. When work gets busy, follow-ups slip, and warm leads go cold.

Letting the Notion database decide who gets which email each day turns that plan into something that runs. Consultants, agencies, coaches and small sales teams use it for lead nurturing and client onboarding without paying for a separate email sequence tool.

What you get out of it

  • Follow-ups happen on the day you planned

    Each lead's next email goes out on its follow-up date, busy week or not. Consistent follow-up is often the difference between a lead that converts and one that forgets you.

  • Your CRM stays up to date

    After each email, the lead's step and next date are updated in Notion. The database always shows where each relationship stands.

  • Emails come from your own inbox

    Messages are sent from your Gmail, so they look personal and replies reach you directly. There is no marketing platform branding at the bottom.

  • Easy to pause someone

    Clearing the follow-up date or changing the step in Notion stops the emails for that person. You stay in control when a lead replies or a deal changes.

How it works

What happens, step by step

  1. Every weekday morning, ClickRuntime asks your Notion database for leads whose follow-up date is today.

  2. For each lead, it picks the email for their current step and fills in their name and company, with AI adding a personal line from their notes when available.

  3. The email is sent from your Gmail.

  4. The lead is moved to the next step in Notion with a new follow-up date, so nobody gets the same email twice.

Before it runs live

  • Connect Google through your own Google app (a one-time, 10-minute setup), so it works with your own Gmail
  • Connect Notion and share the database you want it to use

What you get

RunsDaily
Send client follow-up emails from Notion on scheduletoday, 9:00Succeeded
Notion · LeadsContoso Dental moved from Thank you to Case study; next follow-up 26 Oct. Email "Great to speak today" sent from Gmail.

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • 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 Gmail and Notion steps into one automation

Under the hood

The code that runs this automation

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
client_follow_up_emails_from_notion.pyexample
import base64
from datetime import date, timedelta
from email.message import EmailMessage
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, credentials, http, ai

DATABASE_ID = "your-database-id"
STEPS = {"Thank you": ("Great to speak today", 7, "Case study"), "Case study": ("How Northwind cut costs", 7, "Check-in"),
         "Check-in": ("Any questions?", 0, "Done")}

@on_trigger
def run(event):
    nh = {"Authorization": f"Bearer {credentials.connection('notion', 'work')}", "Notion-Version": "2022-06-28"}
    today = date.today().isoformat()
    leads = http.post(f"https://api.notion.com/v1/databases/{DATABASE_ID}/query", headers=nh, json={"filter": {
        "property": "Follow-up", "date": {"equals": today}}}).json()["results"]
    gmail = build("gmail", "v1", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False)
    for lead in leads:
        p = lead["properties"]
        name, email, step = p["Name"]["title"][0]["plain_text"], p["Email"]["email"], p["Step"]["select"]["name"]
        if step not in STEPS or not email:
            continue
        subject, gap, nxt = STEPS[step]
        text = f"Hi {name.split()[0]},\n\nFollowing up on our conversation. ({step})\n\nBest regards"
        try:
            notes = "".join(t["plain_text"] for t in p.get("Notes", {}).get("rich_text", []))
            text = ai.generate(f"Write a short '{step}' follow-up email to {name}. Notes: {notes[:1500]}", max_output_tokens=300).text
        except ai.AIError:
            pass
        msg = EmailMessage()
        msg["To"], msg["Subject"] = email, subject
        msg.set_content(text)
        gmail.users().messages().send(userId="me", body={"raw": base64.urlsafe_b64encode(msg.as_bytes()).decode()}).execute()
        follow = {"date": {"start": (date.today() + timedelta(days=gap)).isoformat()}} if gap else {"date": None}
        http.patch(f"https://api.notion.com/v1/pages/{lead['id']}", headers=nh, json={"properties": {
            "Step": {"select": {"name": nxt}}, "Follow-up": follow}})
    return {"leads": len(leads)}

FAQ

Common questions

Where are the email texts kept?
Each step has its own subject and message, with the lead's name and company filled in. They can be kept in the script or in a Notion page so you can edit the wording without touching anything else.
What happens when a lead replies?
Change their step in Notion, for example to In conversation, and they drop out of the sequence. Leads only receive emails while their step is one of the follow-up steps.
Can the emails be tailored to each lead?
Yes. If AI is available, the email for each step can be adjusted using the notes in the lead's Notion page, such as what they mentioned on the first call. Without it, the standard text for that step is used.
What permissions does it need?
Notion read+write; Gmail gmail.send. Nothing else in your accounts is used.
Does it need AI?
No, but you can ask for an AI step (for example a summary). It then uses ClickRuntime's built-in AI allowance.
How many runs does it use?
One run each time it runs (daily). Checks that find nothing to do and stop right away aren't counted.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Send client follow-up emails from Notion on schedule” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.