ESMP Ukraine

Connecting...

Find bankable, resilient clean-energy projects
in Ukraine — before committing capital.

Ukraine needs distributed energy resilience, not just green megawatts. ESMP helps investors, foundations, MDBs and municipalities identify where capital can survive missile risk, scale through reconstruction, and matter for energy independence — with deterministic financial models and source-linked data on every number.

What This Is — in four lines

What is this?A pre-investment screening platform for green-energy projects in Ukraine. Information digital twins of cities + an AI-assisted analyst that drafts investor-grade memos.
Who is it for?Investors, family offices, foundations, MDBs/DFIs, IPPs, and Ukrainian municipalities preparing fundable projects.
What problem?War risk, grid attacks, regulatory chaos and donor overlap make Ukrainian projects hard to screen. Capital sits on the sidelines while distributed resilience is needed now.
What can I do now?Run a playbook above · explore 11 data layers across 4 MVP cities · read the methodology · review the risk framework.

Why now?

Grid vulnerability

Russian strikes have repeatedly knocked out >50% of Ukraine's centralised generation. Distributed renewables + storage are the only hedge.

War-driven decentralisation

Hospitals, water utilities and shelters need autonomous power. Microgrids are no longer optional.

Reconstruction finance

$486B Ukraine RDNA. Capital is mobilising, but pipeline-quality projects with verified data are scarce.

Energy independence

Every MW of domestic renewables reduces fossil import dependence and frees fiscal space.

EU integration

Ukraine's 2030 RES targets and EU acquis alignment open ETS, CBAM-safe and Article 6 ITMO revenue.

Donor coordination

EBRD, IFC, USAID, KfW, EIB all chasing similar opportunities — ESMP surfaces gaps and overlap.

Ukraine Energy Security Marshall Plan

Authored by Alex Cornell du Houx (2024) through the Energy Opportunity Program for Action (EOPA), the plan lays out a comprehensive framework for rebuilding Ukraine's energy infrastructure through distributed renewable generation, international partnerships, and blended finance. Every ESMP memorandum maps investment opportunities to one or more EOPA strategies:

1

Direct Aid

Grant-funded installations on critical infrastructure — hospitals, schools, shelters.

2

Sister Cities

US & EU municipalities paired with Ukrainian counterparts for co-investment and knowledge transfer.

3

Distributed Resilience

Decentralised solar + storage microgrids hardened against grid disruption from missile strikes.

4

Cross-funder Coordination

Aligning EBRD, IFC, USAID, KfW and private capital to avoid overlap and maximise impact.

5

IRA Leverage

Structuring projects so US-connected entities can claim Inflation Reduction Act clean-energy credits.

11 Data Layers per City

Each city twin is a structured JSON document. Every numeric value carries provenance: source URL, retrieval date, and a 0–1 confidence score. See the Sources & Provenance page for the full per-field index.

economyGRP, budget, industries, salary
demographicsPopulation, IDPs, age, migration
socialSchools, hospitals, universities
crimeCrime rate, corruption, trust
energyPeak demand, RE installed, grid loss
investmentFDI, industrial parks, investors
militaryFrontline distance, strikes, risk
governanceCouncil, contacts, officials
regulatoryGreen tariff, permits, incentives
infrastructureRoads, transit, fiber, water
renewablesSolar, wind, biomass, rooftop

4 MVP Cities

Indicative figures. Click Sources & Provenance for source URL, retrieval date, confidence and method per field.

Kyiv

Capital
Population2.95M
GRP$38.4B
War-risk4.6 / 10
Solar1,180 kWh/m²/yr

Kharkiv

Frontline
Population1.24M
GRP$9.8B
War-risk8.4 / 10
Solar1,240 kWh/m²/yr

Lviv

Rear Hub
Population740K
GRP$6.1B
War-risk2.1 / 10
Solar1,120 kWh/m²/yr

Pustomyty

