Malaysia air quality.
The week in review.

7 days · Malaysia Time

Laporan mingguan Indeks Pencemaran Udara (IPU) dan jerebu Malaysia

During the week of 9 – 15 Sep 2026, Malaysia recorded an overall average Air Pollutant Index (API) of 92.7 (Moderate), with 73% of readings remaining within the Good to Moderate range. The highest reading of the week was recorded at IPD Serian, Sarawak with an API of 260 (Very Unhealthy). The cleanest air in Malaysia was observed at Langkawi, Kedah with an average API of 32.6 (Good).

National weekly average

92.7API

Moderate · Sederhana

Daily averages73.9119.9 APIWedTue
Explore the week
Week's highest reading
260IPD Serian, Sarawak08:00 MYT, 12 Sept 2026
Cleanest average
32.6Langkawi, KedahGood weekly average
Good to Moderate air
73%of all hourly readings11,418 readings in total
Stations reporting
68of 68 DOE stations16 states and territories

Where the haze sat

Taburan kualiti udara mengikut negeri dan stesen

Peak: IPD Serian · 260

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 106.7 (Unhealthy), peak 174 across 8 stationsKedah: weekly average API 50.8 (Moderate), peak 156 across 4 stationsKelantan: weekly average API 55.9 (Moderate), peak 99 across 2 stationsMelaka: weekly average API 98.3 (Moderate), peak 166 across 3 stationsNegeri Sembilan: weekly average API 104.3 (Unhealthy), peak 178 across 3 stationsPahang: weekly average API 91.2 (Moderate), peak 170 across 5 stationsPerak: weekly average API 87.3 (Moderate), peak 168 across 5 stationsPerlis: weekly average API 34.6 (Good), peak 83 across 1 stationPenang: weekly average API 61.9 (Moderate), peak 159 across 4 stationsSelangor: weekly average API 103.6 (Unhealthy), peak 190 across 6 stationsTerengganu: weekly average API 79.6 (Moderate), peak 162 across 4 stationsKuala Lumpur: weekly average API 118.9 (Unhealthy), peak 180 across 2 stationsPutrajaya: weekly average API 109.6 (Unhealthy), peak 175 across 1 stationLangkawi, Kedah — weekly average API 32.6 (Good), peak 96Kangar, Perlis — weekly average API 34.6 (Good), peak 83Alor Setar, Kedah — weekly average API 44.5 (Good), peak 91Balik Pulau, Penang — weekly average API 53 (Moderate), peak 159Kota Bharu, Kelantan — weekly average API 55.4 (Moderate), peak 85Besut, Terengganu — weekly average API 55.7 (Moderate), peak 91Kulim Hi-Tech, Kedah — weekly average API 56 (Moderate), peak 152Tanah Merah, Kelantan — weekly average API 56.4 (Moderate), peak 99Minden, Penang — weekly average API 63.4 (Moderate), peak 159Seberang Perai, Penang — weekly average API 64 (Moderate), peak 155Taiping, Perak — weekly average API 66.1 (Moderate), peak 152Seberang Jaya, Penang — weekly average API 67.3 (Moderate), peak 158Sungai Petani, Kedah — weekly average API 70 (Moderate), peak 156Pegoh Ipoh, Perak — weekly average API 78.6 (Moderate), peak 152Bandaraya Melaka, Melaka — weekly average API 78.6 (Moderate), peak 112Kuala Terengganu, Terengganu — weekly average API 82.8 (Moderate), peak 162Port Dickson, Negeri Sembilan — weekly average API 85.4 (Moderate), peak 161Temerloh, Pahang — weekly average API 86.6 (Moderate), peak 167Rompin, Pahang — weekly average API 86.8 (Moderate), peak 155Paka, Terengganu — weekly average API 88.6 (Moderate), peak 159Kemaman, Terengganu — weekly average API 91.4 (Moderate), peak 161Kuala Selangor, Selangor — weekly average API 91.5 (Moderate), peak 167Jerantut, Pahang — weekly average API 93.3 (Moderate), peak 170Balok Baru Kuantan, Pahang — weekly average API 94.5 (Moderate), peak 163Indera Mahkota Kuantan, Pahang — weekly average API 94.7 (Moderate), peak 167Tanjung Malim, Perak — weekly average API 95 (Moderate), peak 168Klang, Selangor — weekly average API 95.6 (Moderate), peak 169Seri Manjung, Perak — weekly average API 97.6 (Moderate), peak 165Petaling Jaya, Selangor — weekly average API 97.7 (Moderate), peak 168Segamat, Johor — weekly average API 98.4 (Moderate), peak 159Pengerang, Johor — weekly average API 99 (Moderate), peak 166Tasek Ipoh, Perak — weekly average API 99.1 (Moderate), peak 160Banting, Selangor — weekly average API 101.4 (Unhealthy), peak 165Kota Tinggi, Johor — weekly average API 102 (Unhealthy), peak 165Kluang, Johor — weekly average API 105.4 (Unhealthy), peak 156Shah Alam, Selangor — weekly average API 106.8 (Unhealthy), peak 175Alor Gajah, Melaka — weekly average API 107.5 (Unhealthy), peak 164Batu Pahat, Johor — weekly average API 108.6 (Unhealthy), peak 163Bukit Rambai, Melaka — weekly average API 108.9 (Unhealthy), peak 166Tangkak, Johor — weekly average API 109.3 (Unhealthy), peak 172Putrajaya, Putrajaya — weekly average API 109.6 (Unhealthy), peak 175Seremban, Negeri Sembilan — weekly average API 112.8 (Unhealthy), peak 174Nilai, Negeri Sembilan — weekly average API 114.7 (Unhealthy), peak 178Larkin, Johor — weekly average API 115 (Unhealthy), peak 169Pasir Gudang, Johor — weekly average API 115.9 (Unhealthy), peak 174Batu Muda, Kuala Lumpur — weekly average API 118.9 (Unhealthy), peak 173Cheras, Kuala Lumpur — weekly average API 118.9 (Unhealthy), peak 180JOHAN SETIA, Selangor — weekly average API 128.5 (Unhealthy), peak 190

