This is more about sensor modules, but I might add tips for devices later (e.g. aranet4).

my recommendations

  • Sensirion SCD40/41 (NDIR) are great sensors with reasonable logic around automatic calibration.
    • Sensirion SEN66 is an all in one package with multiple sensors that includes an SCD41, it may be easier to build into your projects due to the nicer form factor.
  • SenseAir Sunlight CO2 (NDIR) is what aranet4 uses and is pretty good.
    • SenseAir S12 (NDIR) is probably good but I didn’t test it.
  • If on a budget and are okay with exposing the sensor to fresh air regularly for extended periods (e.g. portable device), consider Sensirion STCC4, but see my notes on SEN63C/STCC4/IKEA Alpstuga (Thermal Conductivity).
    • Same note as SCD41’s SEN-equivalent applies, except with SEN63C and SEN69C.
    • If you’re a total weirdo on a budget you might want to mod/harvest an IKEA ALPSTUGA instead.

my thoughts on other sensors

SGP30 (MOX)

(also applies to other metal oxide sensors, such as CCS881)

From my fedi post dated Jan 2024, toned down:

Quote

The SGP30 is a MOX sensor, which has a little metal plate in it that changes conductivity based on oxygen molecule absorption, and is relatively inaccurate for anything that it wasn’t designed for.

The other datapoint is my SCD41, which uses NDIR technology. It utilizes CO2’s IR absorption rate to calculate CO2 levels and is fairly accurate.

The fact that it’s aligned not on CO2 but some other metric is very clear when you consider that it thinks that it’s 400ppm (near impossible) even after being calibrated for 12 hours while being exposed sufficiently to outdoor air.

You can also just look at the TVOC data that this thing outputs and put two and two together:

And besides, even sensirion, the manufacturer of both sensors I’ve mentioned states that MOX sensors aren’t very accurate even for TVOC: https://sensirion.com/media/documents/D27F03C0/6294E00F/Info_Note_Output_MOX_Sensor.pdf Yet they claim on the datasheet that CO2eq data is “accurate to 1-31ppm”, which is very clearly wrong if their comparison point is actual CO2.

If you care about measuring actual CO2, these sensors are potentially misleading in a risky manner if you’re basing your decision to wear a mask or not on the data they output. If you’re on a budget, I’d suggest to trust your perceived air quality over these sensors.

The datagnome.de team switched to SCD41 from SGP30 sensors thanks to a generous donation at 37c3, and you can see the exact same pattern of wild, short peaks alongside long time periods of 400ppm there too: (first image: SGP30-by-the-end gnomes, second image: SCD41-by-the-end gnomes, you can see at least in the second image the data quality change as one of the gnomes gets the sensor swapped mid-event) Anyhow, this also goes for other popular cheap eCO2 sensors such as CCS881, which also use MOX technology. They’ll be similarly inaccurate. I wouldn’t recommend to rely on them for measuring actual CO2.

MH-Z19 (NDIR) and other cheap NDIR sensors

From the last post on my fedi post dated Jan 2024:

Quote

Not all NDIR-based sensors are good as the automatic calibration algorithm is a key part of them functioning ideally. Unless you’re airing the room down to 400ppm regularly, something like MH-Z19 will randomly jump down to 400ppm if you leave automatic baseline calibration on (picrel), and calibration will drift if you don’t. And they suck for manually calibrating. (not my image, but I had a similar experience, I just no longer have the data)


See also this post (archived here) about a relatively cheap NDIR-based CO2 monitor, which appeared to lack any self calibration whatsoever. It had a cool tube tho.

SEN63C/STCC4/IKEA Alpstuga (Thermal Conductivity)

From my fedi post dated March 2026, with better graphs and tweaked numbers:

Quote

Here’s some preliminary notes. IKEA ALPSTUGA is using Sensirion SEN63C which internally appears to use STCC4 (based on the specifications values on their datasheets, ty evey for the research), which is a thermal conductivity based CO2 sensor.

It doesn’t purport to be as accurate as NDIR sensors, but still has pretty reasonable values (±100ppm±10%). It is much more promising than anything that gives an “eCO2/CO2eq” value, and it is much cheaper than good NDIR sensors.

I generally like sensirion’s NDIR sensors as they have very reasonable self calibration, they won’t just randomly drift by significant amounts if you don’t open the window regularly to the point of getting your room down to near-outdoor co2.

Over a test of 12 days comparing against an SCD41 CO2 sensor, physically side by side, it sadly started to drift significantly (300ppm) after about a week, but went back to being almost exactly NDIR level after opening the window for a few hours.

Unfortunately, that appears to be a downgrade in terms of self-calibration behavior. Note how neither were exposed to ~4x0ppm for over a week, but only one drifted. I have previously confirmed that SCD41 behaves similarly to aranet4 (which has a senseair NDIR sensor) on this, so I am presuming that it is the STCC4 that drifted. I’ll test with an aranet4 next to them too, just to make very sure.

Overall if you do reliable Lüften then ALPSTUGA may be for you. For a portable CO2 meter, if you go outside more than once a week, the SEN63C/STCC4 would probably be a good sensor. Unsure if I can recommend it for event-only use (think something used for fosdem that gets packed right after event and opened right before event starts) or for very reliable data for home use in winter. Probably good for offices as leaky windows will likely get it down to 400ppm every night, or at least every weekend.

FYI on IKEA ALPSTUGA

SEN63C supports PM1/2.5/4/10 but ALPSTUGA only exposes 2.5, even over matter :(

I don’t care much for particulate counts but it feels they could add that with only a firmware update as a nice value-add.

Here’s some other newer graphs, comparing over 2 weeks: