I have an API that is somewhat popular (10,000+ requests/day). After 10 requests per day from an IP address I return a message telling the user they need to cough of some cash i
I use the MaxMind GeoIP web service: http://www.maxmind.com/en/web_services#country
You get 2,000,000 lookups for $200. Works great, low latency, and you don't have to maintain a local database.