Kwiz Computing Technologies Kwiz Computing Technologies
  • Home
  • Solutions
  • Environment
  • Technology
  • Kwiz Quants
  • Blog
  • About
  • Contact

Kenya NDC: Tracking Climate Commitments with Open Data

environmental-analytics
climate-policy
Kenya’s 32% GHG reduction NDC is public. The emissions data is public. This post shows how to access EDGAR and PRIMAP-hist in R to track progress.
Author

Kwiz Computing Technologies

Published

April 23, 2026

Keywords

Kenya NDC climate policy, climate analytics Kenya, UNFCCC open data, GHG emissions tracking, Paris Agreement Kenya

The Gap Between Filed Targets and Measured Progress

Kenya submitted a Nationally Determined Contribution to the UNFCCC that commits to a 32% reduction in greenhouse gas emissions by 2030, conditional on international support. The document is public. The underlying emissions data is public too. Yet almost no one has put them together in a reproducible, updatable analysis.

That gap matters. NDCs are the core accountability mechanism of the Paris Agreement. Without systematic progress tracking, “conditional on international support” becomes an untestable claim, and the targets themselves lose credibility as planning instruments.

What Kenya’s NDC Actually Commits To

Kenya’s updated 2030 NDC, submitted in 2020, uses a 2016 baseline of approximately 73 MtCO2e. The 32% conditional target implies keeping total emissions at or below roughly 50 MtCO2e by 2030. A 3% unconditional reduction is committed regardless of external financing.

The sectoral breakdown covers four main areas:

  • Energy: efficiency improvements and renewable expansion, including geothermal and solar
  • Transport: bus rapid transit, modal shift, and electric mobility targets in urban corridors
  • Forestry and land use: increasing forest cover from roughly 7% to 10% of land area, protecting existing forests
  • Agriculture: reduced emissions intensity from livestock, sustainable soil management

Each sector has quantitative sub-targets in the NDC text, but the sectoral monitoring frameworks are not yet consistently populated. The national reporting to the UNFCCC, through Biennial Transparency Reports and National Communications, lags reality by three to five years in most cases.

Why NDC Progress Tracking Stays Opaque

The data problem is structural. Kenya’s emissions data is scattered across at least four distinct systems that do not talk to each other.

NEMA’s national GHG inventory follows IPCC methodology but is updated infrequently, with the most recent National Communication covering data through 2015. The Kenya Climate Action Tracker (part of the global CAT project) provides independent estimates but relies on its own modelling assumptions. EDGAR (Emissions Database for Global Atmospheric Research, produced by the EU Joint Research Centre) publishes annual country-level estimates using a consistent global methodology. PRIMAP-hist, maintained by the Potsdam Institute for Climate Impact Research, provides a third independent time series back to 1750.

None of these is “the” authoritative source. NEMA’s inventory is most Kenya-specific but least current. EDGAR and PRIMAP-hist are current but use global proxy methods where country-specific data is sparse. The Kenya National Bureau of Statistics publishes activity data (energy consumption, livestock numbers, land cover change) that feeds into these models but is rarely read alongside them.

For a policy professional trying to answer “is Kenya on track?”, choosing which dataset to use is already a methodological decision that most NDC progress reports leave implicit.

Accessing EDGAR and PRIMAP-hist in R

Both EDGAR and PRIMAP-hist publish data as downloadable CSV files with stable URLs. Neither requires an API key for basic access.

EDGAR

EDGAR v8.0, the current release, publishes total GHG data by country, year, and sector. The country-level file is the practical starting point.

library(tidyverse)

# EDGAR v8.0 total GHG (CO2, CH4, N2O, F-gases) by country
# Source: https://edgar.jrc.ec.europa.eu/dataset_ghg80
edgar_url <- paste0(
  "https://jeodpp.jrc.ec.europa.eu/ftp/jrc-opendata/EDGAR/datasets/",
  "v80_FT2022_GHG/IEA_EDGAR_CO2_1970_2022.zip"
)

# For a self-contained example, we work with the pre-downloaded CSV
# edgar_ghg <- read_csv("IEA_EDGAR_CO2_1970_2022.csv")

# The file has wide format with one column per year
# Pivot to long and filter to Kenya
kenya_edgar <- edgar_ghg |>
  filter(Country_code_A3 == "KEN") |>
  pivot_longer(
    cols      = matches("^Y_\\d{4}$"),
    names_to  = "year",
    values_to = "emissions_mt_co2e"
  ) |>
  mutate(
    year             = as.integer(str_remove(year, "^Y_")),
    emissions_mt_co2e = as.numeric(emissions_mt_co2e)
  ) |>
  filter(year >= 2000)

PRIMAP-hist

PRIMAP-hist version 2.5 is available from the Potsdam Institute’s data repository. It covers 1750-2022 and uses UNFCCC submissions as the primary source where available, supplementing with FAO and IEA data for gaps.

