Documentation
Spam Protection
Formcore has built-in spam protection you can enable per form. Some checks require small changes to your HTML — others run entirely server-side. Configure everything from the Spam Protection tab in your form settings.
Preset modes
- Off — all checks disabled
- Basic — honeypot + timing protection
- Full — honeypot + timing + keyword filter + IP rate limiting
- Custom — toggle individual checks on or off
Honeypot
A hidden field that real users never see. Bots that auto-fill every field will
fill it and get flagged. Add a hidden
_gotcha
field to your form:
<!-- Hide with CSS clipping, not display:none (bots detect that) --> <div aria-hidden="true" style="position:absolute;overflow:hidden;clip:rect(0 0 0 0); height:1px;width:1px;margin:-1px;padding:0;border:0"> <input type="text" name="_gotcha" tabindex="-1" autocomplete="off" /> </div>
If submitting via JSON, include
"_gotcha": ""
in your payload. The field is always stripped from stored data.
Timing protection
Rejects submissions that arrive faster than a human could fill the form. Set a timestamp when the page loads and send it with the form:
<input type="hidden" name="_timestamp" id="_timestamp" />
<script>
// Set on page load, NOT on submit
document.getElementById("_timestamp").value = new Date().toISOString();
</script>
Default minimum is 3 seconds (configurable per form). The
_timestamp
field is stripped from stored data. If omitted, the check is skipped.
Turnstile (Cloudflare captcha)
Cloudflare's free, privacy-friendly captcha. It runs invisibly or shows a brief challenge. You'll need a Site Key and Secret Key from the Cloudflare Turnstile dashboard .
- Create a Turnstile widget in Cloudflare and copy your Site Key and Secret Key
- In Formcore, open Spam Protection settings and enable Turnstile
- Paste both keys and save
- Add the widget to your form:
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script> <form action="/f/YOUR_FORM_ID" method="POST"> <input name="name" required /> <input name="email" type="email" required /> <!-- Turnstile widget, renders automatically --> <div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"></div> <button type="submit">Send</button> </form>
The token field
(cf-turnstile-response)
is injected by the widget and stripped from stored data. For JSON submissions,
you can also use the field name
_turnstile_token.
Server-side checks
These require no changes to your form. Enable them in Spam Protection settings.
- Keyword filter — scans submissions for known spam patterns. Built-in categories plus up to 64 custom words.
- IP rate limiting — limits submissions per IP address. Default: 10 per hour (configurable).
Reserved fields
These field names are automatically extracted from submissions and never stored in your data:
_gotcha
_timestamp
cf-turnstile-response
_turnstile_token
_session
_next
_error
_meta
Spam flagged submissions are silently accepted with a fake success response to deceive bots. They're still stored and visible in your dashboard so you can review false positives.