Reads new Gmail email for feature requests and logs the ones it finds in Notion as tasks, with a summary of who asked and why.
Uses
Claude
GmailNotion
Turn emailed feature requests into Notion tasks
When a new email arrives in your Gmail inbox, the AI checks whether it asks for something your product does not do yet. If it does, each request is written up as an actionable item, a short summary says who is asking, what problem it would solve and how much it matters, and both land on a new page in your Notion feature-request database. Emails that hold no request - bug reports, billing questions, newsletters, notifications, replies that only chase an earlier request - are skipped, with the reason in the run log.
Each page is titled with the feature rather than the email, so the database reads as a list of requests. It holds the requests as to-dos, the summary, who sent the email and when, a link back to it in Gmail, and the email's own text, so teammates who cannot see your inbox can read the request in the sender's words. Only the title column is written, so it works with any database.
You need Gmail, Anthropic and Notion connections, and the link to a Notion database shared with your Notion connection. Every new email in your inbox starts its own run and is read by the AI, so set the trigger's From filter to the sender or domain your requests come from, such as your feedback form's address: the rest of your inbox then stays away from the AI, and you pay for far fewer runs.
email.When an email arrives. Save it as email.featureRequestsDatabaseId to blank.Set featureRequestsDatabaseId to blank.titleProperty to Name.Set titleProperty to Name.productDescription to blank.Set productDescription to blank.includeEmailText to true.Set includeEmailText to true.subjectKeywords to an empty list.Set subjectKeywords to an empty list.ignoreKeywords to [out of office, automatic reply, auto-reply, autoreply, undeliverable, delivery status notification, mail delivery failed].Set ignoreKeywords to [out of office, automatic reply, auto-reply, autoreply, undeliverable, delivery status notification, mail delivery failed].gmailAccountIndex to 0.Set gmailAccountIndex to 0.message, database, title_property, product, subject_keywords, ignore_keywords, and account_index and save it as intake.Run Python code on message, database, title_property, product, subject_keywords, ignore_keywords, and account_index and save it as intake.intake.setup_problem isn't emptyIf intake.setup_problem isn't emptyintake.setup_problem.Stop and report a problem: intake.setup_problem.intake.proceed is noIf intake.proceed is nointake.reason.Finish the run: intake.reason.requestsReply to blank.Set requestsReply to blank.requestsErrorIf a step below fails, save the error as requestsErrorrequestsResponse.
Maximum response length: 1000requestsResponse.response_text and save it as requestsReply.Trim requestsResponse.response_text and save it as requestsReply.intake.ai_failure_prefix plus requestsError.message.Stop and report a problem: intake.ai_failure_prefix plus requestsError.message.requestsReply is emptyIf requestsReply is emptyintake.ai_failure_prefixnothing - its reply was empty.Stop and report a problem: intake.ai_failure_prefixnothing - its reply was empty.requestsReply starts with NONEIf requestsReply starts with NONEintake.no_request_reason.Finish the run: intake.no_request_reason.summaryText to blank.Set summaryText to blank.summaryProblem to blank.Set summaryProblem to blank.summaryErrorIf a step below fails, save the error as summaryErrorsummaryResponse.
Maximum response length: 500summaryResponse.response_text and save it as summaryText.Trim summaryResponse.response_text and save it as summaryText.summaryProblem to summaryError.message.Change summaryProblem to summaryError.message.requests_reply, summary, summary_problem, intake, and include_email_text and save it as page.Run Python code on requests_reply, summary, summary_problem, intake, and include_email_text and save it as page.page.has_requests is noIf page.has_requests is nopage.skip_reason.Finish the run: page.skip_reason.notionErrorIf a step below fails, save the error as notionErrorpage.title in intake.database_id.Create the page page.title in intake.database_id.page.failure_prefix plus notionError.message.Stop and report a problem: page.failure_prefix plus notionError.message.summaryProblem isn't emptyIf summaryProblem isn't emptypage.summary_warning.Show in the output: page.summary_warning.page.done_message.Show in the output: page.done_message.