Comparison

A Mailgun alternative with inbound routing and webhooks

Cloudflare Email Routing receives your mail, MarkRelay stores it and posts each message to your app as an HMAC-signed inbound webhook, and replies go out from the same address.

Facts checked

The short answer

Need Mailgun-style inbound routes and webhooks without a monthly plan sized by volume? MarkRelay receives mail through Cloudflare Email Routing and posts each message to your app as an HMAC-signed webhook, in your own Cloudflare account. Mailgun's Free plan has 1 inbound route, Basic (from $15/month) has 5 and 1 sending domain, and full inbound routing or more domains start with Foundation at $35/month. MarkRelay is the Email Worker for you: you don't write the email() handler, parsing or webhook delivery yourself, and every message also lands in a mailbox your team can open and answer.

Side by side

Inbound routes

MarkRelay
Email Routing rules per address or catch-all; webhooks scoped to an owner's access, one domain or selected mailboxes
Mailgun
Free 1, Basic 5, Foundation and up: full inbound routing
Your own Email Worker
Email Routing rules to your Worker

Inbound webhook

MarkRelay
Parsed JSON: text, HTML, headers, attachment list
Mailgun
Route forward() to your URL
Your own Email Worker
You write it

Webhook signature

MarkRelay
HMAC-SHA256 of timestamp and raw body
Mailgun
HMAC-SHA256 of timestamp and token
Your own Email Worker
You write it

Retries

MarkRelay
Up to 3; paused after 20 failures in a row
Mailgun
—
Your own Email Worker
You write it

Log retention

MarkRelay
Send and receive logs 90 days; messages kept until you delete them
Mailgun
Free and Basic 1 day, Foundation 5 days, Scale 30 days
Your own Email Worker
Whatever you store

Price

MarkRelay
$99/yr plus Cloudflare usage
Mailgun
Free 100/day; Basic $15/mo (10,000 emails); Foundation $35/mo (50,000); Scale $90/mo (100,000)
Your own Email Worker
Workers pricing; Email Routing is free

Web inbox for your team

MarkRelay
Yes
Mailgun
No
Your own Email Worker
No

Reply in the same thread

MarkRelay
POST /emails/{id}/reply
Mailgun
—
Your own Email Worker
Email Workers can reply

Where mail is stored

MarkRelay
Your own Cloudflare D1 and R2
Mailgun
Mailgun
Your own Email Worker
Wherever your Worker stores it

Needs

MarkRelay
Domains on Cloudflare DNS; Workers Paid to send
Mailgun
Any DNS host
Your own Email Worker
Domains on Cloudflare DNS

Mailgun facts from mailgun.com/pricing and its webhook security docs, checked October 18, 2026. “—” means those pages do not say.

Which one fits you

Choose Mailgun if

  • You send high volumes and want dedicated IPs as you grow.
  • Your domains are not on Cloudflare.
  • You only need inbound parsing, not mailboxes.

Write your own Email Worker if

  • You want to handle each message in code and nothing more.
  • You are happy to build parsing, storage, signing and retries yourself.

Choose MarkRelay if

  • You want inbound webhooks at low volume without a plan sized by volume.
  • You send from several domains without moving to a higher plan.
  • Every message should also be in a mailbox people can read and answer.
  • Your app should reply from the same address over HTTP.
  • Mail should stay in your own Cloudflare account.

What sending and receiving cost

10,000 emails a month, plus inbound

Mailgun

$35Foundation

MarkRelay

$15.70$8.25 license + $5 Workers Paid + $2.45 sending
You save per month
$19.3055% less

10,000 emails a month on 3 domains

Mailgun

$35Foundation; Basic has 1 domain

MarkRelay

$15.70$8.25 license + $5 Workers Paid + $2.45 sending
You save per month
$19.3055% less

50,000 emails a month, plus inbound

Mailgun

$35Foundation

MarkRelay

$29.70$8.25 license + $5 Workers Paid + $16.45 sending
You save per month
$5.3015% less

MarkRelay: the Annual license ($99/year) spread over 12 months, $8.25 a month whatever the volume, plus the Cloudflare bill: Workers Paid is $5/month with 3,000 sent emails included, then $0.35 per 1,000, and receiving is free. With Lifetime ($249 once), later years cost only the Cloudflare bill. Mailgun: Foundation ($35/month, 50,000 emails) is the first plan with full inbound routing; Basic ($15/month) covers 1 domain, 5 routes and 10,000 emails. MarkRelay charges nothing per domain. Writing your own Email Worker costs the same Cloudflare bill plus your time.

How mail flows through your Cloudflare account

Cloudflare receives and sends. MarkRelay is the mailbox in between, running as your own Worker.

Receive

  1. Senderwrites to support@yourdomain.com
  2. Email RoutingCloudflare, free on any plan
  3. MarkRelay Workerfiles it in the mailbox
  4. Your D1 + R2messages and attachments

Reply

  1. Webmail or APIa teammate, an app or an agent
  2. MarkRelay Workerchecks mailbox access
  3. Email SendingCloudflare, in Workers Paid
  4. Recipientsees support@yourdomain.com
mail.yourdomain.com
MarkRelay webhooks page with two signed endpoints, each scoped to specific mailboxes
Signed webhooks, each limited to the mailboxes it should hear about.

Common questions

Is there a Mailgun alternative with inbound routing and webhooks that is cheaper at low volume?

Yes. With MarkRelay, Cloudflare Email Routing receives your mail for free and each message reaches your app as an HMAC-signed inbound webhook. At 10,000 emails a month, MarkRelay comes to about $15.70 a month (the license spread over the year plus Cloudflare), against $35 for Mailgun Foundation.

How do Cloudflare Email Routing and Email Workers fit in?

Email Routing receives mail for your domain and can hand each message to a Worker with an email() handler, often called an Email Worker. MarkRelay is that Worker, already written: it parses and stores the message, posts the inbound webhook, and lets you reply over its HTTP API.

How do I verify the webhook?

Each request carries X-MarkRelay-Timestamp and X-MarkRelay-Signature. The signature is the HMAC-SHA256 of the timestamp, a dot and the raw body, keyed with the webhook's secret. Delivery is retried up to 3 times.

Is there a limit on routes or webhooks?

MarkRelay sets no limit on webhooks. Each one can follow its owner's access, cover one domain or include selected mailboxes. Addresses are routed with Cloudflare Email Routing rules, per address or with a catch-all.

How long are logs kept?

Send and receive logs are deleted automatically after 90 days. Messages stay in your own D1 and R2 until you delete them.

Keep reading

Own your email stack today

Buy MarkRelay once and run it in your Cloudflare account. MarkRelay adds no per-message or per-seat charge; Cloudflare usage and service limits remain separate.