Spam protection
Every planFormivo rejects abuse at the endpoint, before anything reaches your dashboard. These are the layers that actually run, and how to tune them.
The layers that run
Each request passes through the same checks in this order:
Add a honeypot
This is the highest-value change you can make, and it costs one hidden input. Real visitors never see it; simple bots fill every field they find.
<div aria-hidden="true" style="position:absolute;left:-9999px;top:auto">
<label for="website">Website</label>
<input id="website" name="_gotcha" type="text" tabindex="-1" autocomplete="off" />
</div>Hide it from people, not from bots
display:none: some bots skip hidden inputs. Keep it out of the tab order with tabindex="-1" and mark the wrapper aria-hidden so screen readers ignore it.Understand the rate limits
Limits apply to the endpoint, not to accounts, so they also protect a form whose URL has been scraped. The per-form and per-IP limits are independent: a busy shared office network hits the IP limit, while a targeted flood hits the form limit.
- 120 requests per minute per form.
- 60 requests per minute per IP address, shared across every form.
- 30 requests per minute for one form from one IP address.
When a legitimate user is caught by a limit, show them the Retry-After value instead of a generic failure. A short "try again in a moment" beats a form that appears broken.
Restrict browser origins
Listing your production domains in the form's Integration tab means a copy of your form hosted elsewhere is rejected when it declares its own origin. This is a browser-side control, not authentication: a script outside a browser can omit the header entirely.
Never rely on Origin alone
Review instead of deleting
A rejected request is not stored, so you never have to clean it up. A submission that passes the checks but still looks wrong to you stays in the dashboard, where you can filter it, read it, and delete it deliberately.
If spam keeps arriving
Most of the time the cause is an endpoint embedded in a page with no honeypot. Add one first, then restrict the form to your domains, then consider a CAPTCHA in front of the form on your own site.
Take a little context with each submission
Sending a metadata object with the page path makes patterns visible: if every spam row says /legacy-contact, the fix is on that page.
<input type="hidden" name="metadata" value='{"variant":"footer"}' />