All Ideas
All Startup Ideas
Productivity ~8 hours to build

Email to Todo Converter

AI that actually reads the email. Tasks with due dates and owners, routed to your task app of choice.

The Problem

The average knowledge worker receives 121 emails per day (Radicati Group 2024). Roughly 15–20 of those require specific action — "can you review this doc by Thursday," "we need the deck before the Monday exec meeting," "customer X wants the refund processed today." The actions are buried inside three paragraphs of context, embedded as a single sentence in the middle of a reply-all thread, or listed as a bulleted dump at the bottom of a meeting recap.

Todoist has an email-forward feature. So does Things, TickTick, Omnifocus, Microsoft To Do. They all work the same way: forward an email, it becomes a task with the subject as the title and the body as the description. No due date extraction. No priority inference. No detection of "this email has three asks, not one." The user still has to read the task, extract what it actually means, set a date, and move on.

The LLM moment for this is obvious. Claude can read an email, identify the actual asks, infer due dates from phrases like "before Monday," guess priority from urgency language, and output a clean structured list. A $5/month tool that turns every forwarded email into a ready-to-schedule task list saves 15–30 minutes per day per user. The incumbents have all the distribution but none have shipped this AI extraction step; a small indie can carve out the underserved "power forwarder" segment.

The Solution

User signs up, gets a unique forwarding address like inbox.jeff.a8b2@task.product.com. Forwards any email there. Claude parses: identifies distinct action items, detects due dates ("by Friday" → ISO date), infers priority (urgency keywords + sender seniority), extracts the owner if mentioned. Results push to the user's configured destination: Todoist list, Notion database, Linear issue, Things inbox, or an email digest. User can reply to the processed digest with "add 'call Sarah tomorrow'" to add a new task manually.

How it works:

1

Forward email

Unique inbox address per user

2

AI extracts tasks

Asks, due dates, priority, owners

3

Routes to your app

Todoist / Notion / Linear / Things / email

The retention loop is the structured output quality. Users keep forwarding because the output lands in their task manager pre-sorted, pre-dated, and pre-prioritized. Over time, user-specific patterns (which senders are urgent, what "EOD" means for this user) improve the extraction prompt. The destination integrations (OAuth to Todoist/Notion/Linear) are the switching cost — once configured, users don't want to rebuild elsewhere.

Market Research

The personal task management market is $4.2B in 2024, projected to $9.8B by 2030 at 15.2% CAGR (Allied Market Research). Email remains the dominant work communication channel with 347B emails sent/received daily globally (Statista 2024). Every knowledge worker is a potential user; the question is whether the AI extraction is good enough to justify $5–$10/month as a layer on top of their existing task app.

  • Todoist has 30M+ users, 5M+ paid (company stats). Notion crossed 30M users. Linear serves 10K+ SaaS teams. Each has an email-in feature with weak parsing — every user of those platforms is a candidate.
  • Knowledge workers lose 2.5 hours/day to inbox triage (McKinsey 2012, re-confirmed in 2022). Even a 20% reduction is 30 min/day, $10+/hr of saved time, easily justifying a $10/mo tool.
  • Superhuman charges $30/mo for their power-email experience and has a cult following. That proves willingness to pay at the high end for email-workflow tools; the $5–$10 tier is open below them.
  • Search: "email to task" 1.6K/mo, "email task manager" 2.9K/mo, "forward email todoist" 880/mo. CPC $2–$5, solid commercial intent.
  • LLM cost math: Claude Haiku on a 2K-token email extraction is ~$0.002/email. A user forwarding 30 emails/day costs $0.06/day ≈ $1.80/mo ≈ under 20% of $10 ARPU. Margins sustainable even with free-tier abuse.

Stage: fragmented indie. TextExpander, Siri Shortcuts, Zapier, and native email-in features each cover a slice. No dominant AI-first player has emerged. The 12–18 month window is open before Todoist or Notion bolts semantic extraction into their native email-in features. Distribution via productivity YouTubers and r/productivity is the cheap path.

Competitive Landscape

Four layers. Native email-in on task apps is the free default with weak parsing. Superhuman targets power emailers at premium price but doesn't route to task apps. Zapier/TextExpander offer no-code workflows without AI. The LLM-enabled email-to-task SKU is effectively empty at the $5–$15 tier.

Todoist / Things / TickTick email-in

Native forwarding addresses. Subject becomes task title, body becomes description. Zero parsing. No due-date extraction, no priority inference, no multi-task detection.

