14 – 20 Oct 2026 · Malaysia

Malaysia weekly air quality

US AQI · PM2.5 · 24-hour source averages

121.5Weekly mean AQI · Unhealthy for Sensitive Groups

Official DOE API mean: 108.7. Calculated separately from reported official observations.

Each DOE observation identified as PM2.5 is converted using the published API formula and US AQI breakpoints. This is not an official all-pollutant AQI or NowCast. Calculation details

11420 eligible observations · 4 excluded.

-2.1 AQI compared with the previous week’s eligible mean of 123.6.

Peak AQI: 234 at Pasir Gudang · 16 Oct 2026, 10:00 (UTC+8).

Daily US AQI (PM2.5)

Low 34High 234AQI
0125250
14 Oct20 Oct
20 OctDaily mean · Peak 184115.3Avg AQI

Based on 1632 hourly readings.

Daily and hourly means use eligible observations across the selected locations. Each observation uses a 24-hour PM2.5 average.

Export AQI CSV

Means and peaks use only converted observations. Missing days remain gaps.

DayMean AQIPeak AQIEligible / excluded
2026-10-14125.3Unhealthy for Sensitive Groups2041632 / 0
2026-10-15138.4Unhealthy for Sensitive Groups2161632 / 0
2026-10-16126.6Unhealthy for Sensitive Groups2341632 / 0
2026-10-17115.4Unhealthy for Sensitive Groups2241632 / 0
2026-10-18114.8Unhealthy for Sensitive Groups2121632 / 0
2026-10-19114.8Unhealthy for Sensitive Groups1821628 / 4
2026-10-20115.3Unhealthy for Sensitive Groups1841632 / 0

Hourly means (UTC+8)

Day01234567891011121314151617181920212223
2026-10-14118.9119.3119.6119.9120.4120.8121.2121.6122122.7123.3123.9124.8125.3125.9126.9127.6128.3129.3130.3131.7133.1134.3135.3
2026-10-15136.2136.9137.4137.5137.8138.1138.4138.7139.1139.5139.6139.7140.1140.5140.7140.3140.2139.8139.1138.4137.5136.5135.3134.4
2026-10-16133.6133132.6132.1131.7131.4131130.5130129.4129128.6127.9126.8126124.8123.5122.5121.3120.1119.3118.5117.8117
2026-10-17116.4116115.8115.5115.1115114.6114.7114.7114.5114.5114.5114.4114.8115.1115.8115.9116116.1116.3116.2116.1115.9115.9
2026-10-18115.9115.9115.9115.8115.9115.9115.8115.9115.8115.6115.4115.1114.8114.6114.2113.7113.6113.6113.5113.7113.8113.9113.9113.9
2026-10-19113.9114114.1114.1114.3114.5114.6114.6114.5114.4114.5114.5114.8114.9114.8114.8115115.1115.4115.4115.5115.7115.9116.4
2026-10-20116.4116.5116.5116.8117.2117.4117.4117.6117.8117.8117.7117.3116.6116.3115.5115.3114.5113.9113.3112.6112111.4110.7109.8

Observation categories

Good: 67

Moderate: 4655

Unhealthy for Sensitive Groups: 2494

Unhealthy: 4045

Very Unhealthy: 159

Hazardous: 0

US AQI scale
AQICategory
0–50Good
51–100Moderate
101–150Unhealthy for Sensitive Groups
151–200Unhealthy
201–300Very Unhealthy
301+Hazardous

Stations by US AQI

Sorted by eligible mean AQI. Counts show the available coverage.

