IP risk lookup
Identify proxy, VPN, dial-up pool, cloud phone and datacenter addresses. Returns a risk score, network ownership and city-level geolocation (district level for Chinese addresses). Risk data refreshes every 10 seconds.
Risk signals
| Signal | Verdict | Last seen |
|---|
Network
Location
Proxy addresses captured just now
A sample of proxy, VPN, dial-up pool and cloud phone addresses the risk feed captured in the last few minutes, refreshed every 30 seconds. The score answers a different question — how strong the currently verifiable evidence is, decaying as it ages. “Captured just now” and “score is not high” can both be true. Click any row to look it up.
Five capabilities
One consistent stance: every answer is a judgement that expires, not a permanent label.
IP ranges and risk mix by country
Address-range ownership broken out by country and region, the residential/datacenter mix, the main operators and ASNs, and how many proxy-type addresses we captured recently. Refreshed daily with the geolocation database.
All 244 countries and regions →
Not sure how to read these signals? How to detect a proxy, VPN or datacenter IP — what each signal means, and what it cannot tell you.
Three concept pages go into that in more detail: what your public IP address is, how IP location is worked out and how accurate it is, and what an IP address lookup can and cannot answer.
Developer API
The same profiling capability, callable from your own risk system. Try it without registering; sign in to create a key and raise the limit.
https://ip99.com/v1/ip/{ip}# No key needed (anonymous allowance)
curl https://ip99.com/v1/ip/8.8.8.8
# With a key you create yourself, the allowance is per account
curl -H "X-API-Key: YOUR_KEY" https://ip99.com/v1/ip/8.8.8.8
To ask what the risk state was at a past moment (post-incident review, chargeback arbitration),
use ?at= on the Pulse endpoint:
GET /pulse/v1/ip/{ip}?at=2026-08-26T13:34:36Z (RFC3339, up to 30 days back;
the returned computed_at is exactly the moment you asked for). The profile endpoint
on this page answers for now only and does not accept at.
Pulse is professional-tier only: without a professional key it answers
403 professional_required, while the free profile stays open at /v1/ip;
for history, contact sales.
How to read the fields — especially a score of 0
The response contains no Chinese. Place names, usage types and risk types come back as standard codes or stable slugs, so your parsing layer never has to deal with Chinese text.
| Field | What it means |
|---|---|
risk.score | 0–100. The freshness and strength of verifiable risk evidence, decaying as that evidence ages. It is not a probability that the address is an attacker. Same source and same value as score on /pulse/v1/ip — one address, one score. |
risk.level | high / medium / low / none, derived from risk.score (0=none, 1–29=low, 30–69=medium, 70–100=high). none means we hold no currently verifiable evidence — not that the address is safe. Know that before you allow on a 0. |
computed_at | The moment this score was computed for. Scores decay with evidence age, so which moment was scored is part of what makes the answer checkable: the same address scoring differently a few hours apart is normal. |
evidence_state | active: fresh evidence that still scores. stale: seen before, but past its freshness window and scoring 0 — usable as a weak signal, not as a blocking reason on its own. none: never seen — possibly a coverage gap, and not the same as safe. Route on this field rather than on the score alone. |
risk.signals | An array of matched signal slugs, sorted alphabetically; the key is absent when nothing matched (risk then carries score and level alone). hosting / mobile are derived from the network usage type and are not risks in themselves. Per-evidence detail and capture timestamps are on the Pulse endpoint. |
network / geo | Address ownership, in the same shape as the professional tier of /pulse/v1/ip: network.asn, network.usage_type (the scene code, passed through as-is, e.g. IDC/DYN/MOB/GTW/EDU/GOV/CDN/ORG/DNS/NET/BOGON; the full list and the per-field reference are in network and geo); geo.continent (AS/EU/NA/SA/AF/OC/AN), geo.country (ISO 3166-1 alpha-2), geo.region / geo.city / geo.district (Latin names of the administrative area, region and city returned for addresses in every country, China included; district present for addresses in China only — the place-name database covers China down to the county/district level and other countries down to the city; a name the database does not have makes the key absent, and an absent key means "not in the database", not 0), geo.lat/lon/tz. Chinese addresses also carry geo.subdivision (ISO 3166-2) and geo.admin_code (GB/T 2260, six digits, down to district). Operator names are not returned — the machine-readable identity is asn, which you can resolve against the public registries. |
| Tier | Daily allowance | How to get it |
|---|---|---|
| Anonymous | — | Just call it, no key needed |
| Free account | — | Sign in and create an API key |
| Professional | Custom | Adds days observed and a resource-pool handle (an anonymous handle: stable within your account, not joinable across accounts) on top of the free fields, and lets you score against a past moment. Capture timestamps require a data-processing agreement. Contact sales to enable |
| Enterprise | Custom | Contact sales |
Web lookups and API calls share one daily allowance — counted per public IP when anonymous, per account once signed in. The professional tier is a data tier and is independent of the quota tier: enterprise does not automatically include professional fields. All of the above means calling our public service; if the data must never leave your own machines, see Tide or Pulse self-hosted (each priced separately).
FAQ
What is IP99?
An IP risk and geolocation service: for any IPv4 or IPv6 address it returns whether the address is currently proxy, VPN, dial-up pool, cloud phone or datacenter infrastructure, how fresh that evidence is, and the network and city-level location it belongs to (the district for Chinese addresses). It is available as a free lookup on this page, a JSON API and an MCP tool.
Is it free?
The lookup and the API are free without a key or signup: 500 lookups per day per client IP and 60 per minute. A free account raises that to 5000 per day; higher volumes, phone-number risk profiles and self-hosted deployment are on the pricing page.
How is this different from an IP reputation list?
A list gives you a label that stays true forever; IP99 gives you a judgement that expires. Every verdict carries the age of the evidence behind it, and the score decays as that evidence ages, so an address rented as a proxy exit last week is not still blamed for it today.
Does a score of 0 mean safe?
No. 0 means no current evidence, which is not the same thing. Branch on evidence_state: active, stale or none. See what an IP risk score means.
Can an AI agent use it?
Yes. The same lookup is a Model Context Protocol tool, ip_risk_lookup, at https://ip99.com/mcp: read-only, no key required for the free allowance.
Contact sales
Higher allowances, self-hosted deployment or custom labels — leave your details and we will get back to you.