Satellite crop condition and fertilizer demand data for Kenya, Tanzania, Uganda and Rwanda

Cropland vegetation per county and district, read against that unit's own history rather than its neighbours. A rainfall anomaly to explain why a dekad ran green or brown. A monthly early-warning flag for seasons that are failing. 3 datasets, 10 fields, 243 units across 4 countries, and 2 layers that reach beyond them into the wider continent.

Catalogue group: Demand & crop stress, market data. Where demand is building, and where crops are struggling.

Pages in this group: Cropland NDVI by county: Kenya, Tanzania, Uganda, Rwanda, Seasonal rainfall anomaly by county, sub-Saharan Africa and Agricultural stress and crop hotspot warnings, Africa.

The 3 dataset pages in demand & crop stress

The 6 questions demand & crop stress answers in one call

Each is a single call that returns a computed answer rather than rows to process, worked out from records already held and returned with a trust block. Where a question could only be answered by guessing, there is no endpoint for it.

QuestionWhat comes backCall
Give me everything about one county in a single call. Price, demand, affordability and crop economy, synthesised. /fertilizer/county-brief
How big is the fertilizer market in this country? /fertilizer/market-size
Is demand rising in this one county, and how strongly? /fertilizer/demand-signal
What is the farmer in this county actually earning? Harvest value against crop prices, with a scarcity flag. /fertilizer/crop-economy
Which counties are building demand right now? /fertilizer/demand-board
Has the season started here — early or late, and is the rain that starts one coming? Eight years of satellite greenness against this unit's own normal. Also covers TZ, UG and RW. Kenya answers add rain_outlook: expected rain for the next 7 and 15 days with a wet/dry band, whether planting-window rain is unlikely/possible/likely, the expected dry spell and heat days — derived from a 64-member ensemble forecast (Google DeepMind WeatherNext 3, experimental; the response carries the required attribution). /analytics/season

An answer is priced per call at 4¢, or USD 40 per 1,000, with 10 free a month on every account. Each question is set out with its filters and price on Fertilizer demand and Market analytics, and every group is listed together under analyses.

