Inbound email → Postgres
ingestlayer mints a unique, opaque inbound address for the source. Forward the mail you want ingested to it, and every message is parsed into an event — sender, subject, body, and attachment metadata.
01source
02pipeline · 3 steps
- 01ENRclassifyintent → sales | support | spam
- 02ENRsummarizelong thread → one line
- 03MUTredact.piimask PII before posting
03destinations · 1
- towarehouse.pgPostgrestableevents.signups
how events arrive
- 01
mint an inbound address
Add an inbound-email source; ingestlayer generates a unique, opaque address (an in_… local-part) on its inbound domain. Nobody else can claim it, and there's no DNS or MX record to configure.
- 02
forward your mail to it
Send or forward the messages you want ingested to that address — a forwarding rule, an alias, or a BCC. Only addresses you mint here accept inbound; everything else arriving at the domain is dropped.
- 03
optionally restrict senders
Set a from-domain allowlist so only mail from domains you trust becomes an event; everything else is dropped at the edge before it reaches a pipeline.
{
"type": "email.received",
"from": "ada@acme.com",
"to": "in_7g3k9d2a@inbound.ingestlayer.com",
"subject": "Demo request — Acme",
"text": "Hi, we'd love a demo for a team of 40…",
"attachments": [
{ "filename": "brief.pdf", "content_type": "application/pdf" }
],
"body_status": "fetched"
}route it to Postgres
Insert each event as a row into a table in your own Postgres.
- 01
add the connection
Paste a Postgres connection string. Connections originate from our EU region — allowlist those egress IPs on your database.
- 02
point at a table
Name the target table. Top-level event fields map to columns, and the full payload is also available as a jsonb column.
- 03
map columns
Match event fields to columns with $event.* references, or accept the default mapping into a typed events table.
INSERT INTO events.signups
(user_id, email, plan, source, payload)
VALUES
('u_018f', 'ada@acme.com', 'pro',
'marketing-site', '{ … }'::jsonb);notes
- The target table must already exist with compatible column types; ingestlayer never runs DDL on your database.
- Connections come from fixed EU egress IPs — add them to your firewall, or inserts will time out.
- Use a jsonb column for the full payload when your event shape changes often, so a new field never breaks the insert.
questions
- Do I have to change my DNS or MX records?
- No. ingestlayer generates the inbound address — you just forward mail to it. There's no MX record, domain verification, or DNS change to set up.
- How are attachments handled?
- The event includes each attachment's filename and content type so you can branch on them, but the bytes aren't routed — keeping large files out of your chat and your warehouse.
- Can it triage email before it reaches a channel?
- Yes — classify labels the intent (sales, support, spam) and summarize collapses a long thread to a line, so the channel sees a clean, sorted signal instead of a raw forward.
Inbound email, routed elsewhere
- Inbound email → SlackSlack
- Inbound email → DiscordDiscord
- Inbound email → TelegramTelegram
- Inbound email → EmailEmail
- Inbound email → WebhookWebhook
- Inbound email → NotionNotion