Included in each app's pricing (Todoist Pro $5/mo, Things $50 one-time, etc.)

Superhuman

Premium email client with AI summarization and snippets. Targets power emailers. Not a task extractor; keeps things in the email paradigm. Pricing disqualifies casual users.

$30/mo individual, $25/user team

Zapier / Make / TextExpander

No-code automation. Can pipe emails to Todoist with basic keyword triggers. Requires setup; no semantic understanding; breaks on slight phrasing changes. Power-user territory.

Zapier $20–$100+/mo; TextExpander $4/mo

ClickUp / ChatGPT manual

ClickUp's email-in goes to a bucket; you triage manually. ChatGPT can extract tasks if you paste the email in, but requires the user to do the forwarding↔copy↔paste loop themselves. Not automated.

ClickUp $7–$19/user; ChatGPT $20/mo

Your Opportunity

One forwarding address → semantic extraction → routes to the app the user already pays for. $5 Basic / $12 Pro flat. Targets the Todoist/Notion/Linear user who keeps forwarding emails and manually retyping the task. Tagline: "The only email-to-todo tool that actually reads the email."

Business Model

Flat per-user pricing. Free tier caps at 10 emails/month to demonstrate value. Basic ($5/mo) handles light users. Pro ($12/mo) unlocks multiple destinations, custom parsing rules, and team sharing. Cost is bounded by LLM inference per email; at high-volume abuse (500 emails/mo), we still retain 60%+ margin thanks to Haiku pricing.

Free

$0

10 emails/mo, 1 destination, digest-only output

Basic

$5/mo

500 emails/mo, 2 destinations (Todoist/Notion/Linear/Things), custom inbox address

Pro

$12/mo

2,000 emails/mo, unlimited destinations, custom extraction rules, team sharing, API access

Unit Economics (illustrative)

LLM cost/email

~$0.002

Gross margin Basic

~88%

Target CAC

$8–$18

Free → Basic conv.

8–13%

MRR path: 500 Basic + 100 Pro = $3.7K/mo. 2K Basic + 400 Pro = $14.8K/mo. At 10K Basic + 2K Pro = $74K/mo ($888K ARR). Product Hunt + Todoist community + productivity YouTubers drive low-CAC organic growth. Retention high once users connect destination OAuth; switching cost is rebuilding integration configs.

Recommended Tech Stack

Inbound email + LLM + destination APIs. The inbound email handling is the only non-obvious bit; everything else is stock SaaS. Use Resend Inbound or CloudMailin for reliable email receiving.

Resend Inbound Email

Configure inbox.*.user@task.product.com catch-all routing to webhook. Resend forwards parsed MIME (subject, from, text, html, attachments) as JSON to /api/inbound endpoint.

Next.js 14 App Router

Admin UI: inbox address, destination OAuth, usage meter, past extractions. Route handler at /api/inbound processes emails async; revalidates history tag on completion.

Claude Haiku 4.5

Cheap + fast for structured extraction. JSON mode with schema: {tasks: [{title, due_date, priority: 'low'|'medium'|'high', owner?, context_snippet}], sender_urgency, thread_summary}.

Supabase

Tables: users, destinations (OAuth tokens encrypted), emails_processed, tasks_extracted, usage_monthly. RLS per-user.

Destination integrations (OAuth)

Todoist REST v2, Notion API, Linear API, Things URL scheme (iOS/Mac only), plain-email digest. Each destination has its own adapter: destinations/todoist.ts, destinations/notion.ts, etc. Common interface: pushTasks(tasks, config).

Stripe Billing + Upstash Rate Limit

Stripe Checkout for Basic/Pro. Upstash Ratelimit enforces monthly email cap per user; over-limit returns 429 to inbound webhook with a notice email to user.

AI Prompts to Build This

Copy and paste these into Claude, Cursor, or your favorite AI tool.

1. Inbound Email + User Addressing