Small Municipality
Population11.4K
GRP$240M
War-risk1.8 / 10
Solar1,140 kWh/m²/yr

How It Works

ESMP is an AI-assisted screening engine with deterministic financial models and source-linked data. It is not a black-box LLM and not investment advice — it is a research tool that compresses weeks of desk-based screening into minutes, with every number traceable.

Human-in-the-loop validation

STEP 1
AI drafts

Claude-class LLM plans the analysis, picks tools, and writes prose — never the numbers.

STEP 2
Deterministic Python computes

numpy-financial calculates IRR / NPV / payback. War-risk and corruption scores use fixed formulas.

STEP 3
Sources attach

Every figure carries source URL, retrieval date and confidence. No silent assumptions.

STEP 4
Analyst reviews

Outputs are screening drafts. A human analyst signs off before any memo leaves ESMP.

STEP 5
Confidence visible

You see the 0–1 confidence score on every layer; low-confidence fields are flagged.

Important — ESMP outputs are preliminary screening only. They are not investment advice, legal advice, or a substitute for due diligence. Any project requires full legal, technical, environmental, security and financial due diligence before commitment of capital. War-risk and corruption scores are model estimates, not guarantees.

Loading cities...

Select a layer above.

Guided playbooks
Try:

Methodology

Every numeric output ESMP shows is produced by an explicit, reproducible formula. The LLM picks tools and writes prose. The Python tools below compute the numbers. This page documents what each formula does, what inputs it consumes, and what its limits are.

1. Financial: IRR, NPV, Payback

Computed by finance_calc using the numpy-financial library. The LLM never does arithmetic.

Inputs

FieldUnitDescription
capex_eurEURTotal capital cost, year 0 outflow.
capacity_mwMWNameplate generation capacity.
capacity_factor0–1Annual energy / (capacity × 8760 h).
ppa_eur_per_mwhEUR/MWhConstant offtake price (or LCOE proxy).
opex_pct_per_year0–1O&M as fraction of capex per year.
life_yearsyearsProject life for cash-flow horizon.
discount_rate0–1WACC / hurdle rate for NPV.

Annual energy & revenue

annual_energy_mwh = capacity_mw × 8760 × capacity_factor annual_revenue_eur = annual_energy_mwh × ppa_eur_per_mwh annual_opex_eur = capex_eur × opex_pct_per_year annual_cashflow = annual_revenue_eur − annual_opex_eur

Cash-flow stream

cashflows = [−capex_eur, cf, cf, ..., cf] # length = 1 + life_years

NPV (net present value)

NPV = Σ (cashflow_t / (1 + discount_rate)^t) for t = 0..life_years

IRR (internal rate of return)

numpy_financial.irr(cashflows) — the discount rate that makes NPV = 0. Returns NaN if no real root exists (typical when cumulative revenue never recovers capex).

Payback period

payback_years = capex_eur / max(annual_cashflow, ε) # simple, undiscounted

Discounted payback is exposed as payback_discounted_years when the LLM requests it.

Limits

  • Constant cash-flow assumption — no degradation, no PPA escalation. Sensitivities are explicit, not modelled.
  • Pre-tax, pre-debt. Project IRR, not equity IRR.
  • Currency: EUR. FX risk is flagged as a separate risk category, not modelled in the cash flow.

2. War-risk score (0–10)

Computed by warrisk_score. A weighted composite of four observable signals. Higher = more dangerous.

Formula

war_risk = w1 · strike_intensity + w2 · grid_damage_index + w3 · frontline_proximity + w4 · air_defense_uncertainty default weights: w1 = 0.35, w2 = 0.25, w3 = 0.30, w4 = 0.10 final value clipped to [0, 10] and rounded to 1 decimal

Component definitions

