splitforms.com

Feature · Spam Protection

Form spam protection that never shows a CAPTCHA

Honeypot fields, time-trap detection, IP rate limits, and content scoring stop bots before they hit your inbox — without a single CAPTCHA.

  • 500 free to start
  • No credit card
  • 30-sec setup
splitforms spam protection — Honeypot fields, time-trap detection, IP rate limits, and content scoring stop bots before they hit your inbox — without a single CAPTCHA.

No backend to build

Your form posts to one splitforms endpoint — no server, API route, or SDK. splitforms is the backend.

Straight to your dashboard

Every submission is saved to a searchable dashboard and emailed to you — spam filtered before it lands.

Spam Protection, built in

No glue code, no third-party middleman — it ships as part of splitforms and works from your first submission.

Copy-paste ready

Drop this into any project.

Replace YOUR_ACCESS_KEY with the key from your splitforms dashboard. No SDK to install, no build step — the same html you already write.

Generate access key
spam-protection.html
<!--
  Drop-in spam protection for any HTML form. No CAPTCHA, no scripts,
  no Google cookies — just a hidden honeypot + a time-trap field.
-->
<form action="https://splitforms.com/api/submit" method="POST">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />

  <input type="text"  name="name"    placeholder="Name"    required />
  <input type="email" name="email"   placeholder="Email"   required />
  <textarea           name="message" placeholder="Message" required></textarea>

  <!-- 1. Honeypot — hidden from real users, bots fill it in -->
  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off" />

  <!-- 2. Time-trap — submissions faster than 2s are auto-rejected -->
  <input type="hidden" name="form_loaded_at" value="" />
  <script>
    document.currentScript.previousElementSibling.value = Date.now();
  </script>

  <button type="submit">Send</button>
</form>

<!--
  Optional: also call the API directly with fetch() for SPAs.

  const res = await fetch("https://splitforms.com/api/submit", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      access_key: "YOUR_ACCESS_KEY",
      name, email, message,
      botcheck: "",                    // must stay empty
      form_loaded_at: pageLoadedAt,    // ms since epoch
    }),
  });
  // res.json() => { success: true, message: "Submission received" }
  // Suspected spam is accepted silently too: { success: true } — bots never see an error
-->

How to set it up

How to set up Spam Protection.

How spam protection flows through splitforms — what you do, what we do, and what lands in your inbox.

Add the honeypot + time-trap to your form

Drop one hidden checkbox named 'botcheck' (display:none, tabindex=-1, autocomplete=off) and a hidden 'form_loaded_at' field that JavaScript fills with Date.now() on page load. Real users never touch either; bots that auto-fill every input and submit in under 2s are rejected before storage.

splitforms scores every submission server-side in ~50ms

On submit, the API runs the honeypot check, time-trap, IP rate limit, and a rule-based content-scoring pass (link count, spam keywords, throwaway TLDs, repeated text, gibberish, and more). Honeypot and time-trap hits are rejected; suspicious content is quarantined without triggering email, webhooks, or integrations.

Review and recover from the Spam queue

The dashboard's Spam queue shows submissions quarantined by content scoring for the active form. One click marks a false positive 'not spam', restores it to your inbox, sends the notification email, and trusts that sender from then on.

How spam protection works

How does splitforms handle Spam Protection?

splitforms blocks contact-form spam without ever showing a CAPTCHA. Every form gets a layered defence: a built-in honeypot field that bots auto-fill but real users never see, a time-trap that rejects submissions sent less than 2 seconds after the page loaded, IP-based rate limiting that throttles flooders by default, and a rule-based content-scoring layer that catches link spam, repeated phrases, throwaway TLDs, known attack-probe patterns, and other spam signals. Route the same submission to an email inbox or a webhook at the same time — nothing here is one-or-the-other.

  • No CAPTCHA — your users never get told they're not human or asked to find buses
  • Layered defence: honeypot, 2-second time-trap, IP rate limit, rule-based content scoring
  • GDPR-friendly — no Google reCAPTCHA cookies required, no third-party scripts loaded by default
splitforms spam protection in action

What you get

What do you get with Spam Protection?

Every reason below is the boring, reliable kind — the fundamentals of spam protection, built once and tested in production so you never have to.

  • Spam queue in the dashboard — review flagged submissions and recover false positives in one click
  • Per-form allowed-domains list — restrict which origins can submit a form
  • Optional reCAPTCHA or Cloudflare Turnstile gate per form, on every plan, if you want an extra layer
Why teams pick splitforms for spam protection

How SplitForms works

What happens after someone submits your form?

