AI-based school email filtering
Articles
AI-based school email filtering! I can’t believe I waited until after the school year to build out this automation flow. It uses a prompt to determine whether an email contains something actionable for a parent, taking into account the names of my kids, teachers and classes, plus a general prompt-based evaluation of the email contents. If the email is actionable, it forwards an minimal task summary to my personal email address along with a copy of the original email.
It can also message directly to our phones using SMS (via Twilio), Pushover, etc. When the new school year starts, I’ll filter for urgent messages and have it push directly to our phones using Pushover as a critical alert, bypassing “do not disturb” mode, and will also explore automatic calendar entry creation (we use a shared family/school calendar for parents and caregivers).
I had been casually building this out using code for awhile to avoid the $20/month pro membership at Zapier, but in a moment of inspiration, I used ChatGPT to look for low-cost alternatives to Zapier and found Active Pieces, which is pay-as-you-go. The first 1000 tasks are free, and cost after that is $0.01 per 10 tasks (external nodes in the flow). My flow uses 2-3 tasks each time detects a new email (fetch email, prompt using GPT, possibly send email), and the GPT cost per run even on o4-mini is a small fraction of a penny.
I’m sort of looking forward to school starting back up so I can test this in earnest. 🙂

— UPDATE —
I’m being thwarted by some permissions stuff in a way that makes pay-as-you-go less desirable. The gmail trigger always pulls an email that matches, and it runs every 5 minutes and grabs an email (can’t change this), costing 1 task per run (288 per day). If it doesn’t grab an email, it doesn’t count as a task, but that only happens if there are no matches.
I can set a default gmail labels to all incoming mail for filter-based matching, but my school’s oauth settings don’t have the scope to allow for emails to be modified, so I can’t look for a message label and then remove the label after I’ve processed it.
I can store the messageIds locally and only take action if I’m seeing a new messageId, but the flow still runs and fetches an email every 5 minutes, using 1 task.
Zapier‘s unlimited tasks at $20/month might be the way to go vs a minimum of 288 tasks per day in Activepieces’ pay-as-you-go model. 1 task every 5 minutes is 8,640 tasks per month, or $8.64/month… plus the additional cost from firing the whole flow for matching messages. I don’t like being forced into running every 5 minutes. I can self-host Activepieces for more control, but I’m not sure I want to do that.
Also, Zapier’s gmail integration seems to auto de-dupe, which solves this problem.
I think I just convinced myself to just use Zapier. 🙂