LocationMean AQIPeak AQIOfficial DOE API meanEligible / excluded
Pasir Gudang193.2Unhealthy234180.6168 / 0
Nilai184.1Unhealthy208175.2168 / 0
JOHAN SETIA183.6Unhealthy210174.7168 / 0
Larkin181.4Unhealthy227172.6168 / 0
Klang177.8Unhealthy216170.4168 / 0
Bukit Rambai177.1Unhealthy198170.2168 / 0
Seremban176Unhealthy194169.5168 / 0
Bandaraya Melaka171.4Unhealthy190166168 / 0
Shah Alam170.8Unhealthy194165.6168 / 0
Pengerang170.2Unhealthy192161168 / 0
Kota Tinggi169.8Unhealthy194163.8168 / 0
Batu Pahat169.3Unhealthy196162.8168 / 0
Putrajaya168.9Unhealthy189164.2168 / 0
Alor Gajah168.9Unhealthy189164.2168 / 0
Petaling Jaya168Unhealthy182162.8168 / 0
Cheras167.9Unhealthy194163.5168 / 0
Batu Muda167.5Unhealthy184163.2168 / 0
Tangkak165.5Unhealthy189161.2168 / 0
Banting163.6Unhealthy182160.2168 / 0
Port Dickson162.8Unhealthy186156.1168 / 0
Kluang161Unhealthy178155.5168 / 0
Segamat146.6Unhealthy for Sensitive Groups167133.9168 / 0
Rompin139.3Unhealthy for Sensitive Groups165126.1168 / 0
Seri Manjung139.1Unhealthy for Sensitive Groups184116.4168 / 0
Tanjung Malim134.9Unhealthy for Sensitive Groups182114.1164 / 4
Kuala Selangor130.8Unhealthy for Sensitive Groups165109.3168 / 0
Indera Mahkota Kuantan128.6Unhealthy for Sensitive Groups159113168 / 0
Tawau128.3Unhealthy for Sensitive Groups155107.3168 / 0
Tasek Ipoh126.5Unhealthy for Sensitive Groups160109.5168 / 0
Temerloh123.2Unhealthy for Sensitive Groups163105.6168 / 0
Pegoh Ipoh123.1Unhealthy for Sensitive Groups163106.4168 / 0
IPD Serian122.4Unhealthy for Sensitive Groups156108168 / 0
Sandakan120.4Unhealthy for Sensitive Groups159103.4168 / 0
Samarahan117.9Unhealthy for Sensitive Groups15499.2168 / 0
Paka114.6Unhealthy for Sensitive Groups15998168 / 0
Kuching112.2Unhealthy for Sensitive Groups15892.7168 / 0
Balok Baru Kuantan111.1Unhealthy for Sensitive Groups15890.5168 / 0
Jerantut111Unhealthy for Sensitive Groups15995.3168 / 0
Sri Aman110.6Unhealthy for Sensitive Groups15489.3168 / 0
Kemaman110Unhealthy for Sensitive Groups15993.3168 / 0
Seberang Perai101.8Unhealthy for Sensitive Groups14983.6168 / 0
Minden101Unhealthy for Sensitive Groups14080.3168 / 0
Seberang Jaya98.5Moderate13278.7168 / 0
Taiping96.5Moderate14277.4168 / 0
Kuala Terengganu94.2Moderate14175.7168 / 0
Sungai Petani92.1Moderate11875.1168 / 0
Samalaju90.7Moderate11873.8168 / 0
Besut86.6Moderate13270.9168 / 0
Sibu86.6Moderate12471.3168 / 0
Keningau86.1Moderate12470.8168 / 0
Kulim Hi-Tech85.8Moderate10971168 / 0
Kota Bharu84.4Moderate12069.9168 / 0
Bintulu84.3Moderate10769.9168 / 0
Politeknik Kota Kinabalu82.8Moderate12668.2168 / 0
Sarikei80.8Moderate10367.7168 / 0
Tanah Merah80.3Moderate11367.1168 / 0
Mukah79.5Moderate9166.8168 / 0
Miri78.9Moderate11565.4168 / 0
Labuan77.2Moderate12064.7168 / 0
Kapit76.9Moderate12864.3168 / 0
ILP Miri72.4Moderate10160.5168 / 0
Alor Setar71.6Moderate9161.3168 / 0
Balik Pulau71.4Moderate12659.7168 / 0
Kota Kinabalu71.1Moderate8860.6168 / 0
Kimanis69.3Moderate9358.2168 / 0
Kangar65.5Moderate7857.1168 / 0
Limbang64.8Moderate9054.1168 / 0
Langkawi63.9Moderate8354.3168 / 0

States by US AQI

