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.

UsesClaudeGmailNotion

Turn emailed feature requests into Notion tasks

GmailGmailWhen an email arrives. Save it as email.When an email arrives. Save it as email.
ValuesSet featureRequestsDatabaseId to blank.Set featureRequestsDatabaseId to blank.
ValuesSet titleProperty to Name.Set titleProperty to Name.
ValuesSet productDescription to blank.Set productDescription to blank.
ValuesSet includeEmailText to true.Set includeEmailText to true.
ValuesSet subjectKeywords to an empty list.Set subjectKeywords to an empty list.
ValuesSet 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].
ValuesSet gmailAccountIndex to 0.Set gmailAccountIndex to 0.
CodeRun Python code on 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.
Decisions & LoopsIf intake.setup_problem isn't emptyIf intake.setup_problem isn't empty
Yes
Decisions & LoopsStop and report a problem: intake.setup_problem.Stop and report a problem: intake.setup_problem.
No
No steps
Decisions & LoopsIf intake.proceed is noIf intake.proceed is no
Yes
Decisions & LoopsFinish the run: intake.reason.Finish the run: intake.reason.
No
No steps
ValuesSet requestsReply to blank.Set requestsReply to blank.
Decisions & LoopsIf a step below fails, save the error as requestsErrorIf a step below fails, save the error as requestsError
Try
ClaudeClaudeAsk Claude: 'You are reading an email that arrived in a product team's inbox. Find the feature requests in it, and write each one as an actionable item for the team's backlog.@intake.product_contextAsk Claude: 'You are reading an email that arrived in a product team's inbox. Find the feature requests in it, and write each one as an actionable item for the team's backlog.@intake.product_context A feature request asks for the product to do something it does not do today: a new feature, a change to how something works, an integration, a setting, a report, support for another platform or file format. It still counts when it arrives as a complaint ('there is no way to export this'), as a question that shows the product falls short ('can I bulk-edit invoices?'), or when the sender is passing on what a customer asked for. It does not count when the email is only a bug report about something that should already work, a billing or account question, a question about using something that already exists, praise, a sales pitch, a newsletter, a receipt or an automated notification. Reply in exactly this format, with nothing before or after it. For example: TITLE: CSV export for the revenue report - Add CSV export to the monthly revenue report - Let finance schedule that export to arrive on the first of each month Rules: - The TITLE line is a short name for the main request, at most eight words, naming the feature rather than the email. - Then one line per distinct request, each starting with '- ' and a verb. At most twenty, the most important first. - Keep the specifics the email gives - which screen, which format, which integration, who needs it, by when - so each line makes sense without the email. - Say what they asked for, not how to build it. Do not invent requests the email does not make. - A request has to be for the team's own product - something they could build or change - not for a tool they use, a document, or a service someone else provides. - If the sender forwards or passes on someone else's message, the requests in it count. - Lines starting with '>', and anything below a line such as 'On Tuesday, Dana wrote:' or a 'From: ... Sent: ...' block, are earlier messages in the conversation. A request that appears only there counts when the new part of the email passes it on or adds another voice to it ('see the customer's request below', '+1, we need this too'), but not when the new part only chases an update on it, thanks someone for it or acknowledges it. - When in doubt whether something is a feature request, include it.@intake.product_rule - If the email contains no feature request at all, reply with exactly NONE and nothing else.@intake.email_block'. Save it as requestsResponse. Maximum response length: 1000
TextTrim requestsResponse.response_text and save it as requestsReply.Trim requestsResponse.response_text and save it as requestsReply.
On error
Decisions & LoopsStop and report a problem: intake.ai_failure_prefix plus requestsError.message.Stop and report a problem: intake.ai_failure_prefix plus requestsError.message.
Decisions & LoopsIf requestsReply is emptyIf requestsReply is empty
Yes
Decisions & LoopsStop and report a problem: intake.ai_failure_prefixnothing - its reply was empty.Stop and report a problem: intake.ai_failure_prefixnothing - its reply was empty.
No
No steps
Decisions & LoopsIf requestsReply starts with NONEIf requestsReply starts with NONE
Yes
Decisions & LoopsFinish the run: intake.no_request_reason.Finish the run: intake.no_request_reason.
No
No steps
ValuesSet summaryText to blank.Set summaryText to blank.
ValuesSet summaryProblem to blank.Set summaryProblem to blank.
Decisions & LoopsIf a step below fails, save the error as summaryErrorIf a step below fails, save the error as summaryError
Try
ClaudeClaudeAsk Claude: 'Summarise this email for a product manager, who will read your summary in the team's feature-request log instead of opening the email.@intake.product_contextAsk Claude: 'Summarise this email for a product manager, who will read your summary in the team's feature-request log instead of opening the email.@intake.product_context Write three to five sentences of plain prose. Cover who is asking - their name, and their role and company if the email says; what they want and the problem it would solve for them; how they manage without it today, if they say; and anything that shows how much it matters, such as a deadline, a renewal or deal that depends on it, how many people it affects, or a plan to leave. If the sender is passing on a customer's request, say who the customer is and who passed it on, and if the email chases a request made earlier in the conversation, say so. Lines starting with '>', and anything below a line such as 'On Tuesday, Dana wrote:', are earlier messages: use them as context, and summarise a request made there only when the new part passes it on. Keep the names, numbers, dates and amounts. Leave out greetings, signatures and legal footers. Do not judge whether the request is a good idea, do not add a heading, bullets or a closing line, and do not open with 'This email'.@intake.email_block'. Save it as summaryResponse. Maximum response length: 500
TextTrim summaryResponse.response_text and save it as summaryText.Trim summaryResponse.response_text and save it as summaryText.
On error
ValuesChange summaryProblem to summaryError.message.Change summaryProblem to summaryError.message.
CodeRun Python code on 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.
Decisions & LoopsIf page.has_requests is noIf page.has_requests is no
Yes
Decisions & LoopsFinish the run: page.skip_reason.Finish the run: page.skip_reason.
No
No steps
Decisions & LoopsIf a step below fails, save the error as notionErrorIf a step below fails, save the error as notionError
Try
NotionNotionCreate the page page.title in intake.database_id.Create the page page.title in intake.database_id.
On error
Decisions & LoopsStop and report a problem: page.failure_prefix plus notionError.message.Stop and report a problem: page.failure_prefix plus notionError.message.
Decisions & LoopsIf summaryProblem isn't emptyIf summaryProblem isn't empty
Yes
ValuesShow in the output: page.summary_warning.Show in the output: page.summary_warning.
No
No steps
ValuesShow in the output: page.done_message.Show in the output: page.done_message.