myip as a MaxMind Alternative
Three sourced tables — GeoLite2's free database, GeoIP2's per-query web services, and GeoIP2's downloadable-database subscriptions — a real field-by-field migration snippet from MaxMind's GeoIP2 web-service response to myip's, and an honest look at where MaxMind is genuinely ahead — not just a sales pitch.
MaxMind isn't one product: GeoLite2 is a free downloadable database with EULA obligations, GeoIP2 is a family of paid per-query web services, and MaxMind also sells GeoIP2 as downloadable-database subscriptions billed annually, monthly or one-time. A single price table can't represent all three honestly, so this page keeps them separate. Where myip differs: one API call, metered per unique IP per day, bundling RDAP registry data (fetched from the registry and cached) with geolocation and privacy/threat/fraud signals — no downloadable database, no offline mode. The comparison below is meant to help you pick correctly, including away from us.
MaxMind data retrieved on 2026-07-28 from MaxMind's GeoLite2 developer page, its GeoIP web-services pricing page, and its GeoIP2 database-subscriptions page. Prices and limits change without notice — verify against those pages before relying on a figure.
GeoLite2 — the free downloadable database
Reproduced from MaxMind's own GeoLite2 developer page and EULA. GeoLite2 ships as three separate downloadable databases plus a limited free web service; using it carries EULA obligations, not just a download link.
| Field | Value |
|---|---|
| Databases offered | GeoLite Country database, GeoLite City database, GeoLite ASN database. |
| Account required | Yes — a MaxMind account plus a generated license key. |
| Download limit | 30 database downloads per day. |
| Free web-service limit | 1,000 lookups per day, per service. |
| Accuracy vs. paid data | MaxMind's own page: “The free GeoLite City is considerably less accurate than the paid GeoIP City data, and is not recommended for commercial use cases.” |
| Attribution | Mandatory under the GeoLite2 EULA: “You must provide attribution of your use to MaxMind.” |
| Redistribution | Requires MaxMind's prior written consent before disclosing the data to a third party. |
MaxMind's developer page states: “The GeoLite End User License Agreement requires all GeoLite users to keep their data up-to-date” (developer page). Separately, our reading of the EULA text itself found that it requires destruction of old versions within 30 days of an update being released, but did not find a restriction on using data older than 30 days or a requirement to keep data current (EULA). We reproduce both readings rather than resolve the apparent conflict ourselves.
GeoIP2 web services — priced per query
MaxMind's paid GeoIP2 web services are billed pay-as-you-go, per query, in USD. Reproduced from MaxMind's own GeoIP web-services pricing page.
| Service | Price |
|---|---|
| Country service | $0.0001 per query |
| City Plus service | $0.0003 per query |
| Insights service | $0.002 per query |
| Above an estimated $2,500/mo of queries | Quote-based — MaxMind: “If you estimate your volume of queries to be over $2,500 a month, contact us to discuss rates.” |
See MaxMind's GeoIP web-services pricing page for current figures and credit-purchase details.
GeoIP2 downloadable-database subscriptions
MaxMind also sells the same GeoIP2 data as downloadable database files, billed annually, monthly or one-time. Reproduced from MaxMind's own GeoIP2 databases page; each cell keeps the vendor's own qualifier intact rather than reducing it to a single figure.
| Database | Annual | Monthly | One-time |
|---|---|---|---|
| GeoIP Country | $34.83 /month Billed $418 annually | $38.00 per month | $38.00 1 month access |
| GeoIP City | $135.66 /month Billed $1628 annually | $148.00 per month | $148.00 1 month access |
| City by Continent | $55.00 /month Billed $660 annually | $60.00 per month | $60.00 1 month access |
| GeoIP ISP | $44.91 /month Billed $539 annually | $49.00 per month | $49.00 1 month access |
| GeoIP Domain Name | $34.83 /month Billed $418 annually | $38.00 per month | $38.00 1 month access |
| GeoIP Connection Type | $125.58 /month Billed $1507 annually | $137.00 per month | $137.00 1 month access |
MaxMind's own page: “Use in support of a commercial product requires the purchase of a commercial license.”
See MaxMind's GeoIP2 databases page for current prices.
For reference: myip's own numbers (live)
- Free tier
- Cheapest paid plan
Migrating from MaxMind's GeoIP2 web service
MaxMind's GeoIP2 web-service response documentation names the top-level objects and fields below (city, continent, country, location, postal, registered_country, represented_country, subdivisions, traits, anonymizer, maxmind), but MaxMind's own page does not reproduce the full verbatim JSON per service tier. The response shape below is illustrative — built strictly from those documented field names with example values, not a copied vendor example — so re-open MaxMind's own documentation before depending on exact nesting or on which fields belong to which service tier (Country / City Plus / Insights).
One nuance worth knowing: is_anonymous, is_anonymous_vpn, is_hosting_provider, is_public_proxy, is_residential_proxy and is_tor_exit_node live in the dedicated anonymizer response object — read them from there.
{
"ip_address": "203.0.113.7",
"city": { "geoname_id": 9999999, "names": { "en": "Example City" }, "confidence": 60 },
"country": { "iso_code": "US", "names": { "en": "United States" }, "is_in_european_union": false },
"location": { "latitude": 12.3456, "longitude": -65.4321, "accuracy_radius": 100, "time_zone": "Etc/UTC" },
"postal": { "code": "00000", "confidence": 20 },
"traits": {
"ip_address": "203.0.113.7",
"network": "203.0.113.0/24",
"autonomous_system_number": 64512,
"autonomous_system_organization": "EXAMPLE-AS",
"isp": "Example ISP",
"organization": "Example Org",
"connection_type": "Example",
"domain": "example.com",
"user_type": "example",
"is_anycast": false
},
"anonymizer": {
"is_anonymous": false,
"is_anonymous_vpn": false,
"is_hosting_provider": true,
"is_public_proxy": false,
"is_residential_proxy": false,
"is_tor_exit_node": false,
"confidence": 99
}
}
Field by field, the closest myip v2 equivalents (the six anonymizer booleans map from anonymizer):
| MaxMind field | myip v2 field | Note |
|---|---|---|
| ip_address | ip | Same string, top level on both. |
| city.geoname_id | geo.geonameId | Both draw on the public GeoNames gazetteer, but via different lookup paths (MaxMind's binary DB vs myip's string-match resolver) — don't assume identical ids for the same location. |
| city.names | geo.city | MaxMind's names object carries per-language variants; myip returns a single city string only. |
| country.iso_code | geo.countryCode | Direct match, same ISO 3166-1 alpha-2 code. |
| country.names | geo.countryName | Direct match (English name). |
| country.is_in_european_union | geo.isEu | Direct match, both booleans. |
| location.latitude / location.longitude | geo.lat / geo.lon | Direct match; myip's are nullable when unknown. |
| location.time_zone | geo.timezone | Direct match, IANA zone name. |
| postal.code | geo.postal | Field exists on myip but is always empty today — its geo source carries no postal data yet. |
| traits.autonomous_system_number | network.asn | Same AS holder number; MaxMind returns a bare integer, myip an "ASxxxx"-style string. |
| traits.autonomous_system_organization | network.asName | Both name the AS holder; sourced differently (Team Cymru vs MaxMind's own database). |
| traits.domain | network.asnDomain | Populated only when the network group is requested and your tier includes it; null otherwise. |
| traits.isp | network.asnOrg | myip's offline ISP/org name; populated only when the network group is requested. |
| traits.connection_type | network.classification.type | Both classify the connection, but the value sets differ (myip: hosting/datacenter/mobile/isp/home/business/private, or an empty string when undetermined) — don't assume the same string on both sides. |
| traits.network | network.prefix | Both name the IP's announced block, but from different sources (MaxMind's database aggregation vs myip's Team Cymru BGP-observed prefix) — not guaranteed identical. |
| traits.is_anycast | flags.isAnycast | Direct match, same topology signal. |
| anonymizer.is_anonymous | privacy.isAnonymous | Both booleans; myip's is a computed OR of its own Tor/VPN/proxy signals, each best-effort. |
| anonymizer.is_anonymous_vpn | privacy.isVpn | Both booleans, but myip's is a coarse hosting/datacenter-classification heuristic, not a VPN-specific database match. |
| anonymizer.is_hosting_provider | network.classification.type | No matching myip boolean — test for equality against "hosting"/"datacenter" instead of reading a flag. |
| anonymizer.is_public_proxy | privacy.isProxy | Both booleans, but the underlying detection differs (MaxMind's public-proxy database vs myip's IPFire libloc anonymous-proxy network flag). |
| anonymizer.is_residential_proxy | privacy.isResidentialProxy | A known gap on myip's side — it has no data source for this signal and always reports false today. |
| anonymizer.is_tor_exit_node | privacy.isTor | Both booleans; myip's degrades to false when its own Tor matcher is disabled. |
| maxmind.queries_remaining | – | No 1:1 myip field — myip instead exposes remaining budget via the top-level plan.groups[].perDay/perMin/topupRemaining fields. |
// MaxMind GeoIP2 web-service response -> myip v2 field shape.
// is_anonymous/is_anonymous_vpn/is_hosting_provider/is_public_proxy/
// is_residential_proxy/is_tor_exit_node live in the "anonymizer" object.
function mapMaxMindGeoIP2ToMyip(mm) {
return {
ip: mm.ip_address,
geo: {
countryCode: mm.country.iso_code,
countryName: mm.country.names.en,
isEu: mm.country.is_in_european_union,
city: mm.city.names.en,
geonameId: mm.city.geoname_id,
postal: mm.postal.code,
timezone: mm.location.time_zone,
lat: mm.location.latitude,
lon: mm.location.longitude,
},
network: {
asn: mm.traits.autonomous_system_number,
asName: mm.traits.autonomous_system_organization,
asnDomain: mm.traits.domain,
asnOrg: mm.traits.isp,
prefix: mm.traits.network,
// MaxMind's connection_type is the closest analog to myip's
// network.classification.type — the value sets differ, so map it
// as a hint, not an exact-string passthrough.
classificationTypeHint: mm.traits.connection_type,
},
privacy: {
isAnonymous: mm.anonymizer.is_anonymous,
isVpn: mm.anonymizer.is_anonymous_vpn,
isProxy: mm.anonymizer.is_public_proxy,
isResidentialProxy: mm.anonymizer.is_residential_proxy,
isTor: mm.anonymizer.is_tor_exit_node,
},
flags: {
isAnycast: mm.traits.is_anycast,
// is_hosting_provider has no 1:1 myip boolean — see
// network.classification.type above instead.
},
};
}
Where MaxMind has the edge
- A downloadable database (MMDB) for offline, on-premise and air-gapped use — no per-request network dependency and no per-request latency. myip has no equivalent product at all: every lookup is an API call over the network.
- GeoLite2 itself costs nothing to download and use — no subscription and no per-query fee, unlike GeoIP2, which is a paid product family requiring a commercial license for commercial use.
- GeoIP2 web services bill pay-as-you-go per query, starting at $0.0001 for the Country service — a low-volume caller pays only for the exact queries made, unlike myip's flat per-tier subscription.
To be fair about our own limits
- There is no downloadable database product on myip — every lookup is an API call, with the network dependency and latency that implies.
- There is no offline mode — myip cannot be used air-gapped the way a downloaded GeoLite2/GeoIP2 database can.
- There is no published SLA or uptime guarantee.
- myip's geolocation comes from scheduled offline-database imports, not a live per-request lookup — unlike the RDAP network/registry data in the same response, which is fetched from the registry and cached.
More comparisons
See myip's current numbers for yourself
Frequently asked questions
- Is MaxMind's free GeoLite2 database safe to use commercially?
- Not clearly. MaxMind's own developer page calls the free GeoLite City data considerably less accurate than its paid data and "not recommended for commercial use cases." Attribution to MaxMind is mandatory regardless, and redistribution needs MaxMind's prior written consent.
- What's the difference between GeoLite2 and GeoIP2?
- GeoLite2 is MaxMind's free downloadable database (Country/City/ASN) plus a limited free web service, under EULA obligations including mandatory attribution. GeoIP2 is the paid product family — per-query web services (Country/City Plus/Insights) and separate downloadable-database subscriptions — and using it in a commercial product requires purchasing a commercial license.
- How much does MaxMind's GeoIP2 web service cost per query?
- $0.0001 per query for the Country service, $0.0003 for City Plus, and $0.002 for Insights, per MaxMind's own pricing page. Above an estimated $2,500/mo of query volume, MaxMind asks you to contact them for a custom quote instead of self-serve pricing.
- Where do MaxMind's anonymizer booleans live in the GeoIP2 web-service response?
- MaxMind's GeoIP2 web-service response documentation places is_anonymous, is_anonymous_vpn, is_hosting_provider, is_public_proxy, is_residential_proxy and is_tor_exit_node in a dedicated anonymizer object. Read them from there.
- How current are the MaxMind figures on this page?
- Retrieved from MaxMind's own developer and pricing pages on 2026-07-28 and not re-verified live by this page — check the linked vendor pages for the current figure before relying on it. myip's own numbers above are the exception: fetched live on every page load, so they never go stale.