StateMean AQIOfficial API meanEligible / excluded
Negeri Sembilan174.3166.9504 / 0
Melaka172.4166.8504 / 0
Johor169.6161.41344 / 0
Putrajaya168.9164.2168 / 0
Kuala Lumpur167.7163.3336 / 0
Selangor165.8157.21008 / 0
Perak124104.8836 / 4
Pahang122.6106.1840 / 0
Terengganu101.384.5672 / 0
Penang93.275.6672 / 0
Sabah9378.11008 / 0
Sarawak90.675.62184 / 0
Kelantan82.368.5336 / 0
Kedah78.465.4672 / 0
Labuan77.264.7168 / 0
Perlis65.557.1168 / 0
View the official DOE API report

Malaysia air quality.
The week in review.

7 days · Malaysia Time

Laporan mingguan Indeks Pencemaran Udara (IPU) dan jerebu Malaysia

During the week of 14 – 20 Oct 2026, Malaysia recorded an overall average Air Pollutant Index (API) of 108.7 (Unhealthy).

National weekly average

108.7API

Unhealthy · Tidak Sihat

2.1 API cleaner than the week before, which averaged 110.8

Daily averages102.6 – 123.2 APIWed → Tue
Explore the week
Week's highest reading
209Pasir Gudang, Johor10:00 MYT, 16 Oct 2026
Cleanest average
54.1Limbang, SarawakModerate weekly average
Good to Moderate air
59%of all hourly readings11,424 readings in total
Stations reporting
68of 68 DOE stations16 states and territories

Where the haze sat

Taburan kualiti udara mengikut negeri dan stesen

Peak: Pasir Gudang · 209

Compare weekly station averages across Peninsular Malaysia, Sabah and Sarawak. Each dot represents a monitoring station. Use the state rankings below to compare regional averages with the highest reading in each state.