ComponentSourceNormalisation
strike_intensityACLED event counts · Ukrainian official strike reports · NASA FIRMS thermal anomaliesstrikes per 100k pop / month, log-scaled to 0–10
grid_damage_indexUkrenergo / DTEK incident reports · satellite night-light delta (NOAA VIIRS)fraction of substations / generation capacity offline 12-month rolling
frontline_proximityISW / DeepState frontline geometry1 − min(distance_km / 300, 1), so <30 km → ~1
air_defense_uncertaintyOpen-source defence reporting; analyst override0–1 subjective, default 0.5 with confidence flag

Limits

  • Backward-looking. Past strikes do not guarantee future strikes (or absence).
  • Air-defense component is judgemental and carries low confidence by default.
  • Score is a screening signal, not an insurance underwriting input.

3. Energy demand

Pulled from the city energy layer (peak_demand_mw, annual_consumption_gwh). Source: Ukrenergo regional load reports + oblast statistical bulletins. When the LLM needs implied per-capita demand:

per_capita_demand_kwh = annual_consumption_gwh × 1e6 / population

Wartime distortions (IDP flux, industrial shutdowns) are reflected as reduced confidence on the field, not silently smoothed.

4. Renewable potential

Solar

annual_solar_mwh = installed_kwp × solar_irradiance_kwh_m2_yr / 1000 × performance_ratio performance_ratio default = 0.80 (typical for Ukrainian installations)

Source: PVGIS-SARAH3, Global Solar Atlas, NASA POWER — cross-checked, lowest-confidence wins.

Wind

Mean wind speed at 100 m AGL from Global Wind Atlas. Capacity factor is looked up from a turbine class curve; not modelled from scratch.

Rooftop technical potential

rooftop_kwp_potential = suitable_roof_area_m2 × 0.15 # kWp per m² of usable roof

Suitable roof area derived from OpenStreetMap building footprints × oblast suitability factor.

5. Governance risk

A 0–10 composite from the governance and regulatory layers.

governance_risk = 0.40 · permit_complexity + 0.30 · (10 − council_capacity) + 0.30 · vendor_concentration permit_complexity : days-to-permit / 30, capped at 10 council_capacity : staffed pipeline-capable officials per 10k population, scaled vendor_concentration: Herfindahl on procurement awards, scaled 0–10

6. Corruption / trust indicators

Read directly from the crime layer:

  • corruption_index — 0–10 derived from Transparency International Ukraine + NABU case density.
  • institutional_trust_pct — from KIIS / Razumkov Centre tracking polls (oblast level).
  • procurement_transparency_pct — share of contracts published on Prozorro above threshold.

These are not combined into a single number on purpose — investors weight them differently.

Confidence scores

Every field carries a confidence in [0,1]:

RangeMeaning
≥ 0.80Official primary source, retrieved within 12 months, no known contradictions.
0.50–0.79Secondary source or modelled estimate; some triangulation.
< 0.50Single weak source, stale, or analyst inference. Do not use without verification.
Reminder — these formulas produce screening estimates. Bankable financials require full project finance modelling, EPC quotes, lender DD, and regulatory sign-off. ESMP outputs are a starting point, not a closing memo.

Risk Framework

Investing in Ukrainian energy assets means pricing risks that do not appear in standard EU/US deal templates. This framework names the twelve risks ESMP tracks, rates how material they are at MVP-city level, and lists the mitigation tools available to investors today.

Critical

1. War risk

Direct kinetic loss of assets from missile or drone strikes; collateral damage from frontline movement.
Mitigations: MIGA War & Civil Disturbance cover; ECA-backed political-risk insurance; siting away from strategic targets; physical hardening; modular replaceable design.
Critical

2. Grid attack risk

Loss of revenue when transmission/distribution is destroyed even if the asset survives.
Mitigations: islanding capability + storage; behind-the-meter PPAs; multi-substation interconnection; business-interruption insurance.
Material

3. Permitting risk

Wartime regulatory shortcuts and reversals; oblast vs central authority conflicts; environmental permits delayed.
Mitigations: early Energoatom / NEURC engagement; legal opinion on Article 17-1 wartime fast-track; conditional EPC contracts.
Material

