28 Oct – 3 Nov 2026 · Malaysia

Malaysia weekly air quality

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

63.3Weekly mean AQI · Moderate

Official DOE API mean: 53. 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

11299 eligible observations · 125 excluded.

-30.8 AQI compared with the previous week’s eligible mean of 94.1.

Peak AQI: 124 at Batu Pahat · 28 Oct 2026, 07:00 (UTC+8).

Daily US AQI (PM2.5)

Low 16High 124AQI
062.5125
28 Oct3 Nov
3 NovDaily mean · Peak 11161.6Avg AQI

Based on 1625 hourly readings.

7 observations excluded because their pollutant is unknown or unsupported.

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-2865.1Moderate1241582 / 50
2026-10-2961.8Moderate1151624 / 8
2026-10-3059.4Moderate1071607 / 25
2026-10-3162.1Moderate1111619 / 13
2026-11-0166Moderate1221611 / 21
2026-11-0267.2Moderate1221631 / 1
2026-11-0361.6Moderate1111625 / 7

Hourly means (UTC+8)

Day01234567891011121314151617181920212223
2026-10-2867.667.36766.96665.965.865.965.565.464.164.463.964.464.964.66564.964.564.964.463.263.462.9
2026-10-296362.662.662.662.662.562.461.961.661.461.461.96261.961.661.661.661.862.26261.361.260.460.1
2026-10-306059.959.459.258.958.858.958.958.758.558.458.458.658.659.759.559.959.960.260.160.359.86060.5
2026-10-3160.861.161.561.761.861.96262.162.362.462.361.861.561.661.661.96262.362.76362.262.963.263.1
2026-11-0163.363.563.863.964.364.464.564.664.864.965.26666.566.867.167.268.168.367.767.368.168.368.668.3
2026-11-0268.568.668.768.668.668.468.568.568.468.368.268.26867.767.467.266.666.365.965.46564.564.263.9
2026-11-0363.563.463.16362.662.562.261.961.861.561.26160.860.660.460.460.260.760.961.161.361.661.861.9

Observation categories

Good: 1968

Moderate: 8961

Unhealthy for Sensitive Groups: 370

Unhealthy: 0

Very Unhealthy: 0

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
Batu Muda97.1Moderate11577.9168 / 0
JOHAN SETIA90.1Moderate12273168 / 0
Pasir Gudang88.5Moderate10772.8168 / 0
Larkin87.6Moderate10372.4168 / 0
Klang86.6Moderate11571.1168 / 0
Kluang83.6Moderate11569.5168 / 0
Cheras80.2Moderate10769.2151 / 17
Nilai79.5Moderate11566.5168 / 0
Putrajaya75.5Moderate10964.1167 / 1
Shah Alam75.5Moderate9463.6168 / 0
Banting75.5Moderate11563.6168 / 0
Tasek Ipoh73.8Moderate8462.9168 / 0
Tangkak73.6Moderate9162.8168 / 0
Seberang Perai73.1Moderate8362.5168 / 0
Seremban72.2Moderate9361.2168 / 0
Balok Baru Kuantan72.1Moderate8161.9167 / 1
Kota Tinggi71.3Moderate8861168 / 0
Samalaju71.3Moderate11161.2168 / 0
Batu Pahat71Moderate12459.7164 / 4
Bandaraya Melaka70.7Moderate8460.6168 / 0
Seri Manjung70.5Moderate9660.6168 / 0
Bukit Rambai70.2Moderate8760.4168 / 0
Keningau69.6Moderate10158.5168 / 0
Pengerang68.3Moderate8659.1168 / 0
Tawau68.1Moderate7259168 / 0
Alor Gajah67.8Moderate7858.6168 / 0
Petaling Jaya67.3Moderate8657.6168 / 0
Segamat66.8Moderate8057.6168 / 0
Sri Aman66.8Moderate9655.9168 / 0
IPD Serian65.9Moderate9355.2168 / 0
Kuching65.8Moderate8856.8168 / 0
Port Dickson64.3Moderate8655.3168 / 0
Samarahan64.3Moderate8855.4168 / 0
Pegoh Ipoh62.1Moderate7254.7168 / 0
Rompin62.1Moderate8152.9168 / 0
Mukah61.1Moderate7852.4168 / 0
Kuala Terengganu60.7Moderate7451.9167 / 1
Indera Mahkota Kuantan60Moderate7551.1168 / 0
Kimanis60Moderate7551.8168 / 0
Sandakan59.9Moderate6553.2168 / 0
Kuala Selangor58.7Moderate7549.6168 / 0
Sarikei58.7Moderate8149.4168 / 0
Kota Bharu58.2Moderate7450168 / 0
Politeknik Kota Kinabalu58.1Moderate6750168 / 0
Sibu57.7Moderate8048.2168 / 0
Kemaman57.5Moderate7848.5168 / 0
Bintulu57.1Moderate9048.4168 / 0
Sungai Petani56Moderate7047168 / 0
Labuan55.8Moderate6846.4158 / 10
Seberang Jaya54.3Moderate6845.2168 / 0
Kapit53.8Moderate7444.6168 / 0
Tanah Merah53.6Moderate7245168 / 0
Temerloh52.6Moderate7142.4168 / 0
Tanjung Malim51.4Moderate6842.3168 / 0
Minden51.2Moderate6542168 / 0
Miri50.9Moderate7140.9164 / 4
Paka50.3Moderate6141.3168 / 0
Besut48.2Good6238.3168 / 0
Taiping48.1Good6440.5168 / 0
Kota Kinabalu46.1Good6236.6165 / 3
Limbang45.9Good6536.4168 / 0
Kangar45.6Good5435.2168 / 0
Alor Setar44.7Good5634.7163 / 5
Kulim Hi-Tech44.6Good5835.2168 / 0
ILP Miri44.4Good5935.4168 / 0
Balik Pulau44.2Good7032.8129 / 39
Jerantut42.2Good7033151 / 17
Langkawi36.2Good5627.1145 / 23