Johor: weekly average API 161.4 (Unhealthy), peak 209 across 8 stationsKedah: weekly average API 65.4 (Moderate), peak 90 across 4 stationsKelantan: weekly average API 68.5 (Moderate), peak 91 across 2 stationsMelaka: weekly average API 166.8 (Unhealthy), peak 186 across 3 stationsNegeri Sembilan: weekly average API 166.9 (Unhealthy), peak 191 across 3 stationsPahang: weekly average API 106.1 (Unhealthy), peak 161 across 5 stationsPerak: weekly average API 104.8 (Unhealthy), peak 175 across 5 stationsPerlis: weekly average API 57.1 (Moderate), peak 66 across 1 stationPenang: weekly average API 75.6 (Moderate), peak 146 across 4 stationsSelangor: weekly average API 157.2 (Unhealthy), peak 195 across 6 stationsTerengganu: weekly average API 84.5 (Moderate), peak 157 across 4 stationsKuala Lumpur: weekly average API 163.4 (Unhealthy), peak 183 across 2 stationsPutrajaya: weekly average API 164.2 (Unhealthy), peak 179 across 1 stationLangkawi, Kedah — weekly average API 54.3 (Moderate), peak 69Kangar, Perlis — weekly average API 57.1 (Moderate), peak 66Balik Pulau, Penang — weekly average API 59.7 (Moderate), peak 94Alor Setar, Kedah — weekly average API 61.3 (Moderate), peak 75Tanah Merah, Kelantan — weekly average API 67.1 (Moderate), peak 87Kota Bharu, Kelantan — weekly average API 69.9 (Moderate), peak 91Besut, Terengganu — weekly average API 70.9 (Moderate), peak 97Kulim Hi-Tech, Kedah — weekly average API 71 (Moderate), peak 85Sungai Petani, Kedah — weekly average API 75.1 (Moderate), peak 90Kuala Terengganu, Terengganu — weekly average API 75.7 (Moderate), peak 113Taiping, Perak — weekly average API 77.4 (Moderate), peak 117Seberang Jaya, Penang — weekly average API 78.7 (Moderate), peak 97Minden, Penang — weekly average API 80.3 (Moderate), peak 108Seberang Perai, Penang — weekly average API 83.6 (Moderate), peak 146Balok Baru Kuantan, Pahang — weekly average API 90.5 (Moderate), peak 156Kemaman, Terengganu — weekly average API 93.3 (Moderate), peak 157Jerantut, Pahang — weekly average API 95.3 (Moderate), peak 157Paka, Terengganu — weekly average API 98 (Moderate), peak 157Temerloh, Pahang — weekly average API 105.6 (Unhealthy), peak 160Pegoh Ipoh, Perak — weekly average API 106.4 (Unhealthy), peak 160Kuala Selangor, Selangor — weekly average API 109.3 (Unhealthy), peak 161Tasek Ipoh, Perak — weekly average API 109.5 (Unhealthy), peak 158Indera Mahkota Kuantan, Pahang — weekly average API 113 (Unhealthy), peak 157Tanjung Malim, Perak — weekly average API 114.1 (Unhealthy), peak 174Seri Manjung, Perak — weekly average API 116.4 (Unhealthy), peak 175Rompin, Pahang — weekly average API 126.1 (Unhealthy), peak 161Segamat, Johor — weekly average API 133.9 (Unhealthy), peak 163Kluang, Johor — weekly average API 155.5 (Unhealthy), peak 171Port Dickson, Negeri Sembilan — weekly average API 156.1 (Unhealthy), peak 177Banting, Selangor — weekly average API 160.2 (Unhealthy), peak 174Pengerang, Johor — weekly average API 161 (Unhealthy), peak 181Tangkak, Johor — weekly average API 161.2 (Unhealthy), peak 179Petaling Jaya, Selangor — weekly average API 162.8 (Unhealthy), peak 174Batu Pahat, Johor — weekly average API 162.8 (Unhealthy), peak 184Batu Muda, Kuala Lumpur — weekly average API 163.2 (Unhealthy), peak 175Cheras, Kuala Lumpur — weekly average API 163.5 (Unhealthy), peak 183Kota Tinggi, Johor — weekly average API 163.8 (Unhealthy), peak 183Putrajaya, Putrajaya — weekly average API 164.2 (Unhealthy), peak 179Alor Gajah, Melaka — weekly average API 164.2 (Unhealthy), peak 179Shah Alam, Selangor — weekly average API 165.6 (Unhealthy), peak 183Bandaraya Melaka, Melaka — weekly average API 166 (Unhealthy), peak 180Seremban, Negeri Sembilan — weekly average API 169.5 (Unhealthy), peak 183Bukit Rambai, Melaka — weekly average API 170.2 (Unhealthy), peak 186Klang, Selangor — weekly average API 170.4 (Unhealthy), peak 195Larkin, Johor — weekly average API 172.6 (Unhealthy), peak 202JOHAN SETIA, Selangor — weekly average API 174.7 (Unhealthy), peak 192Nilai, Negeri Sembilan — weekly average API 175.2 (Unhealthy), peak 191Pasir Gudang, Johor — weekly average API 180.6 (Unhealthy), peak 209Pasir Gudang · peak 209

Peninsular Malaysia · Semenanjung Malaysia

Sabah: weekly average API 78.1 (Moderate), peak 157 across 6 stationsSarawak: weekly average API 75.6 (Moderate), peak 156 across 13 stationsLabuan: weekly average API 64.7 (Moderate), peak 91 across 1 stationLimbang, Sarawak — weekly average API 54.1 (Moderate), peak 74Kimanis, Sabah — weekly average API 58.2 (Moderate), peak 76ILP Miri, Sarawak — weekly average API 60.5 (Moderate), peak 81Kota Kinabalu, Sabah — weekly average API 60.6 (Moderate), peak 73Kapit, Sarawak — weekly average API 64.3 (Moderate), peak 95Labuan, Labuan — weekly average API 64.7 (Moderate), peak 91Miri, Sarawak — weekly average API 65.4 (Moderate), peak 88Mukah, Sarawak — weekly average API 66.8 (Moderate), peak 75Sarikei, Sarawak — weekly average API 67.7 (Moderate), peak 82Politeknik Kota Kinabalu, Sabah — weekly average API 68.2 (Moderate), peak 94Bintulu, Sarawak — weekly average API 69.9 (Moderate), peak 84Keningau, Sabah — weekly average API 70.8 (Moderate), peak 93Sibu, Sarawak — weekly average API 71.3 (Moderate), peak 93Samalaju, Sarawak — weekly average API 73.8 (Moderate), peak 90Sri Aman, Sarawak — weekly average API 89.3 (Moderate), peak 153Kuching, Sarawak — weekly average API 92.7 (Moderate), peak 156Samarahan, Sarawak — weekly average API 99.2 (Moderate), peak 153Sandakan, Sabah — weekly average API 103.4 (Unhealthy), peak 157Tawau, Sabah — weekly average API 107.3 (Unhealthy), peak 154IPD Serian, Sarawak — weekly average API 108 (Unhealthy), peak 155