Create a Next.js 14 App Router app with Resend Inbound email routing. DNS setup: - Register task.product.com as a Resend domain. - Add MX records pointing to Resend inbound servers. - Configure catch-all routing: all inbox.*@task.product.com → https://product.com/api/inbound webhook. Schema: - users(id, email, inbox_slug, plan, stripe_customer_id, created_at) - destinations(id, user_id, type ENUM[todoist,notion,linear,things,email_digest], oauth_access_token_encrypted, oauth_refresh_token_encrypted, config JSONB) - emails_processed(id, user_id, from_address, subject, received_at, llm_tokens_used, status ENUM[pending,processed,failed]) - tasks_extracted(id, email_id, title, due_date, priority, owner, context_snippet, pushed_to_destinations JSONB) - usage_monthly(id, user_id, month, emails_processed_count, llm_cost_cents) On user signup: - Generate inbox_slug as hex(random(3)) + '.' + slugify(first_name) + hex(random(2)) → e.g. 'a8b2.jeff.c4d1'. Collision check; retry. - Store on users.inbox_slug. User's forwarding address is {inbox_slug}@task.product.com. /api/inbound endpoint: - Verify Resend signature header. - Parse payload: from, to (extract inbox_slug), subject, text, html, attachments. - Find user by inbox_slug. If not found, 404 (prevents random address spam). - Enforce monthly rate limit via Upstash: if over, reply to sender with friendly upgrade message. - Enqueue processing job (Vercel Cron or QStash). Return 200 fast (< 5s); do LLM work async.

2. AI Task Extraction

Implement the email-to-task extraction with Claude Haiku 4.5. Prompt construction: - User context: their timezone, default priority preference, typical working hours. - Email: from, subject, body (strip signatures, HTML tags, quoted thread history). - Today's date in ISO. System prompt: "You extract actionable tasks from a single email. Return strict JSON matching this schema: { thread_summary: 'one sentence of what the email is about', tasks: [ { title: 'imperative verb + object, max 80 chars', due_date: 'ISO date or null, inferred from phrases like by Friday, EOD, next Monday', priority: 'low' | 'medium' | 'high' based on urgency language and explicit markers, owner: 'the person the task is for — null if ambiguous, or the user email if clearly a personal ask', context_snippet: '15-30 word quote from the email that establishes the ask' } ], sender_urgency: 'low' | 'medium' | 'high' — the overall tone } Rules: - Only include tasks that are real action items. Informational content ('FYI') is NOT a task. - If the email has 0 tasks, return tasks: []. - 'by Friday' relative to today's date. 'next week' = Monday through Sunday of next calendar week. - Priority 'high' if words like 'urgent', 'asap', 'blocker', 'production down' appear. 'low' if casual/FYI language. Default 'medium'. - Never hallucinate due dates. If unclear, due_date: null. Today is {today}. User timezone: {tz}." Call Claude via Anthropic SDK with response_format: {type: 'json_schema'}. Validate structure; if malformed, log and retry once with simpler prompt. On success, write tasks_extracted rows. Fan out to destinations: call each destination adapter's pushTasks(tasks). If destination fails (e.g., OAuth token expired), log to emails_processed.status = 'failed_destination' and email user.

3. Destination Adapters (Todoist + Notion)

Build destination adapters with a common interface: export async function pushTasks(tasks: Task[], config: Config): Promise. Todoist adapter (destinations/todoist.ts): - OAuth flow: user clicks 'Connect Todoist', redirect to https://todoist.com/oauth/authorize?client_id=X&scope=data:read_write&state=user_id. Callback at /api/destinations/todoist/callback exchanges code for token. - Store access_token encrypted + project_id where tasks should go (default Inbox). - pushTasks: for each task, POST to https://api.todoist.com/rest/v2/tasks with body: { content: task.title, description: task.context_snippet, due_date: task.due_date, priority: task.priority === 'high' ? 4 : task.priority === 'medium' ? 3 : 2, project_id: config.project_id } - Handle rate limit: 450 tasks/15min. Batch with Promise.all, max 5 concurrent. Notion adapter (destinations/notion.ts): - OAuth flow: user authorizes a Notion integration scoped to a specific database. - Store access_token + database_id. - pushTasks: for each task, POST to https://api.notion.com/v1/pages: { parent: { database_id: config.database_id }, properties: { Name: { title: [{ text: { content: task.title } }] }, 'Due Date': task.due_date ? { date: { start: task.due_date } } : null, Priority: { select: { name: task.priority } }, Context: { rich_text: [{ text: { content: task.context_snippet } }] } } } - User must pre-create database with these property names; show schema doc on connect. Digest email adapter (destinations/email_digest.ts): - Collect tasks across the day; send one digest email at user-configured time (default 6pm local). - React Email template with checkboxes, priorities color-coded, tappable add-to-calendar links. Error handling: on 401, mark OAuth token as expired, email user to reconnect. Never push tasks to a stale destination.

Want me to build this for you?

Book a consult and let's turn this idea into your MVP.

Book a Consult (opens in new tab)