IP Geolocation API. Free.

Take an IPv4 or IPv6 address and get country, region, city, coordinates, timezone, ASN plus Whois/RDAP data (netname, organisation, abuse contact) back. Try it instantly without signup, or grab an API key.

IPv4 + IPv6

Both address families with full location and ASN information.

5,000 lookups / day for free

No credit card required. Full geo + ASN data. Perfect for hobby projects and side-hustles.

10 req/minute · 5,000 req/day

Whois / RDAP included

Org name, netname, abuse contact — worldwide, cached for speed.

Admin & Portal

Manage your own keys and inspect usage — all in the portal.

Loading your IP info…

What is the API used for?

Typical use-cases of our customers

Fraud prevention & risk scoring

Detect suspicious logins from unusual countries, block bot traffic from hosting networks by ASN, validate orders against the shipping address.

Compliance & geo-blocking

Restrict content to allowed countries (GDPR, licensing regions, sanctions like OFAC). With precise country/region detection — no over-blocking.

Web analytics & personalisation

Show visitors prices in their local currency, route them to the right language variant, segment reports by geographic origin.

Abuse handling & DevOps

With Whois/RDAP data you find the abuse contact for any IP — perfect for spam reports, DDoS mitigation, and incident response.

How it works

From signup to your first lookup in 4 steps

  1. 1

    Create an account

    Sign up for free with email. No credit card. Verification link in your inbox.

  2. 2

    Get an API key

    Create a key with one click in the portal. Put it in the X-API-Key header of your requests.

  3. 3

    Run a lookup

    GET /v1/lookup/{ip} returns JSON with country, city, coordinates, ASN, provider. Sub-50ms response from EU datacenters.

  4. 4

    Scale

    For more volume: batch endpoint (up to 100 IPs/request) or plan upgrade. Whois/RDAP data is included in all plans.

How we compare

What sets us apart from other providers

GeoIPsTypical competitor
Free plan5,000 lookups / day1,000 / day or less
Whois / RDAP includedYes, in all plansSeparate add-on
Batch lookupsUp to 100 IPs / requestOften single calls only
GDPR compliantEU hosting (DE/AT)Often US-hosted
Pricing modelFlat monthly ratePay-per-call can get expensive

Country flags & emojis

Every API response includes the flag emoji plus a direct SVG URL — ready to embed.

Examples

DEde
USus
JPjp
BRbr
INin
CHch
FRfr
ZAza

Emoji in JSON

The `flag` field carries the Unicode flag emoji. Renders natively in modern browsers, iOS, Android — no extra image assets.

SVG URL included

The `flag_url` field points to a hosted SVG. Scales losslessly, perfect for PDFs, emails and older browsers without emoji font.

271 countries

All ISO 3166-1 alpha-2 country codes available. URL pattern: /flags/<code>.svg (lowercase).

Included in all plans

Free, Starter, Business, Enterprise — all get the same flag data at no extra cost.

Embed directly

<img src="https://geoips.info/flags/de.svg" alt="DE" width="32" height="24">

URL pattern: https://geoips.info/flags/<code>.svg

API docs

All endpoints require a valid API key in the X-API-Key header.

GET/v1/lookup/{ip}
user@geoips:~$cat example.sh
curl -H "X-API-Key: $KEY" https://api.geoips.info/v1/lookup/8.8.8.8
Example response:
user@geoips:~$cat response.json
{
  "ip": "8.8.8.8",
  "ip_version": 4,
  "country_code": "US",
  "country_name": "United States of America",
  "flag": "🇺🇸",
  "flag_url": "https://geoips.info/flags/us.svg",
  "region": "California",
  "city": "Mountain View",
  "latitude": 37.40599,
  "longitude": -122.07852,
  "zip": "94043",
  "timezone": "-08:00",
  "asn": 15169,
  "as": "Google LLC",
  "cidr": "8.8.8.0/24"
}
GET/v1/lookup/self

Returns geo information for your own client IP.

user@geoips:~$cat example.sh
curl -H "X-API-Key: $KEY" https://api.geoips.info/v1/lookup/self
POST/v1/lookup/batch

Up to 100 IPs per call (your plan cap may be lower - see pricing). Body max 64 KB. Each IP counts as 1 lookup against your shared daily limit (single + batch share the same pool).

user@geoips:~$cat example.sh
curl -X POST -H "X-API-Key: $KEY" -H "Content-Type: application/json" \
  -d '{"ips":["1.1.1.1","2606:4700:4700::1111"]}' \
  https://api.geoips.info/v1/lookup/batch
Example response:
user@geoips:~$cat response.json
{ "results": [ { "ip": "1.1.1.1", ... }, { "ip": "...", "ip_version": 6, ... } ] }
GET/v1/lookup/:ip/whois

Whois/RDAP data for the IP (netname, organisation, abuse contact, country, ASN). Served from a cache populated across all 5 RIRs (RIPE/ARIN/APNIC/LACNIC/AFRINIC). First call for an unknown IP returns 202 Accepted + pending=true; the fetch runs in the background and data is available on the next request.

