Map Background

Proxy Detection Test

Check to see if your IP address is a proxy

Proxy Detector

Use our proxy detector to check whether any IP address is routing traffic through a proxy server. Enter an IP address above and our tool will cross-reference it against thousands of known proxy servers updated real time. To avoid false positives, we automatically remove proxy IPs that have been offline and unlisted for over a year.

Our proxy detection software scans hundreds of public and private proxy listing sites every day, ensuring our database stays current. Whether you need a one-off check or a high-volume automated lookup via our proxy detection API, our tool handles both. You can also check for VPN connections, Tor exit nodes, and private relays using the same infrastructure.

Our Proxy Detection API

Our proxy detection API gives you programmatic access to real-time proxy data. A single API call returns a JSON response telling you whether an IP address is a known proxy. Integration takes minutes regardless of your stack. See our full API documentation for request formats, response fields, and rate limit details.

We maintain accuracy by subscribing to both public and private proxy lists and continuously verifying IP status. Stale entries are removed automatically, so you are never blocking legitimate users based on outdated data. Our API has served billions of requests since 2017 with consistent uptime and low latency. If you also need to detect VPNs or Tor nodes, those signals are available in the same API response.

Why Use A Proxy Detection Service?

A proxy detection service acts as a security layer in front of your application. Before a visitor can interact with your platform, the service checks their IP against a continuously updated list of known proxy servers. If a match is found, you can block access, flag the session for review, or apply stricter verification in real time.

Proxies are frequently used for fraud, credential stuffing, ad click manipulation, and large-scale web scraping. Left unchecked, these activities waste server resources, distort your analytics, and expose your platform to abuse. A proxy detection service lets you combat fraud, reduce spam, block bots, strengthen your KYC (know your customer) process, and enforce geoblocking restrictions without disrupting legitimate visitors. For broader anonymization coverage, pairing proxy detection with our VPN detection and Tor node detection gives you a more complete picture of who is connecting to your platform.

For enterprise clients, we also offer residential proxy detection, which identifies proxies routing traffic through real residential IP addresses. These are commonly used for click fraud, ad verification bypass, AI crawling, sneaker botting, and automated scraping, and are typically invisible to standard detection methods.

Integrate Proxy Detection Into Your App

Getting started takes a single API call. Replace YOUR_API_KEY with your key from the dashboard and IP_ADDRESS with the IP you want to check. The response includes a security.proxy boolean you can act on immediately. Full response documentation is on the API docs page.

// Node.js backend only - never expose your API key on the client
const response = await fetch(
  'https://vpnapi.io/api/IP_ADDRESS?key=YOUR_API_KEY'
);
const data = await response.json();

if (data.security.proxy) {
  console.log('Proxy detected - block or flag this request.');
} else {
  console.log('No proxy detected.');
}
import requests

response = requests.get(
    'https://vpnapi.io/api/IP_ADDRESS',
    params={'key': 'YOUR_API_KEY'}
)
data = response.json()

if data['security']['proxy']:
    print('Proxy detected - block or flag this request.')
else:
    print('No proxy detected.')
<?php
$url = 'https://vpnapi.io/api/IP_ADDRESS?key=YOUR_API_KEY';
$response = file_get_contents($url);
$data = json_decode($response, true);

if ($data['security']['proxy']) {
    echo 'Proxy detected - block or flag this request.';
} else {
    echo 'No proxy detected.';
}
?>
package main

import (
    "encoding/json"
    "fmt"
    "net/http"
)

type Security struct {
    Proxy bool `json:"proxy"`
}

type Response struct {
    Security Security `json:"security"`
}

func main() {
    resp, _ := http.Get("https://vpnapi.io/api/IP_ADDRESS?key=YOUR_API_KEY")
    defer resp.Body.Close()

    var data Response
    json.NewDecoder(resp.Body).Decode(&data)

    if data.Security.Proxy {
        fmt.Println("Proxy detected - block or flag this request.")
    } else {
        fmt.Println("No proxy detected.")
    }
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import org.json.JSONObject;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://vpnapi.io/api/IP_ADDRESS?key=YOUR_API_KEY"))
    .build();

HttpResponse<String> response = client.send(
    request, HttpResponse.BodyHandlers.ofString()
);
JSONObject data = new JSONObject(response.body());
boolean isProxy = data.getJSONObject("security").getBoolean("proxy");

if (isProxy) {
    System.out.println("Proxy detected - block or flag this request.");
} else {
    System.out.println("No proxy detected.");
}
require 'net/http'
require 'json'

uri = URI('https://vpnapi.io/api/IP_ADDRESS?key=YOUR_API_KEY')
response = Net::HTTP.get(uri)
data = JSON.parse(response)

if data['security']['proxy']
  puts 'Proxy detected - block or flag this request.'
else
  puts 'No proxy detected.'
end
use serde::Deserialize;

#[derive(Deserialize)]
struct Security {
    proxy: bool,
}

#[derive(Deserialize)]
struct ApiResponse {
    security: Security,
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let url = "https://vpnapi.io/api/IP_ADDRESS?key=YOUR_API_KEY";
    let data: ApiResponse = reqwest::get(url).await?.json().await?;

    if data.security.proxy {
        println!("Proxy detected - block or flag this request.");
    } else {
        println!("No proxy detected.");
    }
    Ok(())
}
#include <iostream>
#include <curl/curl.h>
#include <nlohmann/json.hpp>

using json = nlohmann::json;

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* s) {
    s->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    std::string responseBody;

    curl_easy_setopt(curl, CURLOPT_URL,
        "https://vpnapi.io/api/IP_ADDRESS?key=YOUR_API_KEY");
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &responseBody);
    curl_easy_perform(curl);
    curl_easy_cleanup(curl);

    auto data = json::parse(responseBody);
    if (data["security"]["proxy"].get<bool>()) {
        std::cout << "Proxy detected." << std::endl;
    } else {
        std::cout << "No proxy detected." << std::endl;
    }
    return 0;
}
import Foundation

