IANAL, but according to the Google Maps API Terms of Service, it appears as though one is not allowed to store geocoding results in a database:
10.1.3 Restrictions against Copying or Data Export.
(a) No Unauthorized Copying, Modification, Creation of Derivative Works, or Display of the Content. You must not copy, translate, modify, or create a derivative work (including creating or contributing to a database) of, or publicly display any Content or any part thereof except as explicitly permitted under these Terms. For example, the following are prohibited: (i) creating server-side modification of map tiles; (ii) stitching multiple static map images together to display a map that is larger than permitted in the Maps APIs Documentation; (iii) creating mailing lists or telemarketing lists based on the Content; or (iv) exporting, writing, or saving the Content to a third party's location-based platform or service.
(b) No Pre-Fetching, Caching, or Storage of Content. You must not pre-fetch, cache, or store any Content, except that you may store: (i) limited amounts of Content for the purpose of improving the performance of your Maps API Implementation if you do so temporarily (and in no event for more than 30 calendar days), securely, and in a manner that does not permit use of the Content outside of the Service; and (ii) any content identifier or key that the Maps APIs Documentation specifically permits you to store. For example, you must not use the Content to create an independent database of "places" or other local listings information.
So then why does Google itself have a tutorial, “Creating a Store Locator with PHP, MySQL & Google Maps” on how to do exactly that?
Is it safe to assume, as some developers have, that given the tutorial–which has no mention of the phrases “cache”, “caching”, “30 days”, “temporary”, “temporarily”, “terms”, etc.–that Google does not actually mind permanent storage of [select] geocoding data in a database, and the Terms of Service are overly restrictive just so they have more control from a legal standpoint? I.e. they will probably not prosecute you for this kind of thing, unless you do something to annoy them?
And would they even be able to find you at fault? The terms seem unenforceable to me. There is no way to verify where the data in a database originated; it could have been extracted or entered in manually from any variety of sources, including one’s own memory. (I know that the terms also state that one may not use data derived elsewhere in conjunction with Google Maps technology, if that is relevant.)
Alternatively, is it safe to assume that it is OK to store address components that Google does not technically own, as other developers have?
- Addresses are not created or owned by Google, this is public information. What Google has done is to gather them and put them in a presentable, easy to search, interface. But it is not part of "the content".
- GPS locations are not created or owned by Google, this is public information as well. In fact, GPS was created by the department of defense (DoD) in the US. They are the ones who control its use.
…even though Google defines Content broadly under Section 8.1.b, which specifically includes content they did not create:
(b) "Content" means any content provided through the Service (whether created by Google or its third party licensors), including map and terrain data, photographic imagery, traffic data, places data (including business listings), or any other content.
Or, is the tutorial just not specific enough in stating that you must comply with clause 10.1.3.b.i, in addition to following the instructions therein? Note its stated goal seems to imply that it is OK to store the results in a database as-is:
After completing this tutorial, you will have a database of locations and a webpage that lets a user enter their address and see markers on a map for the locations nearest to them, within a chosen distance restriction.
Also, at the end of the tutorial, they actually give you ideas on how to improve upon the base functionality described therein:
Now that you have a store locator for your website, consider extending it with more features.
Note that I have sent Google a slightly condensed version same question through the feedback interface on the tutorial page, so hopefully they either reach out or clarify it (I will answer my own question if that happens), but in the interim, please advise. I am building a Google Maps-powered store locator app for a client and I do not want them or me to be liable.