
EML Parser
hipersoft/eml-parser
Parse raw .eml / MIME emails into clean JSON — subject, sender, recipients, text & HTML bodies, headers and attachments. For inbox automation and data pipelines.
Total users
1Monthly users
0Total runs
75Per email parsed
$0.003Last rebuilt
Oct 26, 2026Overview
Turn raw .eml / MIME emails into clean, structured JSON — subject, sender, recipients, text and HTML bodies, headers and attachments — ready for automation and data pipelines.
What it does
- Parses raw
.eml/ MIME email into structured JSON. - Extracts subject, from, to, cc, date, message ID.
- Returns both the plain-text body and the HTML body.
- Lists attachments (filename, content type, size) — and can save their bytes on request.
- Keeps a useful subset of headers for routing and threading.
- Saves each parsed email as a
.jsonfile and returns a link to it.
Use cases
- n8n / Make / Zapier — drop parsed email fields straight into a workflow: create tickets, log leads, route messages.
- Support & CRM — normalize inbound mail into records without writing a parser.
- Data pipelines — batch-convert archived
.emlfiles into JSON for search and analytics. - Compliance & e-discovery — extract headers, bodies and attachment lists from stored messages.
Input
Provide a raw email as text, and/or a list of URLs to .eml files.
{
"eml": "From: [email protected]\r\nTo: [email protected]\r\nSubject: Hello\r\n\r\nHi there",
"emlUrls": ["https://example.com/message.eml"],
"saveAttachments": false
}
| Field | Type | Description |
|---|---|---|
eml |
string | A raw .eml / MIME email pasted as text (parses a single message). |
emlUrls |
array | Direct URLs to .eml files to download and parse. |
saveAttachments |
boolean | Save attachment file bytes (small files only) instead of metadata alone. |
Output
Each email becomes one JSON file plus a summary row in the dataset.
{
"subject": "Hello",
"from": "[email protected]",
"date": "2026-08-22T10:00:00.000Z",
"attachments": 0,
"resultUrl": "https://api.apify.com/v2/key-value-stores/.../records/email-0001.json",
"ok": true
}
The linked JSON file contains the full parsed message:
{
"subject": "Hello",
"from": "[email protected]",
"to": "[email protected]",
"cc": null,
"date": "2026-08-22T10:00:00.000Z",
"messageId": "<[email protected]>",
"textBody": "Hi there",
"htmlBody": null,
"headers": { "from": "[email protected]", "subject": "Hello" },
"attachments": [{ "filename": "invoice.pdf", "contentType": "application/pdf", "size": 20481 }]
}
Output schema
| Field | Type | Description |
|---|---|---|
subject |
string | Email subject line. |
from |
string | Sender address. |
date |
string | Message date (ISO 8601). |
attachments |
integer | Number of attachments found. |
resultUrl |
string | Link to the full parsed JSON file. |
ok |
boolean | Whether the email parsed successfully. |
FAQ
Can it handle attachments? Yes — attachment metadata (filename, type, size) is always returned, and file bytes can be saved when saveAttachments is enabled (small files only).
Both text and HTML bodies? Yes — both are returned when present in the message.
Can I automate it? Yes — connect it through integrations on the Apify platform and the Apify API, including n8n, Make and Zapier.
Notes
Original clean-room implementation.
Input
| Field | Type | Description |
|---|---|---|
emlUrlsEML file URLs | array | One or more direct URLs to .eml / MIME files to download and parse. Each is fetched and turned into one JSON result. |
emlRaw email (MIME) | string | A raw .eml / MIME email pasted as text. Use this to parse a single message without hosting a file. |
saveAttachmentsSave attachment bytes | boolean | When enabled, attachment file contents are saved to the key-value store (small files only; large attachments are skipped to protect memory). When disabled, only attachment metadata (filename, type, size) is returned. Default: false |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~eml-parser/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"eml": "From: Alice Example <[email protected]>\nTo: Bob Example <[email protected]>\nSubject: Quarterly report\nDate: Tue, 14 Oct 2025 09:30:00 +0000\nMIME-Version: 1.0\nContent-Type: text/plain; charset=utf-8\n\nHi Bob,\n\nPlease find the quarterly numbers below. Revenue grew 12% and churn fell to 3%.\n\nBest,\nAlice\n"
}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/eml-parser").call(run_input={
"eml": "From: Alice Example <[email protected]>\nTo: Bob Example <[email protected]>\nSubject: Quarterly report\nDate: Tue, 14 Oct 2025 09:30:00 +0000\nMIME-Version: 1.0\nContent-Type: text/plain; charset=utf-8\n\nHi Bob,\n\nPlease find the quarterly numbers below. Revenue grew 12% and churn fell to 3%.\n\nBest,\nAlice\n"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('hipersoft/eml-parser').call({
"eml": "From: Alice Example <[email protected]>\nTo: Bob Example <[email protected]>\nSubject: Quarterly report\nDate: Tue, 14 Oct 2025 09:30:00 +0000\nMIME-Version: 1.0\nContent-Type: text/plain; charset=utf-8\n\nHi Bob,\n\nPlease find the quarterly numbers below. Revenue grew 12% and churn fell to 3%.\n\nBest,\nAlice\n"
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| Email Parsed Charged per .eml/MIME email parsed to JSON. | $0.003 | $0.0015 |
You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.
Related scrapers
North Data Scraper
Look up European companies on North Data: legal name, former names, register number, address, founding date, LEI, business purpose, managing directors and officers, and recent register publications. Germany, UK, France, Austria and 20+ countries. Bulk lookups.
2,467 runs · 5 users · $0.004 / companyWebsite Content Crawler
Extract clean, readable content from any list of websites: page title, meta description, headings, main body text, word count and link/image counts. Optional same-domain crawl. Bulk-ready. Great for LLM/RAG ingestion, content audits and research.
206 runs · 20 users · $0.0024 / page scrapedSpyFu Domain Scraper
Bulk SEO and PPC reports for any domain from SpyFu: organic keywords, monthly SEO clicks and value, Google Ads budget, paid keywords, top keywords, competitors, top countries and monthly history. Competitor research for agencies. Export CSV/JSON.
185 runs · 7 users · $0.008 / domain reportTrustpilot Reviews Scraper
Scrape Trustpilot reviews and company ratings by company domain or Trustpilot URL: star rating, title, text, reviewer name & country, verification, date, company reply, plus company TrustScore and total reviews.
146 runs · 4 users · $0.0006 / review scrapedACRA Singapore Company Registry Scraper
Search and export Singapore's full ACRA corporate registry: UEN, entity name, status, incorporation date, address, SSIC industry codes, officers, former names and audit firms. Filter by name, status, entity type or industry. Public open data, no setup.
138 runs · 10 users · $0.01 / company scrapedWayback Machine Scraper
List every Internet Archive (Wayback Machine) snapshot of a URL or whole domain: timestamp, snapshot URL, status code, MIME type and content digest. Filter by date, status and dedupe. For SEO, OSINT and historical research. No setup.
135 runs · 15 users · $0.002 / snapshot scrapedSend the site and the fields. We build it and you get it first.