States by US AQI

StateMean AQIOfficial API meanEligible / excluded
Kuala Lumpur89.173.5319 / 17
Johor76.464.41340 / 4
Selangor75.663.11008 / 0
Putrajaya75.564.1167 / 1
Negeri Sembilan7261504 / 0
Melaka69.559.9504 / 0
Perak61.252.2840 / 0
Sabah60.351.51005 / 3
Sarawak58.849.22180 / 4
Pahang58.148.3822 / 18
Penang56.445.6633 / 39
Kelantan55.947.5336 / 0
Labuan55.846.4158 / 10
Terengganu54.245671 / 1
Kedah45.736644 / 28
Perlis45.635.2168 / 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 28 Oct – 3 Nov 2026, Malaysia recorded an overall average Air Pollutant Index (API) of 53 (Moderate).

National weekly average

53API

Moderate · Sederhana

27.6 API cleaner than the week before, which averaged 80.6

Daily averages50 – 56 APIWed → Tue
Explore the week
Week's highest reading
106Cheras, Kuala Lumpur20:00 MYT, 30 Oct 2026
Cleanest average
27.1Langkawi, KedahGood weekly average
Good to Moderate air
100%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: Cheras · 106

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 64.4 (Moderate), peak 93 across 8 stationsKedah: weekly average API 36 (Good), peak 60 across 4 stationsKelantan: weekly average API 47.5 (Good), peak 63 across 2 stationsMelaka: weekly average API 59.9 (Moderate), peak 72 across 3 stationsNegeri Sembilan: weekly average API 61 (Moderate), peak 88 across 3 stationsPahang: weekly average API 48.3 (Good), peak 89 across 5 stationsPerak: weekly average API 52.2 (Moderate), peak 78 across 5 stationsPerlis: weekly average API 35.2 (Good), peak 45 across 1 stationPenang: weekly average API 45.6 (Good), peak 69 across 4 stationsSelangor: weekly average API 63.1 (Moderate), peak 92 across 6 stationsTerengganu: weekly average API 45 (Good), peak 66 across 4 stationsKuala Lumpur: weekly average API 73.6 (Moderate), peak 106 across 2 stationsPutrajaya: weekly average API 64.1 (Moderate), peak 85 across 1 stationLangkawi, Kedah — weekly average API 27.1 (Good), peak 50Balik Pulau, Penang — weekly average API 32.8 (Good), peak 60Jerantut, Pahang — weekly average API 33 (Good), peak 60Alor Setar, Kedah — weekly average API 34.7 (Good), peak 49Kangar, Perlis — weekly average API 35.2 (Good), peak 45Kulim Hi-Tech, Kedah — weekly average API 35.2 (Good), peak 52Besut, Terengganu — weekly average API 38.3 (Good), peak 55Taiping, Perak — weekly average API 40.5 (Good), peak 56Paka, Terengganu — weekly average API 41.3 (Good), peak 54Minden, Penang — weekly average API 42 (Good), peak 57Tanjung Malim, Perak — weekly average API 42.3 (Good), peak 59Temerloh, Pahang — weekly average API 42.4 (Good), peak 61Tanah Merah, Kelantan — weekly average API 45 (Good), peak 62Seberang Jaya, Penang — weekly average API 45.2 (Good), peak 59Sungai Petani, Kedah — weekly average API 47 (Good), peak 60Kemaman, Terengganu — weekly average API 48.5 (Good), peak 66Kuala Selangor, Selangor — weekly average API 49.6 (Good), peak 64Kota Bharu, Kelantan — weekly average API 50 (Good), peak 63Indera Mahkota Kuantan, Pahang — weekly average API 51.1 (Moderate), peak 64Kuala Terengganu, Terengganu — weekly average API 51.9 (Moderate), peak 63Rompin, Pahang — weekly average API 52.9 (Moderate), peak 68Pegoh Ipoh, Perak — weekly average API 54.7 (Moderate), peak 62Port Dickson, Negeri Sembilan — weekly average API 55.3 (Moderate), peak 71Petaling Jaya, Selangor — weekly average API 57.6 (Moderate), peak 71Segamat, Johor — weekly average API 57.6 (Moderate), peak 67Alor Gajah, Melaka — weekly average API 58.6 (Moderate), peak 66Pengerang, Johor — weekly average API 59.1 (Moderate), peak 71Batu Pahat, Johor — weekly average API 59.7 (Moderate), peak 93Bukit Rambai, Melaka — weekly average API 60.4 (Moderate), peak 72Seri Manjung, Perak — weekly average API 60.6 (Moderate), peak 78Bandaraya Melaka, Melaka — weekly average API 60.6 (Moderate), peak 70Kota Tinggi, Johor — weekly average API 61 (Moderate), peak 73Seremban, Negeri Sembilan — weekly average API 61.2 (Moderate), peak 76Balok Baru Kuantan, Pahang — weekly average API 61.9 (Moderate), peak 89Seberang Perai, Penang — weekly average API 62.5 (Moderate), peak 69Tangkak, Johor — weekly average API 62.8 (Moderate), peak 75Tasek Ipoh, Perak — weekly average API 62.9 (Moderate), peak 70Shah Alam, Selangor — weekly average API 63.6 (Moderate), peak 77Banting, Selangor — weekly average API 63.6 (Moderate), peak 88Putrajaya, Putrajaya — weekly average API 64.1 (Moderate), peak 85Nilai, Negeri Sembilan — weekly average API 66.5 (Moderate), peak 88Cheras, Kuala Lumpur — weekly average API 69.2 (Moderate), peak 106Kluang, Johor — weekly average API 69.5 (Moderate), peak 88Klang, Selangor — weekly average API 71.1 (Moderate), peak 88Larkin, Johor — weekly average API 72.4 (Moderate), peak 82Pasir Gudang, Johor — weekly average API 72.8 (Moderate), peak 84JOHAN SETIA, Selangor — weekly average API 73 (Moderate), peak 92Batu Muda, Kuala Lumpur — weekly average API 77.9 (Moderate), peak 88Cheras · peak 106