Peninsular Malaysia · Semenanjung Malaysia

Sabah: weekly average API 69.3 (Moderate), peak 151 across 6 stationsSarawak: weekly average API 121.2 (Unhealthy), peak 260 across 13 stationsLabuan: weekly average API 75.3 (Moderate), peak 122 across 1 stationKeningau, Sabah — weekly average API 57 (Moderate), peak 67Sandakan, Sabah — weekly average API 60.6 (Moderate), peak 66Limbang, Sarawak — weekly average API 67.3 (Moderate), peak 94Tawau, Sabah — weekly average API 67.6 (Moderate), peak 83Kota Kinabalu, Sabah — weekly average API 74.1 (Moderate), peak 109Kimanis, Sabah — weekly average API 74.9 (Moderate), peak 106Labuan, Labuan — weekly average API 75.3 (Moderate), peak 122Kapit, Sarawak — weekly average API 76.4 (Moderate), peak 96Politeknik Kota Kinabalu, Sabah — weekly average API 82 (Moderate), peak 151Miri, Sarawak — weekly average API 87.3 (Moderate), peak 160ILP Miri, Sarawak — weekly average API 89.8 (Moderate), peak 177Bintulu, Sarawak — weekly average API 106.1 (Unhealthy), peak 164Mukah, Sarawak — weekly average API 107.2 (Unhealthy), peak 171Sibu, Sarawak — weekly average API 114.4 (Unhealthy), peak 157Samalaju, Sarawak — weekly average API 115.3 (Unhealthy), peak 176Sarikei, Sarawak — weekly average API 124.3 (Unhealthy), peak 195Sri Aman, Sarawak — weekly average API 159.9 (Unhealthy), peak 200Kuching, Sarawak — weekly average API 164.5 (Unhealthy), peak 204Samarahan, Sarawak — weekly average API 165.8 (Unhealthy), peak 199IPD Serian, Sarawak — weekly average API 197.7 (Unhealthy), peak 260IPD Serian · peak 260

Sabah, Sarawak & Labuan · Borneo Malaysia

