Send email to an app, not an inbox.
Point an alias at a URL and every message arrives there as a JSON request: sender, subject, text and HTML. Order emails become spreadsheet rows, contact forms become chat messages, alerts open tickets, and nobody has to keep a mailbox open for them.
Free. Works with Zapier, Make, n8n, Pipedream or any HTTPS endpoint you run.
Some mail was never meant to be read
A lot of email is really data: an order, a lead, an alert, a sign-up code. The classic route parks it in a mailbox until someone opens it, reads it and types it somewhere else. A webhook hands it to the place it was going anyway.
What people wire it to
Anything that can receive an HTTPS request can receive your mail. A few setups that earn their keep:
Shop orders into a spreadsheet
Plenty of shop platforms only tell you about an order by email. Point those emails at an alias with a Make or Zapier webhook and each one becomes a row, without anyone copying numbers out of an inbox.
Uses subject, text
- orders
@lumen.example - orders-7k
@emailforward.xyz - Make: custom webhook
- Sheet: new row
What your URL receives
One POST per email, with a JSON body. Point at a field to see where it comes from.
- From
- Lumen Shop <orders@lumen.example>
- To
- orders-7k+lumen@emailforward.xyz
- Subject
- New order #1042
- Message-ID
- <1042.a91f@lumen.example>
Order #1042 2 × Desk lamp, brass Total: €58.00 Ship to: Porto
Hover or tap a field.
- aliasstring
- The alias that received the mail, without the tag.
- recipientTagstring | null
- The part after + when the sender wrote alias+tag@…
- messageIdstring | null
- The email's Message-ID. Use it to drop the rare duplicate.
- fromstring | null
- The sender's address.
- subjectstring | null
- The subject line.
- textstring
- The body as plain text. Empty string if the mail had none.
- htmlstring | null
- The HTML body, with trackers removed and scripts stripped.
- receivedAtstring
- When the request was made, as an ISO 8601 UTC timestamp.
Attachments aren't included. If you need the files, keep an inbox or a Telegram chat on the alias as well.
Set up in three steps
Get a URL
In Zapier use Webhooks by Zapier → Catch Hook; in Make, a Custom webhook; in n8n, a Webhook node set to POST. Or use any HTTPS endpoint of your own.
Add it to the alias
On the alias page, add a recipient of type Webhook and paste the URL. We send one check request with {"emailforward_challenge": "…"}; a 200 or 204 answer confirms it.
Send a test email
The check isn't a real email, so send one to the alias. Your tool now has a real sample to map fields from.
A minimal receiver
export default async function handler(req, res) { const mail = req.body; // The one-time check when you add the URL. if (mail.emailforward_challenge) return res.status(200).end(); // Rare retries can repeat a message. if (await seen(mail.messageId)) return res.status(200).end(); res.status(200).end(); await addOrderRow(mail.subject, mail.text); }
Answer quickly: we wait up to 10 seconds. Do slow work after you respond.
Delivery rules
- Request
- POST with a JSON body. User-Agent: emailforward.xyz-webhook/1.0.
- URL
- HTTPS on a public host. Redirects aren't followed; local and private addresses are refused.
- Success
- Any 2xx status within 10 seconds.
- Retries
- Four more tries, after 30 s, 1, 2 and 4 minutes. Then the alias history shows the failure.
- Duplicates
- A URL that already accepted a message isn't sent it again, but dedupe on messageId to be safe.
- Filtered mail
- Mail held as spam, blocked by your rules or sent to a paused alias isn't posted.
- Limits
- Webhooks don't count toward the daily email cap. An alias takes up to 6 recipients, in any mix.
- Security
- The URL is the key, so keep it secret. Make, Zapier and n8n URLs already carry a random token; give your own endpoint one too.
Frequently asked
Give your next order email somewhere better to go.
Create an alias, then add your webhook from its page.