← Quantery Blog

When producer prices outrun consumer prices

September 11, 2026 · 8 min readnews-to-thesismarginsinflation

Producer prices rose faster than consumer prices over the year through August. On September 10, the Bureau of Labor Statistics reported that its Producer Price Index for final demand rose 0.4% for the month and 5.4% over twelve months. A day later, BLS reported that the Consumer Price Index rose 0.4% for the month and 3.4% over twelve months. The spread looks like a warning that costs are reaching companies faster than companies can pass them to customers. It isn't proof. These indexes measure different markets, and subtracting one from the other doesn't produce a corporate profit margin.

The testable version is narrower. When price pressure is broad, do companies that grow revenue while preserving gross margin and generating free cash flow fare better than companies whose sales rise while gross margin contracts? Every input to that question sits in the filings. The rules won't identify why a margin held, and they can't tell you whether this bout of inflation lasts. They can separate businesses showing the footprint of margin defense from those absorbing pressure.

What did this week's CPI and PPI releases say?

The producer release had more concentration than the headline suggests. Final-demand goods prices rose 1.1% in August, while services rose 0.1%. In that same release, energy accounted for more than three-quarters of the goods increase, with final-demand energy up 4.2%. Diesel fuel rose 24.1% and contributed more than one-third of the goods move. Strip out food and energy and goods prices still rose 0.4%, so the month wasn't only a fuel story. Fuel pressure also showed up in a separate weekly series: the Energy Information Administration put average US on-highway diesel at $5.967 a gallon on September 7, up 36.8 cents from the prior week.

Consumer prices carried some of the same pressure. The CPI energy index rose 2.1% in August and 16.3% over twelve months. The full release says shelter rose 0.3% for the month and food rose 0.1%. The index excluding food and energy rose 0.3% for the month and 2.4% over twelve months, according to the same CPI release.

Consumers didn't get a bigger paycheck in purchasing-power terms to cushion the month. BLS reported that real average hourly earnings fell 0.1% in August and 0.3% over twelve months. That doesn't predict spending by itself. It does make “raise prices again” a less comfortable assumption for any thesis built on effortless pass-through.

Why can't you subtract PPI from CPI?

PPI isn't a direct measure of what public companies paid for their inputs. BLS says its final-demand system tracks prices for goods, services, construction, exports, and government purchases. CPI measures price changes for consumer goods and services purchased by urban consumers.

So the two series differ in purchaser, product mix, and coverage. One follows prices across several kinds of final demand. The other follows a basket bought by urban consumers. A software subscription has little physical input exposure but still appears in consumer spending. Use the aggregate spread as a prompt to look at company accounts.

Even a genuine rise in input costs doesn't map cleanly to gross margin. A company can raise prices, change its product mix, renegotiate freight, or hold less inventory. Gross margin can stay flat under very different operating decisions. A screen sees the result of those decisions after they reach the statement. It doesn't see the negotiation that produced them.

What does margin defense look like in a filing?

Start with gross margin, which is revenue minus cost of revenue, divided by revenue. It answers how much of each sales dollar remains after the direct cost of delivering the product or service. Revenue, net income, and margins walks through that line using real income statements and explains why comparing margin levels across unrelated industries is a bad ranking method.

For this question, compare each company with itself. The intended comparison puts the latest quarter beside the same fiscal quarter a year earlier. That avoids calling a retailer's holiday quarter an improvement over its quieter season. The illustrative DSL uses the filing four positions back as a proxy, so gaps in a company's filing series can break that match. Inspect the periods behind each result before treating it as a year-over-year comparison. A trailing window can take several quarters to reveal a turn, as the guide to trailing and forward numbers explains.

Then ask for revenue growth alongside margin defense. Stable gross margin with shrinking sales can mean a company protected percentage profitability by walking away from volume. Rising revenue with collapsing gross margin can mean price increases failed to cover costs, or that low-margin products took more of the mix. Neither pattern is the claim we're trying to isolate. The useful footprint is demand that held while direct-cost economics held with it.

Add a cash check. Free-cash-flow margin is trailing free cash flow divided by trailing revenue. Gross margin stops high on the income statement, before payroll, interest, tax, and capital spending. Positive free-cash-flow margin asks whether some cash survived the rest. It also guards against giving full credit to a margin protected by spending that moved elsewhere. The free cash flow primer covers what the calculation catches and where timing can still bend it.

None of these fields says “pricing power.” A better product mix can widen gross margin. Falling commodity prices can do the same. So can a classification change between cost of revenue and operating expense. Treat margin defense as an observable footprint. Read the filing when a survivor earns the score.

How would you write the screen?

