IP Geolocation Complete — CSV

On this page

Our most detailed IP geolocation, with ranges for hyper-local, in-city location on wired networks, as CSV tables that join by ID. It also includes everything in Network Data, each ASN's most active operational area, and proxy, Tor and VPN lists. Lookup files in the same ZIP turn the IDs into coordinates, place names in 10 languages and polygons.

  • Format CSV
  • Archive bigdatacloud-complete-csv.zip
  • 25 files
  • IPv4 + IPv6
  • Updated daily

At a glance

What's in it

IP ranges with LocationId, ConfidenceAreaId, IsCellular, HostingLikelihood, ConfidenceScore and DeploymentExtentKm; locations; confidence areas; place names in 10 languages (German, English, Spanish, French, Italian, Japanese, Korean, Portuguese, Russian and Chinese), compiled and maintained by BigDataCloud. Each language falls back to the English name where a translation isn't published; BGP prefixes with origin ASN and reachability; RIR registry ranges; Asns.csv with each ASN's most active operational area; known proxy, Tor server and VPN addresses.

What it's for

The most detailed location data for your own systems, with network signals and proxy, Tor and VPN lists in one download.

Includes the other packages

Complete covers Compact's fields with its own ranges for hyper-local, in-city location on wired networks, and everything in Network Data with Asns.csv in place of Asns-Basic.csv.

Scale

Over a hundred million IPv4 and IPv6 ranges. Manifest.csv has the exact counts for each release.

Licence

Flat Data Standard Licence: internal use by your company and its employees only.

Files in the archive

FileWhat it holdsKey / join column
Ranges-IPv4.csvIPv4 ranges with location, confidence area and network signalsLocationId,ConfidenceAreaId
Ranges-IPv6.csvIPv6 ranges, same columnsLocationId,ConfidenceAreaId
Locations.csvCoordinates, ISO codes, GeoNames IDs, postcode and time zone per locationLocationId
ConfidenceAreas.csvConfidence area polygon (WKT) per areaConfidenceAreaId
Geonames-{lang}.csv × 10Place names by GeoNames ID, one file per language: de, en, es, fr, it, ja, ko, pt, ru, zhGeonamesId
Asns.csvASN identity, statistics and the ASN's most active operational areaAsn,ConfidenceAreaId
BgpPrefixes-IPv4.csvIPv4 BGP prefixes with origin ASN, reachability, bogon flag and registry statusAsn
BgpPrefixes-IPv6.csvIPv6 BGP prefixes, same columnsAsn
RirInetnums-IPv4.csvIPv4 registry ranges with organisation, country, registry and last-modified time— (match by IP)
RirInetnums-IPv6.csvIPv6 registry ranges, same columns— (match by IP)
Proxies.csvKnown proxy IPv4 addresses and IPv6 networks— (match by IP)
TorServers.csvKnown Tor server IPv4 addresses— (match by IP)
Vpns.csvKnown VPN IPv4 addresses and IPv6 networks— (match by IP)
README.txtPackage overview and links—
Manifest.csvBuild time, data timestamps, row totals and distributions, then one row per other file in that ZIP, including NOTICE.txt where present, with its byte count—
NOTICE.txtThird-party data attributions—

Fields

Ranges-IPv4.csv / Ranges-IPv6.csv

Complete

One row per IP range. Both files have the same columns.

FieldTypeExampleDescription
RangeStartip139.130.4.0First address in the range (inclusive). IPv4 in dotted-quad form; IPv6 in compressed text form (2001:8000::).
RangeEndip139.130.4.31Last address in the range (inclusive). Same notation.
LocationIdint307583Key into Locations.csv. Supplied where collected network information is statistically significant.
ConfidenceAreaIdint2399Key into ConfidenceAreas.csv. Supplied where collected network information is statistically significant.
IsCellularboolFalseTrue if the network appears to be cellular.
HostingLikelihoodint0Likelihood, from 0 to 10, that the IP is in a hosting or datacentre environment rather than a residential or mobile network. Higher values mean a greater likelihood of non-human or automated use. See Understanding the Hazard Report.
ConfidenceScoreint3How reliable the location estimate is, from 0 to 5: 0–1 Low, 2–3 Medium, 4–5 High. It reflects how closely our service-area estimate matches real-world observations; High is the most reliable. It says nothing about the size of the confidence area. See Understanding the confidence value.
DeploymentExtentKmint250Typical spread, in km, of where this network's dynamically assigned addresses are used about 80% of the time. It isn't an error radius; use the confidence area for the full footprint. Supplied only where collected network information is statistically significant.

