Understanding what you're defending against
Form-spam bots fall into three tiers, each defeated by different defenses. Knowing which tier you face determines what you actually need.
Tier 1: Dumb scrapers (~70% of form spam)
These are scripts that crawl the web, find HTML forms, and POST garbage to every <form action> they encounter. They don't run JavaScript. They don't load CSS. They don't render the page. They just parse HTML, extract form fields, and submit.
Their characteristic submissions: random ASCII strings in name fields, mismatched data types (Chinese characters in an "age" field), and obvious spam URLs in the message body.
Defeated by: honeypot fields, basic field validation, JavaScript-required submission. They're the easiest tier to handle and the largest by volume.
Tier 2: Headless-browser bots (~25% of form spam)
Scripts running Puppeteer, Playwright, or Selenium that fully render your page, execute your JavaScript, and submit forms as a real browser would. Much harder to detect because they look like real users at the HTTP level.
Their submissions are more realistic: plausible-looking names and emails, message content that looks like normal text until you read it ("Hi, I noticed your website and wanted to discuss SEO services..."). Often used for backlink spam, lead-gen tool advertising, or competitor scraping.
Defeated by: CAPTCHAs (especially behavioral ones like Turnstile and reCAPTCHA v3), AI content scoring, request rate limiting.
Tier 3: Targeted human-in-the-loop attacks (~5% of form spam)
Cheap labor services (often called "CAPTCHA farms") where real humans solve CAPTCHAs and submit forms at scale, charging $1-3 per 1,000 solves. Used for high-value targets: review manipulation, fake account creation on financial services, election interference, etc.
Your portfolio site contact form is almost certainly not the target of this tier. If you run a high-stakes platform (lender, marketplace, government services), it matters.
Defeated by: per-account behavioral analysis, device fingerprinting, network-level reputation. CAPTCHAs do not stop this tier — humans literally solve them.
Most defensive guides ignore this taxonomy and recommend "just add reCAPTCHA" — which over-protects against Tier 1 (where free honeypots work) and under-protects against Tier 3 (where CAPTCHAs are useless). What follows is calibrated to your actual threat level.