VPN & Proxy Detection Database
Classify connections associated with VPNs, proxies, residential-proxy networks, and datacenters using downloadable data covering 1,000+ providers. Query locally and use the match alongside account, device, payment, WAF, or firewall signals.
How VPN & proxy detection works
We collect and classify ranges associated with commercial VPN providers, open proxies, residential-proxy networks, and datacenters. You import each release into the lookup structure that fits your application.
IP Range Collection
We aggregate IP ranges from over 1,000+ VPN services, proxy networks, and data centers. Our collectors identify both well-known commercial providers (NordVPN, ExpressVPN, Surfshark) and lesser-known regional services.
Classification & Verification
Each IP range is classified by type: commercial VPN, SOCKS/HTTP proxy, residential proxy, or data center. We verify entries against multiple sources and remove stale IPs that are no longer active.
Residential Proxy Detection
Residential proxies are the hardest to detect because they use real ISP IPs. We identify residential proxy networks by monitoring known providers like Bright Data, Oxylabs, and SOAX, as well as peer-to-peer proxy networks.
Monthly Database Updates
VPN providers frequently rotate their IP ranges. Our database is updated monthly to ensure you have accurate, current data. Download the latest version and replace your local copy with a simple script.
Detection coverage
What's included in the database
The VPN & Proxy database is delivered as CSV and JSON files. Each record contains the following fields so you can make informed decisions about incoming traffic.
| Field | Type | Description |
|---|---|---|
| ip_start | string | Start of the IP range (IPv4 or IPv6) |
| ip_end | string | End of the IP range |
| provider | string | Name of the VPN or proxy provider (e.g., NordVPN, ExpressVPN) |
| type | enum | Classification: vpn, proxy, residential_proxy, datacenter_proxy, open_proxy |
| country | string | Country code where the exit node is located (ISO 3166-1 alpha-2) |
| is_residential | boolean | Whether the IP belongs to a residential proxy network |
| risk_level | enum | Risk classification: low, medium, high, critical |
| last_seen | date | Date the IP was last confirmed active as a VPN/proxy endpoint |
Use cases for VPN & proxy detection
From stopping payment fraud to enforcing content licensing, VPN and proxy detection is critical for any application that needs to know who its users really are.
Payment Fraud Prevention
Block fraudulent transactions from users hiding behind VPNs to bypass geo-restrictions or disguise their true location. Match billing addresses against actual IP geolocation.
Multi-Account Prevention
Detect users creating multiple accounts through different VPN servers to abuse sign-up bonuses, promotions, or referral programs.
Content Licensing Enforcement
Ensure that geo-restricted content is only accessible from licensed regions. Identify users bypassing geographic restrictions with VPN connections.
Account Takeover Detection
Flag login attempts from VPN IPs when the account has no history of VPN usage. Combine with geolocation data to detect impossible travel patterns.
Ad Fraud Mitigation
Prevent click fraud and impression fraud by detecting traffic originating from VPN and proxy infrastructure used by click farms and bots.
Scraping & Competitive Intelligence Defense
Identify scrapers hiding behind rotating residential proxies and VPNs to steal your pricing data, product listings, or proprietary content.
Query locally in your own code
Load the VPN/proxy database into MySQL, PostgreSQL, Redis, or even a flat file. Query it directly from your application with zero network overhead.
prepare(
"SELECT provider, type, country, risk_level, is_residential
FROM vpn_ips
WHERE ip_start <= INET6_ATON(:ip)
AND ip_end >= INET6_ATON(:ip)
LIMIT 1"
);
$stmt->execute(['ip' => $ip]);
return $stmt->fetch(PDO::FETCH_ASSOC) ?: null;
}
// Usage in your registration or checkout flow
$ip = $_SERVER['REMOTE_ADDR'];
$result = check_vpn($pdo, $ip);
if ($result) {
// IP matched - decide what to do
if ($result['risk_level'] === 'critical') {
http_response_code(403);
exit('Access denied.');
}
if ($result['is_residential']) {
// Residential proxy - higher risk, may want extra verification
require_captcha();
}
// Log for review
log_threat('vpn_detected', $ip, $result);
} import sqlite3
import ipaddress
# Load the AntiProxies CSV into SQLite on first run
# Then query locally - no network calls needed
def check_vpn(db_path: str, ip: str) -> dict | None:
"""Check if an IP belongs to a known VPN or proxy."""
conn = sqlite3.connect(db_path)
conn.row_factory = sqlite3.Row
ip_int = int(ipaddress.ip_address(ip))
row = conn.execute(
"""SELECT provider, type, country, risk_level, is_residential
FROM vpn_ips
WHERE ip_start <= ? AND ip_end >= ?
LIMIT 1""",
(ip_int, ip_int)
).fetchone()
conn.close()
return dict(row) if row else None
# Example: check during user registration
result = check_vpn("antiproxies_vpn.db", request.remote_addr)
if result and result["risk_level"] in ("high", "critical"):
abort(403, "Suspicious connection detected.") Related reading
How VPN Detection Actually Works
Six methods for identifying VPN traffic, from IP database matching to protocol fingerprinting.
BlogProxy vs VPN vs Tor: Understanding the Differences
How each anonymization technology works, who uses them, and how to detect them.
BlogResidential Proxies: The Hardest Threat to Detect
Why residential proxies bypass traditional detection and what actually works against them.
BlogMobile Proxies: Why They're the Hardest Traffic to Block
How mobile carrier IPs enable fraud that IP blocking alone can't stop.
Put the full dataset in your stack
€99/year gets you all 22 data categories, unlimited local queries, and one year of updates. Load the files once, keep your decision logic in-house, and update on your own deployment schedule.