BgpPrefixes-IPv4.csv / BgpPrefixes-IPv6.csv

Complete

One row per BGP prefix. Both files have the same columns.

FieldTypeExampleDescription
Prefixprefix139.130.0.0/16CIDR prefix.
Asnint1221Origin ASN. Key into Asns.csv. Present when the prefix is announced in BGP.
IsReachableboolTrueTrue if the prefix is announced in BGP and globally reachable. False if the prefix isn't announced in BGP or is a bogon.
IsBogonboolFalseTrue if the prefix is announced in BGP but sits in space that shouldn't be announced (reserved, available or unassigned). Private and reserved space that isn't announced, such as 10.0.0.0/8, is False; its RegistryStatus shows it as reserved.
RegistryStatusstringAssignedRegistry status: Assigned, Available, Reserved, or Undefined where the registry gives none.
RegistrystringApnicRegistry for the prefix: Afrinic, Apnic, Arin, Iana, Lacnic, Ripe, or Undefined where the registry gives none.

RirInetnums-IPv4.csv / RirInetnums-IPv6.csv

Complete

One row per registry range (inetnum or inet6num). Both files have the same columns.

FieldTypeExampleDescription
RangeStartip139.130.0.0First address in the range (inclusive). Same notation as Ranges-*.
RangeEndip139.130.255.255Last address in the range (inclusive).
Organisationstring"Telstra Limited"Organisation that holds the range, from registry data. Very long names are shortened and end in ... A few names contain line breaks, inside the quotes.
Countrystring"AU"Country for the range as the registry publishes it: usually a two-letter code, sometimes several codes separated by spaces, or free text.
Registrystring"Apnic"Registry the record comes from: Afrinic, Apnic, Arin, Jpnic, Krnic, Lacnic, Radb, Ripe or Twnic.
RegistryLastModifiedtimestamp2024-05-10T00:50:24.0000000ZWhen the registry last changed the record: ISO 8601 date and time in UTC.

Proxies.csv / TorServers.csv / Vpns.csv

Complete

One entry per row, no duplicates. The three files have the same single column.

FieldTypeExampleDescription
IpAddressip104.28.163.36An entry on the list: proxy (Proxies.csv), Tor server (TorServers.csv) or VPN (Vpns.csv). IPv4 entries are single addresses. IPv6 entries are /64 networks given by their first address, ending in :: (for example 2a00:fbc:ecd2:15f9::). TorServers.csv is IPv4 only.

Lookup files

Complete

Locations.csv, ConfidenceAreas.csv, Geonames-{lang}.csv, Asns.csv and Manifest.csv are defined in the Lookup files reference: Locations · ConfidenceAreas · Geonames · Asns · Manifest.

How the files join

