Point your form at Heartdove
Set the form action and add your public access key. It is live straight away.
<form action="https://submit.heartdove.com/v1/submit">
<input type="hidden" name="access_key" value="f_…" />The form backend that proves delivery
Heartdove saves each website submission before anything is sent, tracks every alert until it is delivered or bounced, and holds messages over a plan limit until your allowance resets. Keep your form; point it at Heartdove in minutes.
<form action="https://submit.heartdove.com/v1/submit"
method="POST">
<input type="hidden" name="access_key" value="f_…" />
<input type="email" name="email" required />
<textarea name="message" required></textarea>
<button>Send message</button>
</form>A question about a website
We are planning a new website and would love to hear about your process. Could we talk next week?
Works with any technology
Post a plain HTML form, call the JSON endpoint, or use the typed adapters for React, Vue and Svelte. On site builders such as Webflow and Framer, add the form with a code embed.
Logos are trademarks of their owners and show compatibility only, not endorsement.
How it works
Keep the form you already designed. Heartdove adds the part a contact form usually lacks: a memory.
Set the form action and add your public access key. It is live straight away.
<form action="https://submit.heartdove.com/v1/submit">
<input type="hidden" name="access_key" value="f_…" />A visitor gets an instant receipt. You get the message in a searchable inbox with its status and notes.
202 Accepted
{ "status": "accepted", "duplicate": false }Email and webhook deliveries are tracked one by one, with retries, bounces and the reason for any failure.
Built for the message that goes missing
Every submission is saved before any email is sent. Search it, set a status, add a note. Email becomes a notification instead of your only copy.
Each message shows its own timeline: captured, accepted by the provider, delivered, or exactly why it was not.
When an address bounces or a recipient marks mail as spam, the message says so and that address is paused. No silent failures.
Over your plan limit? Submissions wait in a visible hold until your allowance resets, then release automatically, oldest first. The hold has room for 1,000 messages on Free, 20,000 on Pro and 50,000 on Team. No overage bill.
Every webhook carries a timestamped HMAC signature and a stable event ID, so your endpoint can verify and deduplicate. During early access we connect your endpoint for you.
Every submission must come from your exact website address and is rate limited and scored. A hidden trap catches bots, and anything suspicious is quarantined for review.
Who it is for
When a client asks whether their enquiry came through, open the message and show the moment it was delivered, or the bounce that explains why it was not.
A missed enquiry is a missed job. Every message is saved and alerted instantly, and a bounced inbox shows up as a warning instead of silence.
Plain HTML, a JSON endpoint or a typed client with React, Vue and Svelte adapters. Idempotent retries and signed webhooks come standard.
The fundamentals
Point a plain HTML form at Heartdove. No server, no PHP and no serverless function to write or maintain.
Heartdove is an API, not a widget. Keep your markup, your CSS framework and your components; only the form action changes.
Every submission is kept in your inbox for 90 days on Free and a year on paid plans, then removed automatically. Each form can choose a shorter period, or longer on paid plans, and privacy mode keeps no copy at all.
Submissions travel over HTTPS and are stored in an encrypted database. Privacy-mode deliveries are also sealed with AES-GCM and erased within 24 hours.
Forms post to Cloudflare’s global network, close to your visitors. Deliveries are queued with automatic retries, so a slow provider never slows your form.
There are no advertising or analytics trackers on our site or in our snippet, and we never sell your submissions or use them for advertising.
Why it matters
An email that bounces, lands in spam or never arrives is a lead you never knew you lost.
For developers
Post plain HTML, call the contact form API with JSON, or use the typed client with adapters for React, Vue and Svelte. Every option returns the same receipt.
<form action="https://submit.heartdove.com/v1/submit" method="POST">
<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
<label>Email <input type="email" name="email" required /></label>
<label>Message <textarea name="message" required></textarea></label>
<!-- Hidden spam trap: people never see it, bots tick it -->
<input type="checkbox" name="botcheck" tabindex="-1" autocomplete="off" style="display:none" />
<button type="submit">Send message</button>
</form>Pricing
An instant alert for every included message, delivery tracking on all of them, and no overage bills. Paid plans add volume and a year of history.
Founding offer10% off your first year for the first 100 paying workspaces, applied automatically at checkout.
For a personal site getting started.
No card required
Start freeFor a business that runs on its enquiries.
Billed annually at US$144
Billed monthly
For agencies and high-volume sites.
Billed annually at US$348
Billed monthly
Dated, side-by-side comparisons of plans, limits and delivery tracking, taken from each service’s own pages.
Questions
A forwarding service emails a submission to you, and that email can end up as your only copy. Heartdove saves it first, then delivers it, and shows you what happened to every notification. If an email bounces or you are over a limit, the message is still in your inbox.
No rebuild is needed. Point your existing HTML form at Heartdove and add the hidden access key, or use the JavaScript client and framework adapters if you prefer.
Submissions above your monthly allowance are held, visibly, until your allowance resets or you upgrade, and for at least seven days. They release automatically, oldest first. There is never an overage charge. Holding capacity is finite and shown on the pricing page.
Yes. Every plan includes as many email alerts as submissions: 500 a month on Free, 10,000 on Pro and 25,000 on Team. One alert to two people counts twice, and your inbox keeps every message even if alerts run out.
Every form checks that submissions come from your exact website address, limits how often each visitor can send, and scores each message for spam using a hidden trap field, link counts and your own deny rules. High scores are quarantined for you to review instead of alerting you. From the inbox you can release a quarantined message or block a sender; allow and block rules live in each form’s settings. Cloudflare Turnstile can be added for a human check on busy forms.
Yes, by signed webhook. You cannot add a destination yourself yet: during early access, email support@heartdove.com with your HTTPS endpoint and we will connect it. Slack, Discord, Telegram and Notion can be connected the same way.
Connect your first form in a few minutes. Your existing design stays exactly as it is.