# GetIPIntel
> GetIPIntel is a free, fast, and remarkably accurate IP intelligence to detect proxies, VPNs, hosting providers, TOR exit nodes, and bad IPs using machine learning and probability theory. Returns a score from `0` to `1` that tells you how suspicious an IP address is. The API is trivial to integrate and includes **residential proxy detection** (`oflags=r`). Use it to fight fraud, block abuse, stop fake sign-ups, protect content, and prevent automated attacks.
## Quick Facts
- **Pricing:** Completely free for up to 500 queries/day and 15 queries/minute. Custom paid plans are available if you need more.
- **Core Idea:** Given an IP address, the service returns a score `0` to `1`. A score of `1` means the IP is **explicitly banned** (web host, VPN, or TOR node). Scores between `0` and `1` are inferred through machine learning and dynamic checks.
- **Residential Proxy Detection:** Append `&oflags=r` to any request to include residential proxy intelligence from Layer3Intel. The JSON response will include a `ResidentialProxy` score (0-1). This feature is currently in beta and supports IPv4.
- **Scale:** The system serves millions of API requests per week and is used by gaming communities, e-commerce sites, universities, law enforcement, and large financial institutions.
## When to Use It
- **Prevent Fraud** - Block fraudulent transactions and protect payment gateways.
- **Stop Abuse** - Prevent promo code abuse, multiple sign-ups, affiliate fraud, and spam.
- **Protect Content** - Stop crawlers, scrapers, and content thieves.
- **Harden Security** - Block XSS, SQLi, brute force, and other automated attacks.
- **Eliminate Fake Activity** - Reduce fake clicks, views, and ad fraud.
- **Enforce Bans** - Stop trolls and users who try to bypass bans with proxies or VPNs.
## API Basics
| Element | Detail |
|---------|--------|
| **Endpoint** | `http://check.getipintel.net/check.php` |
| **Method** | `GET` (pass parameters as query string) |
| **Required params** | `ip` - the IP to check (IPv4 fully supported, IPv6 partial)
`contact` - your email address (no URL-encoding) |
| **Optional params** | `flags` - lookup mode (`m`, `b`, `f`, `n`)
`oflags` - extra output (`b`, `c`, `i`, `a`, `r`)
`format` - set to `json` for structured output |
| **Response** | Plain text: a number `0`-`1` (success) or a negative number (error)
JSON: object with `status`, `result`, and extra fields |
## Flag Reference
### Lookup Modes (`flags`)
| Flag | Description | Response time | Best for |
|------|-------------|---------------|----------|
| `flags=m` | Dynamic ban lists only (fastest, fewest false positives) | <60 ms | Starting point; only care about known proxies/VPNs |
| `flags=b` | Dynamic ban lists + dynamic checks + partial bad-IP check | <130 ms | Catching more proxies without the full bad-IP check |
| *(no flag)* | Default full check (background jobs may require a second query) | <130 ms | Balance of speed and completeness |
| `flags=f` | Force full lookup (waits for all checks) | up to 5 s | Non-real-time applications; most thorough |
| Append `n` | Exclude real-time block list (e.g., `flags=nm`) | - | When you want to skip the real-time list |
### Extra Output (`oflags`)
| Flag | What it adds | Output |
|------|--------------|--------|
| `oflags=b` | Bad IP flag | `0` or `1` (JSON: `"BadIP"`) |
| `oflags=c` | Country (ISO-3166 format) | `"US"`, `"DE"`, etc. (JSON: `"Country"`) |
| `oflags=i` | iCloud Relay / Google One VPN detection | JSON: `"iCloudRelayEgress"`, `"GoogleOneVPN"`, `"VPNType"` |
| `oflags=a` | ASN number(s) | JSON: `"ASN"` |
| `oflags=r` | Residential proxy detection | JSON: `"ResidentialProxy"` score 0-1 |
## Interpreting the Score
- **> 0.99** - Almost certainly a proxy/VPN. Automated blocking is usually safe.
- **0.95 - 0.99** - Very suspicious; manual review recommended.
- **0.90 - 0.95** - Possibly a proxy; investigate further.
- **< 0.90** - Low risk.
For most use-cases, only act on scores **> 0.99** or **> 0.995**. Always test with your own traffic first.
## Code Examples
### cURL (basic)
curl "http://check.getipintel.net/check.php?ip=66.228.119.72&contact=you@example.com"
# Returns a number, e.g.: 1
### cURL with JSON and flags
curl "http://check.getipintel.net/check.php?ip=66.228.119.72&contact=you@example.com&flags=m&format=json"
Response:
{
"status": "success",
"result": "1",
"queryIP": "66.228.119.72",
"queryFlags": "m",
"queryFormat": "json",
"contact": "you@example.com"
}
*(Example from the official API docs)*
### cURL with Residential Proxy Detection
curl "http://check.getipintel.net/check.php?ip=66.228.119.72&contact=you@example.com&oflags=r&format=json"
The JSON response will include `"ResidentialProxy"` with a score from `0` to `1`.
### PHP
$ip = '66.228.119.72';
$contact = 'you@example.com';
$url = "http://check.getipintel.net/check.php?ip=$ip&contact=$contact&flags=m&format=json";
$response = file_get_contents($url);
$data = json_decode($response, true);
if ($data['status'] === 'success' && (float)$data['result'] > 0.99) {
// Block or flag the IP
}
### Python
import requests
url = "http://check.getipintel.net/check.php"
params = {
"ip": "66.228.119.72",
"contact": "you@example.com",
"flags": "m",
"format": "json"
}
resp = requests.get(url, params=params)
data = resp.json()
if data["status"] == "success" and float(data["result"]) > 0.99:
# Take action
pass
### JavaScript (Node.js)
const http = require('http'); // or 'https'
http.get('http://check.getipintel.net/check.php?ip=66.228.119.72&contact=you@example.com&flags=m&format=json', (res) => {
let body = '';
res.on('data', chunk => body += chunk);
res.on('end', () => {
const data = JSON.parse(body);
if (data.status === 'success' && parseFloat(data.result) > 0.99) {
// Block or flag the IP
}
});
});
## Error Codes
| Code | Meaning |
|------|---------|
| `-1` | No input provided |
| `-2` | Invalid IP address |
| `-3` | Unroutable / private address |
| `-4` | Database unreachable (likely being updated) |
| `-5` | Your IP is banned or you lack permission |
| `-6` | Missing or invalid contact email |
When rate-limited, the server returns HTTP `429`. Always implement exception handling for timeouts, `429`, and the negative error codes.
## Rate Limits & Caching
- **Free tier:** 500 queries/day, 15 queries/minute. Burst protection is in place.
- **Caching:** You may cache results, but do not cache a score for more than **6 hours**—the internet changes quickly.
- **Custom plans:** If you need higher limits, contact `getipintel@gmail.com`. Custom packages are usually much cheaper than competing paid services.
## Important Rules
1. **Always include a valid, monitored email** in the `contact` parameter. Queries without accurate contact info are rejected or dropped by the firewall.
2. **Do not URL-encode** the `ip` or `contact` parameters.
3. **Do not look up random IPs** or scan incrementally—the database updates constantly, so stale data wastes resources.
4. **Do not sell** the service or its data without explicit permission.
5. **Attribute** GetIPIntel if you reuse its data.
6. **Start with `flags=m`** when you only need proxy/VPN detection. It's the fastest option with the fewest false positives.
## Why It's Better Than Simple Block-List Services
Many services only check IPs against static block-lists. If an IP isn't on the list, they assume it's safe—a logical fallacy. GetIPIntel uses **machine learning and probability theory** to infer whether an IP is suspicious, even if it has never been seen before. Billions of new records are parsed each month, and old records automatically expire.
---
*Generated from the official documentation at [getipintel.net](https://getipintel.net) and the [API page](https://getipintel.net/free-proxy-vpn-tor-detection-api).*