New Zapier, Make, n8n & routing rules

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 or Zapier. Without keeping a single message.

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
  • Zapier
  • 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

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.

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
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.

$ email-parser listen --forward localhost:3000
Ready. Waiting for mail…
10:42:07 200 jane@example.com → support@yourapp.com
10:42:31 200 sam@shop.test → orders@yourapp.com▍
For resellers

Your brand. Our engine.

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

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.

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

  • Customer replies to your app's notifications
  • Support inboxes that become tickets
  • Invoices, receipts and documents emailed into your app
  • Alerts and reports from other systems

✕ 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.