{
 "sources": [
  {
   "source": "curated public reports (bundled reports_*.json)",
   "n": 71,
   "status": "ok"
  },
  {
   "source": "GDACS FL event list (all pages)",
   "url": "https://www.gdacs.org/gdacsapi/api/events/geteventlist/SEARCH?eventlist=FL&country=Malaysia",
   "status": "2 events since 2026-09-29",
   "events": [
    {
     "eventid": 1104239,
     "episodeid": 2,
     "alertlevel": "Green",
     "fromdate": "2026-10-15",
     "todate": "2026-10-26",
     "lat": 5.9924,
     "lon": 100.4776,
     "url": "https://www.gdacs.org/report.aspx?eventtype=FL&eventid=1104239"
    },
    {
     "eventid": 1104207,
     "episodeid": 1,
     "alertlevel": "Green",
     "fromdate": "2026-10-01",
     "todate": "2026-10-03",
     "lat": 5.9435,
     "lon": 116.0823,
     "url": "https://www.gdacs.org/report.aspx?eventtype=FL&eventid=1104207"
    }
   ],
   "retrieved_at": "2026-11-02T11:25+08:00"
  },
  {
   "source": "JKM InfoBencana national flood table",
   "url": "https://infobencanajkmv2.jkm.gov.my/landing/index.php?a=0&b=1",
   "status": "snapshot 2026-11-01T15:10:00+08:00: [{'state': 'Sabah', 'district': 'Sipitang', 'pps': 2, 'families': 41, 'victims': 137, 'opened': '2026-10-30'}, {'state': 'Sabah', 'district': 'Sook', 'pps': 1, 'families': 0, 'victims': 0, 'opened': '2026-10-30'}]",
   "retrieved_at": "2026-11-02T11:25+08:00"
  },
  {
   "source": "Open-Meteo forecast API past_days hourly precipitation (best_match), state lattice 0.25 deg",
   "url": "https://api.open-meteo.com/v1/forecast",
   "status": "16 states",
   "retrieved_at": "2026-11-02T11:25+08:00"
  },
  {
   "source": "Open-Meteo flood API (GloFAS v4) daily river_discharge vs fit-year Q2",
   "url": "https://flood-api.open-meteo.com/v1/flood",
   "status": "16 states",
   "retrieved_at": "2026-11-02T11:25+08:00"
  }
 ],
 "reports": [
  {
   "publisher": "Portal Berita RTM",
   "published": "2026-10-27 11:24 MYT",
   "retrieved_at": "2026-10-27T10:48+03:00",
   "url": "https://berita.rtm.gov.my/nasional/senarai-berita-nasional/senarai-artikel/banjir-kedah-semakin-surut-202-penduduk-yan-masih-terjejas/",
   "summary": "Banjir Kedah semakin surut; hanya daerah Yan, 202 penduduk (69 keluarga) di 3 PPS setakat 8 pagi 27 Okt (JPBN Kedah).",
   "states_flood": {
    "Kedah": {
     "2026-10-27": "Yan: 202 mangsa, 3 PPS acik (8:00 MYT)"
    }
   },
   "_file": "reports_2026-10-27.json"
  },
  {
   "publisher": "The Star",
   "published": "2026-10-27 12:17 MYT",
   "retrieved_at": "2026-10-27T10:48+03:00",
   "url": "https://www.thestar.com.my/news/nation/2026/10/27/floods-90-areas-in-kedah-designated-as-hotspots",
   "summary": "Only Yan district flooded; 202 people (69 families) in 3 relief centres on 27 Oct morning, up from 176 (61 families) on 26 Oct; 90 hotspots; NE monsoon onset.",
   "states_flood": {
    "Kedah": {
     "2026-10-26": "Yan: 176 evacuees",
     "2026-10-27": "Yan: 202 evacuees, 3 relief centres"
    }
   },
   "_file": "reports_2026-10-27.json"
  },
  {
   "publisher": "The Star",
   "published": "2026-10-26 16:19 MYT",
   "retrieved_at": "2026-10-27T10:49+03:00",
   "url": "https://www.thestar.com.my/news/nation/2026/10/26/192-flood-evacuees-remain-at-relief-centres-across-kedah-as-numbers-rise-in-yan",
   "summary": "192 evacuees (67 families) at 4 relief centres in Kedah at 4pm 26 Oct (Yan 176, Pendang 16); 5 JPS stations above thresholds (Sg Anak Bukit, Sg Pendang above warning).",
   "states_flood": {
    "Kedah": {
     "2026-10-26": "192 evacuees, Yan + Pendang; JPS stations above warning"
    }
   },
   "_file": "reports_2026-10-27.json"
  },
  {
   "publisher": "Bernama",
   "published": "2026-10-26 19:12 MYT",
   "retrieved_at": "2026-10-27T10:49+03:00",
   "url": "https://bernama.com/bm/am/news.php?id=2625890",
   "summary": "Kedah 192 mangsa (4 ptg); Perlis: Dewan Batu 5 Kangar pusat transit banjir kilat Kampung Telok, 12 mangsa (5 ptg), dibuka 1.50 pagi 26 Okt.",
   "states_flood": {
    "Kedah": {
     "2026-10-26": "192 mangsa PPS"
    },
    "Perlis": {
     "2026-10-26": "banjir kilat Kg Telok, 12 mangsa di pusat transit"
    }
   },
   "_file": "reports_2026-10-27.json"
  },
  {
   "publisher": "Kosmo Online",
   "published": "2026-10-26 15:13 MYT",
   "retrieved_at": "2026-10-27T10:50+03:00",
   "url": "https://www.kosmo.com.my/2026/10/26/12-mangsa-banjir-kilat-perlis-ditempatkan-di-pps/",
   "summary": "Banjir kilat awal pagi 26 Okt di Kampung Telok, Kangar; 12 mangsa (4 keluarga) di PPS transit Dewan Batu 5 (APM Perlis).",
   "states_flood": {
    "Perlis": {
     "2026-10-26": "banjir kilat Kg Telok, Kangar"
    }
   },
   "_file": "reports_2026-10-27.json"
  },
  {
   "publisher": "The Sun Malaysia (Bernama)",
   "published": "2026-10-27 14:07 MYT",
   "retrieved_at": "2026-10-27T10:52+03:00",
   "url": "https://thesun.my/news/kedah-flood-evacuees-rise-perlis-numbers-climb/",
   "summary": "Kedah 202 evacuees (Yan) at 8am 27 Oct; Perlis Dewan Batu 5 transit centre still operating, 16 people (7 families) on 27 Oct morning because stagnant floodwater could not drain, no rain recorded.",
   "states_flood": {
    "Kedah": {
     "2026-10-27": "202 evacuees, Yan"
    },
    "Perlis": {
     "2026-10-27": "16 flash-flood victims at Dewan Batu 5, stagnant floodwater (APM Perlis)"
    }
   },
   "_file": "reports_2026-10-27.json"
  },
  {
   "publisher": "Media Selangor (Bernama)",
   "published": "2026-10-27 04:03 (site time)",
   "retrieved_at": "2026-10-27T10:52+03:00",
   "url": "https://mediaselangor.com/en/2026/10/403422",
   "summary": "Same Bernama wire: Kedah 202, Perlis 16 at transit centre on 27 Oct morning.",
   "states_flood": {
    "Kedah": {
     "2026-10-27": "202 evacuees"
    },
    "Perlis": {
     "2026-10-27": "16 victims, transit centre"
    }
   },
   "_file": "reports_2026-10-27.json"
  },
  {
   "publisher": "Media Batu",
   "published": "2026-10-27 12:01",
   "retrieved_at": "2026-10-27T10:52+03:00",
   "url": "https://mediabatu.com/banjir-jumlah-mangsa-di-kedah-perlis-meningkat-pagi-ini/",
   "summary": "Bernama BM: Kedah 202 mangsa; Perlis 16 orang (banjir termenung).",
   "states_flood": {
    "Kedah": {
     "2026-10-27": "202 mangsa"
    },
    "Perlis": {
     "2026-10-27": "16 mangsa, banjir termenung"
    }
   },
   "_file": "reports_2026-10-27.json"
  },
  {
   "publisher": "The Straits Times (The Star/ANN)",
   "published": "2026-10-26 12:36 SGT",
   "retrieved_at": "2026-10-27T10:58+03:00",
   "url": "https://www.straitstimes.com/asia/se-asia/continuous-rain-in-northern-malaysia-triggers-flash-floods-in-kedah-penang",
   "summary": "Rain since 10pm 25 Oct; Kedah rivers at alert/danger at 5am 26 Oct (Kg Padang Pasir above danger); Yan/Kuala Muda relief centres; Penang flash floods at 10 island locations on 25 Oct + fatal Paya Terubong landslide (25 Oct).",
   "states_flood": {
    "Kedah": {
     "2026-10-26": "rivers above danger/warning, relief centres open"
    }
   },
   "_file": "reports_2026-10-27.json"
  },
  {
   "publisher": "JKM InfoBencana (search-engine cache)",
   "published": "snapshot 2026-10-27 00:50 MYT",
   "retrieved_at": "2026-10-27T10:49+03:00",
   "url": "https://infobencanajkmv2.jkm.gov.my/landing/index.php?a=0&b=1",
   "summary": "National flood table: Kedah/Yan 3 PPS 202 mangsa (opened 25/10); Selangor/Kuala Langat 1 PPS 20 mangsa (opened 26/10). No other state.",
   "states_flood": {
    "Kedah": {
     "2026-10-26": "PPS open since 25/10"
    },
    "Selangor": {
     "2026-10-26": "Banjir PPS Kuala Langat opened 26/10, 20 mangsa"
    }
   },
   "_file": "reports_2026-10-27.json"
  },
  {
   "publisher": "Bernama / RTM / Sinar Harian / Utusan (search snippets)",
   "published": "2026-10-25 (per snippets)",
   "retrieved_at": "2026-10-27T10:55+03:00",
   "url": "https://bernama.com/bm/am/news.php?id=2625262",
   "summary": "Pulau Pinang flash floods (Butterworth, Bayan Baru, Seberang Jaya ...) on 25 Oct; water receded, no evacuation reported. Nothing found for 26-27 Oct.",
   "states_flood": {},
   "_file": "reports_2026-10-27.json"
  },
  {
   "publisher": "NST (MetMalaysia warning)",
   "published": "2026-10-27 01:07 MYT",
   "retrieved_at": "2026-10-27T11:00+03:00",
   "url": "https://www.nst.com.my/news/nation/2026/10/1564559/thunderstorm-heavy-rain-warning-several-states-until-3pm",
   "summary": "Context only: thunderstorm/heavy rain warning until 3pm (27 Oct) for Perlis, Penang, Kedah, Perak, Selangor, KL, Putrajaya, Sarawak (Miri), Sabah (Tawau/Sandakan/Kudat). Not a flood report.",
   "states_flood": {},
   "_file": "reports_2026-10-27.json"
  },
  {
   "publisher": "Bernama (search snippet)",
   "published": "2026-10-20",
   "retrieved_at": "2026-10-27T10:58+03:00",
   "url": "https://bernama.com/bm/am/news.php?id=2623147",
   "summary": "Context only: Perak Larut/Matang flood recovered, PPS SK Matang Gelugor closed (20 Oct). Nothing found for Perak 26-27 Oct.",
   "states_flood": {},
   "_file": "reports_2026-10-27.json"
  },
  {
   "publisher": "NADMA portal news",
   "published": "latest item 2026-10-22",
   "retrieved_at": "2026-10-27T11:00+03:00",
   "url": "https://www.nadma.gov.my/bi/media-en/news",
   "summary": "No flood item for 26-27 Oct (latest: haze, 22 Oct).",
   "states_flood": {},
   "_file": "reports_2026-10-27.json"
  },
  {
   "publisher": "The Edge Malaysia",
   "published": "2017-11-07 (REJECTED: search synthesis mis-dated it to 27 Oct 2026)",
   "retrieved_at": "2026-10-27T10:56+03:00",
   "url": "https://theedgemalaysia.com/article/rm200m-losses-seen-smes-badly-hit-penang-floods",
   "summary": "2017 Penang floods article; not evidence for 2026.",
   "states_flood": {},
   "_file": "reports_2026-10-27.json"
  },
  {
   "publisher": "data.gov.my flood-warning API",
   "published": "last station update 2024-02-23",
   "retrieved_at": "2026-10-27T10:46+03:00",
   "url": "https://api.data.gov.my/flood-warning/",
   "summary": "Stale feed (no 2026 data) - not used.",
   "states_flood": {},
   "_file": "reports_2026-10-27.json"
  },
  {
   "publisher": "JPS Public InfoBanjir water-level page",
   "published": "",
   "retrieved_at": "2026-10-27T10:46+03:00",
   "url": "https://publicinfobanjir.water.gov.my/aras-air/data-paras-air/?state=KDH&lang=en",
   "summary": "HTTP 404 at the adapter URL from the box - not used (river levels quoted via The Star/Straits Times instead).",
   "states_flood": {},
   "_file": "reports_2026-10-27.json"
  },
  {
   "publisher": "Harian Metro (Sekretariat JPBD Raub)",
   "published": "2026-10-27 (site: 'Oktober 27, 2026 @ 10:41am'; text: 'petang tadi')",
   "retrieved_at": "2026-10-27T19:44+03:00",
   "url": "https://www.hmetro.com.my/mutakhir/2026/10/1428673/hujan-lebat-cetus-banjir-kilat-di-dua-kawasan-di-raub",
   "summary": "Banjir kilat 4.30 ptg 27 Okt di Kampung Melayu Sempalit (Sg Sempalit melimpah, kampung ditenggelami) dan Jalan Tras, Raub; tiada PPS; surut 6.50 ptg; APM + polis dikerahkan.",
   "states_flood": {
    "Pahang": {
     "2026-10-27": "Raub: banjir kilat Kg Melayu Sempalit + Jalan Tras (Sg Sempalit melimpah), PPS yok, 18:50 MYT surut"
    }
   },
   "_file": "reports_2026-10-28.json"
  },
  {
   "publisher": "New Straits Times",
   "published": "2026-10-27 (site: 'October 27, 2026 @ 11:47am')",
   "retrieved_at": "2026-10-27T19:44+03:00",
   "url": "https://www.nst.com.my/news/regional/2026/10/1565003/flash-floods-hit-two-areas-raub-after-heavy-rain",
   "summary": "Same Raub District Disaster Management Committee statement: flash floods at 4.30pm in Kampung Melayu Sempalit and Jalan Tras; no relief centres; receded 6.50pm.",
   "states_flood": {
    "Pahang": {
     "2026-10-27": "Raub flash floods (Sempalit village inundated, Jalan Tras)"
    }
   },
   "_file": "reports_2026-10-28.json"
  },
  {
   "publisher": "mStar",
   "published": "2026-10-27 16:10 MYT",
   "retrieved_at": "2026-10-27T19:45+03:00",
   "url": "https://www.mstar.com.my/lokal/semasa/2026/10/27/v-kesiannya-dah-la-bawa-anak---ramai-kecut-perut-tengok-motosikal-terbalik-redah-banjir-kilat",
   "summary": "Banjir kilat ~2 ptg 27 Okt dekat i-City dan Seksyen 7, Shah Alam (video media sosial); trafik terjejas.",
   "states_flood": {
    "Selangor": {
     "2026-10-27": "Shah Alam i-City/Seksyen 7 banjir kilat ~14:00 MYT"
    }
   },
   "_file": "reports_2026-10-28.json"
  },
  {
   "publisher": "New Straits Times",
   "published": "2026-10-27 (site: 'October 27, 2026 @ 10:58am')",
   "retrieved_at": "2026-10-27T19:43+03:00",
   "url": "https://www.nst.com.my/news/nation/2026/10/1564983/floodwaters-engulf-road-outside-shah-alam-mall-watch",
   "summary": "Viral video of floodwater covering road outside a Shah Alam mall on 27 Oct.",
   "states_flood": {
    "Selangor": {
     "2026-10-27": "Shah Alam road flooded outside mall"
    }
   },
   "_file": "reports_2026-10-28.json"
  },
  {
   "publisher": "Portal Berita RTM (JPBN Kedah)",
   "published": "2026-10-27 17:14 MYT",
   "retrieved_at": "2026-10-27T19:43+03:00",
   "url": "https://berita.rtm.gov.my/nasional/senarai-berita-nasional/senarai-artikel/banjir-kedah-176-penduduk-masih-berlindung-di-tiga-pps/",
   "summary": "Yan: 176 penduduk (66 keluarga) di 3 PPS setakat 4 ptg 27 Okt (turun dari 202 pada 12 tgh).",
   "states_flood": {
    "Kedah": {
     "2026-10-27": "Yan: 176 mangsa, 3 PPS (16:00 MYT)"
    }
   },
   "_file": "reports_2026-10-28.json"
  },
  {
   "publisher": "Bernama",
   "published": "2026-10-27 11:41 MYT",
   "retrieved_at": "2026-10-27T19:43+03:00",
   "url": "https://bernama.com/bm/am/news.php?id=2626146",
   "summary": "Kedah 202 mangsa 3 PPS (8 pagi); Perlis Dewan Batu 5 transit, 16 mangsa banjir kilat Kg Telok (banjir termenung).",
   "states_flood": {
    "Kedah": {
     "2026-10-27": "202 mangsa, 3 PPS Yan"
    },
    "Perlis": {
     "2026-10-27": "16 mangsa, transit Dewan Batu 5 (banjir termenung)"
    }
   },
   "_file": "reports_2026-10-28.json"
  },
  {
   "publisher": "JKM InfoBencana (semua bencana) snapshot",
   "published": "Dikemaskini pada 27 Oct 2026, 09:48 PM (MYT)",
   "retrieved_at": "2026-10-27T19:44+03:00",
   "url": "https://infobencanajkmv2.jkm.gov.my/landing/index.php?b=",
   "summary": "Banjir: Kedah/Yan 3 PPS 194 mangsa (mula buka 25/10); Selangor/Kuala Langat 1 PPS 20 mangsa (26/10). Bukan banjir: Ribut/Taufan Selangor Gombak, KL Dang Wangi; Kebakaran N. Sembilan Seremban, Sarawak Miri. Banjir tablosu (a=0&b=1) 17:56 MYT ile ayni.",
   "states_flood": {
    "Kedah": {
     "2026-10-27": "JKM 21:48 MYT: Yan 3 PPS, 194 mangsa"
    },
    "Selangor": {
     "2026-10-27": "JKM 21:48 MYT: Kuala Langat 1 PPS, 20 mangsa"
    }
   },
   "_file": "reports_2026-10-28.json"
  },
  {
   "publisher": "Q-Flood ulusal tarama (JKM 21:48 MYT anlik + haber taramasi)",
   "published": "2026-10-28 00:45 MYT",
   "retrieved_at": "2026-10-27T19:46+03:00",
   "url": "https://infobencanajkmv2.jkm.gov.my/landing/index.php?a=0&b=1",
   "covers_all_states": true,
   "days": [
    "2026-10-27"
   ],
   "summary": "27 Ekim (MYT) gunu kapandiktan sonra ulusal tarama: JKM banjir tablosu (17:56 MYT) ve tum-bencana tablosu (21:48 MYT) yalniz Kedah + Selangor; GDACS FL Malaysia 26-30 Ekim olay yok (son olaylar 1104239 15-17 Eki, 1104207 1-3 Eki); haber taramasi (Bernama, RTM, The Star, NST, HMetro, Kosmo, mStar, Utusan, Media Selangor): ek olarak Pahang/Raub ani sel (PPS yok) ve Perlis transit merkezi; Sabah/Sarawak/Kelantan/Terengganu/Johor/Perak/P.Pinang/KL/N9/Melaka/Putrajaya/Labuan icin 27 Ekim sel raporu bulunamadi (MetMalaysia firtina uyarilari ve JPS uyari seviyesi istasyonlari var, sel raporu degil). Bosluk: 21:48-24:00 MYT JKM guncellemesi yok.",
   "states_flood": {},
   "_file": "reports_2026-10-28.json"
  },
  {
   "publisher": "The Star (MetMalaysia warning)",
   "published": "2026-10-27 17:42 MYT",
   "retrieved_at": "2026-10-27T19:44+03:00",
   "url": "https://www.thestar.com.my/news/nation/2026/10/27/thunderstorm-warning-for-eight-states-until-7pm",
   "summary": "Thunderstorm warning 8 states until 7pm (Perak, Kelantan, Terengganu, Pahang, N9, Johor Segamat, Sarawak, Sabah) — context only, not a flood report.",
   "states_flood": {},
   "_file": "reports_2026-10-28.json"
  },
  {
   "publisher": "JPS Public InfoBanjir",
   "published": "2026-10-27 21:00-21:45 MYT readings",
   "retrieved_at": "2026-10-27T19:44+03:00",
   "url": "https://publicinfobanjir.water.gov.my/",
   "summary": "Kedah Sg Pendang above AMARAN (rising), Sg Anak Bukit WASPADA; Selangor Pintu Air Ijok AMARAN, Rantau Panjang WASPADA; Melaka Sg Duyong/Cheng AMARAN; Perak Bukit Merah AMARAN — context only (water level, not inundation).",
   "states_flood": {},
   "_file": "reports_2026-10-28.json"
  },
  {
   "publisher": "GDACS event list API",
   "published": "query 2026-09-26..2026-10-30",
   "retrieved_at": "2026-10-27T19:44+03:00",
   "url": "https://www.gdacs.org/gdacsapi/api/events/geteventlist/SEARCH?eventlist=FL&country=Malaysia",
   "summary": "2 FL events: 1104239 (15-17 Oct, Penang area), 1104207 (1-3 Oct, Sabah). None covering 26-28 Oct.",
   "states_flood": {},
   "_file": "reports_2026-10-28.json"
  },
  {
   "publisher": "JKM InfoBencana (banjir) snapshot via search index",
   "published": "Dikemaskini pada 28 Oct 2026, 09:19 PM (MYT)",
   "retrieved_at": "2026-10-29T06:12+03:00",
   "url": "https://infobencanajkmv2.jkm.gov.my/v3/landing/index.php?a=0&b=1",
   "summary": "Banjir: Kedah/Pendang 1 PPS 28 mangsa; Kedah/Yan 3 PPS 128 mangsa (mula buka 25/10); Selangor/Kuala Langat 1 PPS 20 mangsa (26/10). Jumlah 5 PPS, 176 mangsa, 2 negeri. (Dogrudan fetch zaman asimi; icerik arama dizini kopyasindan.)",
   "states_flood": {
    "Kedah": {
     "2026-10-28": "JKM 21:19 MYT: Yan 3 PPS 128 mangsa + Pendang 1 PPS 28 mangsa"
    },
    "Selangor": {
     "2026-10-28": "JKM 21:19 MYT: Kuala Langat 1 PPS 20 mangsa"
    }
   },
   "_file": "reports_2026-10-29.json"
  },
  {
   "publisher": "Bernama (JPBN Kedah, APM Perlis)",
   "published": "2026-10-28 10:59 MYT",
   "retrieved_at": "2026-10-29T06:13+03:00",
   "url": "https://web26.bernama.com/en/news.php?id=2626641",
   "summary": "Kedah 192 evacuees (71 families) in 3 PPS Yan as of 8am 28 Oct; Perlis Dewan Batu 5 Kangar transit centre still open with 16 flash-flood evacuees (Kg Telok), residential areas still under stagnant floodwater.",
   "states_flood": {
    "Kedah": {
     "2026-10-28": "192 mangsa, 3 PPS Yan (08:00 MYT)"
    },
    "Perlis": {
     "2026-10-28": "16 mangsa di pusat transit Dewan Batu 5; banjir termenung Kg Telok berterusan"
    }
   },
   "_file": "reports_2026-10-29.json"
  },
  {
   "publisher": "Portal Berita RTM",
   "published": "2026-10-28 10:10 MYT",
   "retrieved_at": "2026-10-29T06:12+03:00",
   "url": "https://berita.rtm.gov.my/nasional/senarai-berita-nasional/senarai-artikel/penduduk-terjejas-banjir-di-kedah-meningkat-192-orang/",
   "summary": "Kedah 192 penduduk 3 PPS (8 pagi 28 Okt); Perlis Dewan Batu 5 transit 16 penduduk, banjir termenung Kg Telok.",
   "states_flood": {
    "Kedah": {
     "2026-10-28": "192 mangsa 3 PPS Yan"
    },
    "Perlis": {
     "2026-10-28": "16 mangsa transit, banjir termenung"
    }
   },
   "_file": "reports_2026-10-29.json"
  },
  {
   "publisher": "The Star (Metro)",
   "published": "2026-10-28 19:20 MYT",
   "retrieved_at": "2026-10-29T06:12+03:00",
   "url": "https://www.thestar.com.my/metro/metro-news/2026/10/28/flash-flood-hits-area-near-i-city-shah-alam-again",
   "summary": "Flash floods 28 Oct: Jalan Taman Tasik Prima Puchong Utama (car stranded), Cyberjaya near Cyber 10 Persiaran Sepang, Jalan Keluli 1C near i-City Section 7 Shah Alam (second day; Sungai Rasah overflow per MBSA).",
   "states_flood": {
    "Selangor": {
     "2026-10-28": "banjir kilat Puchong Utama, Cyberjaya, Shah Alam i-City (Sg Rasah melimpah)"
    }
   },
   "_file": "reports_2026-10-29.json"
  },
  {
   "publisher": "Kosmo Online",
   "published": "2026-10-28 19:13 MYT",
   "retrieved_at": "2026-10-29T06:14+03:00",
   "url": "https://www.kosmo.com.my/2026/10/28/video-banjir-kilat-landa-ttdi-damansara-utama/",
   "summary": "Beberapa jalan di TTDI (Kuala Lumpur) dan Damansara Utama (Petaling Jaya, Selangor) dinaiki air susulan hujan lebat 28 Okt; surut cepat. Sumber: pengguna Threads (media sosial).",
   "states_flood": {
    "Kuala Lumpur": {
     "2026-10-28": "TTDI: jalan dinaiki air (banjir kilat, surut cepat; sumber media sosial via Kosmo/NST)"
    },
    "Selangor": {
     "2026-10-28": "Damansara Utama jalan dinaiki air"
    }
   },
   "_file": "reports_2026-10-29.json"
  },
  {
   "publisher": "New Straits Times",
   "published": "2026-10-28 (site: 'October 28, 2026 @ 8:41am' [UTC stamp]; text: 'this evening')",
   "retrieved_at": "2026-10-29T06:14+03:00",
   "url": "https://www.nst.com.my/news/nation/2026/10/1565719/heavy-rain-causes-fallen-trees-flash-floods-several-areas-watch",
   "summary": "Klang Valley heavy rain 28 Oct evening: fallen trees (Kerinchi Link, Puchong); several roads in Taman Tun Dr Ismail and Damansara Utama-Damansara Jaya inundated, drained quickly.",
   "states_flood": {
    "Kuala Lumpur": {
     "2026-10-28": "Taman Tun Dr Ismail roads inundated (NST, social-media sourced)"
    },
    "Selangor": {
     "2026-10-28": "Damansara Utama roads inundated"
    }
   },
   "_file": "reports_2026-10-29.json"
  },
  {
   "publisher": "Malay Mail (Daily Express)",
   "published": "2026-10-28 10:50 MYT",
   "retrieved_at": "2026-10-29T06:13+03:00",
   "url": "https://www.malaymail.com/news/malaysia/2026/10/28/sabahs-padas-river-breaches-danger-level-as-floods-hit-villages-and-schools-rescue-teams-on-standby/240898",
   "summary": "Padas River 9.06 m (> danger 8.70 m); flooded villages in Beaufort area (Kg Batu 60, Binunuk, Bakalau, Lago, Suasa, ...), SK Suasa and SK Lago affected; Membakut Pekan Lama flooded; rescue agencies on standby, no evacuation count given.",
   "states_flood": {
    "Sabah": {
     "2026-10-28": "Beaufort/Tenom: Sg Padas melebihi paras bahaya, kampung + 2 sekolah dinaiki air; Membakut banjir (tiada angka PPS)"
    }
   },
   "_file": "reports_2026-10-29.json"
  },
  {
   "publisher": "Malay Mail (MetMalaysia warning)",
   "published": "2026-10-28 16:51 MYT",
   "retrieved_at": "2026-10-29T06:13+03:00",
   "url": "https://www.malaymail.com/news/malaysia/2026/10/28/severe-storm-alert-metmalaysia-warns-of-heavy-rain-across-kl-selangor-and-eight-states/240997",
   "summary": "Thunderstorm warning until 8pm: KL, Putrajaya, Melaka, Selangor, Perak, Pahang, N9, Johor, Sarawak, Sabah districts — context only, not a flood report.",
   "states_flood": {},
   "_file": "reports_2026-10-29.json"
  },
  {
   "publisher": "Malay Mail / RTM (JWP KL hotspots)",
   "published": "2026-10-28 14:47 MYT",
   "retrieved_at": "2026-10-29T06:13+03:00",
   "url": "https://www.malaymail.com/news/malaysia/2026/10/28/kl-has-14-flash-flood-hotspots-the-ft-dept-wants-to-bring-that-down-to-10-by-end-2026/240959",
   "summary": "Policy item (14 KL flash-flood hotspots; minor Putrajaya Presint 9 incident of unspecified date) — context only.",
   "states_flood": {},
   "_file": "reports_2026-10-29.json"
  },
  {
   "publisher": "GDACS event list API",
   "published": "query 2026-10-20..2026-10-29 (Malaysia)",
   "retrieved_at": "2026-10-29T06:14+03:00",
   "url": "https://www.gdacs.org/gdacsapi/api/events/geteventlist/SEARCH?eventlist=FL&country=Malaysia",
   "summary": "Manual query returned no FL events (empty response) for 20-29 Oct.",
   "states_flood": {},
   "_file": "reports_2026-10-29.json"
  },
  {
   "publisher": "Q-Flood ulusal tarama (JKM 21:19 MYT anlik + haber taramasi)",
   "published": "2026-10-29 11:15 MYT",
   "retrieved_at": "2026-10-29T06:15+03:00",
   "url": "https://infobencanajkmv2.jkm.gov.my/v3/landing/index.php?a=0&b=1",
   "covers_all_states": true,
   "days": [
    "2026-10-28"
   ],
   "summary": "28 Ekim (MYT) gunu kapandiktan sonra ulusal tarama: JKM banjir tablosu 21:19 MYT yalniz Kedah + Selangor; GDACS FL Malaysia olay yok; haber taramasi (Bernama, RTM, The Star, NST, Kosmo, Malay Mail, Media Selangor, FMT): ek olarak Perlis transit merkezi (banjir termenung), Sabah Padas/Beaufort koy selleri, Kuala Lumpur TTDI yol taskini (sosyal medya kaynakli, zayif kanit). Kelantan/Terengganu/Pahang/Perak/P.Pinang/Johor/N9/Melaka/Putrajaya/Labuan/Sarawak icin 28 Ekim sel raporu bulunamadi. Elenen: onetiger.com 'Sarawak+Sabah 4,000 mangsa' yazisi (tarihi/kaynagi dogrulanamadi, JKM 21:19 tablosunda Sarawak/Sabah PPS yok). Bosluk: 21:19-24:00 MYT JKM guncellemesi yok.",
   "states_flood": {},
   "_file": "reports_2026-10-29.json"
  },
  {
   "publisher": "The Star (Bernama)",
   "published": "2026-10-29 20:20 MYT",
   "retrieved_at": "2026-10-30T06:10+03:00",
   "url": "https://www.thestar.com.my/news/nation/2026/10/29/floods-perak-latest-state-to-be-hit-one-relief-centre-opened-in-kerian",
   "summary": "29 Oct: Perak Kerian (Titi Serong) houses inundated, PPS SK Titi Serong opened 5pm; Kedah only PPS Bukit Raya (Pendang) active, 152 victims morning -> 25 afternoon, 3 Yan PPS closed noon; Perlis Dewan Batu 5 transit 13 -> 9 victims (Kg Telok); Penang flash floods Taman Kota Permai, Jalan Baru, Jalan Bukit Minyak, Bandar Cassia, Bukit Mertajam (no evacuation, 75-year-old rescued).",
   "states_flood": {
    "Perak": {
     "2026-10-29": "Kerian/Titi Serong: rumah dinaiki air, PPS SK Titi Serong dibuka 17:00 MYT"
    },
    "Kedah": {
     "2026-10-29": "PPS Bukit Raya Pendang aktif (152 mangsa pagi, 25 petang)"
    },
    "Perlis": {
     "2026-10-29": "transit Dewan Batu 5 Kangar masih 9-13 mangsa banjir Kg Telok (bukan PPS rasmi)"
    },
    "Pulau Pinang": {
     "2026-10-29": "banjir kilat Taman Kota Permai/Bukit Mertajam/Bandar Cassia; warga emas diselamatkan"
    }
   },
   "_file": "reports_2026-10-30.json"
  },
  {
   "publisher": "Media Selangor (Bernama)",
   "published": "2026-10-29 14:03 MYT (updated text incl. 6pm figures)",
   "retrieved_at": "2026-10-30T06:10+03:00",
   "url": "https://mediaselangor.com/en/2026/10/403916",
   "summary": "Floods recede in Kedah and Perlis, but Perak (Titi Serong PPS) and Penang (flash floods, BM) freshly hit on 29 Oct.",
   "states_flood": {
    "Perak": {
     "2026-10-29": "Titi Serong, Kerian banjir; PPS dibuka"
    },
    "Pulau Pinang": {
     "2026-10-29": "banjir kilat beberapa lokasi Seberang Perai Tengah"
    }
   },
   "_file": "reports_2026-10-30.json"
  },
  {
   "publisher": "The Star",
   "published": "2026-10-29 14:23 MYT",
   "retrieved_at": "2026-10-30T06:10+03:00",
   "url": "https://www.thestar.com.my/news/nation/2026/10/29/senior-citizen-rescued-after-being-trapped-in-flooded-bukit-mertajam-home",
   "summary": "Flash floods inundated several housing areas in Bukit Mertajam ~07:30 MYT 29 Oct; 75-year-old rescued from ~0.3 m water.",
   "states_flood": {
    "Pulau Pinang": {
     "2026-10-29": "Taman Kota Permai, Bukit Mertajam: banjir kilat ~07:30 MYT"
    }
   },
   "_file": "reports_2026-10-30.json"
  },
  {
   "publisher": "New Straits Times",
   "published": "site stamp 'October 29, 2026 @ 9:10pm' (UTC-style stamp; text: centre opened 10.25pm 'last night', 4am 'today')",
   "retrieved_at": "2026-10-30T06:11+03:00",
   "url": "https://www.nst.com.my/news/regional/2026/10/1566675/kuala-pilah-floods-displace-38-including-nine-senior-citizens",
   "summary": "Kuala Pilah: PPS SK Undang Johol opened 10.25pm for 38 victims (Rumah Rakyat Kuala Johol, Kg Padang Jual) after rising floodwaters. Read together with Lumi News/Newswav (30 Oct 10:47 MYT: PPS opened 'sejak awal pagi tadi'/'malam tadi'): opening = 29 Oct 22:25 MYT.",
   "states_flood": {
    "Negeri Sembilan": {
     "2026-10-29": "Kuala Pilah/Johol: air banjir naik, PPS SK Undang Johol dibuka 22:25 MYT (38 mangsa)"
    }
   },
   "_file": "reports_2026-10-30.json"
  },
  {
   "publisher": "Newswav (Media Selangor/Bernama; data InfoBencana JKM)",
   "published": "2026-10-30 10:47 MYT",
   "retrieved_at": "2026-10-30T06:12+03:00",
   "url": "https://newswav.com/article/banjir-119-mangsa-masih-berlindung-di-pps-di-tiga-negeri-A2610_tjzbwO",
   "summary": "30 Oct morning: 119 victims in PPS in N.Sembilan (Kuala Pilah 2 PPS, 71 victims at 08:30), Perak (Titi Serong 23 victims, PPS opened late afternoon 29 Oct, continuous rain 29 Oct), Kedah (Pendang 25). Perlis transit closed 09:00 30 Oct after water fully receded.",
   "states_flood": {
    "Perak": {
     "2026-10-29": "hujan berterusan Kerian, 23 mangsa ke PPS SK Titi Serong (dibuka lewat petang 29 Okt)"
    },
    "Negeri Sembilan": {
     "2026-10-29": "banjir Kuala Pilah malam 29 Okt, PPS SK Undang Johol + DOR Dangi"
    },
    "Kedah": {
     "2026-10-29": "PPS Pendang aktif"
    }
   },
   "_file": "reports_2026-10-30.json"
  },
  {
   "publisher": "Lumi News (PKOB Negeri Sembilan)",
   "published": "2026-10-30 morning MYT (status 07:30 MYT)",
   "retrieved_at": "2026-10-30T06:11+03:00",
   "url": "https://about.luminews.my/ms/news/4817671",
   "summary": "61 mangsa (26 keluarga) di 2 PPS Kuala Pilah 'susulan banjir sejak malam tadi'; SK Undang Johol mula beroperasi 10.25 malam tadi.",
   "states_flood": {
    "Negeri Sembilan": {
     "2026-10-29": "banjir sejak malam 29 Okt, PPS dibuka 22:25"
    }
   },
   "_file": "reports_2026-10-30.json"
  },
  {
   "publisher": "Kosmo Online / Sinar Harian (MetMalaysia warnings)",
   "published": "2026-10-29 16:08-16:42 MYT",
   "retrieved_at": "2026-10-30T06:12+03:00",
   "url": "https://www.kosmo.com.my/2026/10/29/12-negeri-berdepan-amaran-ribut-petir-hingga-6-petang/",
   "summary": "Thunderstorm warnings for 10-12 states until 6pm 29 Oct — context only, not a flood report.",
   "states_flood": {},
   "_file": "reports_2026-10-30.json"
  },
  {
   "publisher": "GDACS event list API",
   "published": "query 2026-10-25..2026-10-30 (Malaysia)",
   "retrieved_at": "2026-10-30T06:16+03:00",
   "url": "https://www.gdacs.org/gdacsapi/api/events/geteventlist/SEARCH?eventlist=FL&country=Malaysia&fromDate=2026-10-25&toDate=2026-10-30",
   "summary": "Manual query returned empty response (no FL events).",
   "states_flood": {},
   "_file": "reports_2026-10-30.json"
  },
  {
   "publisher": "Q-Flood ulusal tarama (MY, 29 Ekim MYT)",
   "published": "2026-10-30 11:16 MYT",
   "retrieved_at": "2026-10-30T06:16+03:00",
   "url": "https://www.thestar.com.my/news/nation/2026/10/29/floods-perak-latest-state-to-be-hit-one-relief-centre-opened-in-kerian",
   "covers_all_states": true,
   "days": [
    "2026-10-29"
   ],
   "summary": "29 Ekim (MYT) gunu kapandiktan sonra ulusal tarama (Bernama/The Star, Media Selangor, NST, Newswav/JKM aktarimi, Lumi, Kosmo, Sinar Harian, RTM; GDACS bos). Sel bulunan: Kedah, Perlis, Perak, Pulau Pinang, Negeri Sembilan (+ Selangor zaten JKM 29 Eki 11:17 PPS ile verified). Diger eyaletler icin 29 Ekim sel raporu bulunamadi. BOSLUKLAR: JKM sitesi dogrudan okunamadi (MySQL too many connections); Sabah/Beaufort: 28 Eki Padas 9.06 m taskini sonrasi 29 Eki icin guvenilir rapor bulunamadi (onetiger.com '707 mangsa 3 PPS Beaufort' yazisi dogrulanamadi/acilmadi, elendi) — Sabah 0 zayif; Sarawak icin haber yok. Yeni kanit cikarsa 0 -> 1 duzeltilmeli.",
   "states_flood": {},
   "_file": "reports_2026-10-30.json"
  },
  {
   "publisher": "JKM InfoBencana (ulusal tablo, gunluk hattin 29 Eki canli cekimi)",
   "published": "2026-10-29 11:17 MYT (tablo guncelleme zamani)",
   "retrieved_at": "2026-10-29T06:18+03:00",
   "url": "https://infobencanajkmv2.jkm.gov.my/landing/index.php?a=0&b=1",
   "summary": "29 Oct 11:17 MYT JKM snapshot (recorded in the 2026-10-29 daily ledger, runs/daily/2026-10-29/state/MY/verification/verif_log.csv): Banjir PPS 1 open in Kuala Langat, Selangor, 20 victims, opened 2026-10-26. Re-entered here because the 30 Oct re-run rebuilt the 29 Oct rows without this snapshot (JKM unreachable at 06:13 TRT; 30 Oct 10:21 MYT table no longer lists it).",
   "states_flood": {
    "Selangor": {
     "2026-10-29": "JKM InfoBencana 29 Eki 11:17 MYT: Kuala Langat PPS 1 acik, 20 mangsa (acilis 2026-10-26)"
    }
   },
   "_file": "reports_2026-10-30.json"
  },
  {
   "publisher": "JKM InfoBencana (direct fetch)",
   "published": "snapshot 2026-10-31 10:14 MYT",
   "retrieved_at": "2026-10-31T06:19+03:00",
   "url": "https://infobencanajkmv2.jkm.gov.my/landing/index.php?a=0&b=0",
   "summary": "Banjir: Negeri Sembilan Kuala Pilah 2 PPS 87 mangsa (mula buka 29/10); Perak Kerian 1 PPS 35 mangsa (29/10); Sabah Sook 1 PPS 0 mangsa (mula buka 30/10/2026). Bukan banjir: Selangor Gombak tanah runtuh (29/10), Sarawak Miri kebakaran. Kedah tiada lagi dalam senarai (PPS Bukit Raya ditutup selepas 30/10 pagi).",
   "states_flood": {
    "Negeri Sembilan": {
     "2026-10-30": "PPS SK Undang Johol + DOR Dangi aktif sepanjang 30/10 (71-87 mangsa)"
    },
    "Perak": {
     "2026-10-30": "PPS SK Titi Serong Kerian aktif 30/10 (23-35 mangsa)"
    },
    "Sabah": {
     "2026-10-30": "JKM: PPS Banjir Sook dibuka 30/10/2026 (0 mangsa pada 31/10 10:14) — bukti lemah, tiada laporan berita ditemui"
    }
   },
   "_file": "reports_2026-10-31.json"
  },
  {
   "publisher": "Bernama",
   "published": "2026-10-30 13:21 MYT",
   "retrieved_at": "2026-10-31T06:19+03:00",
   "url": "https://prn.bernama.com/n9/news/2627682/floods-119-evacuees-remain-at-pps-in-negeri-sembilan-perak-and-kedah",
   "summary": "30 Oct morning: NS Kuala Pilah 2 PPS opened early morning 71 evacuees; Perak Titi Serong 23 evacuees; Kedah PPS Bukit Raya 25 evacuees (Kg Pulai, Kg Senggora) at 8am; Perlis transit centre closed 9am after floodwaters receded.",
   "states_flood": {
    "Negeri Sembilan": {
     "2026-10-30": "Kuala Pilah: 2 PPS dibuka awal pagi 30/10, 71 mangsa"
    },
    "Perak": {
     "2026-10-30": "Titi Serong: 23 mangsa di PPS"
    },
    "Kedah": {
     "2026-10-30": "PPS Bukit Raya: 25 mangsa pukul 8 pagi"
    }
   },
   "_file": "reports_2026-10-31.json"
  },
  {
   "publisher": "Kosmo",
   "published": "2026-10-30 08:45 MYT",
   "retrieved_at": "2026-10-31T06:19+03:00",
   "url": "https://www.kosmo.com.my/2026/10/30/banjir-di-kuala-pilah-61-mangsa-dipindahkan-ke-dua-pps/",
   "summary": "Kuala Pilah: 61 mangsa/26 keluarga; PPS SK Undang Johol dibuka 22:25 (29/10), PPS DOR Dangi dibuka 01:00 30/10 MYT.",
   "states_flood": {
    "Negeri Sembilan": {
     "2026-10-30": "PPS DOR Dangi dibuka 01:00 MYT 30/10 akibat banjir"
    }
   },
   "_file": "reports_2026-10-31.json"
  },
  {
   "publisher": "Kosmo / Business Today (MetMalaysia warnings)",
   "published": "2026-10-30",
   "retrieved_at": "2026-10-31T06:19+03:00",
   "url": "https://www.kosmo.com.my/2026/10/30/ribut-petir-hujan-lebat-hampir-seluruh-negara-hingga-9-malam/",
   "summary": "Thunderstorm/heavy-rain warnings to 9pm for KL, Selangor, Johor and others; warnings only, no flood report found — context.",
   "states_flood": {},
   "_file": "reports_2026-10-31.json"
  },
  {
   "publisher": "National scan (Grok Bot)",
   "published": "2026-10-31",
   "retrieved_at": "2026-10-31T06:19+03:00",
   "url": "https://infobencanajkmv2.jkm.gov.my/landing/index.php?a=0&b=0",
   "covers_all_states": true,
   "days": [
    "2026-10-30"
   ],
   "summary": "30 Oct (MYT) closed. Scan: JKM InfoBencana snapshot 31/10 10:14 MYT, Bernama 30/10, Kosmo 30/10, Malay Mail/NST 30/10, searches 'banjir 30 Oktober 2026', 'banjir kilat 30 Oktober' (KL/Selangor/Penang/Johor), Sabah Sook. Flood states 30 Oct: Negeri Sembilan, Perak, Kedah, Sabah (Sook PPS, 0 occupants — weak). No flood report found for other states. GAPS: Kelantan/Terengganu/Pahang only monsoon-preparedness items; Sarawak entry is a fire; Selangor Gombak entry is a landslide (not counted). New evidence -> correct 0 -> 1 next run.",
   "states_flood": {},
   "_file": "reports_2026-10-31.json"
  },
  {
   "publisher": "JKM InfoBencana (direct fetch, banjir view b=1)",
   "published": "snapshot 2026-10-31 21:30 MYT",
   "retrieved_at": "2026-11-01T06:18+03:00",
   "url": "https://infobencanajkmv2.jkm.gov.my/landing/index.php?a=0&b=1",
   "summary": "Banjir 31/10 21:30 MYT: Perak Kerian 1 PPS 20 mangsa (mula buka 29/10); Sabah Sook 1 PPS 0 mangsa (mula buka 30/10). Tiada negeri lain.",
   "states_flood": {
    "Perak": {
     "2026-10-31": "PPS SK Titi Serong Kerian aktif sepanjang 31/10 (34 pagi -> 25 petang -> 20 pada 21:30 MYT)"
    },
    "Sabah": {
     "2026-10-31": "JKM: PPS Banjir Sook masih dibuka 31/10 (0 mangsa) — bukti lemah, tiada laporan berita ditemui"
    }
   },
   "_file": "reports_2026-11-01.json"
  },
  {
   "publisher": "JKM InfoBencana (direct fetch, semua bencana b=0)",
   "published": "snapshot 2026-11-01 11:08 MYT",
   "retrieved_at": "2026-11-01T06:18+03:00",
   "url": "https://infobencanajkmv2.jkm.gov.my/landing/index.php?a=0&b=0",
   "summary": "1/11 11:08 MYT: Banjir Perak Kerian 1 PPS 0 mangsa; Sabah Sipitang 1 PPS 26 mangsa (Sabah view: Sipitang mula buka 01/11/2026); Sabah Sook 1 PPS 0. Bukan banjir: Selangor Gombak tanah runtuh, Sarawak Miri kebakaran. Sipitang dibuka 1/11 -> bukan 31/10 (hari 1/11 belum tamat, tidak dikira).",
   "states_flood": {},
   "_file": "reports_2026-11-01.json"
  },
  {
   "publisher": "Malay Mail (Bernama)",
   "published": "2026-10-31 18:35 MYT",
   "retrieved_at": "2026-11-01T06:18+03:00",
   "url": "https://www.malaymail.com/news/malaysia/2026/10/31/all-relief-centres-closed-in-kedah-negeri-sembilan-as-floods-subside-perak-evacuees-fall-to-25/241463",
   "summary": "31 Oct: Kedah last PPS (Dewan Pejabat Penghulu Mukim Bukit Raya, Pendang) closed 10am, 9 evacuees returned home; Negeri Sembilan 2 PPS Kuala Pilah (87 evacuees) closed 4pm after floodwaters receded; Perak SK Titi Serong 25 evacuees (34 in morning).",
   "states_flood": {
    "Kedah": {
     "2026-10-31": "PPS Bukit Raya Pendang masih menempatkan 9 mangsa banjir sehingga ditutup 10 pagi 31/10"
    },
    "Negeri Sembilan": {
     "2026-10-31": "2 PPS Kuala Pilah (87 mangsa) aktif sehingga ditutup 4 petang 31/10"
    },
    "Perak": {
     "2026-10-31": "SK Titi Serong Kerian 34 -> 25 mangsa pada 31/10"
    }
   },
   "_file": "reports_2026-11-01.json"
  },
  {
   "publisher": "The Star (Bernama)",
   "published": "2026-10-31 18:30 MYT",
   "retrieved_at": "2026-11-01T06:18+03:00",
   "url": "https://www.thestar.com.my/news/nation/2026/10/31/floods-subside-in-kedah-negri-number-of-evacuees-in-perak-drops",
   "summary": "Same Bernama report as Malay Mail (Kedah PPS closed 10am, NS 2 PPS closed 4pm, Perak 25 evacuees).",
   "states_flood": {
    "Kedah": {
     "2026-10-31": "PPS Pendang ditutup 10 pagi 31/10 (9 mangsa sebelum itu)"
    },
    "Negeri Sembilan": {
     "2026-10-31": "2 PPS Kuala Pilah ditutup 4 petang 31/10"
    },
    "Perak": {
     "2026-10-31": "25 mangsa SK Titi Serong"
    }
   },
   "_file": "reports_2026-11-01.json"
  },
  {
   "publisher": "Harian Metro (Bernama)",
   "published": "2026-10-31 00:56 MYT",
   "retrieved_at": "2026-11-01T06:18+03:00",
   "url": "https://www.hmetro.com.my/mutakhir/2026/10/1430186/mangsa-banjir-di-perak-negeri-sembilan-meningkat-sedikit-kedah-kekal",
   "summary": "31 Oct morning: 130 evacuees in 3 PPS: Perak 34, Negeri Sembilan 87, Kedah 9.",
   "states_flood": {
    "Perak": {
     "2026-10-31": "34 mangsa pagi 31/10"
    },
    "Negeri Sembilan": {
     "2026-10-31": "87 mangsa pagi 31/10"
    },
    "Kedah": {
     "2026-10-31": "9 mangsa pagi 31/10"
    }
   },
   "_file": "reports_2026-11-01.json"
  },
  {
   "publisher": "One Tiger Arena (aggregator) — DITOLAK",
   "published": "dated 2026-10-31 / 2026-11-01 (inconsistent)",
   "retrieved_at": "2026-11-01T06:18+03:00",
   "url": "https://onetiger.com/banjir-sabah-sarawak-2062-mangsa-masih-terjejas-di-pps/",
   "summary": "Post claims 2,062 evacuees in Sabah (Beaufort/Kinabatangan/Membakut) and Sarawak (Bintulu/Miri/Mukah/Sibu). NOT counted: page date changes between fetches, same site republished a Feb-2026 Bernama Sipitang story (bernama.com/bm/news.php?id=2523030) with an Oct-2026 date, and JKM InfoBencana 31/10 21:30 + 1/11 11:08 show no such PPS in Sarawak/Beaufort. Treated as recycled content.",
   "states_flood": {},
   "_file": "reports_2026-11-01.json"
  },
  {
   "publisher": "Harian Metro (MetMalaysia warning)",
   "published": "2026-10-31",
   "retrieved_at": "2026-11-01T06:18+03:00",
   "url": "https://www.hmetro.com.my/mutakhir/2026/10/1430327/10-negeri-dijangka-hadapi-ribut-petir-hujan-lebat-sehingga-jam-8-malam-ini",
   "summary": "Thunderstorm/heavy-rain warning for 10 states to 8pm 31/10 — warning only, context.",
   "states_flood": {},
   "_file": "reports_2026-11-01.json"
  },
  {
   "publisher": "National scan (Grok Bot)",
   "published": "2026-11-01",
   "retrieved_at": "2026-11-01T06:18+03:00",
   "url": "https://infobencanajkmv2.jkm.gov.my/landing/index.php?a=0&b=1",
   "covers_all_states": true,
   "days": [
    "2026-10-31"
   ],
   "summary": "31 Oct (MYT) closed. Scan: JKM InfoBencana 31/10 21:30 MYT + 1/11 11:08 MYT, Bernama via Malay Mail/The Star/Harian Metro 31/10, searches 'banjir 31 Oktober 2026', 'banjir kilat 31 Oktober 2026', 'flash flood 31 October 2026 Malaysia', Sarawak/Kelantan/Terengganu/Sabah Sipitang. Flood states 31 Oct: Perak, Negeri Sembilan, Kedah (PPS until 10am), Sabah (Sook PPS 0 occupants — weak). No flood report found for other states. GAPS: no RTM/Kosmo/Media Selangor items specific to 31/10 found; Sipitang PPS opened 1/11 (counted next run if confirmed). New evidence -> correct 0 -> 1 next run.",
   "states_flood": {},
   "_file": "reports_2026-11-01.json"
  },
  {
   "publisher": "JKM InfoBencana (direct fetch, banjir view b=1)",
   "published": "snapshot 2026-11-01 15:10 MYT",
   "retrieved_at": "2026-11-02T06:19+03:00",
   "url": "https://infobencanajkmv2.jkm.gov.my/landing/index.php?a=0&b=1",
   "summary": "Banjir 1/11 15:10 MYT: Sabah Sipitang 2 PPS 41 keluarga 137 mangsa; Sabah Sook 1 PPS 0 mangsa. Perak Kerian tiada lagi dalam senarai (PPS ditutup pada 1/11). Tiada negeri lain.",
   "states_flood": {
    "Sabah": {
     "2026-11-01": "JKM: 2 PPS banjir Sipitang aktif 1/11 (137 mangsa, 41 keluarga)"
    }
   },
   "_file": "reports_2026-11-02.json"
  },
  {
   "publisher": "JKM InfoBencana (direct fetch, semua bencana b=0)",
   "published": "snapshot 2026-11-02 00:20 MYT",
   "retrieved_at": "2026-11-02T06:19+03:00",
   "url": "https://infobencanajkmv2.jkm.gov.my/landing/index.php?a=0&b=0",
   "summary": "2/11 00:20 MYT: Banjir hanya Sabah (Sipitang 2 PPS 137 mangsa; Sook 1 PPS 0). Bukan banjir: Selangor Gombak tanah runtuh, Perak Manjung ribut/taufan (dibuka 1/11), Sarawak Miri kebakaran.",
   "states_flood": {},
   "_file": "reports_2026-11-02.json"
  },
  {
   "publisher": "The Star",
   "published": "2026-11-01 13:36 MYT",
   "retrieved_at": "2026-11-02T06:19+03:00",
   "url": "https://www.thestar.com.my/news/nation/2026/11/01/24-people-evacuated-as-floods-hit-sipitang-village",
   "summary": "24 residents (4 families) of Kampung Bebangkong, Mesapol, Sipitang evacuated by boat ~6am Sunday 1 Nov after flood.",
   "states_flood": {
    "Sabah": {
     "2026-11-01": "Bomba Sipitang: 24 mangsa Kg Bebangkong Mesapol dipindahkan ~6 pagi 1/11"
    }
   },
   "_file": "reports_2026-11-02.json"
  },
  {
   "publisher": "Utusan Borneo",
   "published": "2026-11-01 11:04 MYT",
   "retrieved_at": "2026-11-02T06:19+03:00",
   "url": "https://www.utusanborneo.com.my/2026/11/01/24-mangsa-banjir-dipindahkan-ke-dewan-mesapol",
   "summary": "Same Sipitang evacuation (call 5.42am 1/11, 24 mangsa ke Dewan Mesapol).",
   "states_flood": {
    "Sabah": {
     "2026-11-01": "24 mangsa banjir Kg Bebangkong dipindahkan awal pagi 1/11"
    }
   },
   "_file": "reports_2026-11-02.json"
  },
  {
   "publisher": "Malay Mail (Bernama)",
   "published": "2026-11-01 08:56 MYT",
   "retrieved_at": "2026-11-02T06:19+03:00",
   "url": "https://www.malaymail.com/news/malaysia/2026/11/01/kerian-flood-evacuees-fall-to-18-as-situation-improves/241478",
   "summary": "Perak JPBN: 18 flood evacuees (7 families) still at PPS SK Titi Serong, Kerian as of 8am 1 Nov (down from 25).",
   "states_flood": {
    "Perak": {
     "2026-11-01": "PPS SK Titi Serong Kerian: 18 mangsa banjir pada 8 pagi 1/11"
    }
   },
   "_file": "reports_2026-11-02.json"
  },
  {
   "publisher": "Borneo Post",
   "published": "2026-11-01",
   "retrieved_at": "2026-11-02T06:19+03:00",
   "url": "https://www.theborneopost.com/2026/11/01/bintulu-flash-floods-raise-concerns-over-drainage-capacity-need-for-long-term-mitigation/",
   "summary": "Bintulu (Sarawak) flash floods occurred on 30 Oct — not 1 Nov; context only.",
   "states_flood": {},
   "_file": "reports_2026-11-02.json"
  },
  {
   "publisher": "Media Selangor / The Star / Bernama (context)",
   "published": "2026-11-01",
   "retrieved_at": "2026-11-02T06:19+03:00",
   "url": "https://mediaselangor.com/ms/2026/11/404405",
   "summary": "MetMalaysia thunderstorm warnings 1/11 (Selangor, Kedah, Perak, Terengganu, Pahang, Johor, Sabah, Penang, Kelantan) — warnings only, no flood reports found for these states on 1/11. Penang 51 hotspot story (https://www.thestar.com.my/news/nation/2026/11/01/penang-identifies-51-flash-flood-hotspots-steps-up-monsoon-preparedness) is preparedness, not an event.",
   "states_flood": {},
   "_file": "reports_2026-11-02.json"
  },
  {
   "publisher": "onetiger.com aggregator (excluded)",
   "published": "page dated 2026-11-02",
   "retrieved_at": "2026-11-02T06:19+03:00",
   "url": "https://onetiger.com/banjir-sabah-sarawak-2062-mangsa-masih-terjejas-di-pps/",
   "summary": "Aggregator posts (Sabah/Sarawak 2,062 mangsa; Sipitang 195 mangsa 'sejak petang Selasa') inconsistent with JKM 1-2/11 tables (no Sarawak flood PPS, Beaufort/Kinabatangan absent) — appear recycled; NOT counted.",
   "states_flood": {},
   "_file": "reports_2026-11-02.json"
  },
  {
   "publisher": "GDACS API",
   "published": "n/a",
   "retrieved_at": "2026-11-02T06:19+03:00",
   "url": "https://www.gdacs.org/gdacsapi/api/events/geteventlist/SEARCH?eventlist=FL&fromDate=2026-10-29&toDate=2026-11-02",
   "summary": "HTTP 500 at retrieval; no GDACS evidence used from this fetch (pipeline's own GDACS pull applies).",
   "states_flood": {},
   "_file": "reports_2026-11-02.json"
  }
 ]
}