Daily
Get a morning priorities email from Notion and Gmail
Every morning at 7 you get one email that combines your open Notion tasks and important unread Gmail, put in order by AI.
- Runs
- Daily
- Apps
- Gmail, Notion
- AI
- Yes, uses the built-in AI allowance
- Access
- Notion read; Gmail gmail.readonly, gmail.send
Send this to your assistant
Create a ClickRuntime automation: every morning at 7, email me my top priorities from my Notion tasks and my important unread Gmail.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A founder of a small studio starts each day by opening Notion to see what is due, then Gmail to see what came in overnight, then trying to decide what matters most. By the time a plan exists, the first hour has gone, and an urgent client email sometimes sits under a dozen newsletters.
This automation does the morning sort for you. At 7 it reads your open Notion tasks and your important unread emails, and AI turns them into one short email: what to do first, what can wait, and which emails need a reply today.
What you get out of it
A plan before your first coffee
One email tells you where to start. The first hour goes on the work, not on deciding what the work is.
Tasks and email in one view
Deadlines in Notion and requests in Gmail compete for the same time. Seeing them together makes the trade-offs obvious.
Urgent emails surface
Important unread messages are pulled out and ranked with your tasks. A client request does not get lost under newsletters.
Short enough to read on your phone
The digest is a handful of lines with clear priorities. You can read it on the way to work and know what the day looks like.
How it works
What happens, step by step
Every morning at 7, ClickRuntime reads the open tasks from your Notion task database.
It also collects the subjects and senders of your important unread Gmail messages.
AI ranks everything into a short list of priorities, with the emails that need a reply today.
The digest is emailed to you.
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
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 Gmail and Notion steps into one automation
Under the hood
The code that runs this automation
from clickruntime import on_trigger, credentials, http, ai, notify
DB_ID = "your-notion-tasks-database-id"
@on_trigger
def run(event):
n = {"Authorization": f"Bearer {credentials.connection('notion', 'work')}", "Notion-Version": "2022-06-28"}
pages = http.post(f"https://api.notion.com/v1/databases/{DB_ID}/query", headers=n,
json={"filter": {"property": "Status", "status": {"does_not_equal": "Done"}}, "page_size": 50}).json()["results"]
tasks = [p["properties"]["Name"]["title"][0]["plain_text"] for p in pages if p["properties"]["Name"]["title"]]
g = {"Authorization": f"Bearer {credentials.connection('google', 'work')}"}
base = "https://gmail.googleapis.com/gmail/v1/users/me/messages"
ids = http.get(base, headers=g, params={"q": "is:unread is:important newer_than:2d", "maxResults": 20}).json().get("messages", [])
emails = []
for m in ids:
hdrs = http.get(f"{base}/{m['id']}", headers=g, params={"format": "metadata", "metadataHeaders": ["From", "Subject"]}).json()["payload"]["headers"]
emails.append(" | ".join(h["value"] for h in hdrs))
listing = "Tasks:\n" + "\n".join(tasks) + "\n\nEmails:\n" + "\n".join(emails)
try:
body = ai.generate(listing, system="Write a short morning brief: top 3 priorities, emails needing a reply today, what can wait.", max_output_tokens=500).text
except ai.AIError:
body = listing
notify.email_me(f"Today: {len(tasks)} open tasks, {len(emails)} important emails", body)
return {"tasks": len(tasks), "emails": len(emails)}FAQ
Common questions
Which Notion tasks are included?
Which emails count as important?
Can I get it at a different time?
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
Track websites and subreddits in Notion with a daily email
New posts and page changes from the sites and subreddits you watch are summarised into Notion, with highlights emailed to you.
See how it worksSend 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.
See how it worksScore CVs from email against your Notion job profiles
Each job application that arrives by email is scored against the matching role in Notion, with the result saved and emailed to you.
See how it worksKeep exploring
Set up “Get a morning priorities email from Notion and Gmail” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.