Если вы ищете решение на стороне сервера, я рекомендую GeoIP / GeoLite от MaxMind. У него чистый, простой и эффективный API, хотя его основная документация, похоже, находится только в заголовочных файлах. Если вы хотите большей точности позже, платную версию базы данных можно заменить бесплатной версией, просто заменив файл базы данных (без изменений кода).