Geocoding — entry 026 of 80
GeoJS
GeoJS is a free, no-signup IP geolocation lookup that returns country, city, ASN, and timezone data as JSON or JSONP over HTTPS with open CORS. It's built for simple client-side and ChatOps integrations rather than high-volume commercial traffic, and has no paid tier.
GeoJS is a free, no-signup IP geolocation lookup — resolve an IP to country, region, city, ASN, and timezone as JSON or JSONP, with no key and open CORS. Its own tagline is "Highly available REST/JSON/JSONP IP Geolocation lookup API," and ChatOps integration is a headline feature with its own docs section; the worked example on its homepage is a client-side JSONP snippet.
GreatAPIs Score
Auth quickstart
- No API key required — requests are public and keyless. Unusually, the provider publishes an explicit statement that there is no ceiling at all: "As it currently stands GeoJS has no rate limits and doesn't require any to be implemented. Should rate limits be required advanced warning will be given where possible" (geojs.io/docs/general/, under "Rate Limits"; the homepage feature list repeats it as "No rate limits (yet)"). That's a promise of advance notice, not a contractual guarantee — don't build something that breaks if it changes.
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Geolocate a single IP by path
GEThttps://get.geojs.io/v1/ip/geo/8.8.8.8.json
{"accuracy":1000,"area_code":"0","asn":15169,"continent_code":"NA","country":"United States","country_code":"US","country_code3":"USA","ip":"8.8.8.8","latitude":"37.751","longitude":"-97.822","organization":"AS15169 Google LLC","organization_name":"Google LLC","timezone":"America/Chicago"}Try it
Developer reference
https://get.geojs.io/v1- GET/ip.json
- GET/ip/geo.json
- GET/ip/country.json
Gotchas & limits
- The response shape flips depending on how you pass the IP: the path form
GET /v1/ip/geo/{ip}.jsonreturns a bare object (shown above), but the query formGET /v1/ip/geo.json?ip=8.8.8.8— even for a single address — returns a one-element array instead, because theipquery param is documented as accepting a comma-separated list (?ip=8.8.8.8,1.1.1.1) and always returns array-shaped results. Both forms confirmed live in this run. latitude/longitudeare strings, not numbers ("37.751", not37.751) — "due to historic reasons" per the docs, and confirmed on every live probe in this run.- JSONP isn't
?callback=on the.jsonroute — that param is silently ignored there. It's a distinct.jsfile extension (GET /v1/ip/geo.js?ip=8.8.8.8), confirmed live to returnContent-Type: application/javascriptwith the body wrapped in the defaultgeoip(...)callback name, or a custom one via?callback=myCallback. - Calling
GET /v1/ip/geo.jsonwith noipparam at all doesn't error — it geolocates the calling IP itself (confirmed live, returning the request's own public IP and location), which is convenient for client self-lookups but easy to trigger by accident if a caller forgets to interpolate the parameter. - Separate
/v1/ip/country.jsonand/v1/ip.jsonendpoints exist for lighter-weight lookups (just country, or just the bare IP) — reach for/geoonly when you need the fuller location/ASN payload, since (per the docs) it's the one endpoint with no plain-text response variant.