send.webforms.toRead the docs →

Documentation

Unfinished forms

Most people who start a form never send it. With one script tag WebForms keeps what they typed, as long as they entered an email address, so you can follow up with the ones who left halfway. Available on Pro and Agency.

Last updated

Setting it up

In the form's Settings, tick Keep unfinished forms and save. Then add one line to the page with your form, after the form or anywhere in the page:

index.html
<form action="https://send.webforms.to/your-key" method="POST">
  <input name="name">
  <input type="email" name="email">
  <textarea name="message"></textarea>
  <button>Send</button>
</form>
<script src="https://send.webforms.to/webforms.js" defer></script>

The script finds every form on the page that posts to WebForms. To limit it to some, give it a CSS selector: data-form="#contact". Unfinished forms appear in the form's Unfinished tab. The same script also makes the form ready for AI agents; pages that installed it as partial.js keep working.

What is kept

When a visitor leaves a field or the page, the script sends what has been typed so far. It is kept only once there is an email address in it, since that is what makes a follow-up possible. Each visitor has one entry that updates as they type, and it is deleted as soon as they send the form for real, so you never see the same person twice.

Never sent or kept: password fields, file uploads, hidden fields, card-number and one-time-code fields, and anything that looks like a card number. Your form's spam rules (honeypot, allowed sites, blocklists) apply too. Unfinished forms are never delivered to your destinations, never count toward your monthly submissions, and are deleted after 30 days.

Privacy

You are keeping text people did not choose to send, so say so in your privacy policy, for example "we save what you type into our contact form so we can follow up if you don't finish". In some places (the EU and UK among them) you may need consent first; if so, load the script only after the visitor agrees. Our privacy policy covers how we store it.

Over the API and MCP

GET /v1/forms/:id/partials lists a form's unfinished forms (scope submissions:read), and capturePartials on PATCH /v1/forms/:id switches the setting. AI assistants connected over MCP can read them with get_unfinished_submissions.

Terminal
curl https://api.webforms.to/v1/forms/frm_xxx/partials \
  -H "Authorization: Bearer wf_live_your_key"

Get your endpoint

Free for 300 submissions a month. No card required.

Start free