Sabah, Sarawak & Labuan · Borneo Malaysia

0255075100125150175State average APIOne DOE station, sized and shaded by its weekly average

The week, hour by hour

Purata kebangsaan bagi setiap jam sepanjang tujuh hari

Read each row from midnight to 11pm, in Malaysia Time. The hourly national average helps identify when readings rose or fell during the week. Empty cells mean no hourly figure is available.

WedWed 00:00 MYT — API 106.7Wed 01:00 MYT — API 107.2Wed 02:00 MYT — API 107.4Wed 03:00 MYT — API 107.6Wed 04:00 MYT — API 108.2Wed 05:00 MYT — API 108.5Wed 06:00 MYT — API 108.7Wed 07:00 MYT — API 109Wed 08:00 MYT — API 109.3Wed 09:00 MYT — API 109.8Wed 10:00 MYT — API 110.1Wed 11:00 MYT — API 110.5Wed 12:00 MYT — API 111Wed 13:00 MYT — API 110.9Wed 14:00 MYT — API 111Wed 15:00 MYT — API 111.4Wed 16:00 MYT — API 111.9Wed 17:00 MYT — API 112.4Wed 18:00 MYT — API 113.2Wed 19:00 MYT — API 113.7Wed 20:00 MYT — API 115.3Wed 21:00 MYT — API 117.9Wed 22:00 MYT — API 119.3Wed 23:00 MYT — API 120.3ThuThu 00:00 MYT — API 121.3Thu 01:00 MYT — API 121.9Thu 02:00 MYT — API 122.1Thu 03:00 MYT — API 122.2Thu 04:00 MYT — API 122.2Thu 05:00 MYT — API 122.6Thu 06:00 MYT — API 122.8Thu 07:00 MYT — API 123Thu 08:00 MYT — API 123.2Thu 09:00 MYT — API 123.5Thu 10:00 MYT — API 123.9Thu 11:00 MYT — API 124.3Thu 12:00 MYT — API 124.7Thu 13:00 MYT — API 125Thu 14:00 MYT — API 125.2Thu 15:00 MYT — API 125Thu 16:00 MYT — API 124.6Thu 17:00 MYT — API 124.2Thu 18:00 MYT — API 123.7Thu 19:00 MYT — API 123.2Thu 20:00 MYT — API 122.8Thu 21:00 MYT — API 122.2Thu 22:00 MYT — API 121.5Thu 23:00 MYT — API 121FriFri 00:00 MYT — API 120.4Fri 01:00 MYT — API 120Fri 02:00 MYT — API 119.7Fri 03:00 MYT — API 119.3Fri 04:00 MYT — API 119Fri 05:00 MYT — API 118.6Fri 06:00 MYT — API 118.2Fri 07:00 MYT — API 117.7Fri 08:00 MYT — API 117.3Fri 09:00 MYT — API 116.8Fri 10:00 MYT — API 116.5Fri 11:00 MYT — API 116.1Fri 12:00 MYT — API 115.4Fri 13:00 MYT — API 114.3Fri 14:00 MYT — API 113.5Fri 15:00 MYT — API 112.4Fri 16:00 MYT — API 110.8Fri 17:00 MYT — API 109.8Fri 18:00 MYT — API 108.7Fri 19:00 MYT — API 107.6Fri 20:00 MYT — API 107Fri 21:00 MYT — API 106.4Fri 22:00 MYT — API 106Fri 23:00 MYT — API 105.5SatSat 00:00 MYT — API 104.7Sat 01:00 MYT — API 104.1Sat 02:00 MYT — API 104Sat 03:00 MYT — API 103.8Sat 04:00 MYT — API 103.6Sat 05:00 MYT — API 103.5Sat 06:00 MYT — API 103.4Sat 07:00 MYT — API 103.4Sat 08:00 MYT — API 103.5Sat 09:00 MYT — API 103.4Sat 10:00 MYT — API 103.4Sat 11:00 MYT — API 103.3Sat 12:00 MYT — API 103.3Sat 13:00 MYT — API 103.4Sat 14:00 MYT — API 103.7Sat 15:00 MYT — API 103.9Sat 16:00 MYT — API 104Sat 17:00 MYT — API 104.1Sat 18:00 MYT — API 104Sat 19:00 MYT — API 104Sat 20:00 MYT — API 103.8Sat 21:00 MYT — API 103.6Sat 22:00 MYT — API 103.5Sat 23:00 MYT — API 103.6SunSun 00:00 MYT — API 103.7Sun 01:00 MYT — API 103.7Sun 02:00 MYT — API 103.8Sun 03:00 MYT — API 103.7Sun 04:00 MYT — API 103.8Sun 05:00 MYT — API 103.9Sun 06:00 MYT — API 103.8Sun 07:00 MYT — API 103.8Sun 08:00 MYT — API 103.6Sun 09:00 MYT — API 103.5Sun 10:00 MYT — API 103.6Sun 11:00 MYT — API 103.8Sun 12:00 MYT — API 103.6Sun 13:00 MYT — API 103.8Sun 14:00 MYT — API 103.6Sun 15:00 MYT — API 103.6Sun 16:00 MYT — API 103.3Sun 17:00 MYT — API 103.2Sun 18:00 MYT — API 103.2Sun 19:00 MYT — API 103.4Sun 20:00 MYT — API 103.6Sun 21:00 MYT — API 103.6Sun 22:00 MYT — API 103.7Sun 23:00 MYT — API 103.6MonMon 00:00 MYT — API 103.6Mon 01:00 MYT — API 103.7Mon 02:00 MYT — API 103.6Mon 03:00 MYT — API 103.5Mon 04:00 MYT — API 103.5Mon 05:00 MYT — API 103.5Mon 06:00 MYT — API 103.3Mon 07:00 MYT — API 103.5Mon 08:00 MYT — API 103.5Mon 09:00 MYT — API 103.3Mon 10:00 MYT — API 103Mon 11:00 MYT — API 102.5Mon 12:00 MYT — API 102.1Mon 13:00 MYT — API 101.9Mon 14:00 MYT — API 101.3Mon 15:00 MYT — API 101.3Mon 16:00 MYT — API 101.4Mon 17:00 MYT — API 101.5Mon 18:00 MYT — API 101.7Mon 19:00 MYT — API 101.9Mon 20:00 MYT — API 102.3Mon 21:00 MYT — API 102.4Mon 22:00 MYT — API 102.3Mon 23:00 MYT — API 102.7TueTue 00:00 MYT — API 102.4Tue 01:00 MYT — API 102.7Tue 02:00 MYT — API 103.1Tue 03:00 MYT — API 103.4Tue 04:00 MYT — API 103.9Tue 05:00 MYT — API 104.3Tue 06:00 MYT — API 104.7Tue 07:00 MYT — API 105Tue 08:00 MYT — API 105.2Tue 09:00 MYT — API 105.5Tue 10:00 MYT — API 105.5Tue 11:00 MYT — API 105Tue 12:00 MYT — API 104Tue 13:00 MYT — API 103.4Tue 14:00 MYT — API 102.6Tue 15:00 MYT — API 102.4Tue 16:00 MYT — API 101.9Tue 17:00 MYT — API 101.3Tue 18:00 MYT — API 100.9Tue 19:00 MYT — API 100.1Tue 20:00 MYT — API 99.7Tue 21:00 MYT — API 99.2Tue 22:00 MYT — API 98.4Tue 23:00 MYT — API 97.70003060912151821
050100150APIBrighter cells ran hazier than the rest of this week (97.7 – 125.2 API)

