The problem with CAPTCHAs
CAPTCHAs had a reasonable run. In 2008, asking users to identify distorted letters made a lot of sense - bots couldn't parse them and humans could. In 2025, that's completely reversed. Modern spam bots solve image CAPTCHAs with >95% accuracy. Human users, meanwhile, abandon forms at measurable rates every time one appears.
Google's reCAPTCHA v3 tried to fix the UX problem by making the challenge invisible - but it does so by running a JavaScript fingerprinting script on every page load and assigning a "risk score" that your server has to interpret. You're trading a UX problem for a privacy concern, a third-party dependency, and a scoring system that still produces false positives on legitimate users behind VPNs or privacy browsers.
There's a cleaner approach: instead of trying to tell humans and bots apart at the form level, let the form submit freely - then classify what was submitted and route it accordingly.
How AI classification changes the game
Classification-based spam detection works differently than CAPTCHA. Rather than gating the submission, you let everything through and then immediately run the content through a classifier that assigns a label - legitimate, spam, or suspicious - along with a confidence score.
The benefits are significant:
- Zero friction for real users. There's no challenge, no solve, no waiting. Legitimate submissions are processed immediately.
- Context-aware decisions. A classifier can evaluate the full content of a submission - the name, email, message, and any other fields - not just whether the submitter ticked a box.
- Soft routing instead of hard blocking. Spam doesn't have to be deleted. You can route it to a review queue, tag it in your CRM, or send it to a different workflow branch.
- No third-party scripts on your page. The classification call happens server-side after submission - your users' browsers never touch it.
What the workflow looks like
Here's the basic flow for a contact form or lead capture form:
- User fills out and submits the form normally.
- Your server (or your automation tool - n8n, Zapier, Make, etc.) receives the submission.
- The full submission is sent to the classifaily
/classifyendpoint with your spam/not-spam category set. - classifaily returns a label and confidence score in <300 ms.
- Your workflow branches: legitimate submissions go to your CRM or inbox; spam goes to a review bucket or gets silently dropped.
A real API call
Let's say a user submits this contact form message:
{
"name": "Mike Johnson",
"email": "mike@promo-deals99.biz",
"message": "Hi, I noticed your site and wanted to offer SEO
services. We can get you to page 1 guaranteed!
Click here: http://seo-blastpro.com/offer"
}
You forward the relevant fields to classifaily as a single formatted string:
curl -X POST https://api.classifaily.com/v1/classify \
-H "Authorization: Bearer cai_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"input": "Name: Mike Johnson\nEmail: mike@promo-deals99.biz\nMessage: Hi, I noticed your site and wanted to offer SEO services. We can get you to page 1 guaranteed! Click here: http://seo-blastpro.com/offer",
"categories": ["legitimate_inquiry", "spam", "suspicious"],
"explain": true
}'
The response comes back structured and immediately actionable:
{
"label": "spam",
"confidence": 0.97,
"reasoning": "Message contains unsolicited promotional language, a link to an external site, and a guarantee claim typical of SEO spam.",
"request_id": "req_01hx..."
}
A confidence of 0.97 is about as clear a signal as you'll get. Route it to your review bucket and move on.
Handling edge cases with the confidence score
Not every submission is 97% obvious. That's where the confidence score earns its keep. A well-designed routing strategy has three branches, not two:
- High confidence legitimate (e.g., >0.85) → process normally, pass to CRM or support queue
- High confidence spam (e.g., >0.85 for the spam label) → drop silently or route to a spam folder
- Low confidence / uncertain (between 0.5 and 0.85 on any label) → flag for human review
This three-way split means you're not making binary decisions on ambiguous content. A submission that looks like marketing outreach but might be a legitimate partnership inquiry goes into review - not the trash.
Building it in n8n
If you're using n8n, the setup takes about 10 minutes:
- Add a Webhook node as your trigger. This receives the form submission from your site or a form service.
- Add an HTTP Request node pointing to
https://api.classifaily.com/v1/classify. Set the method to POST, add your Bearer token header, and map the form fields into thecontentfield. - Add an IF node that checks
{{ $json.label }}. Branch onspamvslegitimate_inquiry. - On the legitimate branch, connect to your CRM node (HubSpot, Pipedrive, Notion - whatever you use).
- On the spam branch, connect to a Slack notification or a Google Sheets log for review.
Add a third branch off the IF node checking {{ $json.confidence }} below your threshold for the uncertain/review case and you have a complete, production-ready spam filter with no CAPTCHA in sight.
Custom categories for your specific use case
The examples above use generic categories like spam and legitimate_inquiry, but classifaily lets you define custom categories that match your specific content and workflow.
A SaaS company might use: sales_inquiry, support_request, partnership, spam, job_application. Now you're not just filtering spam - you're routing to the right person or queue in the same classification step. One API call replaces both the spam filter and the manual triage.
Accuracy considerations
AI classification isn't perfect, and you shouldn't expect it to be. A few things worth knowing:
- The model can be wrong. Always have a human-review path for low-confidence responses and a way for users to report false positives.
- Short inputs are harder to classify. A one-line message gives the model less signal than a paragraph. If your form only collects a name and email, consider enriching the classification input with the source page URL, UTM parameters, or submission timestamp.
- Spam evolves. What looks like legitimate outreach today might be tomorrow's template. Periodically review what's landing in your uncertain bucket to catch new patterns.
Getting started
classifaily's free plan includes 100 classification requests per month - more than enough to prototype this pattern on a real form. No credit card required.
The full API reference, including request/response examples and error codes, is in the API documentation.
Sign up free and run your first classification in under 5 minutes.
Get started free