MaxMind created GeoIP and has been selling IP geolocation for more than twenty years. Many servers, frameworks and log tools ship with a GeoIP2 or GeoLite2 reader built in. So when people search for a "MaxMind alternative", they're usually trying to solve one specific problem: the free GeoLite data isn't good enough or isn't allowed for their use, keeping a database fresh is a chore, or the per-query web service gets expensive.
This guide sets out what MaxMind offers, what its free tier allows, where MaxMind is still the right answer, and what to use instead for each problem. MaxMind facts are from MaxMind's own pages, checked on 12 November 2026: GeoIP web services, GeoIP databases, GeoLite, GeoLite developer docs and the GeoLite EULA.
Disclosure: we run IPAPI.GR, an API alternative listed below. It isn't a database product, so for some of the cases here MaxMind or another database vendor is the better fit, and we say which.
MaxMind's three products
| GeoLite (free) | GeoIP databases (paid) | GeoIP web services (paid) | |
|---|---|---|---|
| How you use it | Download MMDB/CSV, or call the GeoLite web service | Download MMDB/CSV and query locally | HTTPS API, one IP per request |
| Price | Free, with an account | Flat subscription (see MaxMind's page) | Pay as you go: Country 0,0001 USD, City Plus 0,0003 USD, Insights 0,002 USD per query |
| Limits | Web service: 1.000 lookups a day per service. Databases: 30 downloads a day | 1.000 downloads a day | No query limit; prepaid credit from 20 USD to 25.000 USD |
| Updates | Must delete old data within 30 days of a new release (EULA) | Most databases updated every weekday | Always current |
| Attribution | Required by the EULA | Not stated for paid | Commercial use without extra licensing |
| Support | None ("MaxMind does not provide support for our GeoLite databases and web services") | Yes | Yes |
Two lines on MaxMind's own GeoLite page matter most for businesses. The free GeoLite City "is considerably less accurate than the paid GeoIP City data, and is not recommended for commercial use cases." And the EULA asks for attribution such as: "This product includes GeoLite Data created by MaxMind, available from https://www.maxmind.com."
When MaxMind is still the best choice
- You can't afford a network call on the hot path. A local MMDB lookup takes microseconds and never fails because of a remote service. No API can match that.
- You need anonymiser detection, user type, confidence factors or accuracy radius. GeoIP Insights and the Anonymous IP database are built for fraud and compliance work.
- You already use minFraud or need transaction scoring alongside geolocation.
- You process huge volumes offline, for example enriching billions of log lines, where a flat database fee beats any per-query price.
- You're in an environment with no outbound internet, such as some on-premise or air-gapped deployments.
If any of those is your main requirement, stay with MaxMind or pick another database vendor.
Common reasons to look elsewhere
- GeoLite isn't meant for your use. MaxMind recommends against GeoLite City for commercial use and gives no support for it.
- The 1.000-a-day GeoLite web service limit is too low, and the paid web service costs 300 USD per million City Plus lookups.
- Database operations are a chore. You need a license key, a scheduled updater, a way to reload the file in every process, and you must delete GeoLite data within 30 days of a new release.
- You want one call for more than geolocation, for example IPv6 and domain input plus verified bot signals, and you don't want to stitch several databases together.
Alternatives by use case
If you want a database (local lookups)
| Vendor | What's on its official page | Source |
|---|---|---|
| ipinfo | Database downloads "starting at 1.000 USD/month", not in self-serve plans | ipinfo.io/pricing |
| ipapi.is | IP to Geolocation database 59 USD/month, updated twice a week, CSV and MMDB samples | ipapi.is/pricing |
| ipregistry | Datasets as CSV and MMDB, "rebuilt every day for offline use" | ipregistry.co/pricing |
| ipgeolocation.io | Separate database products (geolocation, security, ASN, company and more) | ipgeolocation.io/pricing |
IPAPI.GR doesn't offer a database download.
If you want an API (no files to manage)
| Need | Look at | Why |
|---|---|---|
| Cheapest at volume | ip-api.com Pro | 13,30 €/month (12-month term), unlimited |
| A flat monthly price, no overage billing | IPAPI.GR | 9,00 € to 199,00 € a month, VAT included, for 10.000 to 1.000.000 requests a day |
| VPN, proxy and Tor detection | ipinfo Core, ipdata Business, IP2Location.io | Privacy detection is part of their paid plans |
| Verified AI crawler, search bot and scanner flags | IPAPI.GR, any paid plan | risk.is_ai, is_crawler and is_scanner for known AI crawlers, crawlers and scanners |
| Free city-level data with commercial use | ipgeolocation.io, ipapi.is, IPAPI.GR | 1.000 a day each; read each provider's terms |
For the full picture, see the guide to choosing an IP geolocation API and the cost at 100k, 1M and 10M lookups.
Database or API: how to decide
| Question | Database wins | API wins |
|---|---|---|
| Latency budget on the hot path | Under a millisecond | Tens of milliseconds are fine, or you look up once per session |
| Who keeps the data fresh | You're happy to run updates | You'd rather not |
| Volume | Billions of lookups | Thousands to millions a day |
| Data you need | Fields the vendor ships in files | Signals that change quickly, like bot and scanner addresses |
| Deployment | Offline or locked-down network | Normal outbound HTTPS |
Many teams mix them: a local country database for request routing, and an API for enrichment at sign-up or for bot checks.
Replacing a GeoIP2 reader with an API call
If you read GeoLite2 City today, the switch is mostly field renaming. In Python with the official geoip2 library:
# Before: local GeoLite2 City database
import geoip2.database
reader = geoip2.database.Reader("/var/lib/GeoIP/GeoLite2-City.mmdb")
def locate(ip):
r = reader.city(ip)
return {
"country_code": r.country.iso_code,
"region": r.subdivisions.most_specific.name,
"city": r.city.name,
"zipcode": r.postal.code,
"lat": r.location.latitude,
"lon": r.location.longitude,
"timezone": r.location.time_zone,
}# After: IPAPI.GR, with a small in-process cache
import os
from functools import lru_cache
import requests
session = requests.Session()
KEY = os.environ["IPAPI_KEY"]
def known(v):
return None if v in (None, "", "No Data") else v # missing fields are "No Data"
@lru_cache(maxsize=50_000) # lru_cache doesn't cache exceptions, so failures are retried later
def _lookup(ip):
r = session.get(f"https://ipapi.gr/api/lookup/{ip}", params={"key": KEY}, timeout=2)
r.raise_for_status() # 429 (daily limit), 400 (invalid input), ...
return r.json()
def locate(ip):
try:
d = _lookup(ip)
except requests.RequestException:
return None # carry on without geo, never fail the request
return {
"country_code": known(d.get("country_code")),
"region": known(d.get("region")),
"city": known(d.get("city")),
"zipcode": known(d.get("zipcode")),
"lat": known(d.get("latitude")),
"lon": known(d.get("longitude")),
"timezone": known(d.get("timezone")),
"asn": known(d.get("asn")), # in GeoLite this needs the separate ASN database
"org": known(d.get("organization")) or known(d.get("isp")),
}The field map:
| GeoIP2 / GeoLite2 | IPAPI.GR |
|---|---|
country.iso_code | country_code |
country.name | country |
subdivisions.most_specific.name | region |
city.name | city |
postal.code | zipcode |
location.latitude, location.longitude | latitude, longitude |
location.time_zone | timezone |
autonomous_system_number (ASN database) | asn (string of digits) |
autonomous_system_organization (ASN database) | organization / isp |
location.accuracy_radius | none |
traits.* anonymiser fields (Insights / Anonymous IP) | none |
Two behaviours differ from a local reader. A GeoIP2 reader raises AddressNotFoundError for addresses it doesn't know; IPAPI.GR returns the field with "No Data". And an API can be rate limited, so handle 429 and timeouts by continuing without location, never by failing the request.
Bulk jobs
If you used the database to enrich logs in bulk, deduplicate the addresses first and send them to the batch endpoint, up to 100 per request:
awk '{print $1}' access.log | sort -u | head -100 \
| jq -R . | jq -s '{ips: .}' \
| curl -s -X POST "https://ipapi.gr/api/lookup/batch?key=YOUR_API_KEY" \
-H "Content-Type: application/json" -d @- \
| jq -r '.results[] | [.query, .country_code, .city, .asn] | @tsv'Each distinct item counts as one request against your daily limit. If you're enriching millions of lines a day, compare that with a database licence honestly. A database may be the better tool.
Where IPAPI.GR differs from MaxMind
- Inputs: IPv4, IPv6 and domain names in the same endpoint. A domain is resolved to its first IPv4 address.
- Bot signals: on every paid plan,
risk.is_ai,risk.is_crawlerandrisk.is_scanner, so you know which requests come from known AI crawlers, search crawlers and internet scanners without maintaining the lists yourself. You can browse every covered bot on the bot signals page, or check one address with the bot verification tool. - Pricing: 1.000 requests a day free; paid plans from Developer (9,00 € a month, 10.000 a day) to Scale (199,00 €, 1.000.000 a day), VAT included. Limits reset at midnight UTC, with no overage billing.
- What we don't have: no database download, no accuracy radius, no anonymiser, VPN, proxy or Tor detection, no fraud scoring and no SLA. If you need those, MaxMind is the more complete product.
FAQ
Is MaxMind GeoLite free for commercial use?
The GeoLite EULA allows use under its terms with attribution to MaxMind, but MaxMind's own page says GeoLite City "is not recommended for commercial use cases" because it's less accurate than paid GeoIP City, and GeoLite has no support. Read the EULA for your case.
What's the GeoLite web service limit?
1.000 lookups a day per service, according to MaxMind's GeoLite developer page. GeoLite database downloads are limited to 30 a day.
How much does the MaxMind GeoIP web service cost?
Pay as you go, checked on 12 November 2026: 0,0001 USD per query for Country, 0,0003 USD for City Plus and 0,002 USD for Insights, from prepaid credit of 20 USD to 25.000 USD. MaxMind asks you to contact them above 2.500 USD a month.
What's the best free alternative to GeoLite2?
For an API with city-level data whose terms allow commercial use: ipgeolocation.io, ipapi.is or IPAPI.GR, each 1.000 lookups a day. Read each provider's terms, including any attribution conditions. For country-level only, ipinfo Lite is unlimited with attribution. Conditions are compared in our free tier guide.
Can I use MaxMind and an API together?
Yes, and it's a common pattern: a local country database for routing and an API for enrichment or bot verification. Keep MaxMind's attribution if you use GeoLite.
Does IPAPI.GR have an MMDB file?
No. IPAPI.GR is an API only.