0255075100125State 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 115.8Wed 01:00 MYT — API 115.9Wed 02:00 MYT — API 115.9Wed 03:00 MYT — API 116Wed 04:00 MYT — API 116.1Wed 05:00 MYT — API 116.3Wed 06:00 MYT — API 116.5Wed 07:00 MYT — API 116.6Wed 08:00 MYT — API 116.2Wed 09:00 MYT — API 116.2Wed 10:00 MYT — API 115.2Wed 11:00 MYT — API 114.4Wed 12:00 MYT — API 113.5Wed 13:00 MYT — API 112.6Wed 14:00 MYT — API 112.3Wed 15:00 MYT — API 111.7Wed 16:00 MYT — API 111.5Wed 17:00 MYT — API 111.1Wed 18:00 MYT — API 110.5Wed 19:00 MYT — API 109.8Wed 20:00 MYT — API 109.3Wed 21:00 MYT — API 108.9Wed 22:00 MYT — API 108.1Wed 23:00 MYT — API 107.3ThuThu 00:00 MYT — API 106.1Thu 01:00 MYT — API 104.4Thu 02:00 MYT — API 102.2Thu 03:00 MYT — API 100.8Thu 04:00 MYT — API 99.3Thu 05:00 MYT — API 97.4Thu 06:00 MYT — API 95Thu 07:00 MYT — API 92.5Thu 08:00 MYT — API 91Thu 09:00 MYT — API 89.4Thu 10:00 MYT — API 88.4Thu 11:00 MYT — API 87.8Thu 12:00 MYT — API 87.5Thu 13:00 MYT — API 87.2Thu 14:00 MYT — API 87Thu 15:00 MYT — API 86.8Thu 16:00 MYT — API 86.9Thu 17:00 MYT — API 86.6Thu 18:00 MYT — API 86.6Thu 19:00 MYT — API 86.3Thu 20:00 MYT — API 85.9Thu 21:00 MYT — API 85.9Thu 22:00 MYT — API 85.7Thu 23:00 MYT — API 85.6FriFri 00:00 MYT — API 85.6Fri 01:00 MYT — API 85.9Fri 02:00 MYT — API 86Fri 03:00 MYT — API 86.4Fri 04:00 MYT — API 87.3Fri 05:00 MYT — API 87.9Fri 06:00 MYT — API 88.4Fri 07:00 MYT — API 88.7Fri 08:00 MYT — API 88.2Fri 09:00 MYT — API 87.7Fri 10:00 MYT — API 88Fri 11:00 MYT — API 88.3Fri 12:00 MYT — API 88Fri 13:00 MYT — API 87.9Fri 14:00 MYT — API 87.6Fri 15:00 MYT — API 86.9Fri 16:00 MYT — API 86.1Fri 17:00 MYT — API 85.1Fri 18:00 MYT — API 84.1Fri 19:00 MYT — API 83.3Fri 20:00 MYT — API 82Fri 21:00 MYT — API 81.2Fri 22:00 MYT — API 80.4Fri 23:00 MYT — API 79.6SatSat 00:00 MYT — API 78.8Sat 01:00 MYT — API 78.2Sat 02:00 MYT — API 77.7Sat 03:00 MYT — API 77.2Sat 04:00 MYT — API 76.7Sat 05:00 MYT — API 76.3Sat 06:00 MYT — API 75.9Sat 07:00 MYT — API 75.6Sat 08:00 MYT — API 75.4Sat 09:00 MYT — API 75.2Sat 10:00 MYT — API 74.6Sat 11:00 MYT — API 73.9Sat 12:00 MYT — API 73.1Sat 13:00 MYT — API 72.5Sat 14:00 MYT — API 71.8Sat 15:00 MYT — API 71.1Sat 16:00 MYT — API 71Sat 17:00 MYT — API 71Sat 18:00 MYT — API 71.1Sat 19:00 MYT — API 71.1Sat 20:00 MYT — API 71.3Sat 21:00 MYT — API 71.3Sat 22:00 MYT — API 71.5Sat 23:00 MYT — API 71.8SunSun 00:00 MYT — API 71.9Sun 01:00 MYT — API 72Sun 02:00 MYT — API 72.1Sun 03:00 MYT — API 72.2Sun 04:00 MYT — API 72.3Sun 05:00 MYT — API 72.3Sun 06:00 MYT — API 72.4Sun 07:00 MYT — API 72.4Sun 08:00 MYT — API 72.7Sun 09:00 MYT — API 73.1Sun 10:00 MYT — API 73.2Sun 11:00 MYT — API 73.5Sun 12:00 MYT — API 73.9Sun 13:00 MYT — API 74.2Sun 14:00 MYT — API 74.4Sun 15:00 MYT — API 74.6Sun 16:00 MYT — API 75Sun 17:00 MYT — API 75.3Sun 18:00 MYT — API 75.8Sun 19:00 MYT — API 76.2Sun 20:00 MYT — API 76.7Sun 21:00 MYT — API 76.8Sun 22:00 MYT — API 77.1Sun 23:00 MYT — API 77.7MonMon 00:00 MYT — API 78.5Mon 01:00 MYT — API 79.4Mon 02:00 MYT — API 80Mon 03:00 MYT — API 80.4Mon 04:00 MYT — API 81.1Mon 05:00 MYT — API 81.8Mon 06:00 MYT — API 82.5Mon 07:00 MYT — API 83.1Mon 08:00 MYT — API 83.8Mon 09:00 MYT — API 84.4Mon 10:00 MYT — API 85.8Mon 11:00 MYT — API 87.4Mon 12:00 MYT — API 88.8Mon 13:00 MYT — API 90.6Mon 14:00 MYT — API 92.4Mon 15:00 MYT — API 94.5Mon 16:00 MYT — API 97Mon 17:00 MYT — API 99.1Mon 18:00 MYT — API 101.2Mon 19:00 MYT — API 102.8Mon 20:00 MYT — API 104.3Mon 21:00 MYT — API 106.6Mon 22:00 MYT — API 108.5Mon 23:00 MYT — API 110TueTue 00:00 MYT — API 111Tue 01:00 MYT — API 111.9Tue 02:00 MYT — API 112.7Tue 03:00 MYT — API 113.8Tue 04:00 MYT — API 114.6Tue 05:00 MYT — API 115.6Tue 06:00 MYT — API 116.3Tue 07:00 MYT — API 117.1Tue 08:00 MYT — API 118Tue 09:00 MYT — API 119.2Tue 10:00 MYT — API 120.2Tue 11:00 MYT — API 120.9Tue 12:00 MYT — API 121.6Tue 13:00 MYT — API 121.9Tue 14:00 MYT — API 122.3Tue 15:00 MYT — API 122.5Tue 16:00 MYT — API 122.9Tue 17:00 MYT — API 123.8Tue 18:00 MYT — API 124.5Tue 19:00 MYT — API 124.8Tue 20:00 MYT — API 125.2Tue 21:00 MYT — API 125.5Tue 22:00 MYT — API 125.4Tue 23:00 MYT — API 125.10003060912151821
050100150APIBrighter cells ran hazier than the rest of this week (71125.5 API)

