Mapbox offers one of the most polished geocoding products on the market, with a generous free tier. The catch sits in the fine print: Mapbox splits geocoding into Temporary and Permanent flavours, and only the (much more expensive) Permanent one lets you store the results. This page compares Mapbox with ExoAPI's geocoding API, including where Mapbox is genuinely the better pick.
| Mapbox Temporary Geocoding | Mapbox Permanent Geocoding | ExoAPI Geocoding | |
|---|---|---|---|
| Pricing model | Pay per request | Pay per request | Flat monthly subscription |
| Price | Free up to 100k/month, then ~$0.75/1k | ~$5 per 1,000 requests | From 9β¬/month for 1,000 requests/day (~30,000/month) |
| Free tier | 100,000 requests/month | None | 14-day trial, 10 requests/day, no credit card |
| Storing / caching results | Not allowed | Allowed | Allowed - keep results in your own database forever |
| Data source | Proprietary + open data mix | Proprietary + open data mix | OpenStreetMap, refreshed regularly |
| Other APIs included | Billed separately | Billed separately | All ExoAPI APIs included in the same subscription |
Pricing last checked August 2026 - always verify against the providers' official pricing pages.
Mapbox's Temporary geocoding looks unbeatable: 100,000 free requests every month. But results from the Temporary API may not be exported, cached or stored - they are meant to be displayed and discarded, typically alongside a Mapbox map. The moment you want to save coordinates into your own database (which almost every real application eventually needs: order history, analytics, search indexes), you must switch to Permanent geocoding at around $5 per 1,000 requests with no free tier.
That is the same per-request price point as Google, and it is where ExoAPI's model differs: every plan allows storing results. Geocode an address once on the 9β¬/month Starter plan, keep the coordinates forever, and never pay to geocode it again.
Replace the Mapbox forward-geocoding request:
const res = await fetch(`https://api.mapbox.com/search/geocode/v6/forward?q=${encodeURIComponent(address)}&access_token=${MAPBOX_TOKEN}`);
const data = await res.json();
const [lon, lat] = data.features[0].geometry.coordinates;
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,
});
And this time, writing lat and lon into your database is not a terms-of-service violation - it is the intended workflow.
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.