| Dataset | Consumer Price Index, Australia |
|---|---|
| Dataset id | abs.cpi |
| Series | 1,001 |
| Observations | 91,347 |
| Countries | 1 |
| Period range | 1948-07-01 to 2026-07-01 |
| Vintages | 2 |
| Last fetched | 2026-09-10 11:26 |
| Poll interval | 7 days |
| Archive | abs/cpi/*.json.gz |
| Licence | CC-BY-4.0 |
| Redistributable | with-attribution |
| Terms read by a person | 2026-09-11 |
| Attribution | Source: Australian Bureau of Statistics |
https://www.abs.gov.au/website-privacy-copyright-and-disclaimer
The connector's own docstring, verbatim. It lives beside the code so it cannot drift from it.
ABS connector: Australia's consumer prices, quarterly and monthly.
Australia held four series before this -- the IMF's headline and two rates, with no breakdown at all, because the IMF carries no COICOP divisions for it. The ABS publishes 132 categories quarterly, back to 1948, and 158 monthly, keyless, over SDMX.
ONE FLOW, TWO FREQUENCIES, AND CPI_M IS NOT IT. The obvious-looking dataflow is "Monthly Consumer Price Index indicator", and it is the superseded one -- 33 series ending 2025-09. The main CPI flow has a FREQ dimension and serves both: 158 monthly series to 2026-07 and 132 quarterly back to 1948-Q3. This connector took CPI_M first, on the strength of its name, which is the same mistake as Eurostat's retired dataset earlier the same day. Ask a flow what frequencies it has before believing a frequency needs its own flow.
ONE RATE IS DERIVED, AND ONLY ONE. Measured by asking for every combination: monthly publishes the index, the monthly change and the annual change, so nothing is computed there. Quarterly publishes the index and the quarterly change but answers 404 for the annual rate -- still 404 with the region and estimate type wildcarded, so it is the flow saying the measure does not exist -- and that one series is derived from the index, which the contract permits because the source publishes nothing of that quantity for these concepts.
Four things worth knowing before changing anything here.
SDMX-JSON is positional twice over. A series key is 'a:b:c:d:e', the positions of its dimension values in the order structures[0].dimensions. series lists them, and an observation key is the position of its period in dimensions.observation[0].values. Neither carries the code it means. Get either wrong and Australia's bread lands under its rents, silently, so _cells() is the only place that arithmetic happens and the tests pin it against a fixture where every cell is distinguishable.
The hierarchy is in the CODELIST, not in the data. A connector reading only the data sees 166 categories in a flat list. abs_codes.py, generated by gen_abs.py, holds code -> (label, parent); parse() reads it and stays offline. A code missing from it falls back to the label the data carries, with no parent, so a new ABS category appears as a root rather than vanishing.
MEASURE 2 becomes MOM at both frequencies. The variant means "change on the previous PERIOD" throughout this database -- the IMF's own POP_PCH_PA_PT maps to it -- and catalog.break_span already reads it as one period whatever the frequency is. The series id's own .Q or .M says which.
Not COICOP. Checked, not assumed: none of the ABS's 1,226 dataflows mentions COICOP. Australia's eleven groups line up with COICOP better than Canada's eight do, and still are not it -- meals out sit inside Food and there is no restaurants division. Item 6's rule: kept verbatim, linked by handle.