Positionstack
Forward and reverse geocoding API built on OpenStreetMap with support for 2 billion+ places and 100+ countries.
🔴 Offline · 456 ms
0%
25,000 calls/month, free key, no credit card
API key
Free alternatives (live ranking)
- ip-api.com — 🟢 Online · 45 calls/min (HTTP only), no key, no credit card
- IPinfo — 🟢 Online · 50,000 calls/month, no key (token extends limits)
- GeoIP-db — 🟢 Online · Unlimited, no key, no credit card
Compare Positionstack with…
- Positionstack vs ip-api.com — 45 calls/min (HTTP only), no key, no credit card
- Positionstack vs IPinfo — 50,000 calls/month, no key (token extends limits)
- Positionstack vs GeoIP-db — Unlimited, no key, no credit card
Paid alternatives
- Positionstack Basic — from $9.99/mo
Frequently Asked Questions
Does Positionstack require an API key?
Yes, Positionstack requires a free API key. You can sign up via https://positionstack.com/documentation.
What is Positionstack's free tier?
25,000 calls/month, free key, no credit card
Is Positionstack currently online?
We check Positionstack every hour. The current status is shown at the top of this page. You can also see the 30-day uptime history in the chart above.
Implementation notes
When to use Positionstack
Positionstack offers 25,000 calls/month on its free tier — more generous than most geocoding APIs — backed by OpenStreetMap and Geonames data. It suits batch geocoding jobs for datasets with tens of thousands of addresses where Nominatim's 1 req/sec throughput would be impractical. Best for: analysts geocoding a customer list, real-estate apps enriching property data, and CRM cleanup tasks. Not great for real-time user-facing search (Nominatim's Photon is faster) or high-precision property-level geocoding in the US (Positionstack's underlying OSM data is thinner than commercial US datasets).
Common pitfalls
- Positionstack's free tier only supports HTTP, not HTTPS. HTTPS requests on the free tier return an error about SSL not being available. Upgrade to a paid plan or use a server-side proxy if your application requires HTTPS.
- The API returns results in a `data` array, not as a single object. An empty array (`{'data': []}`) is returned when the address cannot be geocoded rather than a non-200 status code — always check array length.
- Batch geocoding (multiple addresses in a single request) is a paid feature. The free tier requires one HTTP request per address, which means throughput is limited by how fast you can issue requests within the monthly budget.
- The `confidence` score in Positionstack results uses a 0-1 scale. Scores below 0.5 typically indicate the geocoder matched only a city or region rather than a specific street address.
- The API does not distinguish between 'address not found' and 'address ambiguous with low confidence match'. Both return a data array with a low-confidence result. Filter by `confidence >= 0.6` for defensible geocoded results and treat lower scores as unresolved.
Quick start (bash)
curl "http://api.positionstack.com/v1/forward?access_key=YOUR_KEY&query=1600+Pennsylvania+Ave+NW+Washington+DC&limit=1" From our monitoring
Positionstack has been reliable in our monitoring (99.5% uptime) with response times around 400-600ms globally. The HTTP-only free tier is a real friction point — modern browsers block mixed content, so any client-side integration requires either a server proxy or paying for HTTPS. That extra $10-20/month is often what pushes teams to Nominatim self-hosted instead. On the paid tier, HTTPS + batch geocoding + higher rate limits combined make it competitive with more expensive commercial providers.
Production integration patterns
Batch cleanup pipeline
For one-time cleanup of a customer address list: read the CSV, iterate with a rate-limited loop (say 5 req/sec to stay well under Positionstack's per-second cap), geocode each address, write results back to a new CSV with lat/lng and confidence columns. For 25,000 addresses this takes about 90 minutes and uses your entire monthly budget — plan accordingly. Save intermediate results every 500 rows to survive crashes.
Server-side proxy for HTTPS
For any client-side use (React app, mobile app), do NOT call Positionstack directly from the browser on the free tier — HTTP requests are blocked by modern browsers on HTTPS pages. Instead, run a thin proxy on Cloudflare Workers or your API server that receives HTTPS requests, calls Positionstack over HTTP internally, and returns the results. Cache aggressively (7-day TTL by address string) to reduce API calls. This turns the 25k/month into effectively-unlimited for personal projects.
Compared to the closest paid alternatives
vs Nominatim (self-hosted) — $20/month VPS + one afternoon of setup
For anything at scale, self-hosting Nominatim on a $20/month VPS is dramatically cheaper than any geocoding API. Setup takes an afternoon (Docker image exists), disk usage is ~90GB for planet-scale data. No rate limits, no cost per call, HTTPS via Cloudflare in front. The complexity is only worth it when you'd otherwise spend more than $30/month on a hosted geocoder.
vs OpenCage Geocoding — Free: 2.5k/day HTTPS · Basic: $50/month for 10k/day
OpenCage offers 2,500 free requests/day (75k/month) with HTTPS, better parsing, and a cleaner API design. Slightly tighter than Positionstack on absolute volume but the HTTPS support and higher quality make it a better default for most user-facing applications.
vs Geoapify — Free: 3k/day with autocomplete · Starter: $50/month
Geoapify's free tier is 3,000 requests/day (90k/month) with HTTPS support, an actual batch endpoint, and address autocomplete. For anything user-facing with address entry, Geoapify beats Positionstack on developer experience. Pricing scales similarly.
Embed this badge
Add a live status badge to your README, docs, or website.
Markdown
[](https://freeapi.watch/positionstack) HTML
<a href="https://freeapi.watch/positionstack"><img src="https://freeapi-builder.a10ayassine.workers.dev/badge/positionstack.svg" alt="Positionstack Status"/></a>