IP2Location alternative —
REST API, no BIN files
IP2Location distributes binary database files that need monthly updates and a local SDK to read. ApogeoAPI is a hosted REST API — call it from any language or platform, always accurate, zero maintenance.
Why developers choose ApogeoAPI over IP2Location
Cloud-hosted, always fresh
IP2Location BIN databases are updated monthly. You have to download and redeploy. ApogeoAPI keeps geolocation data current without any action from you.
Currency + exchange rates included
ApogeoAPI returns the visitor's currency code, symbol, and live exchange rate. IP2Location databases only cover IP geolocation — no currency data at any tier.
Serverless-friendly
AWS Lambda, Vercel Edge, Cloudflare Workers — none of these can bundle a 50MB BIN file. ApogeoAPI is a plain HTTPS request that works in any execution environment.
ApogeoAPI vs IP2Location — feature comparison
| Feature | ApogeoAPI | IP2Location |
|---|---|---|
| Delivery model | Cloud REST API | BIN database file + SDK, or REST API (paid) |
| Integration | Single HTTP GET | Download BIN file + SDK + update script |
| Database updates | Automatic (cloud) | Monthly manual download |
| Country + region | ✅ Included | ✅ DB1+ databases |
| City | ✅ Included free | ✅ DB5+ databases (paid tier) |
| Coordinates | ✅ Lat/lon | ✅ DB6+ databases |
| Timezone | ✅ IANA timezone | ✅ DB11+ databases |
| Currency data | ✅ Currency code + live FX rates | ❌ Not included in geo DBs |
| Countries API | ✅ Flag, dial code, native name, etc. | ❌ Not included |
| Serverless compatible | ✅ REST call works everywhere | ⚠️ BIN file deployment awkward |
| Free tier | 1,000 req/mo, full city data | IP2Location Lite DB (CC-BY-SA, country + city only) |
| IPv6 support | ✅ Full IPv6 | ✅ With IPv6 databases |
Migrate from IP2Location to ApogeoAPI
import IP2Location
database = IP2Location.IP2Location("IP2LOCATION-DB11.BIN")
def get_geo(ip: str) -> dict:
rec = database.get_all(ip)
return {
"country": rec.country_short, # "US"
"region": rec.region, # "California"
"city": rec.city, # "Mountain View"
"latitude": rec.latitude,
"longitude": rec.longitude,
"timezone": rec.timezone,
}import httpx, functools
APOGEO_KEY = "your_api_key"
@functools.lru_cache(maxsize=4096)
def get_geo(ip: str) -> dict:
r = httpx.get(
f"https://api.apogeoapi.com/v1/geo/{ip}",
params={"apikey": APOGEO_KEY},
timeout=3,
)
r.raise_for_status()
d = r.json()
return {
"country": d["countryCode"], # "US"
"region": d["regionName"], # "California"
"city": d["city"], # "Mountain View"
"latitude": d["latitude"],
"longitude": d["longitude"],
"timezone": d["timezone"],
# Bonus — not in IP2Location:
"currency": d["currencyCode"], # "USD"
"fx_rate": d.get("currencyRate"), # 1.0 (relative to USD)
}// Before: $record = $database->lookup($_SERVER['REMOTE_ADDR'], IP2LOCATION_ALL);
// After:
function getGeo(string $ip): array {
$url = "https://api.apogeoapi.com/v1/geo/{$ip}?apikey=" . $_ENV['APOGEO_KEY'];
$data = json_decode(file_get_contents($url), true);
return [
'country' => $data['countryCode'],
'region' => $data['regionName'],
'city' => $data['city'],
'latitude' => $data['latitude'],
'longitude' => $data['longitude'],
'timezone' => $data['timezone'],
];
}Frequently asked questions
Does ApogeoAPI need a BIN database file like IP2Location?▼
No. ApogeoAPI is fully cloud-hosted. You pass an IP address in a URL and receive JSON back. There are no files to download, no SDKs to install, and nothing to update monthly.
What is the free tier compared to IP2Location Lite?▼
ApogeoAPI's free tier gives 1,000 requests/month with full city, region, timezone, and currency data — no attribution requirement. IP2Location Lite is a CC-BY-SA database covering country and city that you must host yourself.
Which IP2Location database product does ApogeoAPI replace?▼
ApogeoAPI covers the data equivalent of IP2Location DB11 (IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ZIPCODE-TIMEZONE) plus currency data. It does not cover ISP, proxy detection, or mobile carrier fields.
How do I handle high-volume lookups without overage fees?▼
Cache at the /24 subnet level: strip the last octet (e.g. 8.8.8.0 for 8.8.8.8). IPs in the same subnet almost always resolve to the same location, reducing unique lookups by 50–90% for most traffic patterns.
Other geolocation API comparisons
Switch from IP2Location today
Free tier • No database files • No monthly updates • Currency data included
Get your free API key