Auto-Capture Blog Ideas from Email into Notion Using GPT

Connect your email inbox to Zapier or Make

If you’re trying to scrape new blog ideas straight from your inbox to Notion, trust me — you’re going to want to start with either Make.com or Zapier. Both have email triggers that can watch for incoming messages, though they sometimes behave just a little too literally.

Here’s what I mean. I set up a Zap that was supposed to watch my Gmail inbox for any new email from myself with the subject line containing “Idea:”. Pretty straightforward, right? The plan was to use that subject line as a tag to forward the content through OpenAI and format it nicely in Notion. Instead?

The Zap would only trigger if the email was marked as unread — even though I had “New Email Matching Search” activated. So I had to add an extra filter for “is:unread from:me subject:Idea:” just to get it to behave. Better workaround? Star the email instead. That reliably triggers it.

Also, Gmail account connection loves to time out on Make if your token expires, which might mess you up mid-flow. Zapier seems slightly more stable with Gmail OAuth last I checked ¯\_(ツ)_/¯.

Create a prompt structure Notion can parse

The GPT output needs to come out clean enough to be shoved into whatever Notion database you use for blog idea tracking. So instead of just dumping the email body into GPT with no prompt structure (which gave me weird self-help line breaks like “Let’s unpack this idea 🌱”), I ended up using this format:

– EMAIL SUBJECT: (use input data)
– EMAIL BODY: (paste email)
– TASK: Write a Notion-compatible blog idea with the following fields:
– Title (short phrase)
– Short Description (2-3 sentences)
– Status: “Idea”

It’s not perfect. Occasionally, GPT still replies with Status as a title. But nine times out of ten it gets it right. Especially if you include examples in the few-shot prompt (e.g., “Title: Using AI to Find Tweets / Short Description: Collecting viral posts on Twitter for newsletter ideas…”).

Just don’t forget that GPT-4 doesn’t remember what you told it before unless you’re in a continuing thread or Make’s AI module remembers its last input. I had multiple Notion pages titled “TASK:” before I figured that out 🙂

Build a Notion database that accepts generated idea fields

Here’s where things got real picky. My Notion setup for blog ideas has Title, Status, Description, and a Created Time. But when I passed incomplete data — like when OpenAI only returned a Title and nothing else — Make straight-up failed with a cryptic “400 error.” Notion doesn’t give great debugging info.

Big tip: make every field optional and default in your automation with dummy values like “Pending” or “GPT failed.” That saved me crazy amounts of time. Also, your Notion columns must EXACTLY match what you call them in the API. “Short Description” isn’t the same as “Short description.” Capitalization counts! And you’d be surprised how often I mixed those up at 2am.

I also added a formula column that combines Status and Created Time for a quick filter view. Helps sort what GPT sent through vs. what I added on my own.

Use filters to avoid garbage triggering the flow

Early tests sent me down a rabbit hole when every newsletter that included the word “idea” triggered the system. That’s how I got a blog suggestion titled “Idea: Buy 2 Frozen Pizzas to Save $1,” courtesy of Safeway’s email.

Here’s what finally worked:

Use a naming convention. I started every idea-email with “BlogIdea:”, and only sent those messages from my own address. Add filters for:
– From = my email
– Subject contains “BlogIdea:”
– Ignore emails with attachments (optional)

In Zapier, the filter step is crucial. Don’t rely on the Gmail search input alone. It’ll still run the zap and just skip output — wasting task runs. If you don’t add a second layer in Filters, you’ll chew through Zaps really fast.

Bonus: I also created a manual fallback by adding a label in Gmail. If an idea doesn’t get picked up, I just tag it with “Zap Blog Idea” and a second zap checks those hourly.

Send the email content to GPT with structure

I used Zapier’s ChatGPT integration to ask GPT to reformat the email into a blog idea entry. Again, structure matters. If you give it a vague context like “turn this into a blog,” you’ll end up with long rambly intros that repeat your entire email as-is.

Instead, try something like:

“We receive emails with blog ideas. Using the email context provided, extract and return a blog idea in this JSON format:
{
“Title”: “”,
“Short Description”: “”,
“Status”: “Idea”
}
Only fill in the fields. Do NOT generate explanations.”

Even better: pre-check the structure by piping the content through a regex step. One zap I use has a little Python code to yank just the content below the second line, assuming I formatted my email strictly.

If you’re wondering — yes, I did test Claude here instead of ChatGPT. It was slower and more verbose, and weirdly started thanking me for submitting the idea. Not what I wanted.

Insert result into the right Notion database

Once GPT gives its structured response, back in Zapier you’ll need to map the outputs carefully into the Notion fields. Mapping is mostly drag-and-drop, but again — field names must match.

Watch out for empty strings. Notion doesn’t love those. If GPT leaves a field blank entirely (it does this sometimes when your email is too short), Zapier will error unless you handle defaults. Best strategy I found: format fields with fallback values like:

{{Title}} or “Untitled”
{{Description}} or “Needs summary”

Also, double-check the Notion database ID. When you duplicate a database to test, the old connection may still reference the original, and suddenly your notes disappear into Notion limbo. Spent a fun half-hour figuring that one out when nothing showed up after a dozen test runs oof 🙃

Write a Gmail draft directly from Notion if idea gets approved

This was a cool extra thing I added. Once a blog idea changes status from “Idea” to “Approved” in Notion, I used a zap to auto-generate a Gmail draft with a subject line like:

“Outline this: {{Title}}”

Then I prefill the body with something like:

“Hey, here’s an approved blog idea. Can you start outlining this?

Quick Summary:
{{Short Description}}”

This makes it super easy to loop in collaborators, or just jog your own memory. One bug: if you try to use rich text from Notion (like bullet points), Gmail just ignores it. Text-only works best. You could use Markdown, but don’t expect it to render.

I haven’t figured out yet how to reply to the original “idea” email automatically using this same flow — maybe next project 😅

Checkpoints to make sure it still works

Every few days, I check:

– Did any GPT output come through malformed?
– Are the emails still triggering reliably? (Star one and wait a minute)
– Is Notion still capturing the right fields? (Watch out for blank Status or Title)
– Did Gmail revoke the app access again? (Zap runs will silently fail sometimes)

Also, keep a dummy test email in your drafts folder. You’ll be glad you did once something randomly breaks for no reason and you just need to confirm if the system is still even firing the trigger.

Leave a Comment