a2a cloud
parse with code, not templates

An email parser AI agent, minus the regex.

Template parsers break the day a sender reformats their invoice. On a2a cloud, inbound mail is handed to your agent as a structured InboundEmailPayload — sender, subject, body, message_id, references, and attachments decoded up to 1 MiB each — and your own handler decides what to extract and how to respond. It's the Zapier email parser alternative where the parser is a deployed agent that can also write to a database and reply in-thread.

InboundEmailPayload · your handler code · default-deny inbox · replayable threads

0
regex templates to train
0
typed payload fields
0
MiB per decoded attachment
the problem

Field templates are a bet that email never changes.

Classic email parsing means teaching a tool where each field lives — highlight the order number, mark the total, save the template — and re-teaching it every time the sender tweaks their layout. Attachments usually need a second tool, acting on the result needs a third, and the whole chain runs on a public parse address that spam and autoresponders can hit. When extraction silently returns empty fields, nothing tells you; the numbers just stop arriving.

Extraction templates are per-sender and per-layout — a redesigned invoice quietly breaks them.
Attachments — the PDFs and CSVs the data actually lives in — are typically out of scope for body parsers.
Parse, transform, and act live in separate tools, so every handoff is another place things fail.
The parse inbox accepts anything, and there's no audit trail tying a parsed message to what happened next.
the a2a way

The runtime decodes. Your code decides.

a2a cloud gives each Pro-plan agent a mailbox at agents.a2acloud.io and turns accepted inbound mail into a typed payload delivered to your handler. Extraction is whatever your code — or your model — makes of it, and the reply goes out from the same agent, on the same thread, on the record.

A typed payload, not raw MIMEAttachments decoded and boundedYour code, not template rulesReply from the same addressJunk filtered before your handlerEvery parse is on the record

A typed payload, not raw MIME

Inbound mail arrives at your handler as an InboundEmailPayload: sender, subject, body, message_id, date, references, attachments. The runtime has already done the decoding — your code starts at the meaning, not the multipart boundaries.

Attachments decoded and bounded

Each attachment comes with filename, content_type, size_bytes, and base64 content up to 1 MiB — metadata-only above that, so an oversized PDF can't blow up your handler. Invoices, CSVs, and reports land as data you can pass straight to your model or your parser.

Your code, not template rules

A Zapier-style parser makes you train extraction templates field by field and breaks when the sender reformats. Here the forced handler signature is (ctx, email: InboundEmailPayload) — full Python, your libraries, your LLM, whatever extraction logic the mail actually needs.

Reply from the same address

Parsing is rarely the end of the job. Return a str or {body, subject} from the handler and the runtime replies in-thread from the agent's own address, In-Reply-To and References set. The parser and the responder are the same agent.

Junk filtered before your handler

Senders are default-deny — owner-only until you allowlist them via allowed_senders — and auto-submitted mail plus agent-domain senders are filtered as a loop guard. Your parsing logic runs on mail you chose to accept, not on whatever the internet forwards.

Every parse is on the record

Each received and sent message emits an audit event (mail_received, mail_sent), and each conversation appears as a dashboard chat thread with an email badge. When someone asks what the parser did with Tuesday's invoice, you replay the thread instead of grepping logs.

side-by-side

Template parsers vs. a parsing agent.

dimension
template email parser
a2a parsing agent
extraction
Regex rules or point-and-click templates trained per sender; one layout change and fields silently come back empty.
Your own handler code over a structured payload — use string ops, a schema library, or an LLM call, per message.
attachments
Most template parsers stop at the body; attachments mean another tool in the chain.
attachments[] with filename, content_type, size_bytes, and base64 content up to 1 MiB each, in the same payload.
acting on it
Parser output feeds a second automation tool, which feeds a third — each hop its own failure mode.
The handler runs inside your deployed agent, with its database and tools in scope. Parse, decide, and reply in one place.
bad input
The parse inbox is public; spam and autoresponders hit the same rules as real mail.
Default-deny senders plus a mail-loop guard — auto-submitted and agent-domain mail never reaches the handler.
traceability
A parse either fired or didn't; reconstructing what happened means provider dashboards and hope.
mail_received and mail_sent audit events per message, and the whole conversation replayable as a thread.
questions

Frequently asked.

What is an AI email parsing agent?

It's an agent whose inbound email is delivered to your code as structured data instead of raw text. On a2a cloud, a function decorated with @a2a.tool(on_email=True) receives (ctx, email: InboundEmailPayload) — sender, subject, body, message_id, date, references, and decoded attachments. You write the extraction logic in Python with full access to your libraries and your LLM, rather than training brittle field templates.

How is this a Zapier email parser alternative?

Template parsers like Zapier's make you highlight fields per mailbox and hope the sender never changes their layout, then hand the result to a separate automation chain. Here parsing and acting are one deployed agent: the structured payload arrives at your handler, your code extracts what it needs, and the same agent can write to its Postgres database, call its tools, and reply in-thread. Fewer hops, and every step is audited.

How do attachments work?

Every attachment in the payload carries filename, content_type, size_bytes, and its content as base64 up to 1 MiB; larger files are delivered metadata-only so a single oversized attachment can't take down the handler. That covers the invoice-PDF and CSV-report cases that email parsing is usually about, with a predictable bound on payload size.

Do I have to poll an inbox for new mail?

No. The structured on_email handler is push-based — the runtime invokes it when accepted mail arrives, and a round-trip completes in seconds. If you prefer to pull, ctx.mail.list_messages and read work over the injected IMAP credentials too. The on_email contract ships in the next a2a-pack release; the mailbox, threads, and replies are live today.

What stops the parser from processing spam or mail loops?

The mailbox is default-deny: only the owner can reach the agent until you allowlist senders with allowed_senders in a2a.yaml. Auto-submitted mail and senders from the agent domain are filtered before delivery, and outbound replies carry the Auto-Submitted header — so two agents can't trap each other in a reply loop.

keep reading

Related guides.

All guides live in the guides index.

structured in, audited out

Point the mail at your code.

Enable a mailbox with one line of YAML and a2a cloud delivers every accepted email to your agent as a structured payload — attachments decoded, threading tracked, spam and loops filtered before your handler runs. The same deploy ships managed Postgres, an MCP server, and an audit event for every message, so parsed data lands somewhere real and every parse is replayable.