Replace Google Placesin your city fields
Get city suggestions with coordinates in one request, keep every result, and pay a fraction of what Google charges.
30,000 requests a month free, with commercial use. No card needed.
| Service | City suggestions | Reverse lookup | Free plan |
|---|---|---|---|
| Onde Growth | $29 | $29 | 30,000 a month |
| Google Maps Platform | about $2,013 | about $3,550 | 10,000 a month for each kind |
Public prices on 2026-11-03.
Fewer requests and fewer rules
-
One request per pick
Each Onde suggestion has its coordinates and time zone. A Google autocomplete suggestion has no coordinates, so each pick needs a second request.
-
Results you may keep
Store every city in your own database. Google exempts only the place ID from its caching limits.
-
IDs that need no refresh
An Onde city ID stays the same in every later dataset, and a retired ID returns its replacement when one exists. Google place IDs can change, Google recommends a refresh after 12 months, and an obsolete place ID returns an error.
Keep Google for addresses
Google Places finds street addresses, businesses, and landmarks. Onde finds cities and districts only. Keep Google in the fields that need an address, and move the city fields to Onde.
Try the live API
/v1/cities/autocomplete curl "https://api.onde.earth/v1/cities/autocomplete?q=kyoto" \
-H "Authorization: Bearer $ONDE_KEY" const url = 'https://api.onde.earth/v1/cities/autocomplete'
const query = new URLSearchParams({ q: 'kyoto', key: 'onde_pk_...' })
const response = await fetch(`${url}?${query}`)
const { data } = await response.json() const url = 'https://api.onde.earth/v1/cities/autocomplete'
const query = new URLSearchParams({ q: 'kyoto' })
const response = await fetch(`${url}?${query}`, {
headers: { Authorization: `Bearer ${process.env.ONDE_KEY}` }
})
const { data } = await response.json() import os
import requests
response = requests.get(
"https://api.onde.earth/v1/cities/autocomplete",
params={"q": "kyoto"},
headers={"Authorization": f"Bearer {os.environ['ONDE_KEY']}"},
)
data = response.json()["data"] {
"data": [
{
"id": "city_39sy1dm2dj",
"name": "Kyoto",
"localName": "京都市",
"type": "city",
"parentCityId": null,
"country": {
"code": "JP",
"name": "Japan"
},
"region": {
"id": "region_yjwfrtj0fe",
"isoCode": "JP-26",
"name": "Kyoto"
},
"coordinates": {
"latitude": 35.02107,
"longitude": 135.75385
},
"population": 1463723,
"timeZone": "Asia/Tokyo",
"isCapital": false,
"disputed": false,
"match": "exact"
}
],
"meta": {
"dataset": "2026-11-17"
}
} How we compare
- The Google row adds the tiered prices of the Autocomplete Requests SKU and the Geocoding SKU after the free requests.
- The prices are from the public pricing page on 2026-11-03.
Try Onde next to Google Places
- No card needed
- 30,000 requests a month free
- Commercial use on the Free plan