instantgeo
instantgeo answers one question: where is the person making this request?
const geo = await fetch( 'https://api.instantgeo.info/v1/geo?key=ig_pk_yourkey').then((r) => r.json());
geo.country; // "ID"geo.countryName; // "Indonesia"geo.continent; // "AS"That is the whole API. One GET, JSON back.
The free tier is country-level. City, region, timezone, coordinates and postal code are on the paid plans — see plans.
What it is for
Calls come from your visitors’ browsers, embedded in your site. Currency and language defaults, shipping estimates, store locators, regional content, tax display, compliance banners.
It is not a lookup service for arbitrary IP addresses — there is no ?ip=
parameter. We tell you about the caller in front of you.
What that means for your key
Your publishable key is public. It sits in your page source where anyone can read it, and that is fine — the same way a Google Maps or Stripe publishable key is public. What protects it is the origin allowlist: a list of sites permitted to use it. A key without an allowlist is a key anyone can spend.
For servers and mobile apps, which send no Origin header, there is a separate
secret key type.
Start
- Quickstart — working in about a minute
- Origin allowlists — the thing that actually secures your key
- Caching — how to make this fast for your visitors
- API reference — every field
Honest notes
Our origin is in Jakarta, behind Cloudflare. Callers far from Southeast Asia see roughly 250–350ms on an uncached request. Caching is how you make that invisible, and it is the first thing worth setting up.
We run on a single server today and do not advertise a 99.9% SLA, because we cannot back one yet. Availability is best-effort. We would rather tell you that than publish a number we would have to walk back.