Haziest hour of the week: Tue at 21:00 MYT, averaging API 125.5 nationwide.

View the hourly figures as a table
National average API by hour, Malaysia Time
Day000102030405060708091011121314151617181920212223
Wed115.8115.9115.9116116.1116.3116.5116.6116.2116.2115.2114.4113.5112.6112.3111.7111.5111.1110.5109.8109.3108.9108.1107.3
Thu106.1104.4102.2100.899.397.49592.59189.488.487.887.587.28786.886.986.686.686.385.985.985.785.6
Fri85.685.98686.487.387.988.488.788.287.78888.38887.987.686.986.185.184.183.38281.280.479.6
Sat78.878.277.777.276.776.375.975.675.475.274.673.973.172.571.871.1717171.171.171.371.371.571.8
Sun71.97272.172.272.372.372.472.472.773.173.273.573.974.274.474.67575.375.876.276.776.877.177.7
Mon78.579.48080.481.181.882.583.183.884.485.887.488.890.692.494.59799.1101.2102.8104.3106.6108.5110
Tue111111.9112.7113.8114.6115.6116.3117.1118119.2120.2120.9121.6121.9122.3122.5122.9123.8124.5124.8125.2125.5125.4125.1

How the readings split

Pecahan bacaan mengikut kategori IPU

