Free · no key · HTTPS · CORS
Free IP geolocation API
Country, city, coordinates, time zone and network for any IPv4 or IPv6 address, as JSON. No key, no sign-up; 4,777 lookups in the last 24 hours.
curl -s https://geo.proxyspace.pro/ipEndpoints
All GET, all on https://geo.proxyspace.pro, all returning the same JSON object.
| /ip | Your own IP address (the one making the request) |
| /ip/{ip} | Any IPv4 or IPv6 address |
| /ipandport/{ip}:{port} | A proxy line as-is; the port is ignored |
| /domain/{domain} | The first A record of a domain |
| /ipheader | Your IP plus the request headers your client sent |
Response fields
| Field | Type | Meaning | Example |
|---|---|---|---|
| ip | string | The address that was looked up | "8.8.8.8" |
| country | string | Country name in English | "United States" |
| country_code | string | ISO 3166-1 alpha-2 code | "US" |
| city | string | null | Nearest city; approximate | "Mountain View" |
| latitude | number | null | Latitude of the city | 37.422 |
| longitude | number | null | Longitude of the city | -122.085 |
| time_zone | string | null | IANA time zone at that location | "America/Los_Angeles" |
| asn_number | number | null | Autonomous system number | 15169 |
| asn_organization | string | null | Organisation that holds the network | "Google LLC" |
| postal_code | string | null | Postal code, only where known | null |
Code examples
curl -s https://geo.proxyspace.pro/ip/8.8.8.8
// Works in the browser too: CORS is open to every origin.
const res = await fetch("https://geo.proxyspace.pro/ip/8.8.8.8");
const geo = await res.json();
console.log(geo.country_code, geo.city, geo.asn_organization);import requests
geo = requests.get("https://geo.proxyspace.pro/ip/8.8.8.8", timeout=10).json()
print(geo["country_code"], geo["city"], geo["asn_organization"])resp, err := http.Get("https://geo.proxyspace.pro/ip/8.8.8.8")
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
var geo struct {
CountryCode string `json:"country_code"`
City string `json:"city"`
ASN int `json:"asn_number"`
}
json.NewDecoder(resp.Body).Decode(&geo)
fmt.Println(geo.CountryCode, geo.City, geo.ASN)$geo = json_decode(file_get_contents("https://geo.proxyspace.pro/ip/8.8.8.8"), true);
echo $geo["country_code"] . " " . $geo["city"];Data, accuracy and fair use
The API looks addresses up in the DB-IP Lite city and ASN databases (CC BY 4.0), which are refreshed every month. Country data is reliable; city data is approximate and for mobile, VPN and cloud addresses usually points at the network rather than the person.
There is no key and no hard limit. Cache what you look up, and keep bulk jobs to a few requests per second. Looking up proxies? The per-country proxy lists are already sorted by country, and the IP blacklist check adds a risk score on top of the location.
More free endpoints, for proxy lists, IP ranges and ASN data, are on the API page.
IP geolocation API: questions
Is this IP geolocation API really free?
Yes. There is no key, no account and no paid tier. It has answered requests for free since 2023. Please use it fairly: cache results instead of looking up the same address again and again. For heavy or commercial use, get in touch.
How accurate is it?
The country is right for the vast majority of addresses. The city is an estimate: for mobile networks, VPNs and cloud servers it is often the location of the network, not of the person. No IP database can give a street address.
Where does the data come from?
Location and network come from the DB-IP Lite databases (CC BY 4.0), refreshed every month. The time zone is derived from the coordinates.
Does it support IPv6?
Yes. /ip/{ip} accepts IPv4 and IPv6 addresses, and /ip returns whichever address you connect with.
Can I call it from a web page?
Yes. It answers over HTTPS with Access-Control-Allow-Origin: *, so fetch() from any site works without a proxy. The What is my IP and IP lookup tools on this site use it that way.
What happens with private or unknown addresses?
Addresses that are not in the database, such as 192.168.x.x or 10.x.x.x, return a JSON object with an error field instead of a location.