Dear sir/madam,
I have experience on geo-coding, for instance have look at my recent project "25,000 IP Addresses - need country, region, city, latitude/longitude".
I have used both google map and nominatim OSM service. However, both service have API limits, 2,500request/day and approximately 80,000 requests/day.
The only solution for geo-coding such a big amount 20,000,000 addresses is to install a local instance of Nomitatim. I will also configure nominatim for using TIGER address data, which are the official address data for US for optimal accuracy results.
The installation and configuration of a local nominatim installation requires 2/3 days. I will need additional 4/5 days for geocoding the addresses.
Please contact me for any further information you might require.
Best Regards,
Spyros