Download the data

838 sites in 63 countries. Download a spreadsheet, map file or database.

Updated 2026-10-27. Status observations: 2024-08-06 to 2026-10-27. Each project keeps its last reported status and date.

Excel workbook Sites CSV GeoJSON SQLite

Browse all projects and multi-site programs. Project details preserve investment, hardware, capacity, organizations and timelines with their sources. The workbook includes separate sheets for these figures and events.

Files #

All files (zip, 17.3 MB)

FileFormatDescriptionSizeSHA-256
datacenter-atlas-latest.zip
derived
ZIPEvery file listed here except SHA256SUMS, in one archive.17.3 MB4bef525113cf69855746576d9948354f07e467d89039afd3ae5b8f0247d2133c
sites.csvCSVOne row per physical site.1.1 MB90cb622215c78080cc7bdd308876f533eece2bc3927ef985fa151c6a3ad6300a
projects.csvCSVOne row per project: last observed status, locator semantics and typed observations.4.0 MBaebf1754c40f23d04738ea700ab86e618e3841aa1d73f23ed71e8a3be6cca3ce
evidence.csvCSVSources for site records, with URLs, usage terms and content hashes.3.0 MB8185b5534e724f7f34781d9d14c1c3585c18b331f499f1b9855e1535b74ad29c
sites.geojsonGeoJSONSite locators and boundaries as a GeoJSON FeatureCollection.1.4 MB7de1df476b2189cb63488d751a674058d222a2c481a77bd90e063acf749f1820
atlas.xlsx
derived
ExcelExcel workbook: a README sheet plus sites, projects and evidence (UTF-8 safe; geometry omitted).3.6 MB0f0166e98ba5b2e0f975da6c00424a6940c8269c980b9f490be612d351a942ff
atlas.json
derived
JSONEvery typed site, project and evidence record in one JSON document.14.4 MB432bd845146bfdf9c40331dcaf3af10b353b05eb3128337b3926438746b00347
atlas.sqlite
derived
SQLiteSQLite database: the three tables, link and observation tables and a site_overview view.12.4 MBbb1653f3435fca3ce4f5a9141abc58540ad3c6a5a4c0a69ea6f4f48ecdd8d9b3
sites.kml
derived
KMLSites for Google Earth and other KML viewers.1.1 MBc07df6ac79ef3d5de05c05c0016fc1e3834cc7070b96c84825d69a5d03dd81be
sites.ndjson
derived
NDJSONOne typed site record per line.1.8 MBa96b42556317465e9c4301d9fa3c9dc6eebb39930f5dbf6a7a3037c23a1216d7
projects.ndjson
derived
NDJSONOne typed project record per line.6.1 MB8c482f0bed4639a06f1335e759d1526c53aac155526b2f96a8aea72965be053f
evidence.ndjson
derived
NDJSONOne typed evidence record per line.6.4 MBb6631ae79d40c45a24bb28d37abfeac171a7b1f63c399e1ec6ae280cdcb31afa
datapackage.json
derived
Data PackageFrictionless Data Package descriptor: table schemas, sizes and hashes.47.7 KBaf0f8854b8ceba1aea693d4d4e234225d4aa9d232724bb63648026c7be622bb6
schema.jsonJSONField definitions for the source files.28.9 KB5a47ee58287b85e313ce5a3ddc1df0d51be84c3425574ce218c2a067abbd2459
selection-report.jsonJSONResearch and selection audit.131.0 KBdf7c303e91829368de32b280f09962d6a3f3aaf1cd1e32ddef8a627011596402
review-provenance.jsonJSONSource and review records for additions.132.7 KBb44f6b0635957a0aabd9abae437351c45a96d4fe29755d7c6d338a34135039e4
README.mdMarkdownOriginal research notes retained with the archived data.366 B18cf6c68d04fc7ef60a9c298da219970df49fe82e863d294c329df11cc9c125b
ATTRIBUTION.txtTextSource attribution and third-party terms.1.4 MB05178994b8ad93019220346ea1fc15219087af8d34a470a76b24134926bfb4d4
manifest.jsonJSONFile sizes and SHA-256 hashes of the source files.2.6 KB88dd6efa7b7f69a4ddebacf2517167f73d0d5fbe9b47d17927f49c86ffee075c
manifest.sha256TextSHA-256 of manifest.json.80 B8708faa61e548cefaf6e7f2bbe84ad63bcf796ccff26568a0a1bacc17365bf40
identity-mapping.jsonJSONProject and campus matches, scope distinctions and unresolved identities.734.7 KB3c0ba3dcad7941c5317e8a36b0b4c3e87e29bb945b59751319ddcc657069a8de
source-records.jsonJSONComplete project records with figures, organizations, milestones and original sources.2.1 MB0b593c002903193ca62489eac1ba25674f262fa03bbd2078a2a422f58015fd1a
SHA256SUMS
derived
TextSHA-256 of every file in this directory (sha256sum -c format).1.8 KBa298e5bedb67c1c62105408f299ec888a95586ca50d01283a59026855e059038

GitHub Pages serves .ndjson, .sqlite and SHA256SUMS as application/octet-stream and .zip as application/x-zip-compressed; identify formats by file extension or by media_type here, not by Content-Type.

Pinned URLs #

The current downloads update as records are added or corrected. For reproducible analysis, use the archived source files from 2026-10-27. Their bytes are fixed: the generated formats are frozen GitHub Release files. Check files against the SHA256SUMS listed there.