# PRIMAP-hist v2.5: country-level, all sectors, CO2e (AR4 GWPs)
# Source: https://zenodo.org/records/10705513
primap_url <- paste0(
  "https://zenodo.org/records/10705513/files/",
  "Guetschow-et-al-2024-PRIMAP-hist_v2.5.1_final_no_rounding.csv"
)

primap_raw <- read_csv(primap_url, show_col_types = FALSE)

kenya_primap <- primap_raw |>
  filter(
    country  == "KEN",
    category == "KYOTOGHG (AR4GWP100)",  # All Kyoto gases in CO2e
    scenario == "HISTCR"                 # Country-reported priority
  ) |>
  pivot_longer(
    cols      = matches("^\\d{4}$"),
    names_to  = "year",
    values_to = "emissions_mt_co2e"
  ) |>
  mutate(
    year             = as.integer(year),
    emissions_mt_co2e = emissions_mt_co2e / 1000  # Convert kt to Mt
  ) |>
  filter(year >= 2000)

Building the Progress Chart

With both datasets in hand, the core analytical question is: how does Kenya’s actual emissions trajectory compare to the path implied by the NDC target?

The NDC specifies a 32% reduction from a 2016 baseline. Using the PRIMAP-hist value for 2016 as the reference point, the target path is a straight line from the 2016 baseline to 68% of that value in 2030. This is a simplification: the NDC does not specify an annual trajectory, only a 2030 endpoint. But for visualisation purposes it is a reasonable linear interpolation.

library(ggplot2)

# Establish the 2016 baseline from PRIMAP-hist
baseline_2016 <- kenya_primap |>
  filter(year == 2016) |>
  pull(emissions_mt_co2e)

# NDC target: 32% below 2016 baseline by 2030
ndc_target_2030 <- baseline_2016 * (1 - 0.32)

# Build the linear target path (2016 to 2030)
target_path <- tibble(
  year             = c(2016, 2030),
  emissions_mt_co2e = c(baseline_2016, ndc_target_2030)
)

# Most recent data year in PRIMAP-hist
latest_year <- max(kenya_primap$year)

# Chart
ggplot() +
  # Historical PRIMAP-hist trajectory
  geom_line(
    data    = kenya_primap,
    mapping = aes(x = year, y = emissions_mt_co2e, colour = "Actual (PRIMAP-hist)"),
    linewidth = 1
  ) +
  # NDC target path
  geom_line(
    data     = target_path,
    mapping  = aes(x = year, y = emissions_mt_co2e, colour = "NDC target path"),
    linetype = "dashed",
    linewidth = 1
  ) +
  # Mark the NDC baseline year
  geom_vline(xintercept = 2016, colour = "grey60", linetype = "dotted") +
  # Mark the 2030 target endpoint
  geom_point(
    data    = target_path |> filter(year == 2030),
    mapping = aes(x = year, y = emissions_mt_co2e),
    colour  = "#e63946", size = 3
  ) +
  annotate(
    "text", x = 2030.3, y = ndc_target_2030,
    label = paste0(round(ndc_target_2030, 1), " MtCO2e\n(32% reduction target)"),
    hjust = 0, size = 3.2, colour = "#e63946"
  ) +
  scale_colour_manual(
    values = c("Actual (PRIMAP-hist)" = "#2d6a4f", "NDC target path" = "#e63946")
  ) +
  scale_x_continuous(breaks = seq(2000, 2030, by = 5)) +
  labs(
    title    = "Kenya GHG Emissions vs. 2030 NDC Target",
    subtitle = paste0(
      "Actual trajectory (PRIMAP-hist v2.5) vs. conditional NDC path\n",
      "Baseline: 2016 | Target: 32% reduction by 2030"
    ),
    x       = NULL,
    y       = "Total GHG emissions (MtCO2e, AR4)",
    colour  = NULL,
    caption = paste0(
      "Source: PRIMAP-hist v2.5 (Gütschow et al., 2024) | ",
      "NDC target: Kenya Updated NDC 2020"
    )
  ) +
  theme_minimal(base_size = 13) +
  theme(legend.position = "top")

Running this code with current PRIMAP-hist data shows Kenya’s emissions rising from around 60 MtCO2e in 2000 to the 2016 baseline, with upward pressure continuing through the early 2020s. The NDC target path runs sharply downward from 2016. The gap between those two lines is the policy challenge in visual form.

What the Trajectory Actually Shows

PRIMAP-hist data for Kenya through 2022 puts total GHG emissions at roughly 80-85 MtCO2e when land-use change is included. The 32% conditional target, measured against a 73 MtCO2e baseline, implies reaching approximately 50 MtCO2e by 2030.

That is a substantial reversal of a multi-decade upward trend. Kenya’s population grew from 30 million in 2000 to over 55 million by 2025. Agricultural emissions, driven largely by livestock (Kenya has one of Africa’s larger cattle populations), account for roughly 40% of total GHG output. Land-use change from deforestation and agricultural expansion has been a persistent emissions source, partially offset by reforestation efforts in recent years.