Peninsular Malaysia · Semenanjung Malaysia

Sabah: weekly average API 51.5 (Moderate), peak 81 across 6 stationsSarawak: weekly average API 49.2 (Good), peak 86 across 13 stationsLabuan: weekly average API 46.4 (Good), peak 59 across 1 stationILP Miri, Sarawak — weekly average API 35.4 (Good), peak 53Limbang, Sarawak — weekly average API 36.4 (Good), peak 57Kota Kinabalu, Sabah — weekly average API 36.6 (Good), peak 55Miri, Sarawak — weekly average API 40.9 (Good), peak 61Kapit, Sarawak — weekly average API 44.6 (Good), peak 63Labuan, Labuan — weekly average API 46.4 (Good), peak 59Sibu, Sarawak — weekly average API 48.2 (Good), peak 67Bintulu, Sarawak — weekly average API 48.4 (Good), peak 74Sarikei, Sarawak — weekly average API 49.4 (Good), peak 68Politeknik Kota Kinabalu, Sabah — weekly average API 50 (Good), peak 58Kimanis, Sabah — weekly average API 51.8 (Moderate), peak 64Mukah, Sarawak — weekly average API 52.4 (Moderate), peak 66Sandakan, Sabah — weekly average API 53.2 (Moderate), peak 57IPD Serian, Sarawak — weekly average API 55.2 (Moderate), peak 76Samarahan, Sarawak — weekly average API 55.4 (Moderate), peak 73Sri Aman, Sarawak — weekly average API 55.9 (Moderate), peak 78Kuching, Sarawak — weekly average API 56.8 (Moderate), peak 73Keningau, Sabah — weekly average API 58.5 (Moderate), peak 81Tawau, Sabah — weekly average API 59 (Moderate), peak 62Samalaju, Sarawak — weekly average API 61.2 (Moderate), peak 86