Turkana, Kenya · -0.12 vs own seasonal normalMarsabit, Kenya · -0.02 vs own seasonal normalMandera, Kenya · 0.00 vs own seasonal normalWajir, Kenya · 0.00 vs own seasonal normalWest Pokot, Kenya · -0.19 vs own seasonal normalSamburu, Kenya · -0.10 vs own seasonal normalIsiolo, Kenya · -0.02 vs own seasonal normalBaringo, Kenya · -0.17 vs own seasonal normalElgeyo-Marakwet, Kenya · -0.13 vs own seasonal normalTrans Nzoia, Kenya · -0.04 vs own seasonal normalBungoma, Kenya · -0.03 vs own seasonal normalGarissa, Kenya · 0.00 vs own seasonal normalUasin Gishu, Kenya · -0.05 vs own seasonal normalKakamega, Kenya · -0.02 vs own seasonal normalLaikipia, Kenya · -0.15 vs own seasonal normalBusia, Kenya · -0.03 vs own seasonal normalMeru, Kenya · -0.02 vs own seasonal normalNandi, Kenya · -0.01 vs own seasonal normalSiaya, Kenya · -0.04 vs own seasonal normalNakuru, Kenya · -0.08 vs own seasonal normalVihiga, Kenya · -0.01 vs own seasonal normalNyandarua, Kenya · -0.05 vs own seasonal normalTharaka, Kenya · 0.00 vs own seasonal normalKericho, Kenya · -0.03 vs own seasonal normalKisumu, Kenya · -0.06 vs own seasonal normalNyeri, Kenya · -0.04 vs own seasonal normalTana River, Kenya · 0.00 vs own seasonal normalKitui, Kenya · 0.00 vs own seasonal normalKirinyaga, Kenya · -0.01 vs own seasonal normalEmbu, Kenya · -0.02 vs own seasonal normalHoma Bay, Kenya · -0.05 vs own seasonal normalBomet, Kenya · -0.02 vs own seasonal normalNyamira, Kenya · -0.01 vs own seasonal normalNarok, Kenya · -0.06 vs own seasonal normalKisii, Kenya · -0.01 vs own seasonal normalMurang'a, Kenya · -0.02 vs own seasonal normalMigori, Kenya · -0.03 vs own seasonal normalKiambu, Kenya · -0.03 vs own seasonal normalMachakos, Kenya · 0.00 vs own seasonal normalKajiado, Kenya · 0.00 vs own seasonal normalNairobi, Kenya · -0.02 vs own seasonal normalMakueni, Kenya · 0.00 vs own seasonal normalLamu, Kenya · +0.02 vs own seasonal normalKilifi, Kenya · +0.01 vs own seasonal normalTaita Taveta, Kenya · 0.00 vs own seasonal normalKwale, Kenya · +0.03 vs own seasonal normalMombasa, Kenya · -0.01 vs own seasonal normalDodoma, Tanzania · +0.01 vs own seasonal normalArusha, Tanzania · 0.00 vs own seasonal normalKilimanjaro, Tanzania · +0.02 vs own seasonal normalTanga, Tanzania · +0.03 vs own seasonal normalMorogoro, Tanzania · +0.03 vs own seasonal normalPwani, Tanzania · +0.02 vs own seasonal normalDar-es-salaam, Tanzania · 0.00 vs own seasonal normalLindi, Tanzania · +0.01 vs own seasonal normalMtwara, Tanzania · +0.01 vs own seasonal normalRuvuma, Tanzania · +0.03 vs own seasonal normalIringa, Tanzania · +0.01 vs own seasonal normalMbeya, Tanzania · +0.01 vs own seasonal normalSingida, Tanzania · +0.01 vs own seasonal normalTabora, Tanzania · 0.00 vs own seasonal normalRukwa, Tanzania · 0.00 vs own seasonal normalKigoma, Tanzania · 0.00 vs own seasonal normalShinyanga, Tanzania · 0.00 vs own seasonal normalKagera, Tanzania · -0.01 vs own seasonal normalMwanza, Tanzania · -0.02 vs own seasonal normalMara, Tanzania · -0.03 vs own seasonal normalManyara, Tanzania · +0.01 vs own seasonal normalNjombe, Tanzania · +0.02 vs own seasonal normalKatavi, Tanzania · 0.00 vs own seasonal normalSimiyu, Tanzania · -0.01 vs own seasonal normalGeita, Tanzania · -0.02 vs own seasonal normalSongwe, Tanzania · +0.01 vs own seasonal normalKaskazini Unguja, Tanzania · +0.01 vs own seasonal normalKusini Unguja, Tanzania · +0.02 vs own seasonal normalMjini Magharibi, Tanzania · +0.02 vs own seasonal normalKaskazini Pemba, Tanzania · +0.01 vs own seasonal normalKusini Pemba, Tanzania · 0.00 vs own seasonal normalBuikwe, Uganda · 0.00 vs own seasonal normalBukomansimbi, Uganda · no live value in this windowButambala, Uganda · no live value in this windowBuvuma, Uganda · 0.00 vs own seasonal normalGomba, Uganda · no live value in this windowKalangala, Uganda · 0.00 vs own seasonal normalKalungu, Uganda · no live value in this windowKampala, Uganda · no live value in this windowKassanda, Uganda · no live value in this windowKayunga, Uganda · no live value in this windowKiboga, Uganda · no live value in this windowKyankwanzi, Uganda · no live value in this windowKyotera, Uganda · no live value in this windowLuwero, Uganda · no live value in this windowLwengo, Uganda · no live value in this windowLyantonde, Uganda · no live value in this windowMasaka, Uganda · no live value in this windowMityana, Uganda · no live value in this windowMpigi, Uganda · no live value in this windowMubende, Uganda · no live value in this windowMukono, Uganda · -0.04 vs own seasonal normalNakaseke, Uganda · no live value in this windowNakasongola, Uganda · -0.03 vs own seasonal normalRakai, Uganda · no live value in this windowSsembabule, Uganda · no live value in this windowWakiso, Uganda · no live value in this windowAmuria, Uganda · no live value in this windowBudaka, Uganda · no live value in this windowBududa, Uganda · -0.03 vs own seasonal normalBugiri, Uganda · no live value in this windowBugweri, Uganda · no live value in this windowBukedea, Uganda · no live value in this windowBukwo, Uganda · no live value in this windowBulambuli, Uganda · no live value in this windowBusia, Uganda · no live value in this windowButaleja, Uganda · no live value in this windowButebo, Uganda · no live value in this windowBuyende, Uganda · no live value in this windowIganga, Uganda · no live value in this windowJinja, Uganda · no live value in this windowKaberamaido, Uganda · -0.01 vs own seasonal normalKalaki, Uganda · -0.01 vs own seasonal normalKaliro, Uganda · no live value in this windowKamuli, Uganda · no live value in this windowKapchorwa, Uganda · -0.05 vs own seasonal normalKapelebyong, Uganda · no live value in this windowKatakwi, Uganda · no live value in this windowKibuku, Uganda · no live value in this windowKumi, Uganda · no live value in this windowKween, Uganda · no live value in this windowLuuka, Uganda · no live value in this windowManafwa, Uganda · no live value in this windowMayuge, Uganda · no live value in this windowMbale, Uganda · no live value in this windowNamayingo, Uganda · no live value in this windowNamisindwa, Uganda · -0.06 vs own seasonal normalNamutumba, Uganda · no live value in this windowNgora, Uganda · no live value in this windowPallisa, Uganda · no live value in this windowSerere, Uganda · no live value in this windowSironko, Uganda · -0.04 vs own seasonal normalSoroti, Uganda · no live value in this windowTororo, Uganda · no live value in this windowAbim, Uganda · no live value in this windowAdjumani, Uganda · -0.05 vs own seasonal normalAgago, Uganda · no live value in this windowAlebtong, Uganda · no live value in this windowAmolatar, Uganda · no live value in this windowAmudat, Uganda · no live value in this windowAmuru, Uganda · -0.04 vs own seasonal normalApac, Uganda · -0.03 vs own seasonal normalArua, Uganda · -0.02 vs own seasonal normalDokolo, Uganda · no live value in this windowGulu, Uganda · -0.04 vs own seasonal normalKaabong, Uganda · no live value in this windowKarenga, Uganda · no live value in this windowKitgum, Uganda · -0.06 vs own seasonal normalKoboko, Uganda · -0.03 vs own seasonal normalKole, Uganda · -0.03 vs own seasonal normalKotido, Uganda · no live value in this windowKwania, Uganda · -0.01 vs own seasonal normalLamwo, Uganda · -0.05 vs own seasonal normalLira, Uganda · no live value in this windowMadi Okollo, Uganda · no live value in this windowMaracha, Uganda · 0.00 vs own seasonal normalMoroto, Uganda · no live value in this windowMoyo, Uganda · -0.06 vs own seasonal normalNabilatuk, Uganda · no live value in this windowNakapiripirit, Uganda · no live value in this windowNapak, Uganda · no live value in this windowNebbi, Uganda · no live value in this windowNwoya, Uganda · -0.01 vs own seasonal normalObongi, Uganda · -0.05 vs own seasonal normalOmoro, Uganda · -0.05 vs own seasonal normalOtuke, Uganda · no live value in this windowOyam, Uganda · -0.04 vs own seasonal normalPader, Uganda · -0.05 vs own seasonal normalPakwach, Uganda · no live value in this windowYumbe, Uganda · -0.04 vs own seasonal normalZombo, Uganda · 0.00 vs own seasonal normalBuhweju, Uganda · -0.05 vs own seasonal normalBuliisa, Uganda · +0.01 vs own seasonal normalBundibugyo, Uganda · -0.01 vs own seasonal normalBunyangabu, Uganda · -0.05 vs own seasonal normalBushenyi, Uganda · -0.02 vs own seasonal normalHoima, Uganda · -0.01 vs own seasonal normalIbanda, Uganda · no live value in this windowIsingiro, Uganda · no live value in this windowKabale, Uganda · no live value in this windowKabarole, Uganda · -0.03 vs own seasonal normalKagadi, Uganda · -0.05 vs own seasonal normalKakumiro, Uganda · no live value in this windowKamwenge, Uganda · no live value in this windowKanungu, Uganda · -0.02 vs own seasonal normalKasese, Uganda · no live value in this windowKazo, Uganda · no live value in this windowKibaale, Uganda · no live value in this windowKikuube, Uganda · -0.02 vs own seasonal normalKiruhura, Uganda · no live value in this windowKiryandongo, Uganda · 0.00 vs own seasonal normalKisoro, Uganda · -0.01 vs own seasonal normalKitagwenda, Uganda · -0.02 vs own seasonal normalKyegegwa, Uganda · no live value in this windowKyenjojo, Uganda · -0.05 vs own seasonal normalMasindi, Uganda · +0.01 vs own seasonal normalMbarara, Uganda · no live value in this windowMitooma, Uganda · no live value in this windowNtoroko, Uganda · no live value in this windowNtungamo, Uganda · no live value in this windowRubanda, Uganda · no live value in this windowRubirizi, Uganda · -0.03 vs own seasonal normalRukiga, Uganda · no live value in this windowRukungiri, Uganda · -0.02 vs own seasonal normalRwampara, Uganda · no live value in this windowSheema, Uganda · no live value in this windowNyarugenge, Rwanda · -0.04 vs own seasonal normalGasabo, Rwanda · -0.02 vs own seasonal normalKicukiro, Rwanda · -0.02 vs own seasonal normalNyanza, Rwanda · -0.01 vs own seasonal normalGisagara, Rwanda · 0.00 vs own seasonal normalNyaruguru, Rwanda · +0.03 vs own seasonal normalHuye, Rwanda · 0.00 vs own seasonal normalNyamagabe, Rwanda · 0.00 vs own seasonal normalRuhango, Rwanda · -0.01 vs own seasonal normalMuhanga, Rwanda · 0.00 vs own seasonal normalKamonyi, Rwanda · -0.02 vs own seasonal normalKarongi, Rwanda · -0.01 vs own seasonal normalRutsiro, Rwanda · -0.04 vs own seasonal normalRubavu, Rwanda · -0.05 vs own seasonal normalNyabihu, Rwanda · -0.01 vs own seasonal normalNgororero, Rwanda · -0.01 vs own seasonal normalRusizi, Rwanda · +0.02 vs own seasonal normalNyamasheke, Rwanda · 0.00 vs own seasonal normalRulindo, Rwanda · -0.02 vs own seasonal normalGakenke, Rwanda · 0.00 vs own seasonal normalMusanze, Rwanda · -0.01 vs own seasonal normalBurera, Rwanda · 0.00 vs own seasonal normalGicumbi, Rwanda · 0.00 vs own seasonal normalRwamagana, Rwanda · -0.01 vs own seasonal normalNyagatare, Rwanda · -0.03 vs own seasonal normalGatsibo, Rwanda · -0.02 vs own seasonal normalKayonza, Rwanda · +0.01 vs own seasonal normalKirehe, Rwanda · +0.01 vs own seasonal normalNgoma, Rwanda · +0.01 vs own seasonal normalBugesera, Rwanda · -0.02 vs own seasonal normal
≤ −0.10 −0.10 to −0.04 near normal +0.02 to +0.05 ≥ +0.05
Cropland NDVI against each unit's own seasonal normal, 243 units, 2026-10-19.
Nakuru's 2026 season in the 10 m weekly product, weekly values from the 10 m composite.