Use the data #

curl #

curl -LO https://kiankyars.github.io/datacenter-atlas/downloads/latest/sites.csv
curl -LO https://kiankyars.github.io/datacenter-atlas/downloads/latest/datacenter-atlas-latest.zip
curl -LO https://kiankyars.github.io/datacenter-atlas/downloads/latest/SHA256SUMS
sha256sum --check --ignore-missing SHA256SUMS

Python (pandas) #

import pandas as pd

base = "https://kiankyars.github.io/datacenter-atlas/downloads/latest/"
# keep_default_na=False keeps codes such as "NA" (Namibia); only empty cells are missing.
options = {"keep_default_na": False, "na_values": [""]}
sites = pd.read_csv(base + "sites.csv", **options)
projects = pd.read_csv(base + "projects.csv", **options)
evidence = pd.read_csv(base + "evidence.csv", **options)
print(projects.groupby("last_observed_physical_status").size())

Python (standard library) #

import csv
import io
import json
import urllib.request

with urllib.request.urlopen("https://kiankyars.github.io/datacenter-atlas/downloads/latest/projects.csv") as response:
    projects = list(csv.DictReader(io.TextIOWrapper(response, encoding="utf-8", newline="")))
with urllib.request.urlopen("https://kiankyars.github.io/datacenter-atlas/api/v1/sites.json") as response:
    sites = json.load(response)
print(len(projects), "projects at", len(sites), "sites")

Python (GeoPandas) #

import geopandas as gpd

sites = gpd.read_file("https://kiankyars.github.io/datacenter-atlas/api/v1/sites.geojson")
print(sites[["name", "country", "geometry_type", "url"]].head())

R (readr and sf) #

library(readr)
library(sf)

base <- "https://kiankyars.github.io/datacenter-atlas/downloads/latest/"
# na = "" keeps codes such as "NA" (Namibia); only empty cells are missing.
sites <- read_csv(paste0(base, "sites.csv"), na = "")
projects <- read_csv(paste0(base, "projects.csv"), na = "")
evidence <- read_csv(paste0(base, "evidence.csv"), na = "")
geometry <- st_read("https://kiankyars.github.io/datacenter-atlas/api/v1/sites.geojson")

DuckDB #

SELECT * FROM read_csv_auto('https://kiankyars.github.io/datacenter-atlas/downloads/latest/sites.csv');

SELECT last_observed_physical_status, count(*) AS projects
FROM read_csv_auto('https://kiankyars.github.io/datacenter-atlas/downloads/latest/projects.csv')
GROUP BY 1 ORDER BY 2 DESC;

SQLite command line #

curl -LO https://kiankyars.github.io/datacenter-atlas/downloads/latest/atlas.sqlite
sqlite3 atlas.sqlite "SELECT name, country, newest_status_as_of FROM site_overview ORDER BY newest_status_as_of DESC LIMIT 10;"

JavaScript (fetch) #

const response = await fetch("https://kiankyars.github.io/datacenter-atlas/api/v1/sites.json");
const sites = await response.json();
console.log(sites.length, sites[0].name, sites[0].statuses);

Excel and Google Sheets #

Excel: open https://kiankyars.github.io/datacenter-atlas/downloads/latest/atlas.xlsx (one sheet per table, plus a README sheet).
Excel with a CSV: Data > From Text/CSV, File origin 65001: Unicode (UTF-8).
Google Sheets: =IMPORTDATA("https://kiankyars.github.io/datacenter-atlas/downloads/latest/sites.csv")

QGIS and Google Earth #

In QGIS choose Layer → Add Layer → Add Vector Layer and paste https://kiankyars.github.io/datacenter-atlas/api/v1/sites.geojson (its features carry each site's page URL, API URL and geometry licence). In Google Earth open sites.kml. To browse the SQLite database in the browser, open it in Datasette Lite.

Dictionary and API #

Licence and citation #

Creative Commons Attribution 4.0 International for Atlas-authored content. Geometries derived from OpenStreetMap are © OpenStreetMap contributors and available under the Open Data Commons Open Database License 1.0. Other third-party facts, titles, URLs and geometries keep their source terms, recorded per evidence row (each site record lists its geometry_licenses) and in the attribution file. Details on the about page.

Kyars, K. (2026). Data Center Atlas (2026-10-27) [Data set]. Source files

@misc{kyars2026datacenteratlas,
  author = "Kyars, Kian",
  title  = "Data Center Atlas",
  year   = "2026",
  note   = "Data as published 2026-10-27",
  url    = "https://kiankyars.github.io/datacenter-atlas/downloads/2026-10-27-research-hundredsecond/"
}

Also as BibTeX file, RIS (EndNote, Zotero, Mendeley) and JSON with CSL-JSON and biblatex.

Source terms

City of Chicago data notice

Attribution: City of Chicago
Terms: https://www.chicago.gov/city/en/narr/foia/data_disclaimer.html

Required disclaimer:
“This site provides applications using data that has been modified for use from its original source, www.cityofchicago.org, the official website of the City of Chicago. The City of Chicago makes no claims as to the content, accuracy, timeliness, or completeness of any of the data provided at this site. The data provided at this site is subject to change at any time. It is understood that the data provided at this site is being used at one’s own risk.”

Additional terms reminder:
Comply with any additional Terms of Use set forth by the City agency or department providing data used by the software application, or other secondary or derivative application, including, without limitation, requirements to include additional citations or disclaimers at the site where the application can be accessed or downloaded.