Sabah, Sarawak & Labuan · Borneo Malaysia

020406080State 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 55.5Wed 01:00 MYT — API 55.1Wed 02:00 MYT — API 54.9Wed 03:00 MYT — API 54.7Wed 04:00 MYT — API 54.4Wed 05:00 MYT — API 54.3Wed 06:00 MYT — API 54.1Wed 07:00 MYT — API 54.2Wed 08:00 MYT — API 53.8Wed 09:00 MYT — API 53.7Wed 10:00 MYT — API 53.2Wed 11:00 MYT — API 52.9Wed 12:00 MYT — API 52.6Wed 13:00 MYT — API 52.5Wed 14:00 MYT — API 52.4Wed 15:00 MYT — API 52.3Wed 16:00 MYT — API 52.4Wed 17:00 MYT — API 52.2Wed 18:00 MYT — API 52.2Wed 19:00 MYT — API 52.3Wed 20:00 MYT — API 52.2Wed 21:00 MYT — API 52.3Wed 22:00 MYT — API 52.4Wed 23:00 MYT — API 52.5ThuThu 00:00 MYT — API 52.7Thu 01:00 MYT — API 52.8Thu 02:00 MYT — API 52.9Thu 03:00 MYT — API 53Thu 04:00 MYT — API 52.9Thu 05:00 MYT — API 52.8Thu 06:00 MYT — API 52.7Thu 07:00 MYT — API 52.3Thu 08:00 MYT — API 52Thu 09:00 MYT — API 51.8Thu 10:00 MYT — API 51.8Thu 11:00 MYT — API 52.1Thu 12:00 MYT — API 52.2Thu 13:00 MYT — API 52.1Thu 14:00 MYT — API 52Thu 15:00 MYT — API 52.1Thu 16:00 MYT — API 52.1Thu 17:00 MYT — API 52Thu 18:00 MYT — API 52Thu 19:00 MYT — API 51.9Thu 20:00 MYT — API 51.7Thu 21:00 MYT — API 51.7Thu 22:00 MYT — API 51.6Thu 23:00 MYT — API 51.3FriFri 00:00 MYT — API 51.1Fri 01:00 MYT — API 51Fri 02:00 MYT — API 50.6Fri 03:00 MYT — API 50.4Fri 04:00 MYT — API 50.2Fri 05:00 MYT — API 50Fri 06:00 MYT — API 50.1Fri 07:00 MYT — API 50Fri 08:00 MYT — API 49.8Fri 09:00 MYT — API 50.2Fri 10:00 MYT — API 49.5Fri 11:00 MYT — API 49.4Fri 12:00 MYT — API 49.3Fri 13:00 MYT — API 49.1Fri 14:00 MYT — API 49Fri 15:00 MYT — API 48.9Fri 16:00 MYT — API 49.2Fri 17:00 MYT — API 49.4Fri 18:00 MYT — API 50.2Fri 19:00 MYT — API 50.4Fri 20:00 MYT — API 50.6Fri 21:00 MYT — API 50.4Fri 22:00 MYT — API 50.4Fri 23:00 MYT — API 50.9SatSat 00:00 MYT — API 51.3Sat 01:00 MYT — API 51.4Sat 02:00 MYT — API 51.8Sat 03:00 MYT — API 51.9Sat 04:00 MYT — API 52Sat 05:00 MYT — API 52.1Sat 06:00 MYT — API 52.2Sat 07:00 MYT — API 52.3Sat 08:00 MYT — API 52.5Sat 09:00 MYT — API 52.5Sat 10:00 MYT — API 52.5Sat 11:00 MYT — API 52.2Sat 12:00 MYT — API 51.9Sat 13:00 MYT — API 52Sat 14:00 MYT — API 52Sat 15:00 MYT — API 52Sat 16:00 MYT — API 52.2Sat 17:00 MYT — API 52.2Sat 18:00 MYT — API 52.4Sat 19:00 MYT — API 52.8Sat 20:00 MYT — API 52.9Sat 21:00 MYT — API 52.9Sat 22:00 MYT — API 53.1Sat 23:00 MYT — API 53.1SunSun 00:00 MYT — API 53.2Sun 01:00 MYT — API 53.4Sun 02:00 MYT — API 53.7Sun 03:00 MYT — API 53.7Sun 04:00 MYT — API 54Sun 05:00 MYT — API 54.1Sun 06:00 MYT — API 54.2Sun 07:00 MYT — API 54.3Sun 08:00 MYT — API 54.3Sun 09:00 MYT — API 54.4Sun 10:00 MYT — API 54.7Sun 11:00 MYT — API 54.8Sun 12:00 MYT — API 55.2Sun 13:00 MYT — API 55.5Sun 14:00 MYT — API 55.7Sun 15:00 MYT — API 55.8Sun 16:00 MYT — API 55.9Sun 17:00 MYT — API 56.1Sun 18:00 MYT — API 56.1Sun 19:00 MYT — API 56.5Sun 20:00 MYT — API 56.5Sun 21:00 MYT — API 56.5Sun 22:00 MYT — API 56.8Sun 23:00 MYT — API 57MonMon 00:00 MYT — API 57.1Mon 01:00 MYT — API 57.2Mon 02:00 MYT — API 57.1Mon 03:00 MYT — API 57.1Mon 04:00 MYT — API 57.1Mon 05:00 MYT — API 56.9Mon 06:00 MYT — API 57Mon 07:00 MYT — API 56.9Mon 08:00 MYT — API 56.8Mon 09:00 MYT — API 56.8Mon 10:00 MYT — API 56.7Mon 11:00 MYT — API 56.6Mon 12:00 MYT — API 56.5Mon 13:00 MYT — API 56.3Mon 14:00 MYT — API 56.1Mon 15:00 MYT — API 56Mon 16:00 MYT — API 55.8Mon 17:00 MYT — API 55.3Mon 18:00 MYT — API 54.9Mon 19:00 MYT — API 54.5Mon 20:00 MYT — API 54.1Mon 21:00 MYT — API 53.9Mon 22:00 MYT — API 53.7Mon 23:00 MYT — API 53.5TueTue 00:00 MYT — API 53.2Tue 01:00 MYT — API 53.1Tue 02:00 MYT — API 52.9Tue 03:00 MYT — API 52.9Tue 04:00 MYT — API 52.7Tue 05:00 MYT — API 52.6Tue 06:00 MYT — API 52.3Tue 07:00 MYT — API 52Tue 08:00 MYT — API 51.9Tue 09:00 MYT — API 51.7Tue 10:00 MYT — API 51.5Tue 11:00 MYT — API 51.4Tue 12:00 MYT — API 51.1Tue 13:00 MYT — API 50.9Tue 14:00 MYT — API 50.8Tue 15:00 MYT — API 50.8Tue 16:00 MYT — API 51Tue 17:00 MYT — API 51.3Tue 18:00 MYT — API 51.5Tue 19:00 MYT — API 51.9Tue 20:00 MYT — API 52Tue 21:00 MYT — API 52Tue 22:00 MYT — API 52.1Tue 23:00 MYT — API 52.30003060912151821
020406080APIBrighter cells ran hazier than the rest of this week (48.9 – 57.2 API)