Good: 8% (949 readings)Moderate: 65% (7,444 readings)Unhealthy: 26% (2,962 readings)Very Unhealthy: 1% (63 readings)65%Moderate
  • GoodBaik8%949
  • ModerateSederhana65%7,444
  • UnhealthyTidak Sihat26%2,962
  • Very UnhealthySangat Tidak Sihat1%63
  • HazardousBerbahaya0%0

Based on 11,418 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. Sarawak121.2Unhealthy · 13 stations
  2. Kuala Lumpur118.9Unhealthy · 2 stations
  3. Putrajaya109.6Unhealthy · 1 station
  4. Johor106.7Unhealthy · 8 stations
  5. Negeri Sembilan104.3Unhealthy · 3 stations
  6. Selangor103.6Unhealthy · 6 stations
  7. Melaka98.3Moderate · 3 stations
  8. Pahang91.2Moderate · 5 stations
  9. Perak87.3Moderate · 5 stations
  10. Terengganu79.6Moderate · 4 stations
  11. Labuan75.3Moderate · 1 station
  12. Sabah69.3Moderate · 6 stations
  13. Penang61.9Moderate · 4 stations
  14. Kelantan55.9Moderate · 2 stations
  15. Kedah50.8Moderate · 4 stations
  16. Perlis34.6Good · 1 station

Cleanest air of the week

Lima stesen dengan purata IPU terendah

Scale 0 – 300
  1. Langkawi32.6avg
    Kedah
    13Good96
  2. Kangar34.6avg
    Perlis
    15Good83
  3. Alor Setar44.5avg
    Kedah
    23Good91
  4. Pulau Pinang
    15Moderate159
  5. Kota Bharu55.4avg
    Kelantan
    26Moderate85

Highest readings of the week

Lima stesen dengan bacaan IPU tertinggi

Scale 0 – 300
  1. IPD Serian260peak
    Sarawak
    152Unhealthy260
  2. Kuching204peak
    Sarawak
    76Unhealthy204
  3. Sri Aman200peak
    Sarawak
    65Unhealthy200
  4. Samarahan199peak
    Sarawak
    80Unhealthy199
  5. Sarikei195peak
    Sarawak
    52Unhealthy195

Major cities

Purata dan puncak mingguan bagi bandar utama Malaysia

  • Johor BahruJohor108.6Unhealthy · Tidak SihatPeak 163Batu Pahat
  • Kuala LumpurKuala Lumpur34.6Good · BaikPeak 83Kangar
  • KuchingSarawak106.1Unhealthy · Tidak SihatPeak 164Bintulu
  • Alor SetarKedah44.5Good · BaikPeak 91Alor Setar
  • Kota BharuKelantan55.4Moderate · SederhanaPeak 85Kota Bharu
  • MelakaMelaka107.5Unhealthy · Tidak SihatPeak 164Alor Gajah
  • SerembanNegeri Sembilan114.7Unhealthy · Tidak SihatPeak 178Nilai
  • KuantanPahang94.5Moderate · SederhanaPeak 163Balok Baru Kuantan
  • George TownPulau Pinang53Moderate · SederhanaPeak 159Balik Pulau
  • IpohPerak78.6Moderate · SederhanaPeak 152Pegoh Ipoh
  • KangarPerlis34.6Good · BaikPeak 83Kangar
  • Kota KinabaluSabah57Moderate · SederhanaPeak 67Keningau
  • Shah AlamSelangor101.4Unhealthy · Tidak SihatPeak 165Banting
  • Kuala TerengganuTerengganu55.7Moderate · SederhanaPeak 91Besut

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 9 – 15 Sep 2026, the latest Wednesday-to-Tuesday reporting week in Malaysia Time. The national weekly average of 92.7 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 260 API at IPD Serian in Sarawak. 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,418 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 9 – 15 Sep 2026, Malaysia averaged an Air Pollutant Index of 92.7, which sits in the Moderate band (Sederhana). 73% 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 32.6 (Good).

Which area had the worst haze?

The single highest reading of the week was API 260 (Very Unhealthy) at IPD Serian, Sarawak, recorded at 08:00 MYT, 12 Sept 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.