Ah, yeah, using Area code + prefix is way better than what I was proposing. From your '99 list, going up one dir, and clicking one of the links on that page led me to this:
http://www.nanpa.com/reports/reports...es_assign.html
Which contains this:
http://www.nanpa.com/nanp1/allutlzd.zip
Which has all states, area code, prefix, *provider*, and city.
Doesn't look too hard to parse either, I may give it a shot if I get some free time today, but of course you'd still have to modify your app to accept it.