What happens to a form submission after the free limit runs out
Say your contact form has been fine for months. Then someone's bot finds it, or you have one good week, and the free plan runs out halfway through the month. The next customer who fills in the form might still get your "
Say your contact form has been fine for months. Then someone's bot finds it, or you have one good week, and the free plan runs out halfway through the month. The next customer who fills in the form might still get your "Thank you" page, and you might never get their message. Nothing on your side looks broken, so there's no reason to go and check.
On pricing pages, free form backends look almost the same: 50 a month here, 250 there. The part that differs is what happens to the message that arrives after that, and most vendors answer it in one FAQ line, if at all.
We're Formgong and we make one of the 14 services in this list, so treat our row with the suspicion you'd give any vendor writing about competitors. On 16 October 2026 we read every vendor's own pricing, docs and help pages for a bigger comparison, and on 29 October we fetched the same pages again with curl to see what had moved. We didn't run real accounts past the limit, so this is what each vendor says it does, quoted where the wording matters. There are no prices here; those change more often than anything else on these pages.
| Service | Free limit | A submission over the limit |
|---|---|---|
| Formspree | 50 a month | Saved to an Over Limit folder without notification emails; you reprocess it once you have room |
| Formcarry | 50 a month, spam counts | Held until the 1st of next month (up to 1,900) while the visitor sees the normal thank-you page; past that the endpoint answers 401 |
| Formspark | 250 in total, not per month | A small buffer is held under Overflow and released when you buy a bundle; past that, discarded. JSON callers get 402 |
| Formgong | 1,000 a month | Still delivered on credit, up to 5,000 extra, until the 7th of next month; if unpaid, stored but not delivered until you pay, then 429 |
| Forminit | 100 a month | The form pauses; submissions are rejected, not stored and cannot be recovered |
| Static Forms | 250 every 30 days | Rejected with an error, neither delivered nor stored; warning emails at 80% and 90% |
| Splitforms | 500 in total, not per month | HTTP 429, not stored |
| FormKeep | 50 a month per form, spam counts | Ignored and lost |
| Netlify Forms | Unlimited on credit-based plans | If the project goes over its plan limits, the whole project is paused |
| Jotform | 100 a month | Forms are disabled and show "This Form Has Exceeded Its Allocated Quota" |
| Basin | 50 a month | Its own pages disagree |
| FormBackend | 50 a month | "Not dropped without warning"; held or rejected is not stated |
| Web3Forms | 250 a month | Not stated in the docs; the pricing page refused our reader (403) |
| FormSubmit | No published limit | Nothing published to go over; the site was down when we checked on 29 October |
Four of them throw the message away
Forminit, Static Forms, Splitforms and FormKeep don't keep anything that comes in over the limit. Forminit says it most plainly: submissions sent while a form is paused "are not stored or queued and cannot be recovered". Static Forms and Splitforms say much the same and send back an error status (Splitforms uses 429). FormKeep's pricing page says extra submissions are ignored, and an article on its support site says they will be lost.
There's one more thing about FormKeep, and Formcarry too. Both count spam toward the free 50. A bot that finds your form on the 3rd can spend the whole month for you.
Of all the bad outcomes, an error status is the one you can do something about, because your page sees it. If your form posts with fetch, look at the status and give the person another way to reach you:
const res = await fetch(endpoint, {
method: "POST",
headers: { Accept: "application/json" },
body: new FormData(form),
});
if (res.ok) {
showThanks();
} else {
// 429 from Splitforms, 402 from Formspark, 401 from Formcarry past its hold
showError("This didn't go through. Please email us at [email protected].");
}
With a plain HTML form and no JavaScript, the visitor lands on whatever error page the backend renders, and you have no say in what it says.
The ones that keep it
Formspree, Formcarry and Formspark hold on to over-limit submissions, so nothing disappears right away. Where they keep it is the problem. Formspree puts it in an Over Limit folder "without sending notification emails or running plugins". In fairness, Formspree also emails you when that starts and warns you at 50%, 75% and 90%, which is more than most do. Formcarry sets the extra submissions aside until the first day of the next month, and meanwhile the visitor sees the normal thank-you page. If you upgrade before then, they move into your form.
From the visitor's side a held message and a delivered one look the same. Someone asks for a quote on the 12th, sees "thank you" and waits. If you read it on the 1st, they've likely gone with someone else.
Formspark and Splitforms work differently in another way. Their free allowance, 250 and 500, is a total and doesn't come back next month. For a portfolio form that gets a message every few weeks that's plenty. A small shop will use it up.
Then there's us. When a Formgong account goes over, we keep delivering on credit until the 7th of the next month, up to 5,000 extra. That works once in any 12 months. If you go over again later in the year you get 20% on top, and after that new submissions wait until you upgrade or the month turns over. We took this from our code, not from a FAQ, but please check it like you'd check anyone else's claim.
When the limit stops more than the form
Netlify is a strange case. On its credit-based plans the forms are free and unlimited, so you'd think there's nothing to hit. But the plan has credit limits of its own, and Netlify's billing FAQ says that projects which go over them "will be paused and will no longer receive web requests, form submissions, etc." until the next billing cycle, unless you upgrade or switch on auto recharge. So when that happens, your whole site is down, and the form with it.
Jotform goes the other way and is loud about it. It disables the form, and anyone who opens it sees "This Form Has Exceeded Its Allocated Quota". You've lost the form until the month resets, sure. Nobody walks away thinking their message got through, though.
When the vendor's own pages don't answer
We couldn't pin down four of them.
Basin contradicts itself. The FAQ in its docs says free-plan submissions "may be restricted until the next month", while the pricing page says "We won't cut you off". Both still said that when we looked again on the 29th. FormBackend only promises that submissions "aren't dropped without warning", which doesn't tell you whether they're held or refused. With Web3Forms we got nothing: the docs don't cover it and the pricing page sent curl a 403 on both days. FormSubmit says it has no limit, and on the 29th we couldn't even re-read that, because the site was returning a Cloudflare 521.
If you're on one of these, ask their support, or watch the dashboard the first month you get close.
What to check on your own form
First, find your backend in the table and see where its warning emails go. Plenty of us signed up with some address we stopped reading years ago. If spam counts on your plan, turn on the spam filter or a captcha now, not after a bot has eaten the month. And send your form one request it should refuse (a wrong key is the easiest) and look at the page a visitor would get. It takes two minutes.
We wrote up the same 14 services in more detail, with how each answered a wrong key and where it keeps your data, in our form backend comparison.
Has a form limit ever cost you a lead? Or did you find a pile of old messages in an over-limit folder one day? Tell us in the comments which backend it was and how you found out. If a vendor behaves differently from what its page says, we'd like to hear that as well, so we can fix the table.
Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.