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"}Developer reference
https://get.geojs.io/v1Gotchas & limits
- The response shape flips depending on how you pass the IP: the path form `GET /v1/ip/geo/{ip}.json` returns a bare **object** (shown above), but the query form `GET /v1/ip/geo.json?ip=8.8.8.8` — even for a single address — returns a one-element **array** instead, because the `ip` query 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`/`longitude` are strings, not numbers (`"37.751"`, not `37.751`) — "due to historic reasons" per the docs, and confirmed on every live probe in this run.
- JSONP isn't `?callback=` on the `.json` route — that param is silently ignored there. It's a distinct `.js` file extension (`GET /v1/ip/geo.js?ip=8.8.8.8`), confirmed live to return `Content-Type: application/javascript` with the body wrapped in the default `geoip(...)` callback name, or a custom one via `?callback=myCallback`.
- Calling `GET /v1/ip/geo.json` with no `ip` param 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.json` and `/v1/ip.json` endpoints exist for lighter-weight lookups (just country, or just the bare IP) — reach for `/geo` only when you need the fuller location/ASN payload, since (per the docs) it's the one endpoint with no plain-text response variant.