An async Express middleware, no native dependencies, and a verdict you can act on before your route handler runs.
Node services tend to sit behind a load balancer or another proxy, which makes the real client IP easy to get wrong — reading req.ip without trusting the right proxy chain is the most common integration bug in this stack. ZeroBot takes the IP you give it, so the important part is extracting the true client address first. Once that is right, the middleware is a single fetch call, and you can keep it off your critical path by scoring only the routes that are actually worth protecting.
middleware/botGuard.js
Full endpoint reference and an interactive tester are in the API docs. Get a key from the free tier — no card required.
Node APIs return data cheaply and fast, which makes them an efficient scraping target. Volume grows quietly because each request costs your server very little.
Free-tier abuse from disposable email providers and rotating IPs. The cost is real: infrastructure, support and polluted analytics.
Attacks that deliberately hit your most expensive endpoints — search, reports, exports — so the resource cost lands on you rather than on request volume.
If you sit behind a load balancer, yes. Otherwise req.ip is the proxy address and every verdict will be wrong. Verify by logging req.ip in staging before you deploy.
The call is a single HTTP round trip with a median under 50ms. On routes where that matters, score asynchronously and act on the verdict for the next request instead.
The snippet above fails open by design — a null response lets the request through. ZeroBot also fails open server-side, so a ZeroBot outage does not become your outage.
Free tier, real verdicts, and documentation with a built-in tester.
Get started free →