Detecting Bots in 2026: IP Intelligence + Email Validation in One API Call
<h2> The Bot Problem Nobody Talks About </h2> <p>If you're running a web app in 2026, roughly 40% of your traffic isn't human. Scrapers, credential stuffers, fake signups — they eat your bandwidth, pollute your analytics, and sometimes steal your data.</p> <p>Most developers slap on a CAPTCHA and call it a day. But CAPTCHAs are a UX nightmare, and sophisticated bots solve them anyway. There's a better approach: <strong>checking the reputation of incoming requests before they even reach your app.</strong></p> <h2> The Two Signals That Matter Most </h2> <p>After building fraud detection systems for years, I've found that two data points catch 90%+ of malicious traffic:</p> <h3> 1. IP Intelligence </h3> <p>Every request comes from an IP address, and that IP tells a story:</p> <ul> <li> <stron
The Bot Problem Nobody Talks About
If you're running a web app in 2026, roughly 40% of your traffic isn't human. Scrapers, credential stuffers, fake signups — they eat your bandwidth, pollute your analytics, and sometimes steal your data.
Most developers slap on a CAPTCHA and call it a day. But CAPTCHAs are a UX nightmare, and sophisticated bots solve them anyway. There's a better approach: checking the reputation of incoming requests before they even reach your app.
The Two Signals That Matter Most
After building fraud detection systems for years, I've found that two data points catch 90%+ of malicious traffic:
1. IP Intelligence
Every request comes from an IP address, and that IP tells a story:
-
Is it a known proxy/VPN/Tor exit node? Legitimate users sometimes use VPNs, but bots almost always do.
-
Is it from a datacenter or residential ISP? Most real users browse from home or mobile — datacenter IPs are a red flag.
-
Has this IP been reported for abuse? Threat intelligence feeds track IPs involved in spam, attacks, and fraud.
-
What's the geolocation? A "US user" connecting from a hosting provider in Eastern Europe is suspicious.
import requests
Quick IP reputation check
response = requests.get( "https://ipasis.com/api/scan/ip/185.220.101.1", headers={"Authorization": "Bearer YOUR_API_KEY"} ) data = response.json()
print(f"Risk Score: {data['risk_score']}/100") print(f"Is VPN: {data['is_vpn']}") print(f"Is Datacenter: {data['is_datacenter']}") print(f"Abuse Reports: {data['abuse_count']}")`
Enter fullscreen mode
Exit fullscreen mode
2. Email Validation
For signups and form submissions, the email address is your second line of defense:
-
Does the domain actually exist? Disposable email services (guerrillamail, tempmail) are bot favorites.
-
Is the mailbox real? SMTP verification catches typos and fake addresses.
-
Is it a known disposable/temporary email? There are 10,000+ disposable domains.
-
Is the domain newly registered? Fresh domains often exist solely for fraud.
# Email validation response = requests.get( "https://ipasis.com/api/scan/email/[email protected]", headers={"Authorization": "Bearer YOUR_API_KEY"} ) email_data = response.json()# Email validation response = requests.get( "https://ipasis.com/api/scan/email/[email protected]", headers={"Authorization": "Bearer YOUR_API_KEY"} ) email_data = response.json()print(f"Valid: {email_data['is_valid']}") print(f"Disposable: {email_data['is_disposable']}") print(f"Domain Age: {email_data['domain_age_days']} days")`
Enter fullscreen mode
Exit fullscreen mode
Combining Both: A Practical Middleware
Here's a real-world pattern I use — a middleware that scores every signup request:
from flask import Flask, request, jsonify import requestsfrom flask import Flask, request, jsonify import requestsapp = Flask(name) IPASIS_KEY = "your-api-key"
def check_reputation(ip, email): """Score a signup attempt using IP + email intelligence.""" risk = 0 flags = []
Check IP
ip_resp = requests.get( f"https://ipasis.com/api/scan/ip/{ip}", headers={"Authorization": f"Bearer {IPASIS_KEY}"} ).json()
if ip_resp.get("is_vpn"): risk += 20 flags.append("vpn_detected") if ip_resp.get("is_datacenter"): risk += 30 flags.append("datacenter_ip") if ip_resp.get("abuse_count", 0) > 5: risk += 25 flags.append("known_abuser")
Check email
email_resp = requests.get( f"https://ipasis.com/api/scan/email/{email}", headers={"Authorization": f"Bearer {IPASIS_KEY}"} ).json()
if email_resp.get("is_disposable"): risk += 40 flags.append("disposable_email") if not email_resp.get("is_valid"): risk += 50 flags.append("invalid_email")
return {"risk_score": min(risk, 100), "flags": flags}
@app.route("/signup", methods=["POST"]) def signup(): ip = request.remote_addr email = request.json.get("email", "")
result = check_reputation(ip, email)
if result["risk_score"] > 60: return jsonify({"error": "Signup blocked", "reason": "suspicious_activity"}), 403 elif result["risk_score"] > 30:
Flag for manual review but allow
return jsonify({"status": "pending_review"}), 200 else:
Clean signup, proceed normally
return jsonify({"status": "approved"}), 200`
Enter fullscreen mode
Exit fullscreen mode
Why This Beats CAPTCHAs
Approach User Friction Bot Detection Rate Latency
reCAPTCHA v2 High (click images) ~85% 2-5s
reCAPTCHA v3 Low (invisible) ~70% 1-3s
IP + Email Intelligence Zero ~92% <200ms
The key advantage: zero user friction. Your legitimate users never see a challenge. The API call happens server-side in milliseconds, and bad actors get blocked silently.
Getting Started
If you want to try this approach, IPASIS offers a free tier with 1,000 requests/day — enough to protect a small-to-medium app. You can also test any IP or email interactively on the free scanner.
The API docs cover authentication, rate limits, and response formats. The API is REST-based with JSON responses — no SDK required.
Key Takeaways
-
Don't rely solely on CAPTCHAs — they hurt UX and sophisticated bots bypass them.
-
IP intelligence catches infrastructure-level fraud (VPNs, datacenter IPs, known abusers).
-
Email validation catches identity-level fraud (disposable emails, fake domains).
-
Combine both for a risk score that lets you block, flag, or approve in real-time.
-
Server-side checks = zero user friction — your real users never know it's happening.
Bot detection doesn't have to mean annoying your users. Sometimes the smartest security is invisible.
What bot detection approach are you using? Drop a comment — I'm curious what's working for others in 2026.
DEV Community
https://dev.to/circuit/detecting-bots-in-2026-ip-intelligence-email-validation-in-one-api-call-cjnSign in to highlight and annotate this article

Conversation starters
Daily AI Digest
Get the top 5 AI stories delivered to your inbox every morning.
More about
llamaservicereport
When repression meets resistance: internet shutdowns in 2025
The 2025 #KeepItOn report on internet shutdowns is out. Read on for key insights from this year’s data on internet shutdowns in 2025. The post When repression meets resistance: internet shutdowns in 2025 appeared first on Access Now .

I Can't Write Code. But I Built a 100,000-Line Terminal IDE on My Phone.
I can't write code. I'm not an engineer. I've never written a line of TypeScript. I have no formal training in computer science. But I built a 100,000-line terminal IDE — by talking to AI. Every architectural decision is mine. The code is not. It was created through conversation with Claude Code, running inside Termux on a Samsung Galaxy Z Fold6. No desktop. No laptop. Just a foldable phone and an AI that can execute commands. Today I'm releasing it as open source. GitHub: github.com/RYOITABASHI/Shelly The Problem You're running Claude Code in the terminal. It throws an error. You copy it. You switch to ChatGPT. You paste. You ask "what went wrong?" You copy the fix. You switch back. You paste. You run it. Seven steps. Every single time. The terminal and the chat live in different worlds.
Knowledge Map
Connected Articles — Knowledge Graph
This article is connected to other articles through shared AI topics and tags.
More in Products
trunk/3c9726cdf76b01c44fac8473c2f3d6d11249099e: Replace erase idiom for map/set with erase_if (#179373)
C++20 provides std::erase_if(container, pred) which is equivalent to the following much longer code snippet for associative containers: auto it = container.begin(); while (it != container.end()) { if ( pred (*it)) { it = container. erase (it); } else { ++it; } } PyTorch now supports C++20: #176662 Pull Request resolved: #179373 Approved by: https://github.com/cyyever , https://github.com/Skylion007

How to Use Claude Code for Security Audits: The Script That Found a 23-Year-Old Linux Bug
Learn the exact script and prompting technique used to find a 23-year-old Linux kernel vulnerability, and how to apply it to your own codebases. The Technique — A Simple Script for Systematic Audits At the [un]prompted AI security conference, Anthropic research scientist Nicholas Carlini revealed he used Claude Code to find multiple remotely exploitable heap buffer overflows in the Linux kernel, including one that had gone undetected for 23 years. The breakthrough wasn't a complex AI agent—it was a straightforward bash script that systematically directed Claude Code's attention. Carlini's script iterates over every file in a source tree, feeding each one to Claude Code with a specific prompt designed to bypass safety constraints and focus on vulnerability discovery. Why It Works — Context,

Loop Neighborhood Markets Deploys AI Agents to Store Associates
Loop Neighborhood Markets is equipping its store associates with AI agents. This move represents a tangible step in bringing autonomous AI systems from concept to the retail floor, aiming to augment employee capabilities. The Innovation — What the source reports Loop Neighborhood Markets, a convenience store chain, has begun providing AI agents to its store associates. While the source article is brief, the announcement itself is significant. It signals a shift from internal, back-office AI pilots to deploying agentic AI directly into the hands of frontline retail staff. The specific capabilities of these agents—whether for inventory queries, customer service support, or task management—are not detailed, but the operational intent is clear: to augment human workers with autonomous AI assis




Discussion
Sign in to join the discussion
No comments yet — be the first to share your thoughts!