README.txt gives an overview of the package. No ID key: match the RIR, proxy, Tor and VPN files by IP address or range.Manifest.csv is release metadata. NOTICE.txt holds third-party data attributions.Ranges-IPv4.csvRanges-IPv6.csvsame schemaRangeStartRangeEndFKLocationId?FKConfidenceAreaId?+4 more columnsLocations.csvPKLocationIdFKSubdivisionGeonamesId?FKCityGeonamesId?FKLocalityGeonamesId?+7 more columnsGeonames-{lang}.csv× 10 languagesPKGeonamesIdNameConfidenceAreas.csvPKConfidenceAreaIdGeometryWktAsns.csvPKAsnFKConfidenceAreaId?operational area+9 more columnsBgpPrefixes-IPv4.csvBgpPrefixes-IPv6.csvsame schemaPKPrefixFKAsn?present when announced+4 more columnsREADME.txtpackage overviewRirInetnums-IPv4.csvRirInetnums-IPv6.csvsame schemaRangeStartRangeEnd+4 more columnsProxies.csvTorServers.csvVpns.csvsame schemaIpAddressManifest.csvrelease metadataDescription+4 more columnsNOTICE.txtthird-party data attributionsLocationIdConfidenceAreaIdGeonamesIdConfidenceAreaIdAsn
README.txt gives an overview of the package. NoID key: match the RIR, proxy, Tor and VPN files byIP address or range. Manifest.csv is releasemetadata. NOTICE.txt holds third-party dataattributions.Ranges-IPv4.csvRanges-IPv6.csvsame schemaRangeStartRangeEndFKLocationId?FKConfidenceAreaId?+4 more columnsLocations.csvPKLocationIdFKSubdivisionGeonamesId?FKCityGeonamesId?FKLocalityGeonamesId?+7 more columnsGeonames-{lang}.csv× 10 languagesPKGeonamesIdNameConfidenceAreas.csvPKConfidenceAreaIdGeometryWktBgpPrefixes-IPv4.csvBgpPrefixes-IPv6.csvsame schemaPKPrefixFKAsn?present when announced+4 more columnsAsns.csvPKAsnFKConfidenceAreaId?operational area+9 more columnsREADME.txtpackage overviewRirInetnums-IPv4.csvRirInetnums-IPv6.csvsame schemaRangeStartRangeEnd+4 more columnsProxies.csvTorServers.csvVpns.csvsame schemaIpAddressManifest.csvrelease metadataDescription+4 more columnsNOTICE.txtthird-party data attributionsLocationIdConfidenceAreaIdGeonamesIdAsn
PK primary keyFK foreign key (? = optional) many zero or one
FromColumnToNotes
Ranges-IPv4.csv,Ranges-IPv6.csvLocationIdLocations.csv LocationIdSupplied where collected network information is statistically significant.
Ranges-IPv4.csv,Ranges-IPv6.csvConfidenceAreaIdConfidenceAreas.csv ConfidenceAreaIdSupplied where collected network information is statistically significant.
Locations.csvSubdivisionGeonamesId,CityGeonamesId,LocalityGeonamesIdGeonames-{lang}.csv GeonamesIdEach is present where the location has a subdivision, city or locality.
BgpPrefixes-IPv4.csv,BgpPrefixes-IPv6.csvAsnAsns.csv AsnPresent when the prefix is announced in BGP.
Asns.csvConfidenceAreaIdConfidenceAreas.csv ConfidenceAreaIdWhere this ASN operates most, as a polygon in ConfidenceAreas.csv. It shares that table with confidence areas but describes the whole network, not one IP range. Supplied where collected network information is statistically significant.

Not joined: match the RIR, proxy, Tor and VPN files by IP address or range, Manifest.csv describes the release, and NOTICE.txt holds third-party data attributions.

To geolocate an IP: find the Ranges row where RangeStart ≤ IP ≤ RangeEnd, then join LocationId to Locations.csv and ConfidenceAreaId to ConfidenceAreas.csv. For its network, find the BgpPrefixes row whose prefix contains the IP and join Asn to Asns.csv. BGP prefixes and registry ranges don't share a key with the geolocation ranges, and their boundaries don't line up, so match each one to the IP on its own.

Sample data

Sample rows from the 1 October 2026 release. Values change with each daily update.

Ranges-IPv4.csv: a reserved-space row, a Melbourne range, an in-city range in Ipswich, Queensland, from the same network, and a cellular range in the Philippines

RangeStart,RangeEnd,LocationId,ConfidenceAreaId,IsCellular,HostingLikelihood,ConfidenceScore,DeploymentExtentKm
0.0.0.0,0.0.1.255,,,False,0,0,
139.130.4.0,139.130.4.31,307583,2399,False,0,3,
139.130.4.188,139.130.4.199,1709507,48855,False,0,4,
1.37.82.0,1.37.82.255,6010,1128,True,0,4,250

Ranges-IPv6.csv: a Sydney range

RangeStart,RangeEnd,LocationId,ConfidenceAreaId,IsCellular,HostingLikelihood,ConfidenceScore,DeploymentExtentKm
2001:8000::,2001:8000:fff:ffff:ffff:ffff:ffff:ffff,27414,444676,False,0,1,