Haziest hour of the week: Mon at 01:00 MYT, averaging API 57.2 nationwide.

View the hourly figures as a table
National average API by hour, Malaysia Time
Day000102030405060708091011121314151617181920212223
Wed55.555.154.954.754.454.354.154.253.853.753.252.952.652.552.452.352.452.252.252.352.252.352.452.5
Thu52.752.852.95352.952.852.752.35251.851.852.152.252.15252.152.1525251.951.751.751.651.3
Fri51.15150.650.450.25050.15049.850.249.549.449.349.14948.949.249.450.250.450.650.450.450.9
Sat51.351.451.851.95252.152.252.352.552.552.552.251.952525252.252.252.452.852.952.953.153.1
Sun53.253.453.753.75454.154.254.354.354.454.754.855.255.555.755.855.956.156.156.556.556.556.857
Mon57.157.257.157.157.156.95756.956.856.856.756.656.556.356.15655.855.354.954.554.153.953.753.5
Tue53.253.152.952.952.752.652.35251.951.751.551.451.150.950.850.85151.351.551.9525252.152.3

How the readings split

Pecahan bacaan mengikut kategori IPU

Good: 34% (3,922 readings)Moderate: 66% (7,500 readings)66%Moderate
  • GoodBaik34%3,922
  • ModerateSederhana66%7,500
  • UnhealthyTidak Sihat0%2
  • Very UnhealthySangat Tidak Sihat0%0
  • HazardousBerbahaya0%0

