From my experience with the Google Places API, your understanding is almost correct. Let me explain these two points in my own words:
i) Without prefetching or redistributing outside your application, you can cache API results for up to 30 days.
ii) You can use the place identifier or key in your specific application data, but nothing more (for example, if your application allows users to "register" places, you can save a list of place identifiers where they were a user object and search for places as necessary ID, but you canβt save a list of all places with Google names / details).
To reduce the number of API calls and speed up my application, I do the caching of neighboring calls in a simple cache, where the key is a lat pair rounded to a certain accuracy (so that calls within a certain radius fall into the cache), and the value is whole line of JSON result. Here is my code that runs on Java in the Google App Engine:
// Using 4 decimal places for rounding represents approximately 11 meters of precision // http://gis.stackexchange.com/questions/8650/how-to-measure-the-accuracy-of-latitude-and-longitude public static final int LAT_LONG_CACHE_PRECISION = 4; public static final int CACHE_DURATION_SEC = 24 * 60 * 60; // one day in seconds ... String cacheKey = "lat,lng:" + round(latitude) + "," + round(longitude); asyncCache.put(cacheKey, dataJSON, Expiration.byDeltaSeconds(CACHE_DURATION_SEC), MemcacheService.SetPolicy.SET_ALWAYS); ... private static double round(double value) { BigDecimal bd = new BigDecimal(value); bd = bd.setScale(LAT_LONG_CACHE_PRECISION, RoundingMode.HALF_UP); return bd.doubleValue(); }
Regarding alternative APIs, I would suggest you look at the following:
Yelp API - provides data on bars / restaurants that Google lacks
Facebook API - easy to use if you are already using the Facebook SDK
Actual: Crosswalk Places - aggregates and normalizes place data from many sources, including Facebook and Yelp, but not Google
I am currently using the Google Places API, but I plan to add Yelp or Factual later to improve end-user results.