MailKite
Get started
Alternative to SendGrid Inbound Parse

Inbound email as clean JSON — not a multipart form you have to unpack.

SendGrid's Inbound Parse delivers incoming mail as multipart/form-data your app has to reassemble. MailKite POSTs one parsed JSON object — text, HTML, threading, and auth results — with an HMAC signature, from a platform that isn't tied to an enterprise sending bundle.

A fair take on SendGrid Inbound Parse

SendGrid is a deliverability heavyweight for outbound at scale, and Inbound Parse has moved a lot of mail. The friction is in the inbound developer experience and the account model around it.

Why teams switch

What MailKite does differently

JSON, not multipart/form-data

Inbound Parse posts fields as a multipart form you reassemble. MailKite gives you one JSON object with the body, headers, threading, and attachment URLs already parsed.

Threading and auth, included

Every inbound event carries threadId (In-Reply-To/References) and SPF/DKIM/DMARC/spam results — so replies thread and you can trust the sender without extra lookups.

No enterprise bundle

You don't buy a sending suite to receive email. Start free, receive and send from one small API, and scale on volume — not seats or add-ons.

Predictable, graceful account model

Unlimited domains free and metered overage that never hard-cuts — instead of navigating suspensions and per-plan sending limits to keep inbound flowing.

Side by side

MailKite vs SendGrid Inbound Parse

MailKite SendGrid Inbound Parse
Inbound payload format Parsed JSON object multipart/form-data fields
Threading (In-Reply-To) threadId on every event Raw headers to parse yourself
SPF/DKIM/DMARC results Structured auth object In raw headers
HMAC-signed webhooks Yes, every plan Signed-event verification available
Per-domain / subuser fees None — unlimited domains Plan- and volume-tiered
Send from same account Yes — shared quota Yes — separate sending product/limits
Graceful overage Metered, no hard cut Plan limits / suspensions

Competitor capabilities change — we re-audit these tables regularly. Spot something out of date? Tell us and we'll fix it.

Show the payload

What actually hits your webhook

No multipart boundary parsing, no charset reconciliation, no manual header splitting — just event.from.address, event.subject, event.text, and signed attachment URLs.

SendGrid Inbound Parse (multipart/form-data)
http
POST /your-webhook
Content-Type: multipart/form-data; boundary=xYzZy

--xYzZy
Content-Disposition: form-data; name="from"

Ada <ada@example.com>
--xYzZy
Content-Disposition: form-data; name="subject"

Re: invoice #1042
--xYzZy
Content-Disposition: form-data; name="text"

Looks good — approved!
--xYzZy
Content-Disposition: form-data; name="attachment1"; filename="po.pdf"
Content-Type: application/pdf
%PDF-1.7 …binary…
--xYzZy--   (+ headers[], envelope, charsets to reconcile)
MailKite
json
POST /your-webhook   Content-Type: application/json
x-mailkite-signature: t=…,v1=…   (HMAC-SHA256 — verify locally)

{
  "id": "msg_2Hk9…",
  "type": "email.received",
  "from": { "address": "ada@example.com" },
  "to": [{ "address": "support@myapp.ai" }],
  "subject": "Re: invoice #1042",
  "text": "Looks good — approved!",
  "html": "<p>Looks good — approved!</p>",
  "threadId": "<a1b2c3@mail.example.com>",
  "auth": { "spf": "pass", "dkim": "pass", "dmarc": "pass", "spam": "ham" },
  "attachments": [
    { "filename": "po.pdf", "contentType": "application/pdf",
      "size": 18213, "url": "https://api.mailkite.dev/att/2Hk9…/0?sig=…" }
  ]
}
The price advantage

Unlimited domains. One quota. Free to start.

MailKite

  • Free: 3,000 emails/mo (in + out)
  • Unlimited domains, no subuser tax
  • Pro $20/mo → 50,000, graceful overage

SendGrid

  • Sending-first plans; inbound rides along
  • Volume tiers, subuser/domain structure
  • Free plan is limited and heavily guarded

You shouldn't need an outbound sending suite to receive email. MailKite prices on one combined volume, with domains always free.

See full MailKite pricing →

Switch in an afternoon

Moving from SendGrid Inbound Parse

  1. 1

    Point MX at MailKite

    Add our MX records (or use a managed subdomain to start immediately). No sending plan required to receive.

  2. 2

    Replace the multipart handler

    Delete the form-parsing middleware. Read the JSON body directly: event.from.address, event.subject, event.text, event.attachments[].

  3. 3

    Verify and reply

    Verify x-mailkite-signature locally, then reply through the same send API — SPF/DKIM aligned to your domain.

Questions

Why is JSON better than SendGrid's multipart form?

Multipart/form-data forces you to run a form parser, split headers out of string fields, and handle attachments as file parts. JSON gives you typed fields and signed attachment URLs directly — less code and fewer edge cases.

Do I lose deliverability by leaving SendGrid?

MailKite sends over Cloudflare's network with SPF, DKIM, and DMARC aligned to your own domain, so outbound authenticates as you. For pure high-volume marketing blasts, evaluate your needs — MailKite targets transactional and inbound-first workloads.

Is inbound really free to start?

Yes — the Free plan includes 3,000 inbound + outbound emails a month across unlimited domains, with no sending bundle to buy.

Go deeper

The honest SendGrid Inbound Parse alternative →

The long-form take on our blog — receipts, runnable code, and where we won't overclaim.

Try MailKite free — keep SendGrid Inbound Parse running until you're ready.

Point a domain, drop in a webhook URL, receive your first email. Unlimited domains, no credit card.