Geoapify is a solid open-data location platform with a genuinely useful free tier of 3,000 credits/day. Its pricing runs on credits: a plain geocoding request costs one credit, but other operations are weighted differently, so your real capacity depends on your exact mix of calls. This page compares it with ExoAPI's geocoding API, which trades the credit system for one number: requests per day.
| Geoapify Free | Geoapify API 10 | ExoAPI Geocoding | |
|---|---|---|---|
| Price | Free | $59/month | From 9β¬/month |
| Daily quota | 3,000 credits/day | 10,000 credits/day | 1,000 requests/day entry, up to 50,000/day by plan |
| Pricing unit | Credits (weighted per API) | Credits (weighted per API) | Requests |
| Storing / caching results | Allowed (open data) | Allowed (open data) | Allowed (open data) |
| Data source | OpenStreetMap + open data | OpenStreetMap + open data | OpenStreetMap, refreshed regularly |
| Bundled APIs | Maps, routing, isolinesβ¦ | Maps, routing, isolinesβ¦ | All ExoAPI APIs (geocoding, PDF, barcodes, moderationβ¦) |
Pricing last checked October 2026 - always verify against the providers' official pricing pages.
For pure forward geocoding, Geoapify's math is simple: 1 request = 1 credit, so the free tier really is 3,000 geocodes a day - use it with a clear conscience for side projects.
The accounting gets harder the moment your usage mixes APIs. Map tiles, routing, isolines and batch jobs each consume credits at their own rates, so the capacity question becomes "how many credits does our traffic pattern burn?" - something you discover from the usage dashboard rather than the pricing page. Capacity planning means modelling your mix; a new feature on the map can eat the quota your geocoding relied on.
ExoAPI's model removes the shared budget: a geocoding plan is a number of geocoding requests per day, and the other bundled APIs (reverse geocoding, HTML to PDF, barcodes, content moderation) have their own per-plan quotas instead of draining a common pool.
Replace the Geoapify geocoding call:
const res = await fetch(`https://api.geoapify.com/v1/geocode/search?text=${encodeURIComponent(address)}&apiKey=${GEOAPIFY_KEY}`);
const data = await res.json();
const { lat, lon } = data.features[0].properties;
With the ExoAPI call:
import { ExoAPI } from "@flower-digital/exoapi-sdk";
const exoapi = new ExoAPI({ apiKey: "<your-api-key>" });
const { lat, lon, postalCode, city, country } = await exoapi.geocoding({
address,
});
Both are OpenStreetMap-based and both let you store the output, so you can migrate incrementally and keep every coordinate you have already paid for.
Start a free 14-day trial (no credit card required), geocode a sample of your real addresses, and compare the results for your regions before deciding.