Haziest hour of the week: Thu at 14:00 MYT, averaging API 125.2 nationwide.

View the hourly figures as a table
National average API by hour, Malaysia Time
Day000102030405060708091011121314151617181920212223
Wed106.7107.2107.4107.6108.2108.5108.7109109.3109.8110.1110.5111110.9111111.4111.9112.4113.2113.7115.3117.9119.3120.3
Thu121.3121.9122.1122.2122.2122.6122.8123123.2123.5123.9124.3124.7125125.2125124.6124.2123.7123.2122.8122.2121.5121
Fri120.4120119.7119.3119118.6118.2117.7117.3116.8116.5116.1115.4114.3113.5112.4110.8109.8108.7107.6107106.4106105.5
Sat104.7104.1104103.8103.6103.5103.4103.4103.5103.4103.4103.3103.3103.4103.7103.9104104.1104104103.8103.6103.5103.6
Sun103.7103.7103.8103.7103.8103.9103.8103.8103.6103.5103.6103.8103.6103.8103.6103.6103.3103.2103.2103.4103.6103.6103.7103.6
Mon103.6103.7103.6103.5103.5103.5103.3103.5103.5103.3103102.5102.1101.9101.3101.3101.4101.5101.7101.9102.3102.4102.3102.7
Tue102.4102.7103.1103.4103.9104.3104.7105105.2105.5105.5105104103.4102.6102.4101.9101.3100.9100.199.799.298.497.7

