Downloads
The whole dataset, on your own disk.
Every table behind the API, in CSV, JSON lines, Parquet and MaxMind DB formats. Samples use synthetic data. Published builds show exact byte counts and checksums; unpublished size estimates are approximate.
Downloads are on the Business plan
$200 a month, includes 2,000,000 API lookups a day and every database on this page. Sign in to an account on the Business plan to unlock them.
Geolocation
15,201,782 rowsCountry, region, city, postcode, coordinates and time zone per network, with ISO codes, GeoNames identifiers and an accuracy rating on every row.
Updated 3 days ago
Columns
network, start_ip, end_ip, country_code, continent_code, country_geoname_id, state, region_code, region_geoname_id, city, city_geoname_id, zip, latitude, longitude, timezone, accuracy, source, last_changed, basis, is_anycast
- Business · ~609 MB
- Business
- Business
- Business
ASN organizations
125,532 rowsEvery autonomous system number with its organization name, country and business category. The MMDB build joins these onto the BGP table so you can look them up by address.
Updated 7 days ago
Columns
asn, name, domain, country, org_type, org_category, updated_at, normalized_type, last_changed
- Business · ~1.9 MB
- Business
- Business
- Business · ~28.8 MB
Datacenter and hosting
734,069 rowsPublished cloud and hosting ranges with the provider, its domain, the region and the service behind each block.
Updated 13 hours ago
Columns
network, start_ip, end_ip, provider, domain, region, service, source, last_seen
- Business · ~9.1 MB
- Business
- Business
- Business · ~25.2 MB
VPN and proxy
342,390 rowsNetworks run by VPN, proxy and egress services, with the service name, the exit region and how the range was established.
Updated 13 hours ago
Columns
network, start_ip, end_ip, service, url, type, confidence, exit_node_region, country_code, city_name, latitude, longitude, source, last_seen
- Business · ~7.2 MB
- Business
- Business
- Business
Tor exit nodes
1,220 rowsEvery address in the Tor Project bulk exit list, refreshed daily.
Updated 7 hours ago
Columns
ip, last_seen
- Business · ~9.5 KB
- Business
- Business
- Business
Abuser networks
2,035,701 rowsNetworks on public abuse blocklists, with the feed that listed them and how many independent feeds agree.
Updated 19 hours ago
Columns
network, start_ip, end_ip, source, source_count, last_seen
- Business · ~23.3 MB
- Business
- Business
- Business
Crawler ranges
15,090 rowsAddress ranges published by search engine and AI crawler operators, so you can tell a real Googlebot from a forged user agent.
Updated 19 hours ago
Columns
network, start_ip, end_ip, bot, source, last_seen
- Business · ~206 KB
- Business
- Business
- Business
Company and abuse contacts
10,797,320 rowsRegistry allocations with the organization behind them and the abuse contact to report to.
Updated 8 days ago
Columns
network, start_ip, end_ip, name, netname, org_type, domain, rir, country, abuse_name, abuse_address, abuse_country, abuse_email, abuse_phone, source, abuse_emails, abuse_phones, network_type
- Business · ~463 MB
- Business
- Business
- Business
BGP routing table
1,590,946 rowsAnnounced prefixes with the AS that originates them, collected from a public route collector.
Updated 13 hours ago
Columns
prefix, start_ip, end_ip, origin_asn, last_seen
- Business · ~16.7 MB
- Business
- Business
- Business
Try a sample bundle
These examples contain synthetic data. Each archive includes schemas, checksums and a manifest.
How to use them
Every range table ships network plus start_ip and end_ip, so you can range scan on integers without teaching your importer about prefixes. The MMDB files are ordinary MaxMind DB version 2 databases with a 128-bit tree; IPv4 sits under ::/96, which is what every standard reader expects.
Found a row that is wrong? Report a correction. Want to know what changed? Read the changelog.
Python import examples for the synthetic files:
import gzip, json, pyarrow.parquet as pq, maxminddb
with gzip.open('ip-api-dev-geo.json.gz', 'rt') as f:
row = json.loads(next(f))
table = pq.read_table('ip-api-dev-geo.parquet')
with maxminddb.open_database('ip-api-dev-whois.mmdb') as db:
contacts = db.get('192.0.2.1')['records']