Summary: Both accept HTML form posts and send email. Formspree's API and webhooks are paid-tier features and its source is closed; Postbag exposes every object through one API from the free tier, signs every webhook, keeps every submission as a row with an attempt-tracked outbox, adds streams for many-sites-to-one-partner routing, and self-hosts as one container.
| Capability | Postbag | Formspree |
|---|---|---|
| Free tier | 5 forms, 1,000 submissions/month, 5 destinations, 90-day retention (paid plans not yet on sale) | 50 submissions/month, unlimited forms, 30-day history; API and uploads not on free (Formspree plans page) |
| Entry paid | Not yet on sale | Personal from $15/month; API and webhooks from Pro ($30/month) per third-party pricing roundups (vendor page blocks direct fetch) |
| Management API | Full /v1 API for every object (forms, schemas, streams, mappings, destinations, routes, deliveries, events), OpenAPI generated from the live routes | Per-form API keys (read-only and master) on Pro+; `formspree.json` + CLI for form definitions |
| Webhooks | Yes, HMAC-SHA256 signed (Postbag-Signature t=…,v1=…), retried with backoff, dead-lettered and retryable | Yes on Pro/Business; signed (Formspree-Signature, HMAC-SHA256 over timestamp.body) |
| Yes (Resend), Reply-To from the submission | Yes | |
| Chat destinations | Telegram today; Slack and Discord next | Slack, Telegram, Discord (plugins) |
| Spam | Honeypot, per-form rate limit, origin allowlist, Cloudflare Turnstile; spam is stored and reversible, never dropped | Formshield ML, reCAPTCHA, Turnstile, honeypot |
| File uploads | Not yet (text fields only; 256 KB) | Yes, paid plans |
| Self-hosting / source | Yes: one Docker image + Postgres, same image as the hosted product | No; legacy open-source repo archived 2023 |
| Schemas and drift | Versioned, immutable form and stream schemas; observe / enforce / managed modes; drift detection and inference | Rules engine on Business; no versioned schemas |
| Many sites → one destination | Projects, tags, streams (many forms → one schema → one destination), delivery windows, digests | Projects; per-form integrations |
| For AI agents | llms.txt, openapi.json, GET /v1/me, POST /v1/quickstart, _test submissions with delivery ids to poll, errors with hint + docs, Idempotency-Key, if_exists: return | CLI; no llms.txt or MCP found |
Formspree facts checked on against: formspree.io/plans, Verify webhook signatures, The Formspree CLI. Prices and quotas change; verify on their pages. Tagline quoted: "a form backend, API, and email service for HTML & JavaScript forms".
Choose Formspree if
- You want the most established name and a large plugin catalogue.
- You need file uploads today.
- You are happy paying per-site for the API tier.
Choose Postbag if
- You run several sites that should feed one inbox, CRM or partner in one shape.
- You need a durable record of every submission and every delivery attempt, retryable.
- An AI agent is building the site and should set the form up end to end.
- You want to self-host the same image the hosted product runs.
What Postbag does differently, in one paragraph
Postbag treats a submission as a database row before anything else and delivery as an outbox drained by a worker, so every attempt is recorded and retryable and nothing is dropped, including spam. It adds streams, so many forms with different field names map onto one versioned schema and go to one partner or CRM with windows and digests. Every webhook is signed. The whole product is one API described by /openapi.json and /llms.txt, so an AI agent can create, verify and route a form without a browser. And it ships as one Docker image plus Postgres, so the hosted product and a self-hosted install are the same thing.