myip as an ip-api.com Alternative
A sourced ip-api.com free/Pro limits table, a real field-by-field migration snippet from ip-api's 25-field JSON response to myip's, and an honest look at where ip-api is genuinely ahead — not just a sales pitch.
If you're already calling ip-api.com and evaluating alternatives: its free endpoint is a comparatively generous 45 requests per minute per IP address, with no separate daily or monthly cap published — but commercial use of that free endpoint is explicitly disallowed, and its only paid plan is sold on an annual EUR commitment rather than a monthly USD subscription. Where myip differs is a per-unique-IP-per-day metered API bundling RDAP registry data (fetched from the registry and cached) with geolocation and privacy/threat/fraud signals in one call, priced monthly. The comparison below is meant to help you pick correctly, including away from us.
ip-api.com data retrieved on 2026-07-28 from ip-api's own JSON API docs and its Pro member portal. Prices and limits change without notice — verify against those pages before relying on a figure.
ip-api.com free & Pro limits
Reproduced from ip-api's own site, JSON API docs and Pro member portal. Note the shape: a per-MINUTE rate limit rather than a per-day/month cap, and a single Pro plan priced on an annual EUR commitment — kept exactly as printed, not converted to another currency or period.
| Field | Free endpoint | Pro |
|---|---|---|
| Price | Free | €13.3 per month, when paying for 12 months |
| Request volume | 45 requests per minute per IP address | Unlimited requests |
| Commercial use | Not allowed | Allowed |
| SSL / HTTPS access | Not retrieved on 2026-07-28 — see vendor page. | Listed as a Pro-plan benefit |
| SLA | – | 99.9% SLA |
Both the free endpoint and Pro are API-only — ip-api's own site was checked for a downloadable database product and none was found.
Not published anywhere on ip-api's site or docs: a month-to-month (non-annual) Pro price, any per-second/burst limit on Pro beyond "Unlimited requests", and whether the free and Pro endpoints differ in which response fields they return.
For reference: myip's own numbers (live)
- Free tier
- Cheapest paid plan
Migrating from ip-api.com's JSON endpoint
ip-api's own docs document the 25 fields below by name and description, but the docs page doesn't publish a full verbatim example response. The JSON below is illustrative — built strictly from those documented field names with example values, not a copied vendor example — so re-open ip-api's own docs before depending on an exact value shape. "message" is included only when status is "fail" and is omitted from this success-path example.
{
"status": "success",
"continent": "North America",
"continentCode": "NA",
"country": "United States",
"countryCode": "US",
"region": "VA",
"regionName": "Virginia",
"city": "Example City",
"district": "",
"zip": "20149",
"lat": 39.0481,
"lon": -77.4728,
"timezone": "America/New_York",
"offset": -14400,
"currency": "USD",
"isp": "Example ISP",
"org": "Example Org",
"as": "AS64500 Example Org",
"asname": "EXAMPLE-AS",
"reverse": "",
"mobile": false,
"proxy": false,
"hosting": true,
"query": "203.0.113.7"
}
Field by field, the closest myip v2 equivalents:
| ip-api field | myip v2 field | Note |
|---|---|---|
| status | – | No 1:1 myip field — myip signals failure via its own top-level errors array instead of a status string. |
| message | – | Only present when status is "fail" on ip-api's side; myip's failure detail lives in its errors array instead. |
| continent | – | No myip field carries the continent's display name — only its 2-letter code, see continentCode below. |
| continentCode | geo.continent | Direct match, same 2-letter code. |
| country | geo.countryName | Direct match. |
| countryCode | geo.countryCode | Direct match, same ISO 3166-1 alpha-2 code. |
| region | – | No myip equivalent — myip has no short region/state code field, only the full name (see regionName below). |
| regionName | geo.region | Direct match, full region/state name. |
| city | geo.city | Direct match. |
| district | – | No myip equivalent — myip's geo data has no city-subdivision/district granularity. |
| zip | geo.postal | Field exists but is always empty on myip today — its geo source carries no postal data yet. |
| lat / lon | geo.lat / geo.lon | Direct match; both nullable on myip's side when unknown. |
| timezone | geo.timezone | Direct match, IANA zone name. |
| offset | – | No myip equivalent — myip exposes only the IANA zone name, not a numeric UTC offset in seconds; derive it client-side from geo.timezone if you need one. |
| currency | – | No myip equivalent — myip's response has no national-currency field. |
| isp | network.asnOrg | myip has one offline org-name field; populated only when the network group is requested and your tier includes it. |
| org | network.asnOrg | Same myip field as isp above — ip-api's isp/org distinction collapses to myip's single asnOrg string. |
| as | network.asn + network.asName | ip-api concatenates the AS number and org name into one string; myip already returns them split — treat "as" as a hint to parse, not a value to copy verbatim. |
| asname | network.asName | Direct match, the AS holder name. |
| reverse | dns.ptr | Direct match, reverse-DNS hostname; empty string on both sides when none resolved. |
| mobile / hosting | network.classification.type | No matching booleans — myip folds both signals into one classification string with a larger, non-exhaustive value set (hosting/datacenter/mobile/isp/home/business/private, or empty when undetermined); test for equality against the specific value, not a flag. |
| proxy | privacy.isProxy / privacy.isVpn / privacy.isTor | ip-api folds proxy/VPN/Tor into one boolean; myip reports isProxy/isVpn/isTor as three separate best-effort signals instead of one merged flag. |
| query | ip | Same address string, top level on both. |
// ip-api.com JSON response -> myip v2 field shape.
// ip-api's response is a flat object; myip's is grouped into geo/network/
// dns/privacy blocks. Fields with no myip equivalent (continent/region
// display names, district, numeric UTC offset, national currency) are
// dropped; "as" is a raw hint since myip already returns the AS number and
// org name split, and "proxy" is a raw hint since myip splits it into three
// separate isProxy/isVpn/isTor signals instead of one merged flag.
function mapIpApiToMyip(ipapi) {
return {
ip: ipapi.query,
geo: {
countryCode: ipapi.countryCode,
countryName: ipapi.country,
continent: ipapi.continentCode,
region: ipapi.regionName,
city: ipapi.city,
postal: ipapi.zip,
timezone: ipapi.timezone,
lat: ipapi.lat,
lon: ipapi.lon,
},
network: {
// ip-api's "as" is a single "AS " string; parse it
// yourself if you need myip's separate asn/asName fields.
asRawHint: ipapi.as,
asName: ipapi.asname,
asnOrg: ipapi.isp,
},
dns: {
ptr: ipapi.reverse,
},
privacy: {
// ip-api's one "proxy" boolean folds Tor/VPN/proxy together; myip's
// isProxy/isVpn/isTor are separate signals — don't assume equivalence.
isProxyHint: ipapi.proxy,
},
};
}
Where ip-api.com has the edge
- A comparatively generous free-tier rate limit for casual, non-commercial use: 45 requests per minute per IP address, with no separate daily or monthly cap published on top of it, and no paid plan required to use it.
- Pro is a single flat-rate subscription with unlimited requests and no published request-volume tiers or per-request overage to plan around.
- Pro publishes an explicit 99.9% SLA. myip has no published SLA or uptime guarantee.
To be fair about our own limits
- 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.
- There is no published SLA or uptime guarantee.
- There is no downloadable database product on myip either — same as ip-api itself, every lookup on both sides is an API call.
More comparisons
See myip's current numbers for yourself
Frequently asked questions
- What is ip-api.com's free-tier rate limit?
- 45 HTTP requests per minute from an IP address, per ip-api's own site and API docs. Going over it gets your requests throttled with an HTTP 429 until the window resets. No separate daily or monthly cap is published alongside it.
- Does ip-api.com's free endpoint allow commercial use?
- No — ip-api states plainly that it does not allow commercial use of the free endpoint, and points to its Pro service for commercial use instead. Pro explicitly allows commercial use.
- How is ip-api.com's Pro plan priced?
- €13.3 per month, when paying for 12 months — ip-api's own published figure, in euros, on an annual commitment. Only that 12-month-term rate is published; no separate month-to-month price is available on the fetched page.
- Does ip-api.com offer a downloadable IP database?
- No — ip-api's own site was checked for a downloadable database product and none was found. It is an API-only service, on both the free endpoint and Pro.
- How current are the ip-api.com figures on this page?
- Retrieved from ip-api.com's own site and docs 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.