The energy sector, by contrast, shows a more favourable story. Kenya’s electricity grid runs on roughly 90% renewable generation, dominated by geothermal from the Olkaria complex. The expansion of solar and wind capacity in recent years has kept the power sector’s emissions growth modest relative to GDP growth. This is the structural advantage Kenya brings to its NDC: it does not need to decarbonise its power grid, which is already cleaner than most middle-income countries.

The harder sectors are transport and agriculture. Transport emissions are rising with vehicle imports and urban congestion. Agriculture, where methane from livestock dominates, is difficult to reduce without affecting food security and rural livelihoods that depend on the livestock economy.

The Conditionality Question in Practice

The 32% target is explicitly conditional on receiving “adequate, predictable, and sustainable means of implementation from the international community.” Kenya’s unconditional commitment is 3% below the baseline, which amounts to modest efficiency improvements on a business-as-usual path.

What does that conditionality mean in practice? Kenya’s NDC financing needs are estimated at roughly USD 62 billion over the 2020-2030 period for both mitigation and adaptation. That financing must come from a combination of grants, concessional loans, and private climate finance, primarily through mechanisms such as the Green Climate Fund, bilateral climate finance commitments, and voluntary carbon markets.

The tracking challenge is that no public dashboard currently links Kenya’s NDC financing received to emissions reductions achieved. Development finance institutions publish their climate commitments in aggregate. NEMA reports sectoral mitigation actions. But the implied question of the NDC framework, namely whether the international support conditionality is being met at a level that enables the 32% target, is not answered anywhere in a format that a policy analyst can use directly.

This is precisely where a reproducible R workflow adds value. A tracker that combines PRIMAP-hist emissions data, Kenya’s Biennial Transparency Reports, and GCF and bilateral disbursement data (available through the OECD DAC Creditor Reporting System) could produce an annual progress assessment. None of those datasets requires special access. All of them can be read into R and updated when new vintages are published.

Building a Repeatable Tracker

The workflow outlined above handles the emissions side. Adding the finance side requires one more data source: the OECD CRS database, which tracks climate-tagged development finance by recipient country.

# OECD Creditor Reporting System: climate-tagged flows to Kenya
# Available at: https://stats.oecd.org/DownloadFiles.aspx?DatasetCode=CRS1
# Filter: recipient = Kenya, purpose codes related to energy and environment

oecd_crs <- read_csv("CRS_2023_download.csv", show_col_types = FALSE) |>
  filter(
    RecipientName == "Kenya",
    str_detect(PurposeName, "Climate|Renewable|Forest|Environment")
  ) |>
  summarise(
    climate_finance_usd_m = sum(USD_Disbursement, na.rm = TRUE),
    .by = Year
  )

# Join with emissions trajectory for a combined tracker
ndc_tracker <- kenya_primap |>
  left_join(oecd_crs, by = c("year" = "Year")) |>
  mutate(
    target_path_mt = case_when(
      year <= 2016 ~ NA_real_,
      year >  2016 ~ baseline_2016 - (baseline_2016 - ndc_target_2030) *
                     ((year - 2016) / (2030 - 2016))
    ),
    gap_to_target = emissions_mt_co2e - target_path_mt
  )

This structure gives you a single data frame with actual emissions, the implied target path for each year, the gap between them, and the climate finance received. Rendered through a Quarto document, it becomes an annually updatable NDC progress report that can be shared with government counterparts, development partners, or parliamentary committees.

For organisations already using R for environmental assessments or Kenya open data work, extending this to NDC tracking requires no new infrastructure. The same reproducibility principles that apply to EIA reporting apply here: version-controlled code, documented data sources, transparent assumptions.

The Analysts Who Should Build This

Climate policy professionals in Kenya’s Ministry of Environment, NEMA, and the National Treasury work with NDC commitments regularly. Development finance analysts at the African Development Bank, KfW, and bilateral donors need progress data to justify continued climate finance. NGO researchers at organisations like the African Centre for Technology Studies produce independent assessments that would benefit from a common data infrastructure.

None of these groups currently has a shared, reproducible tracking framework. The UNFCCC’s own transparency portal provides raw data but no country-specific analysis. The Climate Action Tracker covers Kenya but updates infrequently and does not expose its underlying calculations.

The tools to build this exist today. The databases are public. The analytical methods are straightforward. What is missing is the institutional commitment to treat NDC tracking as a data engineering problem, not just a reporting obligation.

If your organisation monitors Kenya’s climate commitments and you are building something along these lines, what data source has been your biggest obstacle? The comments are open, and so is our contact page.

Kwiz Computing Technologies provides climate analytics services for development finance institutions, government agencies, and NGOs working on Kenya and East Africa climate policy. Our work on carbon markets and ESG analytics uses the same open data infrastructure described here.

© 2026 Kwiz Computing Technologies. All rights reserved.
Data Science & Technology | Environmental Analytics | Quantitative Finance

 

Built with Quarto