Skip to content

Guide

Send form submissions to Zapier

Zapier reaches five thousand apps. Postbag's job is making sure every message survives the trip there.

Last updated

Or skip the reading entirely.

Everything below is agent-work. Paste this to yours, then come back to a working form — you show up at the end to say "keep it."

Paste to your agent
Install the Postbag skill with `npx skills add faahim/postbag --skill postbag`, then use it to connect my Postbag form to a Zapier webhook and prove a test delivery arrived.

Start a Zap with a Catch Hook

In Zapier, create a new Zap and choose Webhooks by Zapier as the trigger, with the Catch Hook event. Zapier hands you a custom URL — that's the letterbox your Zap listens at. Copy it.

Give the hook to Postbag

Create a webhook Destination pointing at the Catch Hook URL. Being plain about what this is: Postbag posts JSON, Zapier catches it — a webhook wearing a nice hat, not a special integration. Which is exactly why it will keep working next year.

Create the Destination
form_id="fm_YOUR_FORM_ID" # Copy yours from: npx postbag forms list
destination_json="$(curl --fail --silent --show-error -X POST https://postbag.dev/v1/destinations \
  -H "Authorization: Bearer pb_live_…" \
  -H "content-type: application/json" \
  -d '{
    "type": "webhook",
    "name": "Zapier",
    "config": { "url": "https://hooks.zapier.com/hooks/catch/…" }
  }')"
destination_id="$(printf '%s\n' "$destination_json" | jq -er '.id')"

printf 'Destination ID: %s\n' "$destination_id"

Teach the Zap what a message looks like

Send a test through the Destination, then click Test trigger in Zapier — it will show the fields it caught. Your visitor's answers ride inside data; the rest is the envelope: which Form, which delivery, when.

Send a test delivery
curl --fail --silent --show-error -X POST https://postbag.dev/v1/destinations/"$destination_id"/test \
  -H "Authorization: Bearer pb_live_…"
What Postbag posts (your message rides in data)
{
  "id": "dl_a91x02",
  "type": "submission.received",
  "schema_version": 1,
  "form": { "id": "fm_8f3kq2", "name": "Contact" },
  "data": { "email": "[email protected]", "message": "hello" },
  "extras": {},
  "meta": { "received_at": "2026-09-09T12:00:00Z" }
}

Route your Form to it

Tie the Form to the Destination and finish building the Zap — a spreadsheet row, a CRM contact, a Slack message, whatever the day calls for. Each new submission is stored first, then posted; if Zapier hiccups, Postbag retries up to ten times and then leaves the delivery clearly marked for you.

Route Form → Zapier
route_body="$(jq -n --arg form_id "$form_id" --arg destination_id "$destination_id" \
  '{ form_id: $form_id, destination_id: $destination_id }')"

curl --fail --silent --show-error -X POST https://postbag.dev/v1/routes \
  -H "Authorization: Bearer pb_live_…" \
  -H "content-type: application/json" \
  -d "$route_body"

The parts that bite

Your fields live under data
In the Zap editor, map from the keys inside data — data.email, data.message — not the envelope's own fields. The envelope is bookkeeping; data is the visitor.
Zapier doesn't check signatures
Catch Hooks accept any post to their URL, so keep that URL private. If you want a shared password, add a custom header in the Destination's config and filter on it in the Zap's first step.
The original outlives the Zap
When a Zap misfires — wrong mapping, deleted sheet — the submission is still in Postbag, unchanged. Fix the Zap and retry the delivery; nothing needs re-collecting.

Questions, answered

Which Zapier plan do I need?
Webhooks by Zapier is a premium trigger, so a paid Zapier plan. Postbag's side works on the free plan.
Can I filter what reaches Zapier?
Spam and quarantined messages are excluded by default, so the Zap only runs for messages worth automating. Finer rules are easy to add as the Zap's own first step.
Does Zapier see file attachments?
The webhook carries attachment references with signed links, not raw files — Zapier steps that expect a URL can use them directly.
Why not use Zapier's own form tool?
If a Zap is your only need, it's fine. Postbag keeps the durable record, the spam handling and the other Destinations — the Zap becomes one reader among several.

Give the form job to your agent.

It can build, wire and test the form before you even sign up. Claim it when it's worth keeping.