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 #
| File | Format | Description | Size | SHA-256 |
|---|---|---|---|---|
| datacenter-atlas-latest.zip derived | ZIP | Every file listed here except SHA256SUMS, in one archive. | 17.3 MB | 4bef525113cf69855746576d9948354f07e467d89039afd3ae5b8f0247d2133c |
| sites.csv | CSV | One row per physical site. | 1.1 MB | 90cb622215c78080cc7bdd308876f533eece2bc3927ef985fa151c6a3ad6300a |
| projects.csv | CSV | One row per project: last observed status, locator semantics and typed observations. | 4.0 MB | aebf1754c40f23d04738ea700ab86e618e3841aa1d73f23ed71e8a3be6cca3ce |
| evidence.csv | CSV | Sources for site records, with URLs, usage terms and content hashes. | 3.0 MB | 8185b5534e724f7f34781d9d14c1c3585c18b331f499f1b9855e1535b74ad29c |
| sites.geojson | GeoJSON | Site locators and boundaries as a GeoJSON FeatureCollection. | 1.4 MB | 7de1df476b2189cb63488d751a674058d222a2c481a77bd90e063acf749f1820 |
| atlas.xlsx derived | Excel | Excel workbook: a README sheet plus sites, projects and evidence (UTF-8 safe; geometry omitted). | 3.6 MB | 0f0166e98ba5b2e0f975da6c00424a6940c8269c980b9f490be612d351a942ff |
| atlas.json derived | JSON | Every typed site, project and evidence record in one JSON document. | 14.4 MB | 432bd845146bfdf9c40331dcaf3af10b353b05eb3128337b3926438746b00347 |
| atlas.sqlite derived | SQLite | SQLite database: the three tables, link and observation tables and a site_overview view. | 12.4 MB | bb1653f3435fca3ce4f5a9141abc58540ad3c6a5a4c0a69ea6f4f48ecdd8d9b3 |
| sites.kml derived | KML | Sites for Google Earth and other KML viewers. | 1.1 MB | c07df6ac79ef3d5de05c05c0016fc1e3834cc7070b96c84825d69a5d03dd81be |
| sites.ndjson derived | NDJSON | One typed site record per line. | 1.8 MB | a96b42556317465e9c4301d9fa3c9dc6eebb39930f5dbf6a7a3037c23a1216d7 |
| projects.ndjson derived | NDJSON | One typed project record per line. | 6.1 MB | 8c482f0bed4639a06f1335e759d1526c53aac155526b2f96a8aea72965be053f |
| evidence.ndjson derived | NDJSON | One typed evidence record per line. | 6.4 MB | b6631ae79d40c45a24bb28d37abfeac171a7b1f63c399e1ec6ae280cdcb31afa |
| datapackage.json derived | Data Package | Frictionless Data Package descriptor: table schemas, sizes and hashes. | 47.7 KB | af0f8854b8ceba1aea693d4d4e234225d4aa9d232724bb63648026c7be622bb6 |
| schema.json | JSON | Field definitions for the source files. | 28.9 KB | 5a47ee58287b85e313ce5a3ddc1df0d51be84c3425574ce218c2a067abbd2459 |
| selection-report.json | JSON | Research and selection audit. | 131.0 KB | df7c303e91829368de32b280f09962d6a3f3aaf1cd1e32ddef8a627011596402 |
| review-provenance.json | JSON | Source and review records for additions. | 132.7 KB | b44f6b0635957a0aabd9abae437351c45a96d4fe29755d7c6d338a34135039e4 |
| README.md | Markdown | Original research notes retained with the archived data. | 366 B | 18cf6c68d04fc7ef60a9c298da219970df49fe82e863d294c329df11cc9c125b |
| ATTRIBUTION.txt | Text | Source attribution and third-party terms. | 1.4 MB | 05178994b8ad93019220346ea1fc15219087af8d34a470a76b24134926bfb4d4 |
| manifest.json | JSON | File sizes and SHA-256 hashes of the source files. | 2.6 KB | 88dd6efa7b7f69a4ddebacf2517167f73d0d5fbe9b47d17927f49c86ffee075c |
| manifest.sha256 | Text | SHA-256 of manifest.json. | 80 B | 8708faa61e548cefaf6e7f2bbe84ad63bcf796ccff26568a0a1bacc17365bf40 |
| identity-mapping.json | JSON | Project and campus matches, scope distinctions and unresolved identities. | 734.7 KB | 3c0ba3dcad7941c5317e8a36b0b4c3e87e29bb945b59751319ddcc657069a8de |
| source-records.json | JSON | Complete project records with figures, organizations, milestones and original sources. | 2.1 MB | 0b593c002903193ca62489eac1ba25674f262fa03bbd2078a2a422f58015fd1a |
| SHA256SUMS derived | Text | SHA-256 of every file in this directory (sha256sum -c format). | 1.8 KB | a298e5bedb67c1c62105408f299ec888a95586ca50d01283a59026855e059038 |
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 #
- Field dictionary: every column, type and coded value.
- JSON API: per-site documents, GeoJSON, aggregates, an OpenAPI description and JSON Schemas.
- Data history: additions, corrections and archived files.
- llms.txt: a plain-text guide for language models and agents.
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.
Data notices #
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.