A self-hosted solution to store all your Resend webhook events in your own database.
We believe you should own your data. Our data retention policy has always encouraged you to store your data in your own database.
| Plan | Retention |
|---|---|
| Free | 1 day |
| Pro | 3 days |
| Scale | 7 days |
| Enterprise | Flexible |
As we look to tighten our practice to match our policy, we've created a tool to help you store your own data. Today, we're open-sourcing the Webhooks Ingester to enable you to easily store all Resend events in your own database.
The Webhooks Ingester is a self-hosted solution that you can easily deploy and configure to ingest Resend's webhooks and store your own content. By default, it includes retries, idempotency, deduplication, persistence, and edge cases.
Prefer a full video walkthrough?
With your webhook events stored in your database, you can:
The ingester supports 8 different database connectors:
| Database | Endpoint | Best For |
|---|---|---|
| Supabase | /supabase | Quick setup with managed Postgres |
| PostgreSQL | /postgresql | Self-hosted or managed Postgres (Neon, Railway, Render) |
| MySQL | /mysql | Self-hosted or managed MySQL |
| PlanetScale | /planetscale | Serverless MySQL |
| MongoDB | /mongodb | Document database (Atlas, self-hosted) |
| Snowflake | /snowflake | Data warehousing and analytics |
| BigQuery | /bigquery | Google Cloud analytics |
| ClickHouse | /clickhouse | High-performance analytics |
Is your preferred database not in the list? Feel free to open a PR for us to review.
The ingester captures all 17 Resend webhook events:
sent, delivered, delivery_delayed, bounced, complained, opened, clicked, failed, scheduled, suppressed, receivedcreated, updated, deletedcreated, updated, deletedTo learn more about each event type, check the webhooks documentation.
Every webhook is verified using Svix signatures before being stored. Duplicate events are safely ignored thanks to idempotent inserts.
The project is fully typed with TypeScript, making it easy to extend or customize.
You can deploy with one click to Vercel, Railway, or Render.
Or use Docker:
docker pull ghcr.io/resend/resend-webhooks-ingester
We're excited to see what you build with the Webhooks Ingester.
Check out the GitHub repository for installation instructions and documentation.
If you have questions or ideas to make it better, please open an issue.