When FormSubmit isn't working, the cause is usually one of four things: the form hasn't been activated, the page was opened as a local file, a field has no name, or _next isn't a full URL. Check those first; FormSubmit's own help pages cover each one. If you simply hadn't activated yet, your leads aren't lost: FormSubmit holds submissions until you confirm the form and keeps them for 30 days (FormSubmit help, checked October 2026).
Key takeaways
- FormSubmit forwards nothing until you click the activation link it emails to the address in your
action; until then, every submission sends another activation email. - "Unable to submit form" means the page was opened as a file: serve it from a local web server, or add a hidden
_urlfield with the page's address. - "Make sure your form has the method="POST" attribute" usually means
_nextisn't a full URL starting withhttps://. - For JavaScript submissions, post JSON to
https://formsubmit.co/ajax/followed by your address; the normal URL answers with an HTML page, not JSON. - FormSubmit keeps submissions for 30 days, and you can fetch them through its API with a key it emails you.
Quick checklist
- Find the activation email from FormSubmit (check spam) and click the link.
- Read the
actionon your form: it should behttps://formsubmit.co/followed by the exact address you check, or the random string FormSubmit sent you after activation. - Check that the form has
method="POST". - Give every field a
name. - Make
_next, if you use it, a full URL withhttps://. - Open the page through a web server, not as a file.
- Leave the
_honeyfield empty and hidden. - For JavaScript submissions, use the
/ajax/endpoint with JSON headers. - Open your browser's developer tools, go to the Network tab, submit, and read what came back from
formsubmit.co.
No emails at all: activate the form
The first time a form posts to https://formsubmit.co/your@email.com, FormSubmit emails that address asking you to confirm. Until you click the link, it holds submissions and sends a new activation email with each one. Once you confirm, the held submissions are delivered, as long as they are less than 30 days old.
If the activation email never comes, FormSubmit's help says to check that your mail server receives email from other addresses, check spam, then submit the form again. A one-letter typo in the address in action sends the activation somewhere you will never see it. If you change the address later, you have to activate the form again with the new one.
After you confirm, FormSubmit sends you a random string. Use it in action instead of your address, so bots and visitors can't read your email from the page (FormSubmit documentation).
"Unable to submit form"
FormSubmit doesn't work on a page you opened directly as an HTML file, the kind whose address starts with file://. Serve the folder with any local web server instead:
npx serve .
# or
python3 -m http.server 8080
Then open the address it prints (for the Python one, http://localhost:8080). The other fix from FormSubmit's help is a hidden field with the page's real address:
<input type="hidden" name="_url" value="https://example.com/contact">
"Make sure your form has the method="POST" attribute"
First check the form tag says method="POST". If it does, FormSubmit's help says the usual cause is a _next value that isn't a full URL with its protocol, such as /thanks or example.com/thanks. Write it out in full:
<input type="hidden" name="_next" value="https://example.com/thanks">
You can add query parameters to that URL if your thank-you page needs them.
Blank emails or missing fields
FormSubmit only sends fields that have a name. An input written as <input type="email"> arrives empty; <input type="email" name="email"> arrives. Reserved names such as _next, _subject and _cc are settings, so don't use them for your own fields.
Emails stopped arriving
Look in spam first. FormSubmit's help notes its emails can land there, especially when you get a lot of them; mark them as not spam if your provider lets you. Then check two fields that drop submissions without an error:
_honeyis a honeypot. If it has any value, FormSubmit silently ignores the submission, so hide it with CSS and give it novalue._blacklistfilters out submissions that contain any of its phrases. A phrase that is too broad also blocks real messages. FormSubmit suggests 20 phrases at most.
If FormSubmit's emails arrive but your own mail setup is the problem, our guide to a contact form not sending email covers the wider causes.
JavaScript (AJAX) submissions fail
The most common mistake is posting with fetch to the normal URL. That one answers with a web page meant for the browser, so response.json() throws an error like "Unexpected token '<'". FormSubmit's AJAX documentation uses a separate endpoint with JSON headers (FormSubmit AJAX documentation). Here is its example, wired to a form:
const form = document.querySelector('#contact');
form.addEventListener('submit', async (event) => {
event.preventDefault();
const res = await fetch('https://formsubmit.co/ajax/your@email.com', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify(Object.fromEntries(new FormData(form)))
});
console.log(await res.json());
});
Object.fromEntries keeps only the last value of a repeated name, so collect checkbox groups yourself if you have them. The address still needs activating. And _autoresponse doesn't work with AJAX submissions.
The same applies to React and Next.js: if your form library calls preventDefault(), the browser never posts the form, so send it with fetch as above.
reCAPTCHA, auto-replies and file uploads
- reCAPTCHA is on for every form by default.
<input type="hidden" name="_captcha" value="false">turns it off, though FormSubmit recommends keeping it on. - Auto-replies (
_autoresponse) need an input namedemail, and don't work with reCAPTCHA turned off or with AJAX. - File uploads need
enctype="multipart/form-data"on the form, and all files together must stay under 10 MB. FormSubmit doesn't keep uploaded files. - The email shows the wrong page address. Stricter browser referrer policies hide the path; add the hidden
_urlfield with the page's full address.
FormSubmit hidden fields reference
| Field | What it does | Get it right |
|---|---|---|
_next | Your own thank-you page | Full URL with https:// |
_subject | Email subject line | Plain text |
_cc | Copies to other addresses | Separate addresses with commas |
_captcha | reCAPTCHA, on by default | false turns it off |
_honey | Honeypot | Hidden and empty; any value drops the submission |
_template | Email layout | basic (default), table or box |
_autoresponse | Copy to the visitor with your message | Needs a field named email; no AJAX |
_blacklist | Drops submissions with these phrases | Comma-separated, 20 at most |
_webhook | Calls your URL on each submission | A URL you control |
_url | The form's page address | Full URL of the page |
Source: FormSubmit documentation and email templates, checked October 2026. To rule fields out, remove them all, test with a bare form, then add them back one at a time.
Get back submissions you missed
FormSubmit keeps submissions for 30 days; uploaded files aren't kept. If you hadn't activated, confirm now and the held submissions are delivered. Otherwise use its API: request a key, which FormSubmit emails to you, then fetch your submissions with it (FormSubmit API documentation):
curl -X GET https://formsubmit.co/api/get-apikey/your@email.com
curl -X GET https://formsubmit.co/api/get-submissions/YOUR_API_KEY
FormSubmit's documentation limits API access to 5 times a day, so save what comes back.
How OllieLeads handles these failures, and how to move
If FormSubmit works for you now, keep it: it is free, with unlimited submissions from unlimited forms and file uploads up to 10 MB. If you'd rather keep a stored copy of every lead and skip these failure modes, here is how OllieLeads, the form backend we make, handles each one:
- Activation: each form gets an ID (
frm_...) from your account, so there is no activation email to miss. - Emails in spam: every lead is stored first, and alerts go by email, Slack or Discord within a minute. You can also read leads through the REST API, signed webhooks or the MCP server.
- Testing locally: localhost on ports 3000, 5173, 4321 and 8080 is test-only automatically, so test leads never count.
_next: it redirects only to your own site; anything else is ignored instead of breaking the post.- JavaScript: post form data or JSON with
Accept: application/json, and errors come back as JSON with the fix, with CORS headers on every reply. - Spam: a honeypot field (
_hp), origin checks and rate limits; bursts go to "Possible spam" and never count. - People who don't finish: with the OllieLeads script, the contact fields of visitors who leave halfway are saved (how that works).
What it doesn't do: file uploads, which FormSubmit handles. Pricing: Free is 500 leads in total with no card; Pro is $29 a month for 1,000 leads a month (OllieLeads pricing, checked October 2026).
To move, change action, rename _honey to _hp, keep _next if it points at your own site, and delete the other FormSubmit fields:
<form method="POST" action="https://ollieleads.com/f/frm_xxxxxxxx">
<input type="hidden" name="_next" value="https://example.com/thanks">
<input type="text" name="_hp" style="display:none" tabindex="-1" autocomplete="off">
<input type="text" name="name">
<input type="email" name="email" required>
<textarea name="message"></textarea>
<button type="submit">Send</button>
</form>
Your site's domain must be in the brand's allowed sites, since browser posts are only accepted from there. Comparing other options? See our guide to form backends for static sites.
FAQ
Why am I not getting emails from FormSubmit?
Usually the form hasn't been activated: find FormSubmit's confirmation email, check spam, and click the link. If it was activated, check spam for the submissions themselves, confirm the address in action is spelled right, and make sure the _honey field is empty.
Why does FormSubmit say "Unable to submit form"?
The page was opened as a local file. Serve it from a web server, even a local one such as python3 -m http.server, or add a hidden _url field with the page's address.
Does FormSubmit work on localhost?
Yes, when a local web server serves the page and the address starts with http://localhost. It doesn't work on a page opened straight from your file system.
Is FormSubmit free?
Yes. Its site says setup is free, and its documentation says you can have unlimited submissions from unlimited forms. Submissions are kept for 30 days (checked October 2026).
How do I see FormSubmit submissions I missed?
If you never activated, confirm the form and held submissions from the last 30 days are delivered. Otherwise request an API key and call https://formsubmit.co/api/get-submissions/ with it; API access is limited to 5 times a day.
Published with SuperDuperSEO