Locations.csv

LocationId,Latitude,Longitude,ContinentIso,CountryIso,SubdivisionIso,SubdivisionGeonamesId,CityGeonamesId,LocalityGeonamesId,Postcode,Timezone
307583,-37.82,145.16,AU,AU,AU-VIC,2145234,2158177,7932624,3130,Australia/Melbourne
1709507,-27.68,152.8,AU,AU,AU-QLD,2152274,7839586,,4306,Australia/Brisbane

BgpPrefixes-IPv4.csv / BgpPrefixes-IPv6.csv

Prefix,Asn,IsReachable,IsBogon,RegistryStatus,Registry
1.0.8.0/21,,False,False,Assigned,Apnic
139.130.0.0/16,1221,True,False,Assigned,Apnic
205.209.150.0/24,23338,False,True,Reserved,Arin
2001:8000::/20,1221,True,False,Assigned,Apnic

RirInetnums-IPv4.csv / RirInetnums-IPv6.csv

RangeStart,RangeEnd,Organisation,Country,Registry,RegistryLastModified
139.130.0.0,139.130.255.255,"Telstra Limited","AU","Apnic",2024-05-10T00:50:24.0000000Z
2001:8000::,2001:8fff:ffff:ffff:ffff:ffff:ffff:ffff,"Telstra Limited","AU","Apnic",2024-05-10T00:50:24.0000000Z

Asns.csv

Asn,Organisation,AsnName,Registry,RegisteredCountry,TotalIpv4Addresses,TotalIpv4Prefixes,BogonIpv4Prefixes,TotalIpv6Prefixes,BogonIpv6Prefixes,ConfidenceAreaId
1221,"Telstra Limited","ASN-TELSTRA",Apnic,AU,13386112,299,1,2,0,2430

Proxies.csv

IpAddress
104.28.163.36
207.148.78.15
2a00:fbc:ecd2:15f9::

TorServers.csv

IpAddress
94.130.64.21
149.28.232.89

Vpns.csv

IpAddress
3.1.84.15
2001:470:2be:1::

Joined result for 139.130.4.5 (from the DuckDB example below): AU, AU-VIC, Melbourne, confidence area 2399, AS1221 ASN-TELSTRA, not on the proxy list. 139.130.4.190, on the same network, resolves to Ipswich, AU-QLD.

Behaviour and edge cases

Supplied fields

Each row fills the fields that apply to it, and each field description says when it is supplied. Check that a field has a value before you use it. In BgpPrefixes-*, Asn is supplied where the prefix is announced in BGP. Registry files have a value in every column. In Asns.csv, Organisation is supplied for every ASN (Private Use AS for an ASN with no registration record). AsnName, Registry and RegisteredCountry are supplied where the registry publishes them. ConfidenceAreaId is supplied where collected network information is statistically significant.

Private and reserved addresses

Where Ranges-* have rows for private and reserved space (for example 0.0.0.0–0.0.1.255 and 100.64.0.0–100.65.63.255), the row carries IsCellular, HostingLikelihood and ConfidenceScore. LocationId and ConfidenceAreaId are supplied where collected network information is statistically significant. BgpPrefixes-* show reserved space with RegistryStatus Reserved and Registry Iana. Registry ranges show whatever the registries publish for that space.

Unannounced prefixes and bogons

Asn is supplied where the prefix is announced in BGP. A prefix that isn't announced isn't globally reachable (IsReachable False); its RegistryStatus still tells you whether the space is assigned, available or reserved (for example 1.0.8.0/21). A few prefixes have an Asn but are still not reachable: these are bogons, with IsBogon True (for example 205.209.150.0/24).

No overlaps

Geolocation ranges, BGP prefixes and registry ranges never overlap within their own file, so an address matches at most one row in each.

IDs belong to the package

LocationId and ConfidenceAreaId are specific to Complete and to each release, so join them only to lookup files from the same download. The same number means a different place in Compact. GeoNames IDs are the same in every package.

Proxy, Tor and VPN lists

