IP Geolocation API
Location, ISP, ASN and timezone for any IPv4 or IPv6 address, as JSON. Free to start, with no key and no sign-up.
- 45 requests a minute with no key
- 10,000 a month free with a key
- No overage charges, ever
- 99%+country accuracy
- < 1 mstypical lookup on our servers
- DailyGeoLite2 data refresh
- IPv4 + IPv6same response for both
What you get back
One request returns everything below. Every field in the docs is a field the API actually sends.
Location
location.country- Name, ISO codes, capital, calling code, currency, flag
location.region · city · postalCode- Subdivision, city and postcode where known
location.latitude · longitude- Approximate centre point
location.accuracyRadius- How far off it could be, in km
Network
connection.asn · as- Autonomous System number
connection.isp · org- Provider and organisation
connection.network- The CIDR block the IP belongs to
hostname- Reverse DNS name
Privacy flags
privacy.tor- Tor exit node
privacy.hosting- Datacenter or hosting address
ipInfo.isPublic · isPrivate · isReserved- Address classification
Time and locale
location.timezone- IANA zone, abbreviation, UTC offset, local time
location.continent- Continent
meta.databaseVersion- Which data build answered
Works in any language
It’s a plain HTTPS GET that returns JSON. No SDK needed. Send your key in the X-API-Key header, or leave it out for keyless requests.
curl -H "X-API-Key: YOUR_KEY" \
https://api.ipaddresstoday.com/api/v1/8.8.8.8const res = await fetch("https://api.ipaddresstoday.com/api/v1/8.8.8.8", {
headers: { "X-API-Key": "YOUR_KEY" }
});
const data = await res.json();
console.log(data.location.country.name);import requests
res = requests.get(
"https://api.ipaddresstoday.com/api/v1/8.8.8.8",
headers={"X-API-Key": "YOUR_KEY"},
)
print(res.json()["location"]["country"]["name"])using System.Text.Json;
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("X-API-Key", "YOUR_KEY");
var json = await http.GetStringAsync("https://api.ipaddresstoday.com/api/v1/8.8.8.8");
using var doc = JsonDocument.Parse(json);
Console.WriteLine(doc.RootElement
.GetProperty("location").GetProperty("country")
.GetProperty("name").GetString());$ch = curl_init("https://api.ipaddresstoday.com/api/v1/8.8.8.8");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-API-Key: YOUR_KEY"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = json_decode(curl_exec($ch), true);
echo $data["location"]["country"]["name"];package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.ipaddresstoday.com/api/v1/8.8.8.8", nil)
req.Header.Set("X-API-Key", "YOUR_KEY")
res, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
var data map[string]any
json.NewDecoder(res.Body).Decode(&data)
fmt.Println(data["location"].(map[string]any)["country"])
}require "net/http"
require "json"
uri = URI("https://api.ipaddresstoday.com/api/v1/8.8.8.8")
req = Net::HTTP::Get.new(uri)
req["X-API-Key"] = "YOUR_KEY"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
puts JSON.parse(res.body)["location"]["country"]["name"]What people build with it
Fraud and risk checks
Flag sign-ups or payments where the IP country doesn’t match the billing country, or that come from Tor or a datacenter.
location.country.code · privacy.*Localise automatically
Pre-select country, currency, language and timezone on forms and checkouts.
country.currency · timezone.idAnalytics enrichment
Add country, region and network to your own event data without a client-side tracker.
location.* · connection.ispRegional rules
Show region-specific content, pricing or notices where you’re required to.
location.country.codeSecurity logs
Enrich sign-in and audit logs with location and ASN to spot unusual access.
connection.as · location.cityNetwork tooling
Group traffic by ASN or network block for rate limiting and abuse handling.
connection.network · connection.asn
IP location is approximate. Use it to personalise and flag, not to identify people or make decisions about them on its own (see the Acceptable Use Policy).
Simple pricing, no surprises
Compare all plan features- Free$045/min keyless · 10K/month keyed2 keys · commercial use
- Starter$5 /mo150K requests/monthBatch lookups · email support
- Business$69 /mo10M requests/monthUnlimited keys · dedicated support
Go over your quota and you get an HTTP 429 until it resets. You are never billed for overage. Prices in USD; GST added for Australian customers.
How it compares
| Feature | IP Address Today | IPinfo | ipstack | ipgeolocation.io |
|---|---|---|---|---|
| Free requests without a key | 45 per minute | Not advertised | Not advertised | Not advertised |
| Free plan | 10,000/month, full data, commercial use | Unlimited, country + ASN only | 100/month, location only, no commercial use | 1,000 credits/day, for testing |
| Cheapest paid plan | US$5 for 150K | US$26 for 150K (Core) | US$12.99 for 50K | US$19 for 150K credits |
| Around 1M a month | US$19 for 1M (Pro) | Core tiers up to 5M, priced on their site | US$99.99 for 2M (Professional+) | US$79 for 1M credits (Pro) |
| Going over quota | Never billed, 429 instead | Billed (Core US$0.34 per 1K) | Overage fees apply | Optional overage, else 429 |
| Batch lookups | 100 per request (Starter+) | Batch API | Professional+ only | Paid plans, up to 50,000 |
| IPv6 | Yes | Yes | Yes | Yes |
Private by design
We don’t store the IP addresses you look up or send them to anyone. Lookups run on our own servers in Australia.
Privacy PolicySecure keys
Keys are hashed, can be scoped, set to expire and locked to your server IPs. Two-factor sign-in for your account.
SecurityErrors you can act on
Errors follow RFC 7807 problem+json, and every error type has a documented cause and fix.
Error referenceDeveloper FAQ
Do I need an API key?
How accurate is IP geolocation?
What happens when I hit my limit?
Does it support IPv6?
Can I use it commercially?
Can I cache results?
How fresh is the data?
Is it GDPR-friendly?
Start in under a minute
Call it right now with no key, or sign up for 10,000 free lookups a month.
curl https://api.ipaddresstoday.com/api/v1/ip