Furthest above normal

  • kwale, Kenya+0.03
  • tanga, Tanzania+0.03
  • morogoro, Tanzania+0.03
  • ruvuma, Tanzania+0.03
  • nyaruguru, Rwanda+0.03

Furthest below normal

  • west pokot, Kenya-0.19
  • baringo, Kenya-0.17
  • laikipia, Kenya-0.15
  • elgeyo marakwet, Kenya-0.13
  • turkana, Kenya-0.12
Cropland NDVI anomaly against each unit's own seasonal normal, top and bottom 5 of 243 units.

How the crop condition anomaly is read

No unit here is measured against another. Each of the 243 is compared with itself: this week’s cropland vegetation against what the same weeks looked like over the 8 years before, so a county that simply runs greener than its neighbours only counts as above normal once it beats its own record. A live 10 m product supplies the fresh cropland-only reading; a 300 m product with 8 years behind it supplies the climatology they’re read against. The platform calibrates the 2 against each other per unit, and where they disagree past a set tolerance it serves the lagged reading and says so in the response rather than picking one silently. Thresholds of ±0.02 and ±0.05 sort the anomaly from well below to well above normal, and the outlook itself reads rising, steady or softening off the anomaly and its trend together.

The 3 crop condition datasets

The satellite demand indices carry the raw values: 4 optical indices per unit and week, plus the 300 m NDVI and soil-water series behind them. The rainfall anomaly states season rainfall as a departure from the long-term normal, by unit and season, for the whole continent. The agricultural stress layer is a monthly bulletin: warning levels for cropland and rangeland, plus an analyst’s paragraph naming the actual places and causes.

The fertilizer demand board

The board ranks every unit in a country by demand pull, which is anomaly against the unit’s own normal blended with cropland intensity, and in Kenya with fertilizer affordability on top. A low-intensity unit having a green spell reads as a small fertilizer market catching a lucky week; the blend keeps it from outranking a breadbasket county that is merely on normal. The board returns 1 row per unit the country has.

At this snapshot the top units were Nandi, Nyamira and Lamu in Kenya; Bundibugyo, Kiryandongo and Masindi in Uganda; Morogoro and Singida in Tanzania; Nyaruguru in Rwanda, while most of the rest of the region was still climbing out of a dry July. 3 sources tell the same story: the July bulletin flagged Kenya as a hotspot and named Kakamega, Bungoma, Uasin Gishu, Elgeyo Marakwet and Trans Nzoia; the news signals named the same counties a week later. Satellite, bulletin and press: 3 datasets, 1 shared county vocabulary.

Refresh cadence of the satellite layers

The 10 m product refreshes weekly across all 243 units. The 300 m product runs 10-daily and publishes about 40 days behind. The rainfall anomaly updates weekly, the bulletin monthly. A unit with no clean satellite composite in its window simply keeps whatever value it had before.