MaxMind GeoIP alternatives: database or API, GeoLite limits, and how to switch

MaxMind is the reference for IP geolocation, and its local databases are hard to beat on speed. But GeoLite comes with a 1.000-a-day web service limit, an attribution rule, a 30-day update rule and MaxMind's own warning against commercial use. When to stay, when to switch, and how.

On this page MaxMind's three products

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.

Note

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 itDownload MMDB/CSV, or call the GeoLite web serviceDownload MMDB/CSV and query locallyHTTPS API, one IP per request
PriceFree, with an accountFlat subscription (see MaxMind's page)Pay as you go: Country 0,0001 USD, City Plus 0,0003 USD, Insights 0,002 USD per query
LimitsWeb service: 1.000 lookups a day per service. Databases: 30 downloads a day1.000 downloads a dayNo query limit; prepaid credit from 20 USD to 25.000 USD
UpdatesMust delete old data within 30 days of a new release (EULA)Most databases updated every weekdayAlways current
AttributionRequired by the EULANot stated for paidCommercial use without extra licensing
SupportNone ("MaxMind does not provide support for our GeoLite databases and web services")YesYes

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

  1. GeoLite isn't meant for your use. MaxMind recommends against GeoLite City for commercial use and gives no support for it.
  2. 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.
  3. 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.
  4. 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)

VendorWhat's on its official pageSource
ipinfoDatabase downloads "starting at 1.000 USD/month", not in self-serve plansipinfo.io/pricing
ipapi.isIP to Geolocation database 59 USD/month, updated twice a week, CSV and MMDB samplesipapi.is/pricing
ipregistryDatasets as CSV and MMDB, "rebuilt every day for offline use"ipregistry.co/pricing
ipgeolocation.ioSeparate 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)

NeedLook atWhy
Cheapest at volumeip-api.com Pro13,30 €/month (12-month term), unlimited
A flat monthly price, no overage billingIPAPI.GR9,00 € to 199,00 € a month, VAT included, for 10.000 to 1.000.000 requests a day
VPN, proxy and Tor detectionipinfo Core, ipdata Business, IP2Location.ioPrivacy detection is part of their paid plans
Verified AI crawler, search bot and scanner flagsIPAPI.GR, any paid planrisk.is_ai, is_crawler and is_scanner for known AI crawlers, crawlers and scanners
Free city-level data with commercial useipgeolocation.io, ipapi.is, IPAPI.GR1.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

QuestionDatabase winsAPI wins
Latency budget on the hot pathUnder a millisecondTens of milliseconds are fine, or you look up once per session
Who keeps the data freshYou're happy to run updatesYou'd rather not
VolumeBillions of lookupsThousands to millions a day
Data you needFields the vendor ships in filesSignals that change quickly, like bot and scanner addresses
DeploymentOffline or locked-down networkNormal 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:

python
# 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,
    }
python
# 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 / GeoLite2IPAPI.GR
country.iso_codecountry_code
country.namecountry
subdivisions.most_specific.nameregion
city.namecity
postal.codezipcode
location.latitude, location.longitudelatitude, longitude
location.time_zonetimezone
autonomous_system_number (ASN database)asn (string of digits)
autonomous_system_organization (ASN database)organization / isp
location.accuracy_radiusnone
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:

bash
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_crawler and risk.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.

Look up an IP address now

Free IP lookup: location, network and bot flags, no account needed.