struct Security: Decodable {
    let proxy: Bool
}

struct ApiResponse: Decodable {
    let security: Security
}

let url = URL(string: "https://vpnapi.io/api/IP_ADDRESS?key=YOUR_API_KEY")!
let (data, _) = try await URLSession.shared.data(from: url)
let result = try JSONDecoder().decode(ApiResponse.self, from: data)

if result.security.proxy {
    print("Proxy detected - block or flag this request.")
} else {
    print("No proxy detected.")
}
import java.net.URL
import org.json.JSONObject

fun main() {
    val response = URL("https://vpnapi.io/api/IP_ADDRESS?key=YOUR_API_KEY")
        .readText()
    val data = JSONObject(response)
    val isProxy = data.getJSONObject("security").getBoolean("proxy")

    if (isProxy) {
        println("Proxy detected - block or flag this request.")
    } else {
        println("No proxy detected.")
    }
}
// Next.js API route - backend only (pages/api/check-proxy.js)
// Never call the vpnapi.io API directly from the browser.

export default async function handler(req, res) {
  const { ip } = req.query;

  const response = await fetch(
    `https://vpnapi.io/api/${ip}?key=YOUR_API_KEY`
  );
  const data = await response.json();

  res.status(200).json({
    isProxy: data.security.proxy,
  });
}

Try Our Proxy Detection Tool For Free

Enter any IP address in the search bar above and click search. Our proxy detection tool will check it against our database and return results instantly. No account is required for your first 100 lookups.

The free tier is ideal for developers evaluating the API or web admins who need occasional checks. For production use cases requiring higher volumes, a paid plan unlocks unlimited lookups, faster response times, and access to additional signals including VPN detection, Tor detection, and private relay detection. View our pricing page for plan details.

Proxy Detection FAQ

What is proxy detection?

Proxy detection is the process of identifying whether an IP address is routing traffic through a proxy server rather than connecting directly. Detection tools check IP addresses against databases of known proxy servers, open ports, and anonymization services to determine if a connection is being masked.

What is the difference between a proxy and a VPN?

Both proxies and VPNs route traffic through an intermediary server to mask the real IP address. The key difference is that a VPN encrypts all traffic at the operating system level, while a proxy typically works at the application level and may not encrypt traffic. For detection purposes, both can be identified using IP reputation data. Our API detects both. See our VPN detection tool for VPN-specific lookups.

How accurate is your proxy detector?

We cross-reference multiple public and private proxy lists, scan for open proxy ports, and automatically expire stale entries. Proxy IPs that have not appeared in any listing for over a year are removed to prevent false positives. No proxy detection service is 100% accurate since new proxies are created constantly, but our continuous update cycle keeps detection rates high.

Can proxy detection block legitimate users?

Yes, in rare cases. Some corporate networks, university networks, and ISPs route traffic through shared IPs that may appear in proxy lists. We recommend using proxy detection as one signal among several rather than an automatic hard block, particularly for consumer-facing applications where false positives carry a high cost.

What does your proxy detection API return?

The API returns a JSON response containing whether the IP is a known proxy, alongside additional network information such as ASN, country, and anonymization signals for VPN, Tor, and private relay. Full field documentation is on our API documentation page.

Do I need an account to use the proxy detection tool?

No account is needed for your first 100 lookups. After that, a free account gives you an API key to continue making requests under our free tier limits. Paid plans are available for higher volumes and production use. See our pricing page for details.

Can I detect proxies alongside VPNs and Tor in one API call?

Yes. Every API response includes proxy, VPN, Tor, and private relay signals in the same security object, so you can check all anonymization types in a single request without additional calls or overhead.

What is residential proxy detection?

Residential proxies route traffic through real consumer IP addresses, making them significantly harder to detect than datacenter proxies. They are commonly used for click fraud, ad verification bypass, AI crawling, and large-scale automation. We offer residential proxy detection as part of our enterprise plans. Contact us to learn more.

Icon