myip as an ipinfo.io Alternative

A sourced ipinfo.io Lite/Core/Max/Enterprise limits table, a real field-by-field migration snippet from ipinfo's current Core API response to myip's, and an honest look at where ipinfo is genuinely ahead — not just a sales pitch.

If you're already calling ipinfo.io and evaluating alternatives: ipinfo's free Lite plan is genuinely permissive — unlimited monthly API requests with a commercial license included, not a crippled free tier. The honest trade-off on Lite is data depth (country/continent-level only), and ipinfo offers a downloadable database product myip doesn't. Where myip differs is live per-unique-IP-per-day metering across geo, network and threat/fraud signals in one call. The comparison below is meant to help you pick correctly, including away from us.

ipinfo.io data retrieved on 2026-07-28 from ipinfo's own pricing page. Prices and limits change without notice — verify against that page before relying on a figure.

ipinfo.io plans & limits

Reproduced from ipinfo's own comparison grid. For Core and Max we show only the matrix's own "API Requests per Month" range — ipinfo's price cards separately list a per-plan "Monthly API requests" figure; see ipinfo's pricing page for how that figure relates to the range below.

Field Lite Core Max Enterprise
Price $0/mo $41/mo ($490 billed annually) $130/mo ($1,560 billed annually) Custom
IP Geolocation ✓ Country and continent only ✓ ✓ Includes dma and geoname ✓
ASN ✓ Name and domain only ✓ Name, domain and type ✓ Name, domain and type ✓
Connection Context – ✓ Hosting, mobile, satellite and anycast ✓ Hosting, mobile, satellite and anycast ✓
Privacy Detection – ✓ ✓ ✓
API Requests per Month Unlimited 150k - 5M 150k - 5M Custom
Overages – $0.54 per +1k $1.03 for +1k Custom
Database Downloads Available ✓ ✓ ✓ ✓
Support Community-supported Standard support Standard support Premium support
Commercial License ✓ ✓ ✓ ✓

Database downloads ship as CSV, JSON, MMDB and Parquet, but the download product's own pricing is quote-based — ipinfo's database page shows "Get A Quote" / "Contact Sales", no listed price. See ipinfo's database download page.

For reference: myip's own numbers (live)

Free tier
Cheapest paid plan

Migrating from ipinfo.io's Core API

ipinfo currently documents two response shapes: an older flat one (top-level city/region/loc/org strings) and the current nested Core API shape used below (geo{} and as{} objects plus is_* booleans). This mapping targets the current Core API shape — if your existing integration still reads the legacy flat fields, check ipinfo's own data-types page for which shape your account actually returns before adapting this snippet.

ipinfo Core API response
{
  "ip": "8.8.8.8",
  "geo": {
    "city": "Mountain View",
    "region": "California",
    "region_code": "CA",
    "country": "United States",
    "country_code": "US",
    "continent": "North America",
    "continent_code": "NA",
    "latitude": 37.4056,
    "longitude": -122.0775,
    "timezone": "America/Los_Angeles",
    "postal_code": "94043"
  },
  "as": {
    "asn": "AS15169",
    "name": "Google LLC",
    "domain": "google.com",
    "type": "hosting"
  },
  "is_anonymous": false,
  "is_anycast": true,
  "is_hosting": true,
  "is_mobile": false,
  "is_satellite": false
}

Field by field, the closest myip v2 equivalents:

ipinfo Core field myip v2 field Note
ip ip Same string, top level on both.
geo.city geo.city Direct match.
geo.region geo.region Direct match; myip has no separate region_code field.
geo.country geo.countryName Direct match.
geo.country_code geo.countryCode Direct match, same ISO 3166-1 alpha-2 code.
geo.continent_code geo.continent myip's field carries the 2-letter code only, matching ipinfo's continent_code — not the continent name.
geo.latitude / geo.longitude geo.lat / geo.lon Direct match; both nullable when unknown on myip's side.
geo.timezone geo.timezone Direct match, IANA zone name.
geo.postal_code geo.postal Field exists but is always empty on myip today — its geo source carries no postal data yet.
as.asn network.asn Direct match, e.g. "AS15169".
as.name network.asName Direct match, the AS holder name.
as.domain network.asnDomain Populated only when the network group is requested and your tier includes it; null otherwise.
as.type network.classification.type Both a short string, 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.
is_anonymous privacy.isAnonymous Both booleans; myip's is a computed OR of its own Tor/VPN/proxy signals, each best-effort.
is_anycast flags.isAnycast Direct match, same topology signal.
is_satellite flags.isSatellite Direct match.
is_hosting / is_mobile network.classification.type No matching booleans — myip folds both signals into one classification string; test for equality against "hosting" or "mobile" instead of reading a flag.
JavaScript — mapping function
// ipinfo.io Core API response -> myip v2 field shape.
// Run this against the JSON above; every field it reads matches a row
// in the mapping table (myip has no fields for region_code or the
// continent's display name, and no matching booleans for is_hosting/
// is_mobile).
function mapIpinfoCoreToMyip(ipinfo) {
  return {
    ip: ipinfo.ip,
    geo: {
      countryCode: ipinfo.geo.country_code,
      countryName: ipinfo.geo.country,
      continent: ipinfo.geo.continent_code,
      region: ipinfo.geo.region,
      city: ipinfo.geo.city,
      postal: ipinfo.geo.postal_code,
      timezone: ipinfo.geo.timezone,
      lat: ipinfo.geo.latitude,
      lon: ipinfo.geo.longitude,
    },
    network: {
      asn: ipinfo.as.asn,
      asName: ipinfo.as.name,
      asnDomain: ipinfo.as.domain,
      // ipinfo's as.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: ipinfo.as.type,
    },
    privacy: {
      isAnonymous: ipinfo.is_anonymous,
    },
    flags: {
      isAnycast: ipinfo.is_anycast,
      isSatellite: ipinfo.is_satellite,
      // is_hosting / is_mobile have no 1:1 myip boolean — see
      // network.classification.type above instead.
    },
  };
}

Where ipinfo.io has the edge

To be fair about our own limits

See myip's current numbers for yourself

Frequently asked questions

Is ipinfo.io's free Lite plan really unlimited?
Yes for API requests — ipinfo's own comparison grid lists Lite's API-requests-per-month as unlimited, with a commercial license included. A separate, smaller limit of 100 manual lookups via the website UI applies on a different surface, not the API. The honest trade-off on Lite is data depth: it returns country/continent-level geolocation only.
Does this migration guide cover ipinfo's older flat response format?
No — the mapping and code sample on this page target ipinfo's current, nested Core API response (geo{} and as{} objects, plus is_* booleans). If your integration still reads the older flat city/region/loc/org fields, check ipinfo's data-types documentation for which shape your account returns before adapting this snippet.
Does ipinfo's free tier allow commercial use?
Yes — a commercial license is included on every plan, including the free Lite tier, per ipinfo's own pricing page (retrieved 2026-07-28).
Can I download ipinfo's database instead of calling the API?
Yes — ipinfo's comparison grid lists database downloads as available on every plan, including the free Lite tier, in CSV, JSON, MMDB and Parquet formats. The download product's own price isn't published; ipinfo's database page shows a contact-sales/get-a-quote flow instead of a listed figure.
How current are the ipinfo figures on this page?
Retrieved from ipinfo.io's own pricing page on 2026-07-28 and not re-verified live by this page — check the linked vendor page 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.