Technical Manual · Market Intelligence
Global DC Market Tracker — Methodology & Data Provenance
Every input, data lookup, scoring formula, and external source behind the Global DC Market Tracker. All per-market figures are stored in DATA.markets inside rz-engine.js; site scoring runs through models.site.score() using factor vectors derived from DATA.countries. No numbers are interpolated or back-solved — every field traces to a named source in DATA.sources.
01 Purpose & engineering basis
The DC Market Tracker answers three distinct questions in a single dashboard: where is capacity being built right now, how does per-market power cost and carbon intensity compare, and which markets score highest on a multi-factor site-selection screen. It is a decision-support tool for site screening, not a real-estate data feed or investment prospectus.
The tracker is DATA-provenance heavy by design. Every per-market field in DATA.markets traces to DATA.sources['markets']; every per-country environment and economy field used in site scoring traces to DATA.sources['countries']. The provenance chain is: raw research report → dcmoc/src/constants/countries.ts (single source of truth) → tools/build-countries-data.mjs (generator) → DATA.countries in rz-engine.js. Regenerate after editing countries.ts and bump the ?v= stamp.
02 Inputs — filters, sliders, and capacity range
The tracker exposes four user-controlled input surfaces. All filter/sort/weight operations run client-side against the in-memory DATA.markets snapshot — no server round-trip.
| Input | Type | Values / range | Effect |
|---|---|---|---|
| Region filter | Button group | All · North America · Europe · Asia Pacific · Latin America · Middle East & Africa | Restricts displayed markets to the selected region field in DATA.markets. |
| Maturity filter | Button group | All · Established · Growing · Emerging | Filters on the maturity field: established = deep-liquid hyperscale corridors, growing = active build-out, emerging = early-stage pipeline. |
| Capacity range | Range slider (MW) | 0 – max operational in dataset | Hides markets whose operational MW falls below the slider value. Useful for screening out micro-markets. |
| Sort column | Select + table header click | Name · Operational MW · CAGR · Power Cost · Vacancy % · Colo Price · Site Score | Re-orders the market table and card grid. All sorts are client-side stable sorts on the filtered set. |
DATA.site.weights (see Section 03). Pro-tier users can drag individual factor weights; the tracker renormalizes and recomputes all site scores live. Weight changes are session-only — they do not persist or alter the engine constants.03 Calculation methodology
Three formula families: annual electricity cost, site score, and carbon footprint. Function names map to models.site.* in rz-engine.js. Market-level lookups (operational/pipeline MW, vacancy, colo price) are direct table reads, not computed.
Annual electricity cost per market
powerCost = market-level $/kWh from DATA.markets[id].powerCost (DC-contract industrial rate from utility filings). 8760 = hours per year (calendar constant; DATA.sources['hoursPerYear']).itLoadMW = user-supplied IT load in MW (default 10 MW for comparison cards).PUE = assumed from DATA.pueMatrix (default Tier III air 1.50, Uptime 2026); user can override.Result is a screening comparison — not a tariff filing or utility bill.DATA.sources['markets'] · DATA.sources['hoursPerYear']
Site Score — 10-factor weighted model
models.site.score(factors). Weights renormalize over present factors so a partial factor set scores fairly. Factor values are 0-1 goodness scores (1 = best).DATA.site.weights · models.site.score
Factor derivation from DATA.countries
models.site.deriveFactors(countryId, overrides). Missing fields fall back to a neutral 0.6. SAIDI path preferred if env.saidiMinYr is present; otherwise uptime% path. PGA path preferred if env.pgaPct2in50yr is present; otherwise seismicZone (0-4) scale.DATA.countries · DATA.site · models.site.deriveFactors
Carbon intensity lookup
gridCarbonIntensity = DATA.countries[countryId].environment.gridCarbonIntensity in kgCO₂/kWh. Sourced from IEA 2026 + Ember grid intensity (see DATA.sources['carbon']). Values for the 25 tracker markets range from 0.01 kgCO₂/kWh (Stockholm) to 0.90 kgCO₂/kWh (high-coal grids). This is a grid-average intensity; market-level 24/7 CFE contracts are not modelled.DATA.sources['carbon'] · DATA.sources['countries']
PUE climate adjustment (partial-load model)
DATA.pueMatrix.DATA.sources['pue.partialLoad']
04 Constants & data provenance
Per-market reference data. All figures are lookups from DATA.markets in rz-engine.js. Source: CBRE Global DC Market 2025, JLL Outlook 2025, Cushman & Wakefield 2025, Synergy Research 2024. Power cost from utility filings (PJM, ERCOT, Dominion, IMDA et al.). As-of date: 2026-04. DATA.sources['markets']
| Market | Region | Op. MW | Pipe MW | Power $/kWh | Vac. % | Colo $/kW·mo | CAGR | Maturity |
|---|---|---|---|---|---|---|---|---|
| Northern Virginia | North America | 4,040 | 6,600 | 0.065 | 1.4 | $215 | 25% | Established |
| Dallas/Fort Worth | North America | 1,200 | 2,600 | 0.055 | 2.1 | $160 | 22% | Established |
| Phoenix | North America | 800 | 2,000 | 0.058 | 3.5 | $150 | 20% | Established |
| Chicago | North America | 700 | 1,100 | 0.072 | 2.8 | $175 | 15% | Established |
| Silicon Valley | North America | 600 | 700 | 0.095 | 1.8 | $250 | 8% | Established |
| Toronto | North America | 400 | 800 | 0.085 | 4.2 | $155 | 18% | Growing |
| London | Europe | 1,500 | 1,600 | 0.170 | 2.5 | $200 | 10% | Established |
| Frankfurt | Europe | 900 | 1,100 | 0.150 | 5.1 | $195 | 10% | Established |
| Amsterdam | Europe | 600 | 550 | 0.130 | 7.2 | $180 | 8% | Established |
| Paris | Europe | 450 | 700 | 0.140 | 4.0 | $190 | 12% | Growing |
| Dublin | Europe | 400 | 400 | 0.155 | 3.8 | $185 | 6% | Growing |
| Singapore | Asia Pacific | 850 | 650 | 0.180 | 0.8 | $390 | 12% | Established |
| Tokyo | Asia Pacific | 1,200 | 1,200 | 0.160 | 1.2 | $270 | 8% | Established |
| Hong Kong | Asia Pacific | 500 | 400 | 0.145 | 2.0 | $280 | 6% | Established |
| Sydney | Asia Pacific | 600 | 750 | 0.140 | 3.2 | $180 | 14% | Established |
| Mumbai | Asia Pacific | 500 | 1,100 | 0.085 | 6.0 | $125 | 20% | Growing |
| Jakarta | Asia Pacific | 350 | 700 | 0.080 | 4.5 | $160 | 18% | Growing |
| Seoul | Asia Pacific | 700 | 600 | 0.095 | 2.5 | $210 | 10% | Established |
| Kuala Lumpur | Asia Pacific | 250 | 550 | 0.060 | 5.5 | $140 | 22% | Growing |
| São Paulo | Latin America | 400 | 450 | 0.100 | 5.0 | $165 | 16% | Growing |
| Santiago | Latin America | 100 | 200 | 0.090 | 8.0 | $145 | 18% | Emerging |
| Querétaro | Latin America | 200 | 400 | 0.070 | 4.0 | $135 | 20% | Growing |
| Dubai | Middle East & Africa | 200 | 500 | 0.065 | 3.0 | $220 | 25% | Growing |
| Johannesburg | Middle East & Africa | 150 | 280 | 0.075 | 6.0 | $170 | 20% | Emerging |
| Nairobi | Middle East & Africa | 50 | 130 | 0.115 | 10.0 | $200 | 25% | Emerging |
Site-score factor weights (from DATA.site.weights, sum = 1.0):
| Factor | Key | Weight | Source field in DATA.countries | Derivation |
|---|---|---|---|---|
| Electricity cost | power | 17% | economy.electricityRate ($/kWh) | clamp(1−(rate−0.05)/0.30) |
| Grid reliability | grid | 14% | env.saidiMinYr or gridReliability.gridUptime | SAIDI path: 1−saidi/500; uptime path: (uptime%−95)/5 |
| Talent pool | talent | 11% | talentPool.talentScore (0-100) | talentScore/100 |
| Seismic risk | seismic | 10% | env.pgaPct2in50yr or naturalDisaster.seismicZone | PGA lookup table (IBC/ASCE-7 SDC) or 1−zone/4 |
| Tax environment | tax | 9% | economy.taxRate (fraction) | 1−taxRate/0.35 |
| Carbon intensity | carbon | 9% | environment.gridCarbonIntensity (kgCO₂/kWh) | 1−gridCarbon/0.90 |
| Water availability | water | 8% | env.aqueductStressScore (WRI 0-5) | 1−stress/5 |
| Climate / free-cooling | climate | 8% | env.ashraeClimateZone (1-8) | Lookup: free-cooling hr/yr / 5,800 |
| Flood risk | flood | 7% | naturalDisaster.floodRisk (low/moderate/high/extreme) | Map: {low:1, moderate:0.66, high:0.33, extreme:0} |
| Network latency | latency | 7% | talentPool.hyperscalerPresence (0-10 scale) | hyperscalerPresence/10 |
Grid carbon intensity for major tracker markets (from DATA.countries[*].environment.gridCarbonIntensity; source: IEA 2026 + Ember DATA.sources['carbon']):
| Country / Market | Grid Carbon (kgCO₂/kWh) | Electricity Rate ($/kWh) | Tax Rate | As-of |
|---|---|---|---|---|
| United States (N. Virginia) | 0.39 | ~0.065 | ~21% | 2026 |
| Germany (Frankfurt) | 0.35 | 0.150 | ~30% | 2026 |
| Netherlands (Amsterdam) | 0.40 | 0.130 | ~25% | 2026 |
| United Kingdom (London) | 0.30 est. | 0.170 | ~19% | 2026 |
| Ireland (Dublin) | 0.35 est. | 0.155 | ~12.5% | 2026 |
| Sweden (Stockholm) | 0.01 | ~0.09 | ~20.6% | 2026 |
| Singapore | 0.41 | 0.180 | ~17% | 2026 |
| Japan (Tokyo) | 0.48 | 0.160 | ~23.2% | 2026 |
| Australia (Sydney) | 0.55 | 0.140 | ~30% | 2026 |
| India (Mumbai) | 0.70 | 0.085 | ~24% | 2026 |
| Indonesia (Jakarta) | 0.78 | 0.080 | ~22% | 2026 |
| Malaysia (KL) | 0.60 | 0.060 | ~24% | 2026 |
| UAE (Dubai) | 0.45 | 0.065 | ~9% | 2026 |
| South Africa (Johannesburg) | 0.90 | 0.075 | ~27% | 2026 |
| Brazil (São Paulo) | 0.20 est. | 0.100 | ~34% | 2026 |
05 Outputs
The tracker surfaces nine per-market outputs across the map, card grid, and data table views.
| Output | Source / formula | Unit | Interpretation |
|---|---|---|---|
| Operational capacity | DATA.markets[id].operational — direct lookup | MW | Live commissioned and leased capacity at time of research snapshot. |
| Pipeline (construction + planned) | operational + construction + planned | MW | Total addressable supply including current build and permitted pipeline. High pipeline / low absorption = supply overhang signal. |
| Vacancy rate | DATA.markets[id].vacancy — direct lookup | % | Percentage of operational capacity available for lease. <2% = tight market, >7% = loose. |
| Power cost | DATA.markets[id].powerCost — direct lookup | $/kWh | Market-level DC-contract industrial blended rate from utility filings. Distinct from DATA.regions[*].powerKwh macro blends. |
| Colo price | DATA.markets[id].coloPrice — direct lookup | $/kW/month | Retail colocation asking price per kW per month. Headline rate; actual contracted rates vary 15-30% below ask in most markets. |
| CAGR (2025-2030) | DATA.markets[id].cagr — direct lookup | fraction | Compound annual growth rate projection for operational MW. Sourced from broker reports; projection quality varies by market. |
| Annual power cost (comparison) | powerCost × 8760 × itLoadMW × 1000 × PUE | USD/yr | Computed for a reference load (default 10 MW IT at rated PUE) to normalize power cost across markets with different rate structures. |
| Site Score | models.site.score(deriveFactors(countryId)) | 0-100 + A-E grade | Weighted composite of 10 site-selection factors. Reflects the country profile anchored to the market; does not reflect sub-national variation within large countries. |
| Carbon intensity | DATA.countries[*].environment.gridCarbonIntensity | kgCO₂/kWh | Grid-average intensity. Used for annual carbon footprint comparison at the reference IT load. CFE contracts not modelled. |
06 Worked example — Singapore market
Singapore (DATA.markets['singapore']) is a useful reference: very high colo pricing, extremely low vacancy, and a moderate-carbon grid. Numbers are verifiable against the engine constants — no interpolation.
- Market lookup:
op=850 MW, pipe=500 MW, vacancy=0.8%, powerCost=$0.180/kWh, coloPrice=$390/kW·mo, cagr=12%, region='Asia Pacific', maturity='established'→ direct read from DATA.markets['singapore'] - Annual power cost at 10 MW IT, PUE 1.50 (Tier III air):
0.180 × 8760 × 10 × 1000 × 1.50 =$23,652,000 / yr - Carbon footprint at 10 MW IT, PUE 1.50, grid 0.41 kgCO₂/kWh:
10 × 1000 × 8760 × 1.50 × 0.41 / 1000 =53,898 t CO₂/yr - Factor derivation from DATA.countries['SG']:
power = clamp(1−(0.180−0.05)/0.30) =0.567
grid = clamp((99.5−95)/5) =0.90 (SAIDI path preferred if available)
talent = talentScore/100 → ~72/100 =0.72
seismic = pgaToScore[pgaPct2in50yr<5] =1.00 (low seismicity)
tax = clamp(1−0.17/0.35) =0.514
carbon = clamp(1−0.41/0.90) =0.544
flood = moderate →0.66
latency = hyperscalerPresence=8/10 =0.80
water = clamp(1−aqueductStress/5) → est. 0.55
climate = climateFreeHours['1']/5800 = 800/5800 =0.138 (tropical — minimal free cooling) - Site Score (10 factors, full weight vector):
Weighted sum = (0.17×0.567) + (0.14×0.90) + (0.11×0.72) + (0.10×1.00) + (0.09×0.514) + (0.09×0.544) + (0.08×0.55) + (0.08×0.138) + (0.07×0.66) + (0.07×0.80)
= 0.096 + 0.126 + 0.079 + 0.100 + 0.046 + 0.049 + 0.044 + 0.011 + 0.046 + 0.056
= 0.653 → score 65.3 / 100 → Grade C "Viable" - Reading: Singapore scores strongly on grid, seismic, and latency factors, but the high electricity tariff, tropical climate (minimal free-cooling hours), and moderate carbon intensity pull the composite to grade C. Premium positioning shows in the colo rate ($390/kW·mo) and near-zero vacancy (0.8%).
node -e "var e=require('./rz-engine.js'); var f=e.models.site.deriveFactors('SG'); console.log(e.models.site.score(f));" — the live engine result should match within rounding of the worked values above.07 References & data lineage
- DATA.sources['markets'] — CBRE Global DC Market Report 2025 + JLL Data Center Outlook 2025 + Cushman & Wakefield DC Market Update 2025 + Synergy Research Q4 2024 (capacity/vacancy/colo/pipeline per market). Market-level
powerCostfrom utility tariff filings: PJM, ERCOT, Dominion Virginia Power, IMDA Singapore, TEPCO, regional utility databases. As-of 2026-04. - DATA.sources['countries'] — DCMOC country reference 2026-Q1. Economy fields: IMF WEO 2026 + national tariff filings. Environment fields: Ember Grid Carbon Intensity 2026 + IEA 2026 + WRI Aqueduct 4.0 water-stress scores + ASHRAE 169-2021 climate zones + USGS PGA maps. Grid reliability: IEEE 1366 SAIDI per country + utility reliability disclosures. Talent: AFCOM/Uptime labor market data 2026. Single source of truth:
dcmoc/src/constants/countries.ts→ regenerated viatools/build-countries-data.mjs. - DATA.sources['site'] — Site factor weighting derived from published DC site-selection frameworks: CBRE/JLL/451 Research site-selection criteria 2025. Power + grid dominate (17% + 14%); climate added in v2.5.0 per CBRE/JLL inclusion of free-cooling hours.
DATA.sources['site.climateFreeHours']: ASHRAE 169-2021 climate zones → annual economizer hours (DOE/NREL psychrometric bin analysis). - DATA.sources['carbon'] — IEA 2026 + Ember grid intensity dataset (kgCO₂/kWh per country grid average). Voluntary carbon offset basis $10/t CO₂e (
DATA.sources['carbon.offsetPrice']). Carbon compliance prices by country: World Bank Carbon Pricing Dashboard + OECD ECR 2025 (DATA.sources['envCosts']). - DATA.sources['pueMatrix'] — Uptime Institute Global Survey 2026 by cooling architecture and tier. Default Tier III air-cooled PUE: 1.50.
- Uptime Global DC Index 2025/2026 — global operational MW baseline, PUE/WUE/CUE benchmark distribution, vacancy and absorption benchmarks.
- IEA Data Centres and Data Transmission Networks 2026 — global DC electricity consumption growth (~15%/yr) + grid-intensity trends.
- tools/build-countries-data.mjs — generator that regenerates
DATA.countriesfromdcmoc/src/constants/countries.ts. Run after any countries.ts edit; thenterser rz-engine.js -c -m -o rz-engine.min.jsand bump?v=. Gate:node tools/test-reference-parity.mjsasserts no drift (126 assertions).
08 Assumptions & limitations
The tracker is a screening-grade market-intelligence dashboard. Key limitations to understand before using the outputs for decisions:
| Item | Assumption / limitation | Implication |
|---|---|---|
| Capacity figures | Snapshot from broker research (CBRE/JLL/C&W) as of 2025-2026. Figures are reported operational MW — not independently audited. | Fast-moving markets (N. Virginia, Johor, Indonesia) can diverge from snapshot within one quarter. Treat as order-of-magnitude context. |
| Power cost | DC-contract industrial blended rate per market from utility filings. Not an actual contracted PPA rate. Does not include network charges, taxes, or surcharges in all markets. | Actual contracted energy cost can differ 10-25% from the listed rate depending on load profile, PPA term, and regulatory regime. |
| Site Score geography | Site Score is anchored to the country profile, not sub-national variation. A score for "Jakarta" uses Indonesia country data — it does not reflect Batam vs. Bekasi vs. Cibitung sub-market differences. | Sub-national site selection requires a dedicated country-level assessment beyond this engine's scope. |
| Carbon intensity | Grid-average intensity. Does not model 24/7 carbon-free energy (CFE) contracts, Power Purchase Agreements, or regional dispatch mix. | Operators with CFE contracts (Google, Microsoft, Meta) experience effective carbon intensities well below the listed grid averages. |
| Vacancy rate | Market-level vacancy from broker research. Definition varies: some sources report pre-committed but not yet occupied space as vacant; others do not. | Use vacancy as a directionality signal (tight vs. loose), not as a precise availability figure for procurement. |
| CAGR projection | 2025-2030 CAGR from broker research. Projections reflect demand-side scenarios (AI inference, sovereign cloud, enterprise migration) that carry material uncertainty. | High-CAGR markets (N. Virginia 25%, Dubai 25%, Nairobi 25%) reflect strong pipeline confidence; realized growth depends on power availability, permitting, and capital formation. |
| Site Score neutrality | Default factor weights are a transparent heuristic informed by published DC site-selection frameworks. They are not calibrated to any single operator's proprietary weighting. | Users with different priorities (e.g., carbon-first, lowest-cost-power) should adjust the Pro-panel weight sliders to reflect their actual criteria. |
| Not investment advice | This tool is an engineering education and pre-screening aid. It does not constitute investment advice, real-estate advice, or site-acquisition recommendation. | Any site-acquisition or investment decision requires independent due diligence, utility studies, and qualified professional advice. |