"Where's this user from?" almost always means "what country," not a street address. You can get that from their IP in one call.
The request
curl https://countries.dev/ip/8.8.8.8{
"ip": "8.8.8.8",
"countryCode": "US",
"country": { "name": "United States of America", "flag": "🇺🇸", "currencies": [{ "code": "USD", "symbol": "$" }] }
}Notice the country object. Most IP APIs hand you a bare "US" and leave the rest to you. This returns the whole record, so you can show a flag, default a currency, or preselect a country without a second request.
Detect the caller
Drop the IP and it geolocates whoever's asking:
const { country } = await fetch("https://countries.dev/ip").then((r) => r.json());
console.log(`Hi from ${country.name} ${country.flag}`);Call it server-side where you can read the real client IP — behind a proxy or CDN that's the forwarded address. In the browser it still works; it just resolves the user's own connection, which is usually the point.
A note on accuracy
This is country-level geolocation: right the large majority of the time, but it's an IP guess, not GPS. Don't gate anything legally sensitive on it. For city- or network-level detail, reach for a dedicated provider. For "show the right flag and currency," it's plenty.
See it live on the IP geolocation API page, or read the geolocation docs.
Written by
Dov Azencot
At
Fri Jun 19 2026