New Attachments straight to your own S3, R2 or Google Cloud bucket

Email in.
Clean JSON out.

GhostParse receives email for your domain, proves who really sent it, pulls out the data you need and delivers it, signed, to your app, Slack, Sheets, Make or n8n. Without keeping a single message. And it sends your transactional email too.

1,000 emails a month free · no credit card

support@yourapp.com → mx.ghostparse.com → your stack LIVE
1 · Raw email arrives
Received: from mail.example.com ([203.0.113.9])
From: Jane Sample <jane@example.com>
To: support@yourapp.com
Subject: Re: Your order #1042 has shipped
DKIM-Signature: v=1; a=rsa-sha256; d=example.com;
Content-Type: multipart/mixed; boundary="b1"

--b1
Hi, the tracking link says delivered but
nothing has arrived. Order #1042, total £42.50.
Tracking number TRK-88213.

> On Mon, Your App <orders@yourapp.com> wrote:
> Good news: your order has shipped…
--b1
Content-Disposition: attachment; filename="order-1042.csv"
2 · Checked & understood
Sender verifiedSPF · DKIM · DMARC
Not spam, no virusscore 0.4
Quoted history removedreply_text
Parser “Orders”3 fields
Rule “Orders → Sheet”matched
3 · Delivered
{
  "type": "email.received",
  "data": {
    "from": { "address": "jane@example.com" },
    "subject": "Re: Your order #1042 has shipped",
    "reply_text": "Hi, the tracking link says…",
    "thread_id": "thr_9f2c41d07ab3e5c8",
    "authentication": { "verdict": "pass" },
    "attachments": [ "order-1042.csv" ],
    "extracted": {
      "order_number": "1042",
      "total": 42.50,
      "tracking": "TRK-88213"
    }
  }
}
POST yourapp.com/hooks/email · 200 · 38 ms → Slack #support ✓ → Google Sheet ✓ stored: nothing

Plugs into what you already run

  • Node.js
  • Python
  • PHP
  • Laravel
  • Ruby
  • Go
  • Make
  • n8n
  • Slack
  • Microsoft Teams
  • Google Sheets
The ghost part

We read it.
We pass it on.
We forget it.

Mail is parsed in memory and handed to you the moment it arrives. No inbox, no archive, no copy waiting to leak. Your delivery log keeps only the metadata you need to debug: never a subject, body or attachment.

How we handle your data →
What we keep about one emaildelivery log
MESSAGE-ID<a81f…@example.com>
SENDER DOMAINexample.com
OUTCOMEdelivered · 200
SIZE48 KB
Subjectnot kept
Body & attachmentsnot kept
Sender's addressnot kept
Everything after “From:”

The boring parts of email, done properly.

Parsers · rules or AI

Ask for fields, get fields.

Say what you need (an order number, a total, a tracking code) and every email arrives with it already pulled out in data.extracted. Write rules, let AI read the message, start from ready-made parsers for Royal Mail, DPD, Evri, Etsy, eBay, Amazon, PayPal and more, or bring your own Pydantic model or JSON Schema and get every email back in that shape, verified. See parsers →

order_number → "1042" total → 42.50 tracking → "TRK-88213"
Replies

Replies, not quote chains.

Just the new words, with the history and signature cut away.

Thanks, that fixed it!> On Tue, Support wrote: …-- Sent from my phone
Routing rules

Invoices here. Urgent there.

if from ends with stripe.com → Sheets
if subject contains urgent → Teams
if spam score ≥ 6 → drop
Conversations

One thread_id per conversation.

From References, In-Reply-To, even Outlook's Thread-Index. Match replies to tickets without guessing.

thr_9f2c41d07ab3e5c8
Sender truth

Know who really sent it.

We check SPF, DKIM and DMARC ourselves and give you one verdict you can trust.

SPF passDKIM passDMARC pass
Attachment storage

Big attachments. Tiny webhooks.

Files go straight to your own bucket: Amazon S3, Cloudflare R2, Backblaze B2, Google Cloud Storage and more. Your webhook gets each file's details and a download link instead of megabytes of base64. How it works →

"attachments": [{
  "filename": "invoice-20977.pdf",
  "size": 482113,
  "content": null,
  "storage": {
    "bucket": "yourapp-email",
    "url": "https://…/invoice-20977.pdf?X-Amz-…"
  }
}]
Setup

DNS in one click.

On Cloudflare? Connect it and we add your records, keeping your existing SPF and DMARC settings. Then we check them live.

MX addedSPF updated
Email on localhost

Develop against real mail. No tunnel.

The CLI streams every email to your laptop, signature and all, so your handler runs unchanged. No domain yet? simulate fires signed test webhooks offline, and checks your endpoint refuses forgeries. Try it →

$ email-parser listen --forward localhost:3000
Ready. Waiting for mail…
10:42:07 200 jane@example.com → support@yourapp.com
$ email-parser simulate localhost:3000 --bad-signature
10:43:15 401 bad signature
✓ Your endpoint rejected the bad signature.▍
Sending

Send from your own domain.

Receipts, resets and replies with one API call, DKIM-signed with your domain's key.

POST /v1/emails
Autopilot · Shopify & WooCommerce

"Where's my order?" answered for you.

Customer emails are read by AI, matched to the order in Shopify or WooCommerce and answered from its real tracking, or drafted for you to send with one click.

How it works →
For resellers

Your brand. Our engine.

Sub-accounts, your logo, your MX hostname and your dashboard address, all through one API key.

WordPress & WooCommerce

Email into WordPress.

Our free plugin connects in one click: an inbox with replies from your domain, and posts by email.

See the plugin →
For developers

Ten lines to production.

Verify the signature, read the JSON, done. Standard Webhooks signing means the library you already trust works too.

import { verifyWebhook } from "@wildye/email-parser";

app.post("/hooks/email", express.raw({ type: "*/*" }), (req, res) => {
  const event = verifyWebhook(req.body, req.headers, process.env.WEBHOOK_SECRET);
  if (event.type === "email.received") {
    const email = event.data;
    tickets.reply(email.thread_id, email.reply_text);
  }
  res.sendStatus(200);
});
How it works

Receiving in three steps.

01

Point your MX

Add two DNS records. We show the exact values and check them live. On Cloudflare? Connect it and we add them for you.

02

Choose your addresses

Allow exactly the addresses you want (support@, orders@, ticket-*) and say where each one's mail goes.

03

Receive clean JSON

Signed, verified and parsed, at your webhook in milliseconds. Endpoint down? We try your backup URL, then ask the sender to retry.

Transactional only, by design

Built for conversations, not campaigns.

Keeping the platform and its free plan free depends on keeping it clean. Using it for email marketing breaks our Terms and gets accounts closed.

✓ Built for

  • Receipts, invoices and order updates
  • Password resets, sign-in links and verification codes
  • Support replies and one-to-one conversations
  • Parsing inbound replies into your app

✕ Not allowed

  • Newsletters, promotions and marketing campaigns
  • Bulk or mailing-list sends, cold outreach
  • Any email the recipient didn't ask for
  • Spoofing, phishing or misleading senders

Your inbox,
as an API.

Sign up, point a domain at us, send it an email. You'll see the JSON in your dashboard in seconds.