4. Land & title risk

Unclear cadastral records; restitution claims; military easements; mine contamination on greenfield sites.
Mitigations: State Land Cadastre verification; HALO / FSD demining sign-off; municipal long-lease structures; brownfield prioritisation.
Critical

5. Corruption / procurement risk

Kickback exposure on EPC awards; politically connected vendors; sanctions list contamination.
Mitigations: Prozorro-only procurement; NABU/SAPO clearance; OFAC + EU sanctions screening; independent owner's engineer.
Material

6. Currency / payment risk

UAH depreciation; capital controls; offtaker (e.g., Guaranteed Buyer) payment delays under wartime cash-flow stress.
Mitigations: EUR/USD-denominated PPAs where allowed; partial guarantees from EBRD / IFC; escrow + waterfall; FX hedging.
Material

7. Insurance availability

Commercial insurance markets largely closed for war perils; coverage gaps for physical damage and BI.
Mitigations: MIGA Trust Fund for Ukraine; UK ECGD; DFC; layered self-insurance; sister-city co-investment risk-sharing.
Material

8. Political risk

Tariff revisions; retroactive feed-in changes; nationalisation tail risk; coalition shifts in donor countries.
Mitigations: Energy Charter Treaty arbitration clauses; PRI cover; phased capex; donor co-financing.
Material

9. Supply-chain risk

Logistics disruption; module/inverter import constraints; critical spares stuck at borders.
Mitigations: EU-sourced equipment with CBAM-safe origin; bonded warehousing in Lviv/Uzhhorod; spares pooling agreements.
Material

10. O&M / security risk

Difficulty deploying field crews; physical site security; staff mobilisation under martial law.
Mitigations: local O&M partners with reservation status workforce; remote monitoring; perimeter security spec in EPC.
Manageable

11. Cyber risk

SCADA / inverter firmware compromise; targeted intrusion of operational technology.
Mitigations: NIS2-aligned OT segmentation; CERT-UA threat feeds; vetted vendors; red-team testing pre-COD.
Manageable

12. Community acceptance risk

Local opposition to siting; competition for grid capacity; perceived "outsider profit" on aid-adjacent assets.
Mitigations: early hromada engagement; community shared-ownership tranche; transparent benefit-sharing; sister-city co-branding.

Risk → capital structure mapping

Risk profileBest-fit capitalExample city / use-case
Very high (frontline)Grant + concessional only; no commercial debtKharkiv hospital microgrid — Direct Aid (EOPA-1)
HighBlended: grant first-loss + DFI debtKyiv resilience microgrids — EOPA-3
MediumDFI debt + private equity, MIGA-wrappedLviv 10 MW solar+BESS — EOPA-3 / EOPA-4
LowCommercial PPA, IPP-style structureLviv / Pustomyty rooftop and small wind

Project Pipeline (illustrative)

These are indicative pipeline candidates assembled from the MVP city twins, not committed projects. They show what kind of opportunities ESMP surfaces and how risk ↔ capital pairing works in practice. Real pipeline access requires data-room sign-off — request access.

ProjectCityType (EOPA)SizeCapEx (EUR) StatusRiskFunding fit
Hospital solar + storageKharkivDirect Aid (1)500 kW + 1 MWh~€1.4M conceptVery high (8.4)Grant first-loss
School shelter microgridKyivResilience (3)250 kW + 0.5 MWh~€0.7M data neededMedium (4.6)Blended (donor + DFI)
Municipal rooftop solar portfolioLvivIPP / PPA (3,5)3 MW (15 sites)~€3.0M pre-feasibilityLow (2.1)Commercial debt + equity
Solar + BESS hybridLvivDistributed Resilience (3)10 MW + 4 MWh~€11.9M feasibilityLow–MedDFI debt + MIGA wrap
Community solarPustomytyDirect Aid + Sister City (1,2)5 MW~€5.5M pre-feasibilityLow (1.8)Sister-city co-invest + grant
Onshore windLviv oblastIPP / PPA (3,4)20 MW~€26M conceptLow (2.1)Commercial + ECA
Water utility microgridKharkivResilience (3)1.5 MW + 3 MWh~€3.8M data neededVery high (8.4)Donor + MIGA
Disclaimer — figures above are illustrative scoping numbers derived from city-level data, not validated project budgets. Use the Agent tab or contact us for detailed screening on any line item.

