Free, unlimited IP Intelligence API
for geolocation, proxy, VPN & threat detection
Precise geolocation plus proxy, VPN, Tor and malicious IP detection — with IP reputation and risk scoring for every IPv4 and IPv6 address. Built for developers who move fast. No paywalls. No rate limits. Ever.
See the risk behind every website visit
Shield applies FindIP intelligence to the visits, signups, logins, leads and checkouts on your own website. Add a script or connect Cloudflare, then inspect what happened and decide how to respond.
Free Preview · Default fair-use quota of 10,000 events per site/day · Terms apply · Prefer no code? Connect Cloudflare instead
- Event Signup form submitted · 203.0.113.44 · Risk 78
- Reasons Hosting provider network · Recent IP rotation in the same session
- Outcome Your rule for this form asked the visitor for a challenge
Illustration with sample values, not live customer data.
The preview follows one user from signup to payment: Shield analyzes the signup and attaches a risk score, then detects a high-risk payment request and protects the website.
API or Shield?
Two ways to use the same intelligence. One FindIP account covers both.
I want IP intelligence inside my own application
- You do Query an IP from your code
- You get Structured geolocation, proxy, VPN, Tor, hosting and risk fields
- Setup An API key and one HTTP request
- Runs Wherever your code runs
I want to understand and manage activity on my website
- You do Install Shield on your site, then investigate what it records
- You get Visits, sessions and form activity with the reasons behind each risk signal
- Setup A script tag, the npm package, or a Cloudflare connection
- Runs In the browser, or at the Cloudflare edge
Calling the API does not populate Shield — Shield reports the traffic on a site where it is installed.
Read more: Risk scoring for signup & checkout API response fields Shield quickstart Cloudflare integration
Proxy, VPN, Tor & malicious IP detection in one API
From proxy detection and IP geolocation to malware C2 and IP reputation scoring — a comprehensive library of IP threat categories covering both IPv4 and IPv6, updated continuously.
Proxy
proxy
Our proxy detection API flags every proxy type at the network layer — HTTP, SOCKS4, SOCKS5 and residential proxy traffic — in real time.
HTTP proxy SOCKS4 proxy SOCKS5 proxy Residential proxy Learn moreVPN
vpn
A VPN detection API covering commercial and self-hosted VPN infrastructure — identify both entry and exit traffic.
VPN entry VPN exit Learn moreTor
tor
Tor detection API that flags Tor exit nodes and relays, distinguishing exit traffic from non-exit relays.
Tor exit Tor relay Learn moreRelay
relay
Identify privacy relay infrastructure — such as Apple iCloud Private Relay and DNS relays — distinct from traditional VPN or Tor paths.
Privacy relay DNS relayMalicious
malicious
Malicious IP detection with IP reputation and risk scoring, drawing on abuse, brute-force, botnet, malware C2, phishing, DDoS and credential-stuffing feeds.
Brute force Spam source Botnet Malware C2 Phishing DDoS Credential stuffing Web attack Learn moreHosting
hosting
Datacenter and hosting provider detection — separate co-location and bulk hosting from residential connections.
Datacenter Hosting provider Learn moreNetwork Services
network_services
Detect public DNS resolvers, DoH endpoints and infrastructure scanners — classify benign network tooling and reduce false positives.
Public DNS Public DoH Scanner Learn moreGeolocation
location · network · traits
Our IP geolocation API returns precise location and network attributes for any IPv4 or IPv6 address — from country down to city level, with ISP and connection metadata.
Country & ISO code City & subdivision Continent Latitude & longitude Time zone EU membership Weather code ISP Connection type IPv4 & IPv6 Learn moreUp and running in 3 steps
Start using the API completely free in just a few minutes.
Sign up free
Create your account with just an email address. No credit card. No commitments.
Get your API key
Your personal unlimited API key is instantly available on your dashboard after signup.
Start querying
Append the IP and your token to our base URL and you're live:
Integrate geolocation and risk intelligence
One REST endpoint returns location, network traits, and privacy/security intelligence in a single JSON response.
Country, city, coordinates, time zone, postal data, subdivisions, ISP, organization, and ASN.
A top-level intelligence object with verdict, risk score, VPN/proxy/Tor flags, hosting signals, and evidence.
Pass your token as ?token=.... Use returnIp=true when you want the looked-up IP echoed in the payload.
import requests
ip = '8.8.8.8' # Replace with the IP address to look up
token = 'YOUR_API_KEY' # Replace with your actual API key
response = requests.get(f'https://api.findip.net/{ip}/?token={token}')
data = response.json()
print('City: ', data['city']['names']['en'])
print('Country: ', data['country']['names']['en'])
print('Continent: ', data['continent']['code'])
print('Latitude: ', data['location']['latitude'])
print('Longitude: ', data['location']['longitude'])
print('Time Zone: ', data['location']['time_zone'])
print('ISP: ', data['traits']['isp'])
print('Connection: ', data['traits']['connection_type'])
print('ASN: ', data['traits']['autonomous_system_number'])
print('Verdict: ', data['intelligence']['summary']['verdict'])
print('Risk: ', data['intelligence']['risk']['score'], data['intelligence']['risk']['level'])
print('VPN: ', data['intelligence']['flags']['is_vpn'])
print('Proxy: ', data['intelligence']['flags']['is_proxy'])
print('Tor: ', data['intelligence']['flags']['is_tor'])
// Node.js — npm install node-fetch
const fetch = require('node-fetch');
const ip = '8.8.8.8'; // Replace with the IP address to look up
const token = 'YOUR_API_KEY'; // Replace with your actual API key
fetch(`https://api.findip.net/${ip}/?token=${token}`)
.then(res => res.json())
.then(data => {
console.log('City: ', data.city.names.en);
console.log('Country: ', data.country.names.en);
console.log('Continent: ', data.continent.code);
console.log('Latitude: ', data.location.latitude);
console.log('Longitude: ', data.location.longitude);
console.log('Time Zone: ', data.location.time_zone);
console.log('ISP: ', data.traits.isp);
console.log('ASN: ', data.traits.autonomous_system_number);
console.log('Verdict: ', data.intelligence.summary.verdict);
console.log('Risk: ', data.intelligence.risk.score, data.intelligence.risk.level);
console.log('VPN: ', data.intelligence.flags.is_vpn);
console.log('Proxy: ', data.intelligence.flags.is_proxy);
console.log('Tor: ', data.intelligence.flags.is_tor);
})
.catch(console.error);
using System.Net.Http;
using System.Text.Json;
var ip = "8.8.8.8"; // Replace with the IP address to look up
var token = "YOUR_API_KEY"; // Replace with your actual API key
using var client = new HttpClient();
var json = await client.GetStringAsync(
$"https://api.findip.net/{ip}/?token={token}");
using var doc = JsonDocument.Parse(json);
var root = doc.RootElement;
Console.WriteLine($"City: {root.GetProperty("city").GetProperty("names").GetProperty("en").GetString()}");
Console.WriteLine($"Country: {root.GetProperty("country").GetProperty("names").GetProperty("en").GetString()}");
Console.WriteLine($"Continent: {root.GetProperty("continent").GetProperty("code").GetString()}");
Console.WriteLine($"Latitude: {root.GetProperty("location").GetProperty("latitude").GetDouble()}");
Console.WriteLine($"Longitude: {root.GetProperty("location").GetProperty("longitude").GetDouble()}");
Console.WriteLine($"Time Zone: {root.GetProperty("location").GetProperty("time_zone").GetString()}");
Console.WriteLine($"ISP: {root.GetProperty("traits").GetProperty("isp").GetString()}");
Console.WriteLine($"ASN: {root.GetProperty("traits").GetProperty("autonomous_system_number").GetInt32()}");
var intelligence = root.GetProperty("intelligence");
Console.WriteLine($"Verdict: {intelligence.GetProperty("summary").GetProperty("verdict").GetString()}");
Console.WriteLine($"Risk: {intelligence.GetProperty("risk").GetProperty("score").GetInt32()} {intelligence.GetProperty("risk").GetProperty("level").GetString()}");
Console.WriteLine($"VPN: {intelligence.GetProperty("flags").GetProperty("is_vpn").GetBoolean()}");
Console.WriteLine($"Proxy: {intelligence.GetProperty("flags").GetProperty("is_proxy").GetBoolean()}");
Console.WriteLine($"Tor: {intelligence.GetProperty("flags").GetProperty("is_tor").GetBoolean()}");
<?php
$ip = '8.8.8.8'; // Replace with the IP address to look up
$token = 'YOUR_API_KEY'; // Replace with your actual API key
$url = "https://api.findip.net/{$ip}/?token={$token}";
$response = file_get_contents($url);
$data = json_decode($response, true);
echo 'City: ' . $data['city']['names']['en'] . PHP_EOL;
echo 'Country: ' . $data['country']['names']['en'] . PHP_EOL;
echo 'Continent: ' . $data['continent']['code'] . PHP_EOL;
echo 'Latitude: ' . $data['location']['latitude'] . PHP_EOL;
echo 'Longitude: ' . $data['location']['longitude'] . PHP_EOL;
echo 'Time Zone: ' . $data['location']['time_zone'] . PHP_EOL;
echo 'ISP: ' . $data['traits']['isp'] . PHP_EOL;
echo 'ASN: ' . $data['traits']['autonomous_system_number'] . PHP_EOL;
echo 'Verdict: ' . $data['intelligence']['summary']['verdict'] . PHP_EOL;
echo 'Risk: ' . $data['intelligence']['risk']['score'] . ' ' .
$data['intelligence']['risk']['level'] . PHP_EOL;
echo 'VPN: ' . ($data['intelligence']['flags']['is_vpn'] ? 'true' : 'false') . PHP_EOL;
echo 'Proxy: ' . ($data['intelligence']['flags']['is_proxy'] ? 'true' : 'false') . PHP_EOL;
echo 'Tor: ' . ($data['intelligence']['flags']['is_tor'] ? 'true' : 'false') . PHP_EOL;
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
ip := "8.8.8.8" // Replace with the IP address to look up
token := "YOUR_API_KEY" // Replace with your actual API key
resp, _ := http.Get(fmt.Sprintf("https://api.findip.net/%s/?token=%s", ip, token))
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]interface{}
json.Unmarshal(body, &data)
city := data["city"].(map[string]interface{})["names"].(map[string]interface{})["en"]
country := data["country"].(map[string]interface{})["names"].(map[string]interface{})["en"]
location := data["location"].(map[string]interface{})
traits := data["traits"].(map[string]interface{})
intel := data["intelligence"].(map[string]interface{})
summary := intel["summary"].(map[string]interface{})
risk := intel["risk"].(map[string]interface{})
flags := intel["flags"].(map[string]interface{})
fmt.Println("City: ", city)
fmt.Println("Country: ", country)
fmt.Println("Continent: ", data["continent"].(map[string]interface{})["code"])
fmt.Println("Latitude: ", location["latitude"])
fmt.Println("Longitude: ", location["longitude"])
fmt.Println("Time Zone: ", location["time_zone"])
fmt.Println("ISP: ", traits["isp"])
fmt.Println("ASN: ", traits["autonomous_system_number"])
fmt.Println("Verdict: ", summary["verdict"])
fmt.Println("Risk: ", risk["score"], risk["level"])
fmt.Println("VPN: ", flags["is_vpn"])
fmt.Println("Proxy: ", flags["is_proxy"])
fmt.Println("Tor: ", flags["is_tor"])
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import org.json.JSONObject;
public class FindIPExample {
public static void main(String[] args) throws Exception {
String ip = "8.8.8.8"; // Replace with the IP address to look up
String token = "YOUR_API_KEY"; // Replace with your actual API key
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.findip.net/" + ip + "/?token=" + token))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
JSONObject data = new JSONObject(response.body());
System.out.println("City: " + data.getJSONObject("city").getJSONObject("names").getString("en"));
System.out.println("Country: " + data.getJSONObject("country").getJSONObject("names").getString("en"));
System.out.println("Continent: " + data.getJSONObject("continent").getString("code"));
System.out.println("Latitude: " + data.getJSONObject("location").getDouble("latitude"));
System.out.println("Longitude: " + data.getJSONObject("location").getDouble("longitude"));
System.out.println("Time Zone: " + data.getJSONObject("location").getString("time_zone"));
System.out.println("ISP: " + data.getJSONObject("traits").getString("isp"));
System.out.println("ASN: " + data.getJSONObject("traits").getInt("autonomous_system_number"));
JSONObject intelligence = data.getJSONObject("intelligence");
System.out.println("Verdict: " + intelligence.getJSONObject("summary").getString("verdict"));
System.out.println("Risk: " + intelligence.getJSONObject("risk").getInt("score") + " " +
intelligence.getJSONObject("risk").getString("level"));
System.out.println("VPN: " + intelligence.getJSONObject("flags").getBoolean("is_vpn"));
System.out.println("Proxy: " + intelligence.getJSONObject("flags").getBoolean("is_proxy"));
System.out.println("Tor: " + intelligence.getJSONObject("flags").getBoolean("is_tor"));
}
}
require 'net/http'
require 'json'
ip = '8.8.8.8' # Replace with the IP address to look up
token = 'YOUR_API_KEY' # Replace with your actual API key
uri = URI("https://api.findip.net/#{ip}/?token=#{token}")
data = JSON.parse(Net::HTTP.get(uri))
puts "City: #{data['city']['names']['en']}"
puts "Country: #{data['country']['names']['en']}"
puts "Continent: #{data['continent']['code']}"
puts "Latitude: #{data['location']['latitude']}"
puts "Longitude: #{data['location']['longitude']}"
puts "Time Zone: #{data['location']['time_zone']}"
puts "ISP: #{data['traits']['isp']}"
puts "ASN: #{data['traits']['autonomous_system_number']}"
puts "Verdict: #{data['intelligence']['summary']['verdict']}"
puts "Risk: #{data['intelligence']['risk']['score']} #{data['intelligence']['risk']['level']}"
puts "VPN: #{data['intelligence']['flags']['is_vpn']}"
puts "Proxy: #{data['intelligence']['flags']['is_proxy']}"
puts "Tor: #{data['intelligence']['flags']['is_tor']}"
import java.net.URL
import org.json.JSONObject
fun main() {
val ip = "8.8.8.8" // Replace with the IP address to look up
val token = "YOUR_API_KEY" // Replace with your actual API key
val json = URL("https://api.findip.net/$ip/?token=$token").readText()
val data = JSONObject(json)
println("City: ${data.getJSONObject("city").getJSONObject("names").getString("en")}")
println("Country: ${data.getJSONObject("country").getJSONObject("names").getString("en")}")
println("Continent: ${data.getJSONObject("continent").getString("code")}")
println("Latitude: ${data.getJSONObject("location").getDouble("latitude")}")
println("Longitude: ${data.getJSONObject("location").getDouble("longitude")}")
println("Time Zone: ${data.getJSONObject("location").getString("time_zone")}")
println("ISP: ${data.getJSONObject("traits").getString("isp")}")
println("ASN: ${data.getJSONObject("traits").getInt("autonomous_system_number")}")
val intelligence = data.getJSONObject("intelligence")
println("Verdict: ${intelligence.getJSONObject("summary").getString("verdict")}")
println("Risk: ${intelligence.getJSONObject("risk").getInt("score")} ${intelligence.getJSONObject("risk").getString("level")}")
println("VPN: ${intelligence.getJSONObject("flags").getBoolean("is_vpn")}")
println("Proxy: ${intelligence.getJSONObject("flags").getBoolean("is_proxy")}")
println("Tor: ${intelligence.getJSONObject("flags").getBoolean("is_tor")}")
}
Frequently Asked Questions
Can't find the answer you're looking for? Contact us — we reply fast.
@findip/shield from npm or add one script tag to see VPN, proxy, Tor, hosting, malicious-IP, and network-rotation signals alongside risk recommendations. The default fair-use quota is 10,000 events per site each day; Shield provides informational signals and does not automatically enforce decisions.