I have a data set with zipcodes and would like to do a bulk upload to a tool that will give me the cities each zip is in (US only.)
There is no simple answer to this question, because ZIP codes do not represent geographical areas. They represent postal delivery routes, which are sometimes simply a bank of PO boxes in a specific post office, and are sometimes an organization like a University which has its own internal mail processing services.
Therefore, not all ZIP Codes can truly be located in a city, and even those for which a geography can be reasonably defined, they are not necessarily located within a single city.
Probably the closest approximation you could get would be to start with the Census Bureau's ZIP code tabulation area (ZCTA) gazetteer file, which can be downloaded here. Then, using as many of the state-based "place" shape files as you need, load those into a GIS tool. Personally, I'd use PostGIS, but you might also be able to use QGIS, or if you can get your hands on a copy, ArcGIS (commercial software).
You could then:
You will probably have some ZIP codes which aren't in the ZCTA dataset, and it's not really precise, but it's probably good enough for a lot of cases.
Absolutely, and it's very easy to use. You can use the API anytime you like. Try out the demo here. This has previously been one of our paid services but we are making it 100% free and publicly available within the next few weeks. In the meantime, if you've got a list you need to process, send it to me (firstname.lastname@example.org) and I'm happy to do it for you while we finish rolling this out.
[I work at SmartyStreets, that's why I have inside information about it and can offer our services.]