AI Email Triage & Inbox Classifier with Drafts
Pricing
from $5.00 / 1,000 email triageds
AI Email Triage & Inbox Classifier with Drafts
Send a batch of emails and get each one classified with priority and Reply? yes/no, a one-line summary of what is asked, and drafts for greetings. Bulk mail filtered free. No mailbox login, never sends. Free preview, then pay per AI-classified email.
Pricing
from $5.00 / 1,000 email triageds
Rating
0.0
(0)
Developer
Turgay NANTA
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Email Triage AI: Classify Your Inbox, Find Emails That Need a Reply, Draft Simple Replies
A busy inbox hides the three emails that matter between newsletters, promotions, automated notices and CC threads. Reading everything to find them costs an hour a day.
Send a batch of emails. The Actor sorts them for you: every email gets a category, a priority and a clear "Reply? Yes/No"; the ones waiting for your answer get a one-sentence summary of what is expected; greetings and invitations get a short draft reply in the same tone; and you get a daily digest and a visual report grouped by company and person.
- No mailbox login. The Actor never connects to your mailbox and never asks for a password, IMAP or OAuth access. You pass the emails in; it returns a triage table.
- Never sends anything. Drafts are suggestions you copy. Business-critical emails never get a draft, because you should answer them yourself.
- Bulk mail filtered for free. Newsletters and promotions with a List-Unsubscribe header or clear unsubscribe and promo wording are sorted by rules, without the AI and without a charge.
- Business emails are protected. Any email that mentions an invoice, quote, payment, contract, order, deadline and similar words always goes to the AI, never to the junk rules.
- Knows when you are only CC'd, when an email comes from a no-reply address, when you are addressed by name, and which message is the newest in a thread.
- Free preview, then $0.005 per email classified by the AI. Emails sorted by rules are free.
At a glance
| Input | A list of emails as JSON: from, subject, body, optional date, to, cc, list_unsubscribe |
| Output | Triage table (dataset), DRAFTS, DAILY_REPORT, TRIAGE_REPORT.html in the key-value store |
| Categories | Business-Critical, Personal, Social, Promotional, Informational, General |
| Priority | High, Medium, Low, plus Reply? Yes/No |
| Drafts | For Social emails only (greetings, congratulations, invitations) |
| Mailbox access | None. You supply the emails; the Actor does not log in anywhere and does not send |
| Languages | Summaries and drafts in English, Turkish, German, Spanish or French |
| Pricing | $0.005 per email classified by the AI; rule-filtered emails and the preview are free |
| Runs on | Apify Console, API, schedules, n8n, Make, Zapier, AI agents via MCP |
Quick start
- Click Start with the default input. Three sample emails are loaded and you get a free preview: 3 emails, 1 that the rules can sort without the AI, 2 that need the AI. Nothing is charged.
- Tick Process (incurs charges) and start again. The two AI-classified samples cost 2 x $0.005 plus the $0.0001 start fee, $0.0101 in total.
- Replace the samples with your own emails (see Input). Add your email address and your name to get the CC and "addressed to you" checks.
- Open the Dataset tab for the triage table, and the Key-value store tab for
TRIAGE_REPORT.html,DRAFTSandDAILY_REPORT.
What the triage table looks like
| Company | Person | Subject | Category | Priority | Reply? | Addressed | Draft | Confidence | Note |
|---|---|---|---|---|---|---|---|---|---|
| Acme-corp | (generic) | Contract renewal, urgent decision needed | Business-Critical | High | Yes | - | - | High | Approval of renewal terms requested by Friday |
| Gmail | (generic) | Lunch next week? | Social | Medium | Yes | - | Yes | High | Invitation from a friend |
| Shopnow | (generic) | 48-hour FLASH SALE, 50% off everything! | Promotional | Low | No | - | - | High | Deterministic pre-filter (high certainty) |
This is the format for the three sample emails. The promotional row comes from the free rules; the other two rows come from the AI, so their wording, and sometimes the category of a borderline email, can differ in your run. Empty values are shown as a dash.
Your mailbox and your data
This is the first question most people ask, so here is exactly what the code does.
- No credentials. There is no login, IMAP, POP3, Gmail or Outlook connection in this Actor. It cannot read your mailbox on its own.
- You decide what goes in. Only the emails you put in the
emailsinput are processed. - What leaves Apify. Emails that the free rules cannot sort are sent to Anthropic's API (a Claude model) for classification: sender, subject and the first 600 characters of the body. Emails sorted by the rules are never sent to the AI.
- Where results live. The table, drafts and reports are stored in your own Apify storage for the run.
- Nothing is sent to your contacts. The Actor has no sending function. Drafts are text for you to copy.
How to get your emails into the Actor without giving it your password: use the email step of your automation tool. The Gmail, Outlook or IMAP nodes in n8n, Make or Zapier read your mailbox with the credentials you store in that tool, and you map from, subject, body (and optionally to, cc, date) into this Actor's input. Your credentials stay in your automation tool. You can also export emails from your mail client and convert them to the JSON format below; the Actor does not read .eml or .mbox files directly.
Why people use it
- The reply list is short. Out of a large batch you see which emails wait for your answer, each with one sentence on what is expected.
- Bulk mail costs nothing. The rules sort clear newsletters and promotions before any AI call, and only AI-classified emails are charged.
- Business emails are never thrown away. A long list of business words (invoice, quote, payment, contract, order, delivery, deadline, approval, signature and their Turkish equivalents) blocks the junk rules.
- Context rules on top of the AI. CC-only emails are marked FYI; no-reply senders cannot be answered, so they are marked "action required" if they ask you to verify, pay or sign, or informational otherwise; a real person writing your name is raised to High.
- Threads are collapsed. Several emails with the same subject (after removing Re:, Fwd: and similar prefixes) show the newest one as active and mark older ones as duplicates.
- A readable report.
TRIAGE_REPORT.htmlgroups emails by company and person, shows totals, and ends with a summary of every email waiting for a reply.
Inbox filters vs. this Actor
| Mail client rules | This Actor | |
|---|---|---|
| Needs rules written by you | Yes | No |
| Understands "is a reply expected?" | No | Yes |
| One-sentence summary of what is asked | No | Yes, for reply-needed emails |
| Draft reply | No | For greetings and invitations |
| CC, no-reply and thread handling | Partly | Built in |
| Access to your mailbox | Full | None |
Use cases
Founders and small business owners
Run yesterday's emails every morning and read only the Reply = Yes rows and the summary at the bottom of the HTML report.
Executive and virtual assistants
Triage a manager's inbox export, hand over the reply list with summaries, and send the social drafts after a quick check.
Sales and account managers
Surface quotes, orders and contract emails from customers first, grouped by company, so no deal-related email waits.
Support and shared inbox teams
Separate automated notices and bulk mail from customer emails before a person starts reading. Action-required notices (verification, payment, account issues) are marked so they are not missed.
Freelancers and consultants
Catch client emails that address you by name and keep newsletters out of the way.
Automation builders
Add a triage step to an n8n, Make or Zapier flow: read new emails, run the Actor, send High priority rows to Slack and write the rest to a sheet.
How it works
- Normalise. Each email is reduced to sender, subject, body, date, To, Cc and List-Unsubscribe. Emails with an empty body are skipped. A plain string is also accepted as a body.
- Preview (free). The Actor counts emails and how many the rules can sort, stores
PREVIEW, and stops here if Process is off. - Free rules. An email without business words is sorted by rules when it has a List-Unsubscribe header (Promotional or Informational), or promo words plus unsubscribe wording (Promotional), or unsubscribe wording alone (Informational).
- AI classification. The rest go to a Claude model in groups of 10. The model returns category, reply needed, a short reason, a one-sentence summary for reply-needed emails, and a draft for Social emails only. If a response is cut off, the group is split and retried.
- Adjustments. CC-only emails lose the reply flag and drop from High to Medium; a real sender using your name raises the email to Business-Critical and High; no-reply senders lose the reply flag and are marked action required or informational; thread rules mark older messages as duplicates.
- Output. The table is grouped by company (companies with the most urgent email first), then sorted by priority and person. Drafts, the daily digest and the HTML report go to the key-value store.
- Charge. Only emails the AI actually classified are charged. Emails whose AI step failed are shown with Low confidence and not charged.
Input
| Field | Type | Default | Description |
|---|---|---|---|
emails | array | 3 sample emails | Emails to triage. Each item: from, subject, body, and optionally date, to, cc, list_unsubscribe. |
kullanici_isimleri | list | empty | Your first name, last name or nickname (3+ letters) for "addressed to you" detection. |
kullanici_eposta | string | empty | Your email address, used to tell To from Cc. |
language | select | English | Language of reasons, summaries and drafts: English, Türkçe, Deutsch, Español, Français. |
model | select | claude-haiku-4-5-20251001 | The fast default, or claude-sonnet-4-6 for more consistent results. The price per email is the same. |
process | boolean | false | Off: free preview. On: classify and charge per AI-classified email. |
Example
{"emails": [{"from": "Maria Lopez <maria@northwind.com>","to": "you@yourcompany.com","subject": "Re: Q4 order confirmation","body": "Hi Alex, can you confirm the delivery date for PO 4471 by Thursday?","date": "2026-09-28T08:12:00Z"},{"from": "Newsletter <news@industryweekly.com>","to": "you@yourcompany.com","subject": "This week in logistics","body": "Top stories ... Unsubscribe here.","list_unsubscribe": "<mailto:unsubscribe@industryweekly.com>"}],"kullanici_isimleri": ["Alex"],"kullanici_eposta": "you@yourcompany.com","language": "English","process": true}
The first email is addressed to Alex by name, from a real person, with business words: it will be Business-Critical and High. The second has a List-Unsubscribe header and no business words: it is sorted by the free rules as Informational and not charged.
Output
Dataset: the triage table
| Column | Content |
|---|---|
Company | From the sender's display name or domain |
Person | Sender's name, or (generic) for addresses without a personal name |
Subject | Subject, or the start of the body |
Category | Business-Critical, Personal, Social, Promotional, Informational, General |
Priority | High, Medium, Low |
Reply? | Yes when your answer is expected |
Addressed | Yes when a real person used your name |
Summary | One sentence on what is expected, for reply-needed emails |
Draft | Yes when a draft is in DRAFTS |
Confidence | High, or Low when the AI step failed or the category was uncertain |
Note | The reason, for example CC only, duplicate in a thread, automated notice, or rule-based sorting |
Key-value store
| Key | Content |
|---|---|
TRIAGE_REPORT.html | Visual report: totals (reviewed, awaiting reply, action required, deprioritized), emails grouped by company and person, and a summary of every reply-needed email |
DRAFTS | List of Company, Person, Subject, Draft for Social emails |
DAILY_REPORT | total_emails, category_distribution, needs_reply, drafts_prepared, deterministic_filtered_no_llm, llm_processed, low_confidence, focus |
PREVIEW | email_count, deterministically_filterable, llm_needed, sample |
Pricing
This Actor charges per event. Current prices are on the Pricing tab; at the time of writing:
| Event | When | Price |
|---|---|---|
actor-start | Once per run, only when Process is on | $0.0001 |
emails-processed | Per email classified by the AI | $0.005 |
Emails sorted by the free rules, emails whose AI step failed, and preview runs are not charged.
| Batch | Sorted by rules (free) | Classified by AI | Cost |
|---|---|---|---|
| 3 sample emails | 1 | 2 | $0.0101 |
| 100 emails | 40 | 60 | $0.3001 |
| 500 emails | 200 | 300 | $1.5001 |
| 1,000 emails, none sortable by rules | 0 | 1,000 | $5.0001 |
A daily routine: 150 emails a day with 60 sorted by rules leaves 90 AI-classified emails, $0.4501 per day, or $13.503 over 30 days. The share sorted by rules depends on how much bulk mail you receive; the free preview shows it before you pay.
What the statuses in the HTML report mean
| Status or marker | Meaning | What to do |
|---|---|---|
| Awaiting Reply | Your answer is expected (Reply? = Yes) | Answer, starting with High |
| Action Required | An automated notice asks you to verify, pay, sign, upload or fix an account issue; it cannot be replied to | Do the action in the relevant service |
| Duplicate | An older message in a thread that has a newer one | Read the newest message instead |
| FYI (CC) | You were only in Cc | Read when you have time |
| Addressed to you | A real person used your name | Treat as High |
Worked example: a Monday morning inbox
An account manager comes back to 180 emails after a long weekend.
- Preview. Her n8n flow collects the emails and runs the Actor with Process off.
PREVIEWshows 180 emails, 75 sortable by the free rules and 105 that need the AI. Cost: nothing. - Process. The same input with Process on costs 105 x $0.005 + $0.0001 = $0.5251.
- Read the summary. The bottom of
TRIAGE_REPORT.htmllists the reply-needed emails, each with one sentence, for example a customer asking to confirm a delivery date and a supplier waiting for a price approval. - Clear the notices. Two Action Required rows point to a password reset and an unpaid invoice reminder from a no-reply address.
- Send the easy ones. Three Social emails (a congratulation and two invitations) have drafts in
DRAFTS; she edits and sends them from her own mail client. - Skip the rest. Duplicates, CC-only threads, promotions and newsletters stay at the bottom.
The numbers in this example are illustrative; your preview shows your own split before you pay.
Integrations
API
curl -X POST "https://api.apify.com/v2/acts/enezli~mail-triage/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"emails":[{"from":"Maria <maria@northwind.com>","subject":"PO 4471","body":"Can you confirm the delivery date by Thursday?"}],"process":true}'
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("enezli/mail-triage").call(run_input={"emails": emails, "kullanici_eposta": "you@yourcompany.com", "process": True})rows = client.dataset(run["defaultDatasetId"]).list_items().itemsfor r in rows:if r.get("Reply?") == "Yes":print(r["Priority"], r["Company"], r["Subject"], "-", r.get("Summary"))
n8n, Make, Zapier
Gmail, Outlook or IMAP trigger (credentials stay in your automation tool), collect the new emails, map them to from, subject, body, to, cc, date, run the Actor, then send High priority rows to Slack or email and store everything in a sheet.
Schedules
Schedule your automation once or twice a day so the triage table and the HTML report are ready when you start work. The Actor itself only processes the emails it receives in each run.
AI agents (MCP)
Through the Apify MCP server an assistant can pass a batch of emails and answer "what do I need to reply to today?" from the returned rows.
Tips for better results
- Include
toandccand fill in your address, so CC-only emails are separated. - Include
list_unsubscribewhen your source provides the header; it is the most reliable free filter. - Include
dateso the newest message of a thread is chosen correctly. - Add your name (and nickname) so emails that address you personally are raised.
- Run the preview first to see how many emails the free rules will sort.
- Pick the output language your team works in; the categories stay English so filters keep working.
Limitations
- No mailbox connection and no sending. Getting emails in and sending replies are up to you or your automation tool.
- Only the first 600 characters of each body are sent to the AI. Very long emails are judged by their start.
- Drafts only for Social emails. Business and personal emails get a summary, not a draft.
- Threads are grouped by subject. Different conversations with an identical subject are treated as one thread.
- Name detection needs names of at least 3 letters and looks at the subject and the first 400 characters of the body.
- Rule words cover English and Turkish; other languages are handled by the AI step.
- AI results can vary between runs for borderline emails. Low confidence rows show when something went wrong.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| One row saying "PREVIEW: ... Turn on 'process'" | Process is off | Tick Process (incurs charges) |
| "No valid emails (empty input)" | Empty list, or every email had an empty body | Map the body text into body |
| No CC detection | kullanici_eposta, to or cc missing | Add your address and the headers |
| Every newsletter goes to the AI | No list_unsubscribe and no unsubscribe wording in the body | Pass the List-Unsubscribe header |
Rows with Low confidence and not_processed or truncated_response | The AI step failed for that group | Run those emails again; they were not charged |
| Company shows a mail provider such as Gmail | Personal address without a company domain | Expected; the Person column shows the name when the display name has a first and last name |
FAQ
Do I have to give my email password or connect my Gmail account? No. The Actor has no mailbox connection. You provide the emails, for example from an n8n, Make or Zapier email step that holds your credentials.
Does it ever send an email? No. It has no sending function. Drafts are stored as text.
Which emails are sent to the AI? Only those the free rules cannot sort, with sender, subject and the first 600 characters of the body, to Anthropic's API.
Can a business email end up as junk? The free rules never sort an email that contains business words. Those always go to the AI, which is instructed to use General with reply needed when unsure.
Why no draft for business emails? Quotes, payments and contracts need your own answer. The Actor gives you a one-sentence summary instead.
What languages does it read?
The AI reads emails in many languages. Reasons, summaries and drafts follow the language setting.
How many emails per run? There is no fixed limit in the Actor; the AI works in groups of 10. Very large batches take longer, so split them into daily runs.
Is the preview really free? Yes. With Process off nothing is sent to the AI and nothing is charged.
Can I use the result in Excel? Yes. Export the dataset as Excel or CSV from Apify Console.
Trademarks
This Actor is not affiliated with, endorsed by, or connected to Google, Microsoft, Anthropic, n8n, Make or Zapier. Gmail and Outlook are trademarks of their respective owners.