How the readings split

Pecahan bacaan mengikut kategori IPU

Good: 3% (345 readings)Moderate: 56% (6,397 readings)Unhealthy: 41% (4,669 readings)56%Moderate
  • GoodBaik3%345
  • ModerateSederhana56%6,397
  • UnhealthyTidak Sihat41%4,669
  • Very UnhealthySangat Tidak Sihat0%13
  • HazardousBerbahaya0%0

Based on 11,424 hourly station readings.

What it meant for your week

Panduan kesihatan mengikut kategori kualiti udara

Limit prolonged outdoor activity. Children, older adults, pregnant women and people with respiratory or heart conditions should stay indoors where possible. A well-fitted N95 mask helps outdoors.

Hadkan aktiviti luar yang berpanjangan. Kanak-kanak, warga emas, ibu mengandung dan pesakit pernafasan atau jantung dinasihatkan berada di dalam bangunan. Pelitup muka N95 membantu di luar.

Malaysia API scale · Skala IPU Malaysia
APICategoryKategori
0–50GoodBaik
51–100ModerateSederhana
101–200UnhealthyTidak Sihat
201–300Very UnhealthySangat Tidak Sihat
301+HazardousBerbahaya

States ranked by weekly average

Kedudukan negeri mengikut purata IPU mingguan

Marker shows each state's peak
  1. Negeri Sembilan166.9Unhealthy · 3 stations
  2. Melaka166.8Unhealthy · 3 stations
  3. Putrajaya164.2Unhealthy · 1 station
  4. Kuala Lumpur163.4Unhealthy · 2 stations
  5. Johor161.4Unhealthy · 8 stations
  6. Selangor157.2Unhealthy · 6 stations
  7. Pahang106.1Unhealthy · 5 stations
  8. Perak104.8Unhealthy · 5 stations
  9. Terengganu84.5Moderate · 4 stations
  10. Sabah78.1Moderate · 6 stations
  11. Penang75.6Moderate · 4 stations
  12. Sarawak75.6Moderate · 13 stations
  13. Kelantan68.5Moderate · 2 stations
  14. Kedah65.4Moderate · 4 stations
  15. Labuan64.7Moderate · 1 station
  16. Perlis57.1Moderate · 1 station

Cleanest air of the week

Lima stesen dengan purata IPU terendah

Scale 0 – 250
  1. Limbang54.1avg
    Sarawak
    33Moderate74
  2. Langkawi54.3avg
    Kedah
    32Moderate69
  3. Kangar57.1avg
    Perlis
    48Moderate66
  4. Kimanis58.2avg
    Sabah
    26Moderate76
  5. Pulau Pinang
    39Moderate94

Highest readings of the week

Lima stesen dengan bacaan IPU tertinggi

