Pm2.5 values do not make sense

Hi There I am downloading pm2.5 values and they seem way off from expected. The do not come close to what I would expect even when taking the EPA corrective values from your Real-Time Air Quality Map | PurpleAir

The values there are much bigger than what I get from using the API. Usually I might see and 8 or 9 compared to a value in the 40’s in the same area on the map shown in the link. Using the EPA equation the 8 or 9 might go down to a 4 or 5. So I trying to figure out which PM2.5 parameter should be used to get a bigger value to start with. Any ideas why the values are too small?


Do you have an example of a sensor and a date that you could share?

Thanks for the offer to help. Attached is a snapshot at 9:30AM PST. The pm2.5 values are shown in (). The area is north of Seattle in Anacortes in USA. Looking at the values shown by the Washington State sensor it is 22 AQI. That sensor is EPA compliant. I hope that helps.

What is your screenshot from? Are those API values? Or is that a Washington State website? Which site exactly are you comparing?

They are the values from the API call from PurpleAir. The other value higher value I wrote is from EPA.


Sorry for all of the questions. Where exactly did you get the EPA value from?

From a map from AirNow. AirNow Interactive Map

Ok, that’s what I suspected. That EPA map is not showing you hourly values. Its showing you the NowCast AQI, which is an algorithm that attempts to classify a single hourly value into a NAAQS average.

So for example, if you’ve been having Moderate AQI all day and then it drops to Good for an hour, the Nowcast is going to predict the 24-hr PM2.5 AQI is still going to be Moderate, so it will inflate that number higher than it was to reflect the moderate conditions so far. You cannot compare a single hour’s actual PM2.5 value to the Nowcast value.

You can play around with the NowCast calculator to see how well it matches with your API values:

The same issue is shown here on the AQI map from Washington state itself. They in turn send their values they collect. Right now it shows 32 aqi and PurpleAir shows 4,17,13. Here is the map.

Still a big difference and WA state is using their own monitoring system.

Thanks again.

Washington state sends their AQI readings (Environmental group) to the EPA is what I was going to say.

What exact API endpoint are you displaying on your map that is showing lower values?

Right now, PA’s map shows a 36 AQI hourly average with EPA correction factor applied.

Washington state’s regulatory monitor is reporting a 41 AQI.

EPA’s Airnow site is showing a 32 AQI for the Nowcast estimate.

Those are all pretty close. Are you sure your API values are AQI and not pm2.5 concentrations?

I am using the PurpleAir API endpoint and the parameter I used in the API call is named pm2.5.

I hope that helps.
Many Thanks.

If there is one parameter in the API for AQI I would like to use it. But I asked today about what are the exact parameters to use for the EPA formula someone else suggested. The end result I wanted is a AQI value that conforms/compliant with the EPA categories.

You probably want to use the pm2.5_cf_1 endpoint for a 60 min average. If you want to apply the EPA correction factor you’ll have to also download the temperature and humidity parameters. Then you’ll have to use the EPA formula to correct it.

At this point all your pm data is still in concentrations of pm and not AQI. So you’ll have to convert it to AQI. To do that, refer here How to Calculate the US EPA PM2.5 AQI.

To my knowledge there is not an hourly AQI endpoint which I believe is what you’re after.

Thanks Kyle you have been extremely helpful. I was just trying to find the calculation for converting pm2.5 to AQI. I arrived at the conclusion the EPA calculation is in concentrations and there probably is no AQI endpoint like you said. In my API call I had already added the humidity and temperature fields. Hopefully now I have what I need and will confirm that. Your answer should also help others also.

1 Like

Thanks!! Everything is working as expected. I could not have done it without everyone’s help.