user@geoips:~$cat example.sh
curl -H "X-API-Key: $KEY" https://api.geoips.info/v1/lookup/8.8.8.8/whois
Example response:
user@geoips:~$cat response.json
{
  "ip": "8.8.8.8",
  "cached": true,
  "whois": {
    "cidr": "8.8.8.0/24",
    "netname": "GOOGLE",
    "country": "US",
    "flag": "🇺🇸",
    "flag_url": "https://geoips.info/flags/us.svg",
    "org_name": "Google LLC",
    "abuse_email": "network-abuse@google.com",
    "source": "arin",
    "fetched_at": "2026-05-27T10:00:00Z"
  }
}
GET/v1/health

Reachable without an API key. For uptime monitoring.

user@geoips:~$cat example.sh
curl https://api.geoips.info/v1/health
GET/v1/limits

Effective plan limits + currently remaining quota for the key — for self-throttling (clients/monitoring).

user@geoips:~$cat example.sh
curl -H "X-API-Key: $KEY" https://api.geoips.info/v1/limits
Example response:
user@geoips:~$cat response.json
{
  "plan": { "code": "hobby", "name": "Hobby" },
  "rate_limit_per_min": 300,
  "rate_limit_per_day": 1000000,
  "max_ips_per_batch": 100,
  "whois": { "enabled": true, "gating_mode": "all", "limit_per_day": 2000 },
  "remaining": { "per_min": 287, "per_day": 999812 }
}

Error codes

Every error response has status (HTTP code), often error_code (stable machine-readable code) and error (short description). For rate limits the Retry-After header is set.

HTTPerror_codeMeaning
400invalid_ipInvalid IP address in path (e.g. /v1/lookup/not-an-ip).
400private_ipPrivate/reserved IP range (10.x, 192.168.x, 127.x, ::1).
400invalid_bodyBody parse error on /v1/lookup/batch (empty IP list, more than 100 IPs in body, not JSON).
400batch_too_largeBatch contains more IPs than your plan allows per call (max_ips_per_batch). Split the batch or upgrade your plan.
401missing_api_keyX-API-Key header missing.
401invalid_api_keyAPI key does not exist, is revoked, or user is disabled.
413body_too_largeBatch body larger than 64 KB. Split into multiple batches.
429rate_limit_per_minutePer-minute rate limit reached (shared for single + batch). Retry-After header says how long to wait.
429rate_limit_per_dayDaily limit exhausted (max IPs/day). Single + batch count against the same pool. Resets at the UTC hour configured for your plan.
429whois_quota_exhaustedDaily whois quota exhausted (separate per-plan limit). Resets at the UTC hour configured for your plan.
403whois_plan_requiredWhois is a premium feature and not enabled for your current plan — upgrade to a paid plan.
202pendingNot an error but an intermediate status: whois data for this IP is not cached yet, the RDAP fetch is running in the background. The response includes pending=true and retry_after (seconds) — wait the indicated time and retry, then the endpoint returns 200 with the full data.
503maintenance_modePlatform in maintenance mode. Response includes maintenance_message + retry_after_seconds — wait the indicated time and retry.
503whois_disabledWhois lookup is disabled by the administrator.
500internal_errorServer error. Retry later or contact support.

Frequently asked questions

Is the API really free?▾

Yes. The Free plan gives you 5,000 lookups per day and 10 per minute, permanently free. No credit card needed. You only pay when you need more volume — paid plans start at €9 / month.

How accurate is the geolocation?▾

Country: ~99.8% accuracy. City: ~75% within a 50 km radius — industry standard. Data comes from MaxMind GeoLite2, updated weekly. Mobile carrier IPs (e.g. T-Mobile) have inherent imprecision — we return the region instead of the city in that case.

What data do I get back per IP?▾

IPv4 and IPv6 are treated equally. Per lookup: country (ISO code + name), region, city, postal code, coordinates, timezone, ASN, AS name. With the Whois/RDAP endpoint additionally: CIDR block, netname, organisation, and abuse contact straight from the RIRs.

Is Whois/RDAP included in all plans?▾

Yes, Whois is included in every plan from Free upwards. The data comes directly from the five regional internet registries (RIPE, ARIN, APNIC, LACNIC, AFRINIC) and is cached for 30 days — sub-millisecond response on second fetch.

What about GDPR and privacy?▾

Servers are in the EU (Germany and Austria). We log IP addresses short-term for anti-abuse only (90 days, then auto-deleted). DPA available on request. No tracking, no third-party data sharing.

What happens when I hit the daily limit?▾

You get HTTP 429 with a Retry-After header. The limit resets at a configurable UTC hour (default 00:00 UTC). Sub-limits (per minute, per day) are exposed via the X-RateLimit-Remaining response header.

Can I use the batch endpoint?▾

Yes. POST /v1/lookup/batch accepts up to 100 IPs per request, max 64 KB body. Each IP counts as one lookup against your daily limit. Free has a cap of 10 IPs/batch, paid plans 50–100 — see Pricing.

How fast is the response?▾

Single lookup typically below 30 ms (P50) from EU. Batch with 100 IPs below 100 ms. We use in-memory cache + binary IP range indexes instead of classical DB queries — no cold-start spikes.