LocationIQ is a popular OpenStreetMap-based platform with one of the most generous free tiers in geocoding: 5,000 requests/day at no cost. If that is all you need and you can show their attribution link, stop reading - it is a great deal. This page is about what happens after the free tier: the first paid step, and what ExoAPI's geocoding API does differently in between.
| LocationIQ Free | LocationIQ Developer | ExoAPI Geocoding | |
|---|---|---|---|
| Price | Free | $100/month | From 9β¬/month |
| Daily quota | 5,000 requests/day | 25,000 requests/day | 1,000 requests/day entry, up to 50,000/day by plan |
| Attribution required | Yes - visible link on your app | No | Only standard OSM credit when displaying data on maps |
| Rate limit | 2 requests/second | Higher | Per-plan daily quota |
| Storing / caching results | Allowed (open data) | Allowed (open data) | Allowed (open data) |
| Bundled APIs | Geocoding, maps, routing | Geocoding, maps, routing | All ExoAPI APIs (geocoding, PDF, barcodes, moderationβ¦) |
Pricing last checked October 2026 - always verify against the providers' official pricing pages.
LocationIQ's pricing has a hole in the middle. The free tier covers hobby projects handsomely, and the Developer plan at $100/month for 25,000 requests/day covers serious products. But a small production app - a few hundred geocodes a day, no attribution link wanted on a client's product, an invoice the accountant recognizes - has to jump straight from $0 to $100.
That gap is exactly where ExoAPI's entry plan sits: 9β¬/month for 1,000 requests/day (~30,000/month), no attribution-link requirement in your UI (only the usual "Β© OpenStreetMap contributors" credit when you display the data on a map), and the result is yours to store forever. Because geocoded addresses can be cached in your own database, 1,000/day goes further than it sounds - you never geocode the same address twice.
Both APIs speak OpenStreetMap, so results are directly comparable. Replace the LocationIQ search call:
const res = await fetch(`https://us1.locationiq.com/v1/search?q=${encodeURIComponent(address)}&format=json&key=${LOCATIONIQ_KEY}`);
const data = await res.json();
const { lat, lon } = data[0];
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,
});
ExoAPI's response is already parsed into structured components (house number, street, postcode, city, region codes, currency), so the usual post-processing of Nominatim-style display_name strings disappears.
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.