You will find free geocoding services limited (in quailty) but commercial geocoders (Google Enterprise, Yahoo JBoss, TomTom) good quality but expensive for number of requests over 100,000+
Geocoding is the process of matching addresses with geographic
coordinates. The MapQuest Open Geocoding API designed to provide an
easier way to geocode using OpenStreetMap (OSM) data. The Open
Geocoding API is based on Nominatim and supports three major geocoding
functions: address, reverse, and batch. There is no app key required
to use this service.
In your case I would recommend MapQuest Open Geocoding Service
MapQuest have an open geocoding api (based from data from OpenStreetMap)
To do a reverse geocode you need to sign up [Free] for an api key.
The you can send requests like
http://open.mapquestapi.com/geocoding/v1/reverse?key=YOUR_KEY_HERE&callback=renderReverse&location=40.0755,-76.329999
for JSON response simply add &json={location:{latLng:{
to the call
http://open.mapquestapi.com/geocoding/v1/reverse?key=YOUR_KEY_HERE&callback=renderReverse&json={location:{latLng:{lat:40.0755,lng:-76.329999}}}
http://developer.mapquest.com/web/products/open/geocoding-service
Resverse Geocoding Examples (as above)
http://open.mapquestapi.com/geocoding/#reverse
if your a coder then see
http://open.mapquestapi.com/media/js/samples/geocoding/reverse.js