In Quantery, you can express the question from raw point-in-time fundamentals and keep each assumption exposed as a parameter. The shape below is illustrative; the bundled templates remain the reference for exact fields.

meta:
  name: margin-defense
  label: Margin Defense
  description: Businesses whose revenue, gross margin, and free cash flow are holding up.
  scale: { min: 0, max: 2 }

universe:
  exchanges: [NYSE, NASDAQ, AMEX]
  min_market_cap: 200000000
  exclude_sectors: [Financial Services, Real Estate]

quality:
  stale_months: 9
  required:
    price: no_price
    rev_q: no_revenue
    gross_profit_q: no_gross_profit

params:
  revenue_growth_ok: 0.00
  erosion_max: 0.01
  fcf_margin_strong: 0.08

features:
  rev_q: newest(revenue)
  rev_q_prior: lag(revenue, 4)
  gross_profit_q: newest(gross_profit)
  gross_profit_q_prior: lag(gross_profit, 4)
  gross_margin_q: if(rev_q > 0, gross_profit_q / rev_q, null)
  gross_margin_q_prior: if(rev_q_prior > 0, gross_profit_q_prior / rev_q_prior, null)
  margin_change: gross_margin_q - gross_margin_q_prior
  revenue_growth: if(rev_q_prior > 0, rev_q / rev_q_prior - 1, null)
  revenue_ttm: ttm(revenue)
  fcf_ttm: ttm(free_cash_flow)
  fcf_margin: if(revenue_ttm > 0, fcf_ttm / revenue_ttm, null)

criteria:
  demand:
    rules:
      - { when: "is_null(revenue_growth)", score: 0, flag: no_prior_revenue }
      - { when: "revenue_growth >= 0.05", score: 2 }
      - { when: "revenue_growth >= $revenue_growth_ok", score: 1 }
      - { else: 0 }
  margin_defense:
    rules:
      - { when: "is_null(margin_change)", score: 0, flag: no_prior_margin }
      - { when: "margin_change >= 0", score: 2 }
      - { when: "margin_change >= -$erosion_max", score: 1 }
      - { else: 0 }
  cash_backing:
    rules:
      - { when: "is_null(fcf_margin) or fcf_margin <= 0", score: 0, flag: no_positive_fcf }
      - { when: "fcf_margin >= $fcf_margin_strong", score: 2 }
      - { else: 1 }

gate:
  mode: strict

The demand criterion keeps a company in the study only when revenue is no lower than the filing four positions back. margin_defense gives full credit to flat or wider gross margin and partial credit inside the proposed tolerance. cash_backing requires positive cash after capital spending across the values available in the latest four filing positions. Because the gate is strict, strength in one criterion can't erase failure in another.

The null guards matter as much as the thresholds, but they don't prove continuity or a complete trailing window. Gross-profit coverage can be uneven in older point-in-time histories, and some companies don't report that subtotal in a clean field. lag(field, 4) is positional, so a filing gap can point to the wrong fiscal quarter. ttm() can sum a subset when one of its four positions is missing. This version flags a missing comparison value, while partial history can still pass. Before treating a survivor as evidence of year-over-year margin defense and trailing cash backing, inspect the fiscal periods and confirm that all four cash-flow quarters are present. Check the backtest's evaluated coverage as well.

The proposed thresholds are dials for the experiment. Change the revenue bar, allow more margin erosion, then re-run. If the conclusion disappears when erosion_max moves a little, the cutoff was doing the work. How to build a thesis worth testing is the longer version of that discipline.

What would the backtest establish?

Run this thesis walk-forward, then run a simpler version without margin_defense. Compare the two over the same dates and rebalance cadence. The hypothesis is that requiring stable gross margin improves subsequent returns or drawdown behavior enough to justify the companies it excludes. Every result is hypothetical and excludes trading costs.

A useful result would say something about the filing footprint across the period tested. It wouldn't prove the PPI-CPI spread caused the difference. The screen contains no macro series, and plenty of forces besides inflation move margins. To test sensitivity to producer-price regimes, split the historical qualification events by the PPI environment after the main run. Keep that regime split out of the selection rules until you've written down why it belongs there; otherwise this week's headline becomes one more dial fitted to history.

Watch turnover, too. A same-quarter margin rule can eject a company after one noisy filing and admit it again after the next. Since the backtest doesn't charge spreads or slippage, a small reported edge paired with frequent changes may have little practical meaning. What makes a backtest honest lays out the other checks the report needs.

This week's releases supply a pressure test. Write down what margin defense means, inspect the companies that qualify, and move the tolerances until you know which part of the conclusion belongs to the business and which part belongs to your rule.

Want to try this on your own rules? Quantery is free for 14 days: the full app, no card required.

← All articles