Every IP range, with its country and timezone.
Every IPv4 and IPv6 range matched to its continent and country, each by code and name, with its IANA timezone and the country's currency and flag: the country and zone IP Geolocation gives it, neighbors of the same country and zone merged into one row.
Schema at a glance.
See documentation →The schema and metadata are in the docs. It is published as CSVGZ and MMDB.
| start_ip | end_ip | continent | continent_name | country | country_name | timezone | currency_code | currency_name | currency_symbol | flag_emoji | flag_unicode |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1.6.0.0 | 1.7.255.255 | AS | Asia | IN | India | Asia/Kolkata | INR | Rupee | ₹ | 🇮🇳 | U+1F1EE U+1F1F3 |
| 1.179.103.0 | 1.179.103.255 | NA | North America | US | United States | America/Chicago | USD | Dollar | $ | 🇺🇸 | U+1F1FA U+1F1F8 |
| 1.178.32.0 | 1.178.47.255 | SA | South America | BR | Brazil | America/Sao_Paulo | BRL | Real | R$ | 🇧🇷 | U+1F1E7 U+1F1F7 |
| 2.27.26.128 | 2.27.26.159 | AN | Antarctica | AQ | Antarctica | Antarctica/Syowa | 🇦🇶 | U+1F1E6 U+1F1F6 | |||
| 2400:1000:: | 2400:1000:ffff:ffff:ffff:ffff:ffff:ffff | AS | Asia | JP | Japan | Asia/Tokyo | JPY | Yen | ¥ | 🇯🇵 | U+1F1EF U+1F1F5 |
Downloading it from code.
Database API reference →One call gets you the current IP Country build. Every official client wraps it three ways: straight to disk, a time-limited link you hand to your own runner, or bytes in memory, and checksums() returns the published digests to verify it against.
download()downloadUrl()downloadBytes()metadata()checksums()import osfrom internetdata import InternetDataclient = InternetData(os.environ["INTERNETDATA_API_KEY"])# what is in today's build, without moving the filemeta = client.database.metadata("ip_country_v1")client.database.download("ip_country_v1", "mmdb", "./ip_country_v1.mmdb")sums = client.database.checksums("ip_country_v1", "mmdb")print(meta.updated, meta.entries, sums["sha256"])
Getting your hands on it.
Free with an account, and the file is yours: teams join IP Country against the traffic, logs and routing data they already hold, inside their own infrastructure.
Localization
Pick a visitor's language, currency and flag from the country of their address, in one lookup.
Country rules
Apply each country's terms, taxes or restrictions by where a request comes from.
Local time
Read a timestamp, or send a message, on the visitor's own clock.
An official client for every major language.
All SDKs on GitHub →Twelve official clients for the languages you ship in, each wrapping the database endpoints: list what you're licensed for, poll a build, follow the download redirect and verify what landed. Install commands are in the docs.
What is in a row?
One range, both ends inclusive, with its continent and country, each by code and name, its IANA timezone, and its country's currency and flag. IPv4 and IPv6 are in the same file.
Does it agree with IP Geolocation?
Yes. The country and the timezone are the ones IP Geolocation gives the same range, with neighbors of the same country and zone merged into one row.
Why is a timezone or a currency empty?
The few ranges in Bouvet Island (BV) and Heard Island (HM) have no city, so no zone. A few territories have no currency of their own, Antarctica among them. Either way the row still carries its country.
Is it really free?
Yes. Create an account and download it from the console, or with your API key from the API or any official client. It's licensed under CC BY-SA 4.0: credit InternetData and share what you build from it under the same license.
How often is it rebuilt?
Daily. The metadata call answers when the current build landed and how many rows it holds, before you fetch it.
Which formats does a build ship in?
Gzipped CSV and MMDB, both cut from the same build. Poll the metadata call first and fetch only when the build has changed.
What if a row looks wrong?
Send it to us and we'll tell you what we hold on it, when we last saw it and how. Corrections land in the next build.