Open data for research

Real compost piles, measured every hour.

Anonymised readings from working compost bins: temperature, moisture, oxygen, CO₂ and ammonia, each labelled with its composting phase. Free to use. No account or key needed.

Terminal200 OK
$ curl "https://api.compostiq.win/research/readings?method=takakura&limit=1"

{
  "items": [{
    "bin_ref": "b_1d0ca7",
    "country": "ID",
    "method": "takakura",
    "recorded_at": "2026-08-26T00:00:00Z",
    "temperature_c": 61.58,
    "moisture_pct": 52.46,
    "oxygen_pct": 3.26,
    "co2_pct": 8.61,
    "nh3_relative": 0.889,
    "stage_name": "Peak Decomposition"
  }],
  "next_cursor": "eyJ0IjoiMjAyNi0wOC0yNlQwMTowMFoifQ"
}
–
Bins
–
Countries
–
Methods
–
Readings
–
Period covered

Figures come from the CompostIQ API.

Bulk files (simulated preview data for now): CSV, 57.1 KB · JSON, 157.5 KB · Changelog

What's in a reading

One row per bin, per hour.

Readings from a bin's sensors are averaged into hourly rows. The API and the bulk files return the same fields.

FieldType · unitWhat it means
bin_refstringA random reference for one bin. Stable across the dataset, never linked to an account.
countryISO 3166-1 alpha-2Where the bin is, at country level only. For example ID.
methodenumtakakura, bokashi or aerated_static_pile.
recorded_atISO 8601 · UTCStart of the hour the row covers.
temperature_cnumber · °CCore temperature of the pile.
moisture_pctnumber · %Moisture content. null when the probe dropped out.
oxygen_pctnumber · %Oxygen in the pile, 0 to 21.
co2_pctnumber · %Carbon dioxide in the pile.
nh3_relativenumber · 0–1Relative ammonia intensity. Not a ppm value.
mq135_composite_ppmnumber · ppmRaw MQ-135 gas sensor response. A composite signal, not clean CO₂.
stage_id, stage_name0–4 · stringThe composting phase the rule engine assigned to this hour.
faultsarray of codesConditions flagged in this hour, for example ANAEROBIC_RISK or MOISTURE_LOW. In the CSV they are joined with ;.
How we anonymise

Everything about the pile. Nothing about the person.

Removed
  • Names and email addresses
  • Bin names
  • Addresses and coordinates
  • Device MAC addresses and hardware IDs
  • Account, bin and device database IDs
Coarsened
  • Location becomes a country code
  • Time becomes hourly averages, in UTC
  • Several sensors in one bin become one row
Replaced
  • Each bin gets a random bin_ref
  • The reference can't be turned back into an account or address
  • Deleted accounts disappear from the next snapshot
Know your sensors

Read this before you publish.

MQ-135 is not a CO₂ meter

It reacts to ammonia, CO₂ and other gases at once, and drifts from unit to unit. Treat mq135_composite_ppm as a composite signal.

Ammonia is relative

nh3_relative runs from 0 to 1. It shows when ammonia rises and falls, not how much is present.

A tropical baseline

The pilot site sits at 24–32 °C ambient, so piles start near 28 °C and cool back to it. Expect higher floors than temperate data.

Phases are rule-based

Stage labels come from temperature bands plus the 24-hour trend, not lab analysis. Use them as a guide, not ground truth.

Phase definitions

The ranges behind every stage label.

Also returned by GET /research/stages, so your code can use the same numbers we do.

StageTemperatureMoistureOxygenCO₂Typical length
0 Early mesophilic28–45 °C60–65 %8–15 %0.5–3 %1–3 days
1 Active thermophilic45–60 °C55–60 %5–8 %3–6 %2–4 days
2 Peak decomposition57–65 °C50–58 %2–5 %6–10 %4–7 days
3 Cooling30–60 °C45–55 %5–12 %2–6 %5–10 days
4 Maturation28–32 °C40–50 %12–20 %0.5–2 %24–36 days
Use and cite

Free to use with credit.

The dataset is published under [LICENCE]. Please cite it like this:

CompostIQ ([YEAR]). CompostIQ open compost telemetry, release [VERSION]. https://compostiq.win/open-data/

Published something with it? Tell us at [CONTACT EMAIL] and we'll link to it.

Ready for your first request?

The quickstart takes about five minutes and ends with the data in a pandas DataFrame.