Search for "free IP geolocation API" and you'll find dozens of comparison posts. Most are written by one of the vendors, and many repeat limits that no longer match the vendor's own page. One provider's free tier is widely quoted as 1,500 requests a day, while its pricing page says 1,000.
So we did the boring thing: we opened each provider's official pricing or documentation page on 12 November 2026 and wrote down what it says about the free tier. Prices and limits change, so follow the links before you decide.
Disclosure: we run IPAPI.GR, which appears in this comparison. IPAPI.GR also combines several upstream data sources, and our site footer credits the ones whose licences require it. We've kept our own entry to the same standard as the rest: what the pricing page says, nothing more.
The short version
| Provider | Free tier (as stated by the provider) | Notable conditions | Source |
|---|---|---|---|
| ipinfo (Lite) | API requests "Unlimited" | Country and continent only, ASN name and domain only. "Attribution required" for commercial use | ipinfo.io/pricing |
| ipapi.co | "up-to 1000 IP lookups in a day (approximately 30K/month) for a limited time" | A trial, "not meant for use in production". "Please contact us for a trial." Heuristics may restrict further | ipapi.co/pricing |
| ip-api.com | 45 requests per minute per IP | Free endpoint is HTTP only (no SSL) and doesn't allow commercial use | ip-api.com docs |
| ipdata | "1,000 city-level a day, then country-level without limit, no key" | "Commercial use with attribution" | ipdata.co/pricing |
| ipgeolocation.io | 1,000 credits per day on the Developer plan | Standard lookup = 1 credit, security data costs extra credits. Resets 00:00 UTC | ipgeolocation.io/pricing |
| IPAPI.GR | 1,000 requests per day (current free plan) | Full geolocation and network fields. AI/crawler/scanner flags are Pro only. Resets 00:00 UTC | ipapi.gr/pricing |
What the numbers don't tell you
A free tier is only useful if you can actually ship with it. Four conditions matter more than the headline number.
1. Which fields you get
ipinfo's Lite plan has no request cap, but the response is country-level only, with no city or region. That's perfect for country-based rules and useless for "nearest store". ipdata gives city-level data for the first 1,000 lookups a day and country-level after that. Check the fields you need, not the request count.
2. Whether production use is allowed
- ipapi.co describes its free tier as a time-limited trial for testing, "not meant for use in production or deployments".
- ip-api.com's free endpoint states that commercial use isn't allowed.
- ipinfo and ipdata allow commercial use of their free plans with attribution, which means a visible credit link on your site.
If you're building a commercial product, these lines matter more than the limit.
3. HTTPS
ip-api.com's documentation says SSL "is not available for this free API". Most browsers block HTTP requests from HTTPS pages (mixed content), so the free endpoint is effectively server-side only. The other free tiers in the table are served over HTTPS.
4. How the limit is counted
- Per minute vs per day. 45 per minute (ip-api.com) can handle bursts that a daily quota can't, but it is per source IP, so all your servers behind one NAT share it.
- Credits vs requests. At ipgeolocation.io, a lookup that includes security data costs more than one credit, so 1,000 credits isn't always 1,000 lookups.
- When it resets. ipgeolocation.io and IPAPI.GR both reset daily limits at midnight UTC.
Picking by use case
Country-based rules (currency, compliance banners, redirects). A country-only free tier like ipinfo Lite is enough, provided you can show the attribution.
City-level personalisation on a small site. ipdata, ipgeolocation.io and IPAPI.GR all offer around 1,000 city-level lookups a day. With per-visitor caching, that covers many small sites.
Server-side enrichment of logs or sign-ups. You need HTTPS, commercial use and predictable limits. Check the attribution requirements, and plan for a paid tier as volume grows.
Bot and crawler detection. None of the free tiers above include it. ipinfo, for example, lists privacy detection as unavailable on Lite. IPAPI.GR's risk.is_ai, risk.is_crawler and risk.is_scanner flags are part of Pro, and are built only from the bot operators' own published sources. See how to verify AI crawler IP addresses.
Make any free tier go further
Whichever provider you choose:
- Cache per IP. A visitor's location doesn't change between page views. Even a one-hour cache can remove most repeat lookups.
- Skip private and reserved addresses (
10.x,192.168.x,127.0.0.1,::1). They have no public location and only waste quota. - Look up once per session, not once per request.
- Handle
429gracefully. Fall back to "unknown", don't fail the page. - Watch usage. With IPAPI.GR,
GET /api/status?key=…returns your limit, usage and reset time without counting as a lookup. See the docs.
Code for all of this in Node.js, Python, PHP and Go: get a visitor's country from their IP address.
Don't lock yourself in
Free tiers change. Plans get retired, limits drop, attribution rules tighten. Write your code so switching providers is a one-file change. A tiny adapter that maps each provider's response to your own shape is enough:
// geo.js : the rest of the app only ever sees { countryCode, city, asn, org }
const known = (v) => (v === undefined || v === null || v === '' || v === 'No Data' ? null : v); // missing fields are "No Data"
const providers = {
ipapigr: async (ip) => {
const r = await fetch(`https://fast.ipapi.gr/api/lookup/${encodeURIComponent(ip)}?key=${process.env.IPAPI_KEY}`,
{ signal: AbortSignal.timeout(2000) });
if (!r.ok) throw new Error(`ipapigr ${r.status}`);
const d = await r.json();
return { countryCode: known(d.country_code), city: known(d.city), asn: known(d.asn), org: known(d.organization) ?? known(d.isp) };
}
// add another provider here with the same return shape
};
export async function geo(ip, order = ['ipapigr']) {
for (const name of order) {
try { return await providers[name](ip); } catch (e) { console.warn(e.message); }
}
return { countryCode: null, city: null, asn: null, org: null };
}The fallback loop also lets you add a second provider for resilience. If you do, read both providers' terms. Some free tiers don't allow use as a backup in commercial products.
Questions to ask before you commit
- Does the free tier allow my use case (commercial, production, server-side)?
- Do I need city, or is country enough?
- What happens at the limit: an error (
429), silently reduced data, or a bill? - Do I need HTTPS from the browser?
- Is attribution required, and where would it go?
- Is there a status endpoint to watch usage before I hit the limit?
FAQ
Is there a completely free IP geolocation API with no limits?
ipinfo Lite advertises unlimited requests, but only country-level data and with attribution required. Unlimited city-level lookups for free aren't offered by any provider in this list.
Can I use a free plan in a commercial product?
Depends on the provider: ipinfo and ipdata say yes with attribution. ip-api.com's free endpoint says no. ipapi.co describes its free tier as a trial not meant for production. Read the terms of the one you pick.
Why do comparison posts disagree?
Plans change and posts don't get updated. Many also copy each other. Use the provider's own page, which is why every row above links to one.
How did you check?
By reading each provider's pricing or documentation page on 12 November 2026. We didn't benchmark accuracy or speed, because that would need a methodology and a dataset of known locations we don't have. Where a page was ambiguous, we quoted it rather than interpreting it.