The form backend that proves delivery

Know every enquiry arrived.

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.

Free plan with instant alertsNo card requiredWorks with any HTML form
contact.html
<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>
AAlex Morgan
Captured

A question about a website

We are planning a new website and would love to hear about your process. Could we talk next week?

  • CapturedSaved to the inbox
  • Accepted by providerEmail to studio@example.com
  • DeliveredRecipient server accepted it
Saved before it is sent
Saved firstEvery submission lands in your inbox.
Delivery trackedAccepted, delivered or bounced.
Held at the limitOver-limit messages wait for you.
Spam checks built inOrigin checks, rate limits, a hidden trap.

Works with any technology

If it can render a form, it works with Heartdove.

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.

  • HTML
  • JavaScript
  • Bootstrap
  • Tailwind CSS
  • React
  • Next.js
  • Astro
  • Gatsby
  • Vue.js
  • Nuxt
  • Framer
  • Alpine.js
  • Hugo
  • Svelte
  • Webflow

Host anywhere

Your site stays where it is.

Static host, serverless platform or CMS. Heartdove only receives the form.

  • Netlify
  • Vercel
  • Cloudflare Pages
  • GitHub Pages
  • Render
  • Firebase
  • DigitalOcean
  • WordPress
  • Shopify
  • Squarespace

Logos are trademarks of their owners and show compatibility only, not endorsement.

How it works

Live in minutes. Trustworthy for years.

Keep the form you already designed. Heartdove adds the part a contact form usually lacks: a memory.

1

Point your form at Heartdove

Set the form action and add your public access key. It is live straight away.

HTML
<form action="https://submit.heartdove.com/v1/submit">
  <input type="hidden" name="access_key" value="f_…" />
2

Every message is saved

A visitor gets an instant receipt. You get the message in a searchable inbox with its status and notes.

Receipt
202 Accepted
{ "status": "accepted", "duplicate": false }
3

Follow every delivery

Email and webhook deliveries are tracked one by one, with retries, bounces and the reason for any failure.

  • Accepted by provider
  • Bounced: address paused

Built for the message that goes missing

Everything a contact form should have had from the start.

An inbox, not a forwarder

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.

Every delivery, visible

Each message shows its own timeline: captured, accepted by the provider, delivered, or exactly why it was not.

Bounces you can see

When an address bounces or a recipient marks mail as spam, the message says so and that address is paused. No silent failures.

Held at the limit

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.

Signed webhooks

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.

Spam stopped at the door

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

For anyone whose website enquiries are revenue.

Agencies and freelancers

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.

Service businesses

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.

Developers

Plain HTML, a JSON endpoint or a typed client with React, Vue and Svelte adapters. Idempotent retries and signed webhooks come standard.

The fundamentals

The basics, done properly.

No backend code

Point a plain HTML form at Heartdove. No server, no PHP and no serverless function to write or maintain.

Your design, untouched

Heartdove is an API, not a widget. Keep your markup, your CSS framework and your components; only the form action changes.

Stored, then deleted on schedule

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.

Encrypted in transit and at rest

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.

Runs on a global edge

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.

No trackers, no data sales

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

Forwarding is not the same as receiving.

An email that bounces, lands in spam or never arrives is a lead you never knew you lost.

Questions to ask any form backend

  • Where is the message kept if the email never arrives?
  • Will you see it when an alert bounces or a recipient reports spam?
  • What happens to submissions over the monthly limit, and is there a charge?
  • Can your endpoint verify that a webhook came from the service?
  • Which of these come with the free plan?

Heartdove

  • Every message is saved to your inbox first.
  • Bounces and spam complaints appear on the message.
  • Over-limit submissions are held until your allowance resets, with no overage charge.
  • Webhooks are signed, timestamped and deduplicable.
  • Delivery tracking and spam quarantine on every plan, including Free.

For developers

Your stack, your form.

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.

  • Idempotency keys make retries safe
  • Typed results for every success and failure
  • Optional Turnstile, with a fresh token on every retry
HTML
<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

Every plan proves delivery.

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.

Billing period

Free

For a personal site getting started.

US$0

No card required

Start free
  • 500 submissions a month
  • Instant email alerts
  • 90 days of history
  • Delivery tracking and spam quarantine

Team

For agencies and high-volume sites.

US$29/month

Billed annually at US$348

US$36/month

Billed monthly

  • 25,000 submissions a month
  • 25,000 instant email alerts
  • One year of history
  • Delivery tracking and spam quarantine

Compare every limit

Comparing form backends?

Dated, side-by-side comparisons of plans, limits and delivery tracking, taken from each service’s own pages.

Questions

Frequently asked

How is Heartdove different from a form-to-email service?

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.

Do I need to change my website?

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.

What happens when I reach my plan limit?

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.

Are instant email alerts included on Free?

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.

How do you stop spam?

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.

Can I send submissions to my own systems?

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.

Never lose another enquiry.

Connect your first form in a few minutes. Your existing design stays exactly as it is.