Google Places Autocomplete is the default choice for a lot of teams because it's bundled with Maps Platform and covers every address on Earth, not just cities. If all you actually need is city-level autocomplete — a signup form, a job board location filter, a checkout city field — it's worth knowing what you're allowed to do with the results afterward before you commit to it.
To be fair to Google: for full street-address autocomplete, building-level precision, or global address validation, there's no real substitute — Geomelon only covers cities, not addresses. If you need address-level autocomplete, Places is the right tool regardless of price.
Per Google's own Places API policies: you must not pre-fetch, cache, or store Places API content, with one specific exception — the place_id value is exempt and can be stored indefinitely. Everything else returned by an Autocomplete or Place Details call (the address text, coordinates, name) falls under that restriction. If your product needs to cache city names or coordinates in your own database, that's a real constraint to plan around, not a rate-limit inconvenience — worth reading Google's policy directly before you architect around it.
Google's session-based pricing bundles Autocomplete requests with a terminating Place Details call, which can be free or heavily discounted — but only if the user actually completes a session. The first 12 requests in any session, and every request in an abandoned session (user never selects a result — common for pure "browse as you type" UI, or a city field where the user just wants to see options), bill individually. That's a real product-design constraint: to get the cheaper pricing, your UI has to be built around completing a Place Details lookup, not just live-filtering as the user types. Check Google's current pricing directly before committing to either approach.
City-only autocomplete, no session required, no key rotation for a public-facing widget:
Google Places Autocomplete (New):
curl --request POST \
--url 'https://places.googleapis.com/v1/places:autocomplete' \
--header 'Content-Type: application/json' \
--header 'X-Goog-Api-Key: YOUR_API_KEY' \
--data '{"input": "Lon", "includedPrimaryTypes": ["locality"]}'Geomelon equivalent (free, no key, city-only):
curl --request GET \
--url 'https://oneshot.geomelon.dev/gb/en/lon'