Geocoding & places API

An address goes in.
Coordinates come out.

Geode resolves any address, postcode or place name to precise lat/long plus structured place data — in a single request. Ship in minutes, pay per request, and never get a surprise bill.

  • p95 38 ms
  • uptime 99.99%
  • coverage 247 countries
request — curl
POST https://api.geode.dev/v1/geocode
# one round-trip, JSON in / JSON out
curl -s https://api.geode.dev/v1/geocode \
  -H "Authorization: Bearer $GEODE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"q": "1600 Amphitheatre Pkwy, CA"}'
200 OK — response
{
  "lat": 37.4220,
  "lng": -122.0841,
  "formatted": "1600 Amphitheatre Pkwy,
              Mountain View, CA 94043",
  "confidence": 0.98,
  "place_type": "address",
  "country": "US"
}
Estimate your bill

No surprise invoices. Move the dials.

Type your monthly request volume and pick a plan — the estimate updates as you go. You only pay overage on requests beyond your plan's included quota.

Estimates use graduated overage at the plan's per-1k rate. Taxes excluded. Hobby starts free.

Estimated monthly cost $69.00 $49.00 base + 50,000 billable requests Get API key
Volume pricing

The more you geocode, the less each call costs.

Transparent per-request pricing with a generous included quota on every plan. Overage is billed per 1,000 requests at the rate below.

Geode plans with monthly base, included requests and per-1k overage
Plan Monthly Included requests Per 1k overage Action
Hobby Free 10,000 $0.60 Get API key
Growth $199 1.5M $0.25 Get API key
Scale $799 10M $0.12 Get API key
Enterprise Custom Unlimited Volume Get API key
Copy, paste, ship

One request. Your language.

The exact same call in curl, JavaScript, Python and Go. No SDK lock-in — it's just HTTP. Switch tabs to see your stack.

Choose a language for the code sample
curl -s https://api.geode.dev/v1/geocode \
  -H "Authorization: Bearer $GEODE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"q": "1600 Amphitheatre Pkwy, CA"}'
const res = await fetch("https://api.geode.dev/v1/geocode", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.GEODE_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ q: "1600 Amphitheatre Pkwy, CA" }),
})

const place = await res.json()
console.log(place.lat, place.lng)
import os
import requests

res = requests.post(
    "https://api.geode.dev/v1/geocode",
    headers={"Authorization": "Bearer " + os.environ["GEODE_KEY"]},
    json={"q": "1600 Amphitheatre Pkwy, CA"},
)
place = res.json()
print(place["lat"], place["lng"])
body, _ := json.Marshal(map[string]string{"q": "1600 Amphitheatre Pkwy, CA"})
req, _ := http.NewRequest("POST", "https://api.geode.dev/v1/geocode", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer "+os.Getenv("GEODE_KEY"))
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
Reliability

Fast at the edge. Boring on call.

Geode runs in 18 regions behind an anycast edge, so requests resolve close to your users. Live numbers on the status page.

99.99% uptime · 90d
12ms p50 latency
38ms p95 latency
Response time, last 30 windows
Uptime, last 60 days

Anatomy of a request

your client geode edge geocode API 200 · JSON TLS + cache resolve ~38ms total
30 seconds to first request

Get your API key.

Drop in your email, copy the key, make your first call before your coffee's cold. No credit card for the Hobby tier.

Front-end demo only — no data leaves your browser.