Crop production, area and yield by county and season for Kenya and sub-Saharan Africa

Area, production and yield by administrative unit, crop, crop system and season for all of sub-Saharan Africa, harmonised from national statistics with a stable unit identifier, from 1980.

Catalogue entry: Sub-national crop production. Area, production and yield by admin unit, crop and season — the ground truth behind a demand estimate. Covers all of sub-Saharan Africa.

Questions this data answers

  • How big is the fertilizer market in a county, from the hectares planted to maize, beans, potatoes or wheat?
  • What is a normal long-rains yield in Bungoma, so this season's satellite reading can be turned into tonnes?
  • Which 10 counties grow most of Kenya's maize, and how has their share moved over 10 seasons?
  • Where is yield falling over the years despite stable area, for targeting soil or seed programmes?
  • How many tonnes will a county market absorb at harvest, for planning storage and transport?

What the crop production data holds

Area, production and yield by administrative unit, crop, crop system and season, for the whole continent, harmonised out of national statistics with a stable unit identifier that survives county renamings and splits along the way. Every row is stamped on 1 January of the year it describes, and revised annually as better figures arrive.

Trans Nzoia over 10 seasons

The charts track maize in the long rains from 2015 to 2024. Yield ran between 3.6 and 4.8 tonnes per hectare over that span; production between 372,000 and 508,000 tonnes. 2024 planted 124,000 hectares, the most in the whole series, yet returned only 3.78 tonnes per hectare, the lowest yield since 2016: more land under the crop, a worse season underneath it. The July 2026 hotspot bulletin named Trans Nzoia for moisture stress, and the 2026 row will say exactly what that cost once it’s published.

Kenya, maize, 2024 across counties

Bungoma’s long rains: 82,448 hectares, 230,164 tonnes, 2.79 tonnes per hectare. Elgeyo Marakwet: 37,838 hectares at 3.85. Baringo: 41,516 at 2.37. Short-rains rows exist separately, and stay small in the highland counties where they’re recorded at all.

What the crop production data is used for

It supplies the harvest side of the crop-economy analysis, which multiplies a county’s expected harvest by the staple basket price to size its income and flags scarcity whenever a price spike traces back to a poor harvest. It also gives a baseline for what a good season in a district has historically produced, the exact figure a satellite anomaly gets read against. One thing to watch: the query window matters here, since the default 24-hour window returns nothing at all against an annual series.

Sample data

Trans Nzoia, maize, long rains, 10 years

Yield between 3.6 and 4.8 tonnes per hectare across 10 seasons.
Production 372 to 508 thousand tonnes; 2024 planted 124,000 hectares, the most in the series, at the lowest yield since 2016.

Sample rows, Kenya, maize, 2024

YearCountyUnit idSeasonArea haProduction tYield t/ha
2024BaringoKE2013A130long41,51698,496.52.37
2024BaringoKE2013A130short4682.01.78
2024BometKE2013A136long20,10051,468.02.56
2024BometKE2013A136short7,28122,068.93.03
2024BungomaKE2013A139long82,448230,164.52.79
2024BungomaKE2013A139short10,88919,849.21.82
2024BusiaKE2013A140long26,51350,822.11.92
2024BusiaKE2013A140short9,79530,128.03.08
2024Elgeyo MarakwetKE2013A128long37,838145,565.63.85
2024Elgeyo MarakwetKE2013A128short131242.61.85

Long and short rains are separate rows. The unit id stays stable when a county is renamed.

Dataset idmarket.crop_production
Cadenceper season, annual revisions
EndpointGET /market/production
Key scopemarket:read
Declared fields3
History1980 to today
Coverageall of sub-Saharan Africa, admin level 1 and 2
StatusServed over the API

Global reference data — the same rows for every caller.

Source: HarvestStat Africa (MIT licence).

Fields

FieldUnitNote
areaha
productionmt
yieldmt/ha

Filters

sourcecountryadmin1admin2fnidproductcrop_systemseason

At least one filter is required (country or crop). This layer covers a continent, so an unfiltered read is refused with a 400 that names the filters instead of scanning the whole store.

The same call, three ways

curl -G https://api.nuasense.com/api/nuasense/v1/market/production \
  -H "Authorization: Bearer nua_live_…" \
  -d start=-30d -d country=ken -d product=maize -d start=-2000d

Through the MCP connector the same read is the platform_dataset tool with dataset=market.crop_production. Through a scheduled export it is one job with the same filters, delivered as a file. Every dataset takes the same arguments: start and end, every with agg, fields, limit up to 5,000, order, and the tags it declares.