Watch-IP vs ipapi.co
ipapi.co and Watch-IP both resolve a supplied IPv4 or IPv6 address to an approximate location, but with different authentication, free-tier scope, and batch support. The facts below were checked directly against ipapi.co's own site; neither table declares an overall winner.
ipapi.co facts on this page were checked directly against the pages listed under Sources on 2026-09-08 and can change without notice — re-check the vendor's own site before relying on a specific number. Watch-IP facts come from this repository's own code and current /pricing page. Report anything that looks stale via /contact.
What this page compares
This page compares server-side, supplied-IP lookup only — ipapi.co's core API against Watch-IP's GET /v1/lookup/{ip} and POST /v1/lookup (secret key, third-party geolocation database). It does not compare Watch-IP's separate browser visitor-geolocation product (GET /v1/geo, publishable key, origin-locked), which has no equivalent in this comparison.
Feature comparison
| Watch-IP | ipapi.co | |
|---|---|---|
| Authentication | Secret key required on every request, via Authorization: Bearer. | No API key on the documented free-rate endpoint (ipapi.co/{ip}/json/); paid usage is arranged separately.ipapi.co API reference · 2026-09-08 |
| Free tier for arbitrary-IP lookup | None. Lookup plans start at $19/month. (Watch-IP's separate browser visitor-geolocation product has its own free tier — a different endpoint, key, and use case.) | Free rate up to 1,000 requests/day (about 30,000/month), described as for testing and development, "not for production use."ipapi.co pricing · 2026-09-08 |
| Entry paid tier | $19/month for 5,000 lookups, 20 requests/minute. | $15/month for 60,000 lookups/month; per-minute rate limit not published.ipapi.co pricing · 2026-09-08 |
| Batch/bulk lookup | POST /v1/lookup accepts 1–100 IPs per call, returned as an array in submitted order. | A bulk lookup tool is offered; ipapi.co's published API reference does not document a JSON batch endpoint or a per-call IP limit for it.ipapi.co API reference · 2026-09-08 |
| Response fields | ip, country, region (subdivision name via GeoNames), regionCode, city, postalCode (via a compiled GeoNames index, where covered), latitude, longitude, continent, timezone (computed from coordinates), isEUCountry, asn, asOrganization, currency, callingCode, compliance, locale, sun, holiday, age, tax, found; userAgent/hostname/security optional. | ip, city, region (name), country, postal, latitude, longitude, timezone, UTC offset, calling code, currency, languages, ASN, organization.ipapi.co API reference · 2026-09-08 |
| IPv6 support | Accepted for lookup; postalCode/region come from the GeoNames index for either IP version where GeoNames has coverage (timezone is computed from coordinates instead of read from the source database directly). | Advertised as "flexible IPv4/IPv6 support" across paid tiers.ipapi.co · 2026-09-08 |
Migrating from ipapi.co
A runnable version of every step below is in examples/migrate-from-ipapi.mjs in the Watch-IP GitHub repository — it makes both requests and prints both responses so you can diff them yourself.
1. Swap the request
Replace the unauthenticated ipapi.co request with an authenticated call to Watch-IP's lookup endpoint. The IP moves from the URL path to the same position, but every Watch-IP request needs a secret key.
ipapi.co
curl https://ipapi.co/203.0.113.1/json/Watch-IP
curl https://api.watch-ip.com/v1/lookup/203.0.113.1 \
-H "Authorization: Bearer YOUR_SECRET_KEY"2. Update field names
ipapi.co's "region" is a region name (e.g. "California"); Watch-IP's "region" is also a name, resolved from a separate GeoNames table, and its ISO subdivision code (e.g. "CA") is available too as its own "regionCode" field — use whichever your code needs, no mapping table required.
ipapi.co response (partial)
{
"city": "Mountain View",
"region": "California",
"country_name": "United States"
}Watch-IP response (partial)
{
"city": "Mountain View",
"region": "California",
"regionCode": "CA",
"country": "US"
}3. Batch multiple IPs in one call
If your integration currently loops over single ipapi.co requests, POST /v1/lookup can resolve up to 100 of them in one call instead — fewer round trips, one usage event per IP either way.
Looping single calls
for (const ip of ips) {
const r = await fetch(`https://ipapi.co/${ip}/json/`);
results.push(await r.json());
}Watch-IP batch
const r = await fetch('https://api.watch-ip.com/v1/lookup', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_SECRET_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({ ips }),
});
const { results } = await r.json(); // same order as `ips`See examples/migrate-from-ipapi.mjs in the Watch-IP monorepo on GitHub for the runnable version of this migration.
Frequently asked questions
Is Watch-IP cheaper than ipapi.co?
It depends on volume and which fields you need — the two vendors' tiers don't map onto each other at matching prices, and per-request price is only part of the real cost of a migration. Compare the table above and each vendor's current pricing page directly; this page does not declare a cheaper vendor.
Does Watch-IP have a free tier for arbitrary-IP lookup like ipapi.co?
No, as of 2026-09-08. Watch-IP's IP lookup product has no free tier; its separate visitor-geolocation product (GET /v1/geo, browser-only, publishable key) does have a free tier, but that is a different product and key type, not a free arbitrary-IP lookup allowance.
Will my existing ipapi.co integration work against Watch-IP without changes?
No. Authentication, the request URL, and several field names and shapes differ — see the migration steps above and run examples/migrate-from-ipapi.mjs to see both responses side by side before rewriting your integration.
Sources
- ipapi.co — IP Address Lookup and Geolocation API — accessed 2026-09-08
- ipapi.co — API reference — accessed 2026-09-08
- ipapi.co — Pricing — accessed 2026-09-08
Related pages
- IP lookupResolve a supplied IPv4 or IPv6 address from your backend with a secret key.
- GET /v1/lookup/:ip referenceFull field reference for the arbitrary-IP lookup endpoint.
- PricingPlans and limits for the visitor and lookup APIs.
- IP geolocation accuracyWhat IP geolocation can and cannot tell you, and how to evaluate it yourself.