Geocoding — entry 026 of 80

GeoJS

Verified Jul 2026

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.

ip-geolocationno-authfreejsonpcors-enabled
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSON, JSONPResponses can be requested as JSON or JSONP.

GreatAPIs Score

Score94out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs14/20Documentation URL provided
Formats15/15Supports 2 response formats
Freshness20/20Verified within 6 months

Embed this badge

Scored 94 on greatapis.com
<a href="https://greatapis.com/api/geojs/"><img src="https://greatapis.com/badge/geojs.svg" alt="Scored 94 on greatapis.com"></a>

Auth quickstart

  1. 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.
Stored keyNo key stored

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

200 application/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

Base URLhttps://get.geojs.io/v1

Gotchas & 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.