Scale 0 – 250
  1. Johor
    155Unhealthy209
  2. Larkin202peak
    Johor
    136Unhealthy202
  3. Klang195peak
    Selangor
    152Unhealthy195
  4. Selangor
    159Unhealthy192
  5. Nilai191peak
    Negeri Sembilan
    161Unhealthy191

Major cities

Purata dan puncak mingguan bagi bandar utama Malaysia

  • Johor BahruJohor172.6Unhealthy · Tidak SihatPeak 202Larkin
  • Kuala LumpurKuala Lumpur163.5Unhealthy · Tidak SihatPeak 183Cheras
  • KuchingSarawak92.7Moderate · SederhanaPeak 156Kuching
  • Alor SetarKedah61.3Moderate · SederhanaPeak 75Alor Setar
  • Kota BharuKelantan69.9Moderate · SederhanaPeak 91Kota Bharu
  • MelakaMelaka166Unhealthy · Tidak SihatPeak 180Bandaraya Melaka
  • SerembanNegeri Sembilan169.5Unhealthy · Tidak SihatPeak 183Seremban
  • KuantanPahang113Unhealthy · Tidak SihatPeak 157Indera Mahkota Kuantan
  • George TownPulau Pinang80.3Moderate · SederhanaPeak 108Minden
  • IpohPerak109.5Unhealthy · Tidak SihatPeak 158Tasek Ipoh
  • KangarPerlis57.1Moderate · SederhanaPeak 66Kangar
  • Kota KinabaluSabah60.6Moderate · SederhanaPeak 73Kota Kinabalu
  • Shah AlamSelangor165.6Unhealthy · Tidak SihatPeak 183Shah Alam
  • Kuala TerengganuTerengganu75.7Moderate · SederhanaPeak 113Kuala Terengganu

Reading the report

What a week of
air quality tells us.

A closer look at Malaysia's Air Pollutant Index, known locally as Indeks Pencemaran Udara or IPU.

Malaysia's weekly API in context

This report covers 14 – 20 Oct 2026, the latest Wednesday-to-Tuesday reporting week in Malaysia Time. The national weekly average of 108.7 API falls in the Unhealthy category. On Tuesday, the final day's data is partial until all hourly readings arrive. It summarises the period across reporting stations; it does not describe every place at every hour.

Why averages and peaks tell different stories

A weekly average shows the level across the available readings. A peak is the highest single reading during that period, so a short rise at one station can stand out even when the weekly average is lower. For this report, the highest value is 209 API at Pasir Gudang in Johor. Compare the solid average line with the station peak and min–max range to see that difference.

Comparing states, stations and cities

State averages combine station averages in proportion to their reading counts. Stations with more observations contribute more to the result. City summaries use a representative monitoring station, named below each city. That station describes its monitoring location; readings can differ elsewhere in the city.

Where these numbers come from

This report uses 11,424 stored hourly readings from 68 reporting stations. The archive collects the Department of Environment Malaysia's APIMS feed. Coverage depends on the readings received during the reporting window. Missing observations can affect comparisons between places and periods.

Looking for today's haze conditions?

This is a historical weekly summary. For current conditions, open the live Malaysia air quality report or find a nearby station on the air quality map. The about page explains the source and how Haze Monitor presents the data.

Questions readers ask

Soalan lazim berkenaan jerebu dan kualiti udara Malaysia

What was Malaysia's average air quality during the latest reporting week?

Across 14 – 20 Oct 2026, Malaysia averaged an Air Pollutant Index of 108.7, which sits in the Unhealthy band (Tidak Sihat). 59% of all hourly readings stayed within Good or Moderate.

Where was the cleanest air recorded?

Limbang in Sarawak held the lowest weekly average at API 54.1 (Moderate).

Which area had the worst haze?

The single highest reading of the week was API 209 (Very Unhealthy) at Pasir Gudang, Johor, recorded at 10:00 MYT, 16 Oct 2026.

How is this report put together?

Hourly readings are collected from the Department of Environment's APIMS feed for all 68 national stations and stored as they arrive. The report advances to a new Wednesday-to-Tuesday period each Tuesday in Malaysia Time and refreshes hourly. On Tuesday, readings for the final day accumulate as they arrive. State figures weight each station by how many hours it actually reported.