Two series are both called inflation — which one do you have?
The macro catalogue contains consumer_price_index and inflation_consumer_prices_annual. They describe the same phenomenon and they are not remotely the same series. Mixing them up is the most common macro data error there is, and it is entirely avoidable once you can name the three layers.
Level, rate, and rate of a rate
- A level is a value carried in the units of the thing itself rather than a rate of change.
consumer_price_indexis a level: an index number whose absolute value is meaningless and whose ratio across two dates is not. So ispopulation_total, a stock counted at a point in time, and so isgdp_current_usd, a flow accumulated over a period. Both are levels; neither is a rate. - A rate is already a change, expressed per period.
inflation_consumer_prices_annualis a rate: the 2022 value of 8.0028 means prices rose about 8% during 2022, not that anything is at 8. - A rate of a rate is what you get when you difference a rate — and it is almost always a mistake to publish or read one.
The arithmetic you may apply differs at every layer. Percentage change is meaningful on a level and meaningless on a rate. Averaging is meaningful on a rate and misleading on a level.
The worked case where this goes visibly wrong
/economic-events computes change_percentage mechanically for every row, including rows where it should not exist. The June 2026 US inflation print, month-on-month:
actual−0.4,previous0.5,change−0.9,change_percentage−180
The arithmetic is correct: −0.9 ÷ 0.5 = −180%. The sentence it encodes — "inflation fell 180 percent" — is nonsense. Month-on-month inflation is already a rate; the percentage change of a rate that crosses zero has no interpretation at all.
Compare the year-on-year row for the same release: actual 3.5, previous 4.2, change −0.7, change_percentage −16.667. Also arithmetically correct, also close to useless. The field you want on any rate series is change, in percentage points. change_percentage belongs to levels.
The same lesson appears in extreme form elsewhere in the same week: the EIA Cushing crude stocks row shows previous −0.052, change 0.482, change_percentage 926.923. A percentage computed against a base that is near zero and negative is a random number generator.
Real versus nominal, in the same catalogue
The second half of the distinction is whether inflation has been removed. gdp_current_usd is nominal — it is current-price dollars, so a series of it mixes real growth with price growth. gdp_growth_annual is the real growth rate, with prices stripped out. inflation_gdp_deflator_annual is the price component that separates them, and real_interest_rate is an interest rate with inflation already netted off.
Germany's gdp_growth_annual for 2023 is −0.8696 and for 2024 is −0.4959: two consecutive real contractions. Over the same two years nominal euro GDP rose, because prices rose faster than output fell. Both statements are true and they use different series. A chart that puts a nominal level next to a real rate is not comparing two things; it is comparing nothing.
The rule
Before any arithmetic, answer three questions about every series: is it a level or a rate, is it real or nominal, and what is its period. Write the answers next to the column name. Almost every macro chart that looks wrong is a violation of one of the three, and the next unit shows the same three questions doing exactly as much work on the Treasury curve.
Try it now
- Here are
/macro-indicator/USA?indicator=consumer_price_indexand/macro-indicator/USA?indicator=inflation_consumer_prices_annual, newest years first. Compute the year-on-year percentage change of the first for the two years it allows and compare it to the second. They should track closely — and the exercise proves which one is the level.
- Here is an
/economic-eventsrow whosetypeends in "Rate". Write the sentencechange_percentageencodes and decide whether you would put it in a report. Then decide, once, which ofchangeandchange_percentageyour code will use for rate series.
- Here are
gdp_current_usdandgdp_growth_annualfor the United States. Label each column "level or rate" and "real or nominal" before plotting either.