 <p>If you are simply geocoding cities, you may want to consider starting to build your own cities-to-coordinates cache.</p> <p>This is one approach that you may want to consider: </p> <ul> <li>Prompt the user to enter a city name.</li> <li>First issue an AJAX request to your server to check if that city name is present in your cache.</li> <li>If it is, proceed your JavaScript logic, as if you obtained the coordinates from the Google Geocoder.</li> <li>If the city name was not present in your cache, send a request to the Google Geocoder, as you are currently doing.</li> <li>If the Google Geocoder returns a positive result, issue another AJAX request to your server in order to store this city and its coordinates in your cache. You will never ask Google again for the coordinates of this city. Then proceed normally within your JavaScript application.</li> <li>If the Google Geocoder returns "Unknown address" tell the user that this city name was not found, and suggest to retry using a more common city name. Keep note of the original city name that was attempted. Test the second attempt with the Google Geocoder, and if it succeeds, save into your cache both synonyms of the city name (the first one attempted, and the second on that succeeded if not already present). </li> </ul> <p>With this approach you can also seed your cache, in such a way to resolve city names which you are already aware that Google is not able to geocode.</p>