splitforms receives the submission, filters spam, saves it to your dashboard and emails you — then, on paid plans, sends it on to your webhooks and integrations. No backend infrastructure to build.

A SplitForms contact form submission launching straight to your inbox

Add your endpoint

Point your form to your unique SplitForms endpoint. That's it.

HTML form pointing at a SplitForms submit endpoint

Receive submissions

We instantly capture and organize every submission in your inbox.

Submissions inbox with searchable leads and status pills

Route anywhere

Send data to email, spreadsheets, CRMs, webhooks, and 7,000+ apps.

Generic integration tiles for email, sheets, chat, CRM, automate, and webhook

No credit card required. Set up in under 60 seconds.

Connect & automate

Where can submissions go besides email?

On paid plans, submissions can also go to Slack, Discord, Google Sheets, Notion, Airtable, Zapier or any signed webhook — and splitforms works on the platforms you build on, from WordPress and Shopify to Next.js. With Stripe connected, your forms can take payments too.

Connect your SplitForms form to Slack, Google Sheets, Mailchimp, Zapier and more
NewTake payments on your formsDeposits, bookings, order forms — submitters check out through Stripe and the money goes straight to your Stripe account. Included on every paid plan.See plans →

Setup guides for the stacks you use

Common questions

Spam Protection questions.

View all FAQs
How does splitforms spam protection work without a CAPTCHA?

Every submission runs through a layered server-side filter: (1) honeypot — several hidden field names (like 'botcheck') that real users can't see but bots auto-fill; (2) time-trap — submissions sent in under 2 seconds are rejected since real humans take longer to type; (3) IP rate limiting; (4) content scoring — rule-based checks flag link spam, throwaway TLDs, suspicious hosts, repeated text, gibberish, and attack-probe strings; (5) an optional per-form Google reCAPTCHA or Cloudflare Turnstile check if you turn it on. You can also restrict a form to an allowed list of domains. This runs without ever loading a CAPTCHA widget unless you opt in.

Is spam protection available on the free plan?

Yes — every layer (honeypot, time-trap, IP rate limit, content scoring, Spam queue) is included on the Free plan (500 submissions, no card). There is no upsell. Spam protection is identical at every tier; paid plans raise the monthly submission cap and add features like webhooks, integrations, and exports.

How do I enable spam protection on my form?

It's on by default — you don't have to enable anything. To get the strongest protection, add two hidden inputs to your form: <input type='checkbox' name='botcheck' style='display:none' tabindex='-1' autocomplete='off' /> for the honeypot, and <input type='hidden' name='form_loaded_at' /> populated by JavaScript with Date.now() on page load for the time-trap. Both are optional — submissions without them still get IP rate-limit and content scoring — but adding them meaningfully improves catch rate.

Does this work with React, Next.js, Vue, Svelte, and SPAs?

Yes. The honeypot, time-trap, and content scoring are all server-side, so they don't care what framework rendered the form. For an SPA using fetch() instead of a native form POST, send a JSON body with access_key, your fields, an empty botcheck: '' (must stay empty), and form_loaded_at set to the timestamp when the form mounted. The endpoint returns { success: true, message } on accept; suspected spam is also accepted with { success: true } so a bot never learns it was filtered, and only validation, auth, or rate-limit failures return { success: false, message, code }.

Real submissions are landing in the Spam queue — how do I fix it?

Open the form's Spam queue, find the submission, and click 'Not spam'. That recovers the submission to your inbox, sends the notification email, and adds the sender's email address to your trusted senders, so the content filter won't quarantine that person again (marking a message as spam withdraws the trust). If a whole pattern of legitimate messages keeps getting caught, email [email protected] with an example.

Simple pricing

How much does splitforms cost?

Free gives you 500 submissions for $0 — no card, no time limit. Pro is $5/month for 5,000 submissions a month, and Annual is $49/year for 15,000 a month with every Pro feature.

Free

$0— 500 submissions
 

No card, no time limit

Best for testing

For side projects and indie devs.

  • 500 free submissions
  • Unlimited forms
  • Email notifications included
  • Smart spam filtering
  • Submissions dashboard
  • Redirect after submit
  • MCP server included

Annual

$49/ year
About $4.08/mo, billed yearly
Best value

Every Pro feature with triple the volume — $0.27 per 1,000 at full use.

  • 15,000 submissions / mo
  • Unlimited forms
  • Everything in Pro
  • File uploads with 5 GB storage
  • 3 team seats
  • Priority email support

No credit card required on Free • Cancel anytime • Full pricing and FAQ