Based on 11,424 hourly station readings.

What it meant for your week

Panduan kesihatan mengikut kategori kualiti udara

Air quality is acceptable. People with asthma, heart or lung conditions should reduce prolonged or heavy outdoor exertion.

Kualiti udara sederhana. Pesakit asma, jantung atau paru-paru dinasihatkan mengurangkan aktiviti berat di luar bangunan.

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. Kuala Lumpur73.6Moderate · 2 stations
  2. Johor64.4Moderate · 8 stations
  3. Putrajaya64.1Moderate · 1 station
  4. Selangor63.1Moderate · 6 stations
  5. Negeri Sembilan61Moderate · 3 stations
  6. Melaka59.9Moderate · 3 stations
  7. Perak52.2Moderate · 5 stations
  8. Sabah51.5Moderate · 6 stations
  9. Sarawak49.2Good · 13 stations
  10. Pahang48.3Good · 5 stations
  11. Kelantan47.5Good · 2 stations
  12. Labuan46.4Good · 1 station
  13. Penang45.6Good · 4 stations
  14. Terengganu45Good · 4 stations
  15. Kedah36Good · 4 stations
  16. Perlis35.2Good · 1 station

Cleanest air of the week

Lima stesen dengan purata IPU terendah

Scale 0 – 125
  1. Langkawi27.1avg
    Kedah
    13Good50
  2. Pulau Pinang
    11Good60
  3. Pahang
    17Good60
  4. Alor Setar34.7avg
    Kedah
    22Good49
  5. Kangar35.2avg
    Perlis
    22Good45

Highest readings of the week

Lima stesen dengan bacaan IPU tertinggi

Scale 0 – 125
  1. Cheras106peak
    WP Kuala Lumpur
    55Moderate106
  2. Johor
    43Moderate93
  3. Selangor
    55Moderate92
  4. Pahang
    56Moderate89
  5. Batu Muda88peak
    WP Kuala Lumpur
    65Moderate88

Major cities

Purata dan puncak mingguan bagi bandar utama Malaysia

  • Johor BahruJohor72.4Moderate · SederhanaPeak 82Larkin
  • Kuala LumpurKuala Lumpur69.2Moderate · SederhanaPeak 106Cheras
  • KuchingSarawak56.8Moderate · SederhanaPeak 73Kuching
  • Alor SetarKedah34.7Good · BaikPeak 49Alor Setar
  • Kota BharuKelantan50Good · BaikPeak 63Kota Bharu
  • MelakaMelaka60.6Moderate · SederhanaPeak 70Bandaraya Melaka
  • SerembanNegeri Sembilan61.2Moderate · SederhanaPeak 76Seremban
  • KuantanPahang51.1Moderate · SederhanaPeak 64Indera Mahkota Kuantan
  • George TownPulau Pinang42Good · BaikPeak 57Minden
  • IpohPerak62.9Moderate · SederhanaPeak 70Tasek Ipoh
  • KangarPerlis35.2Good · BaikPeak 45Kangar
  • Kota KinabaluSabah36.6Good · BaikPeak 55Kota Kinabalu
  • Shah AlamSelangor63.6Moderate · SederhanaPeak 77Shah Alam
  • Kuala TerengganuTerengganu51.9Moderate · SederhanaPeak 63Kuala 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 28 Oct – 3 Nov 2026, the latest Wednesday-to-Tuesday reporting week in Malaysia Time. The national weekly average of 53 API falls in the Moderate 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 106 API at Cheras in Kuala Lumpur. 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 28 Oct – 3 Nov 2026, Malaysia averaged an Air Pollutant Index of 53, which sits in the Moderate band (Sederhana). 100% of all hourly readings stayed within Good or Moderate.

Where was the cleanest air recorded?

Langkawi in Kedah held the lowest weekly average at API 27.1 (Good).

Which area had the worst haze?

The single highest reading of the week was API 106 (Unhealthy) at Cheras, Kuala Lumpur, recorded at 20:00 MYT, 30 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.