The lists have no range column or ID. Match IPv4 entries exactly. IPv6 entries in Proxies.csv and Vpns.csv are /64 networks given by their first address (for example 2001:470:2be:1::), with no prefix length written; match an IPv6 address by its first 64 bits. TorServers.csv holds IPv4 addresses only.

File conventions

UTF-8. Asns.csv, the Geonames-*.csv, BgpPrefixes-* and RirInetnums-* files start with a byte-order mark (BOM), so use a BOM-aware reader. Lines end in CRLF in every file, Manifest.csv included. Text fields can be double-quoted, and a few registry Organisation values contain line breaks inside the quotes, so read the files with a CSV parser rather than line by line. Booleans are True/False. Full list: CSV conventions.

Download

Download from your BigDataCloud account, or automate it with your API key:

curl -fL -o bigdatacloud-complete-csv.zip "https://www.bigdatacloud.com/download?package=complete&format=csv&key=YOUR_API_KEY"

Prefer not to put the key in URLs?

Send the key in the x-bdc-key header and download in two steps: read the link from the Location header, then fetch it without your key.

URL=$(curl -s -D - -o /dev/null -H 'x-bdc-key: YOUR_API_KEY' \
  "https://www.bigdatacloud.com/download?package=complete&format=csv" \
  | awk 'tolower($1)=="location:" { sub(/\r$/, "", $2); print $2 }')
curl -fo bigdatacloud-complete-csv.zip "${URL:?no download link: check the key and package}"

Don't add -L to this command: curl would send your key on with the download.

This saves bigdatacloud-complete-csv.zip (files). Scheduling, checksums and parameters: Downloads & automation.

Updates and integrity

  • Updated daily. Download on any schedule that suits you; updates are included in your subscription.
  • Manifest.csv records the build time (Build Complete), the data timestamps and the row totals, then one row per other file in that ZIP, including NOTICE.txt where present, with its byte count, so you can check a complete download and load. To check the ZIP itself, see Check a download.

Code samples

Look up one IP: location, origin ASN and proxy flag (DuckDB, IPv4). DuckDB reads the CSV files directly, so you don't need to load them into a database first.

import duckdb

con = duckdb.connect()
# IPv4 dotted-quad -> integer, so ranges and prefixes can be compared numerically
con.sql("""
CREATE MACRO ip4(ip) AS
  (split_part(ip,'.',1)::BIGINT << 24) + (split_part(ip,'.',2)::BIGINT << 16)
+ (split_part(ip,'.',3)::BIGINT << 8)  +  split_part(ip,'.',4)::BIGINT
""")
ip = "139.130.4.5"
print(con.sql(f"""
SELECT l.CountryIso, l.SubdivisionIso, g.Name AS City, r.ConfidenceAreaId,
       b.Asn, a.AsnName,
       EXISTS (SELECT 1 FROM read_csv('Proxies.csv', all_varchar = true)
               WHERE IpAddress = '{ip}') AS IsKnownProxy
FROM read_csv('Ranges-IPv4.csv', all_varchar = true) r
LEFT JOIN read_csv('Locations.csv', all_varchar = true) l USING (LocationId)
LEFT JOIN read_csv('Geonames-en.csv', all_varchar = true) g ON g.GeonamesId = l.CityGeonamesId
LEFT JOIN (
  SELECT Asn, split_part(Prefix,'/',1) AS net, split_part(Prefix,'/',2)::INT AS len
  FROM read_csv('BgpPrefixes-IPv4.csv', all_varchar = true)
) b ON ip4('{ip}') BETWEEN ip4(b.net) AND ip4(b.net) + (1::BIGINT << (32 - b.len)) - 1
LEFT JOIN read_csv('Asns.csv', all_varchar = true) a ON a.Asn = b.Asn
WHERE ip4('{ip}') BETWEEN ip4(r.RangeStart) AND ip4(r.RangeEnd)
""").fetchall())
# [('AU', 'AU-VIC', 'Melbourne', '2399', '1221', 'ASN-TELSTRA', False)]

For IPv6 or high volumes, load the files into your database once, store range bounds as numbers or your database's IP type, and index them.

Related