Sources & Provenance

Every numeric value in an ESMP city twin carries a provenance object: source_url, retrieved_at (ISO date), confidence (0–1), method (official / estimated / modeled / inferred), and an optional note. The Explore Layers tab shows this on every individual field. The catalogue below summarises the primary sources by data layer.

Primary sources by layer

LayerPrimary sourcesTypical methodTypical confidence
economyState Statistics Service of Ukraine (Ukrstat); oblast statistical yearbooks; Ministry of Economy bulletins; World Bank Ukraine country dataofficial + estimated (wartime gaps)0.55–0.80
demographicsUkrstat; UNHCR Ukraine Refugee Situation; IOM DTM (IDPs); Ministry of Social Policy registersofficial + modeled (IDP flux)0.55–0.85
socialMinistry of Health facilities registry; Ministry of Education school registry; oblast administration sitesofficial0.80–0.95
crimeTransparency International Ukraine CPI; NABU / SAPO case statistics; KIIS & Razumkov trust polls; Prozorro analyticsofficial + modeled0.55–0.80
energyUkrenergo regional load reports; NEURC tariff orders; SAEE renewable installations registry; DTEK disclosuresofficial0.75–0.90
investmentUkraineInvest; oblast IPA bulletins; IFC / EBRD project disclosures; FDI Marketsofficial + secondary0.55–0.80
militaryACLED conflict events; ISW / DeepState frontline maps; NASA FIRMS; Ukrainian official strike reports; NOAA VIIRS night-lightsmodeled composite0.50–0.75
governanceHromada / city council official sites; Ukrainian Government Portal; mayor / deputy contact pages; Diia.City registryofficial0.80–0.95
regulatoryNEURC; SAEE; Verkhovna Rada legislation; Article 17-1 wartime regime; Energy Community Secretariat reportsofficial0.80–0.95
infrastructureUkravtodor; Ukrzaliznytsia; State Agency for Infrastructure; OpenStreetMap; oblast plansofficial + OSM0.65–0.85
renewablesPVGIS-SARAH3; Global Solar Atlas; Global Wind Atlas; NASA POWER; SAEE installations registry; OpenStreetMap building footprintsmodeled (resource) + official (installed)0.75–0.95
emissionsState Environmental Inspectorate; GPC inventories where available; IEA CO2 grid factor for Ukraine; SBTi sectoral pathwaysmodeled0.60–0.80

Worked example — Kharkiv war-risk = 8.4 / 10

Componentstrike_intensityACLED Ukraine dataset; UA MoD daily situation reports0.85
Componentgrid_damage_indexUkrenergo + DTEK incident logs; NOAA VIIRS night-light delta0.70
Componentfrontline_proximityDeepState / ISW frontline geometry, distance < 30 km0.90
Componentair_defense_uncertaintyanalyst override, low transparency0.40
Composite8.4 / 10weighted sum, weights {0.35, 0.25, 0.30, 0.10}0.72

Read this as: high-confidence on strikes and frontline, medium on grid damage, low on air-defense effectiveness — overall confidence 0.72.

How to cite

When you reproduce ESMP data, please cite as:

Energy Security Marshall Plan (ESMP), Ukraine MVP twin dataset, <city> · <layer> · field=<name>, retrieved YYYY-MM-DD from energysecuritymarshallplan.org, underlying source: <source_url>.

Each underlying source retains its own licence; ESMP does not relicense third-party data.