Stop form spam. All of it.


A captcha can’t read.
Captchas stop the crude bots. Today’s spam reads your site, writes a pitch that names your business, and passes captchas and timers. Doorman reads every message the way you would, in about 100 ms, so it catches that too, and knows a buyer from a pitch.
- CaptchaIs someone there?A pitching bot passes
- Word listDoes it contain known phrases?A rewrite gets past it
- DoormanDo they want what you sell, or want to sell you something?Reads intent
Three marks. Nothing real lost.
Every submission is scored for the probability it’s real and leaves with one mark, in about 100 ms, before your thank-you page loads.
Void Kept out
Never reaches your inbox, and the sender still sees your thank-you page. If you ever wonder why, the reason is there in plain words, and rescuing it is one click.
Held You decide
Anything in between is forwarded with a flag, so a person makes the call.
Genuine Delivered
To email, Slack or a signed webhook.
- Fails openAn outage, a full quota or a flood from one address means held, never dropped.
- Watch modeMarks everything but delivers it all, so you can check its calls on real traffic first.
- Bots learn nothingEvery sender gets the same response, whatever the mark. There’s nothing to probe.
- Your formWebflow, Framer, WordPress, HubSpot or your own code. Unchanged.
- DoormanReads every submission and stops the spam.
- Your inboxOnly the real ones, by email, Slack or your CRM.
Keep your form. Change one URL.
Doorman sits between your form and your inbox. Point the form at Doorman instead of straight at you, and only the real submissions come through. Your fields, your thank-you page and your CRM stay as they are.
Works with Webflow, Framer, Squarespace, Next.js, WordPress and plain HTML. Or call one endpoint from your backend.
<form action="/contact" method="POST"> <form action="https://withdoorman.com/f/f_XXXX" method="POST"> <input name="email" type="email"> <textarea name="message"></textarea> <button>Request a demo</button> </form>
Or hand it to your coding agent.
One prompt. It signs you up, wires your form and shows you a test, in about a minute.
Measured, not promised.
Judged live on labelled test sets and a public benchmark. Our questions were not tuned to any of them.
- 0
- genuine submissions dropped across our labelled test sets
- 13/13
- agency and SEO pitches dropped, with 11/11 bots
- 0.992
- precision on 1,956 human-labelled comments from a public spam benchmark
- ~100 ms
- to judge a submission, so visitors never wait
Test set: 104 invented but labelled submissions to a fictional invoicing company’s forms (13/13 agency pitches and 11/11 bots dropped; 45 of 52 genuine delivered straight through, 7 held for a person), judged live. Benchmark: the UCI YouTube Spam Collection, recall 0.980, 8.8% held for a person. Sign-ups and comments: a small hand-labelled set of 25 (fake accounts, abuse, spam and genuine ones), none on the wrong side.
Priced like a utility.
Every account starts with 14 days of Pro, no card. Every plan gets the same models. You pay for forms and volume, not for a sales call.
Free
For a quiet contact form.
- 1 form
- 100 submissions a month
- 100 email forwards; Slack and webhooks unlimited
- API, MCP and agent setup
- 30 days of history
Pro Recommended
Founding price $19 until Nov 30
For a demo or contact form that gets pitched.
- 10 forms
- 5,000 submissions a month
- 2,000 email forwards
- Everything in Free
- 180 days of history
Business
Founding price $59 until Nov 30
For agencies and sites with many forms.
- 50 forms
- 50,000 submissions a month
- 10,000 email forwards
- Everything in Pro
- 365 days of history
The founding price is for our first 100 paying customers and stays yours for as long as you’re subscribed. Go over your plan and nothing is dropped: submissions are held and forwarded with a flag until the month resets. Pitches and bots count as submissions. Compare plans and alternatives
Questions
Do I have to rebuild my form?
No. Keep the form you have, in Webflow, Framer, WordPress, HubSpot or your own code. Doorman sits between your form and your inbox: the form sends to Doorman instead of straight to you, Doorman reads each submission, and only the real ones are passed on to your email, Slack or CRM. Your fields and thank-you page stay as they are.
How is this different from a captcha?
A captcha asks every visitor to prove they are human, and today’s outreach bots pass it. Doorman lets everyone submit, then reads what they sent the way you would and judges it against what your business sells.
What about AI agents and AI-written pitches?
An AI agent can fill in a form in a real browser and pass a captcha, and a language model can rephrase a pitch until no word list matches it. Doorman doesn’t look for bot behaviour or banned words. It reads what the submission says and whether it’s a genuine enquiry for what you sell, the way a person would. A well-written AI pitch is still a pitch.
What happens if Doorman is down?
If judging fails or times out, the submission is held: stored, forwarded to you flagged as held, and queued for review. The same happens over your monthly quota. Doorman never drops something it did not judge. If you call the API from your backend, the @withdoorman/client package treats a network error or timeout as hold. If the hosted form endpoint itself cannot be reached, the visitor’s form post fails the way it would with any form backend.
Can I try it without trusting it?
Yes. Watch mode judges everything but delivers what it would have dropped, tagged, so you can check its calls on real traffic. Thresholds are per form, and allow and block lists let you always deliver or always drop specific emails or domains.
Does a bot find out it was dropped?
No. Every submission gets the same response whatever the verdict: the same redirect to your thank-you page, or the same {"ok": true} for JSON requests.
Is my data used for training?
No. Submissions are sent to our machine-learning provider only to be judged. We don’t use them for training. We keep submissions for 30 days on Free, 180 days on Pro and 365 days on Business, then delete them automatically.
Does it work in other languages?
Doorman’s models judge meaning, not keywords, and a short, badly written or non-English message still counts as genuine. Our published benchmark is English, so if most of your traffic is in another language, start in watch mode.
What happens if I go over my plan?
Nothing is dropped. Submissions over the monthly quota are held and forwarded unjudged, flagged as held, until the month resets or you upgrade. You get an email at 80% and at 100%.
Get your demo form back.
Free to start. One URL to install, or one prompt to your agent.