← Quantery Blog

Can a screen see a dividend cut coming?

September 4, 2026 · 9 min readnews-to-thesisdividendsscreening

On September 3 Campbell's cut its quarterly dividend from $0.39 a share to $0.25, a reduction of 36%, and guided fiscal 2027 to another year of falling sales and lower profit (Campbell's fourth quarter fiscal 2026 results). If you run a value thesis with a dividend yield anywhere in it, that's the event you'd like your rules to have flagged. So: was it visible in the filings?

Partly, and the useful part is which test worked. The one most people reach for, whether free cash flow covers the payout, would have called the dividend affordable: Campbell's produced $678 million of free cash flow in fiscal 2026 and paid $470 million of dividends, covering the payout about 1.4 times. What had been moving for two years was the direction of the business and the size of the debt behind it. Both are readable in the filings, both can be written as rules, and both are testable.

What the release actually says

The argument rests on the numbers, so start there. All of these come from the results release filed as exhibit 99.1 to Campbell's 8-K on EDGAR. For fiscal 2026, the year ended August 2, 2026:

The fourth quarter alone brought net sales of $2.137 billion, down 8% as reported and down 1% organically, with adjusted earnings of $0.39 a share, the same number as the quarterly dividend the company had been paying. Guidance for fiscal 2027: organic sales down 2% to 4%, adjusted EBIT down 7% to 12%, adjusted EPS of $1.65 to $1.80 against $2.17 this year. The new dividend rate is $1.00 a share annualized, first payable November 2.

The coverage test says the payout was affordable

Dividend coverage is the ratio of cash a business generated to cash it handed to shareholders. The strict version puts free cash flow in the numerator, operating cash flow minus capital spending, because that version charges the company for keeping its plants running before it pays anybody.

Campbell's fiscal 2026 arithmetic: $1,039 million of operating cash flow minus $361 million of capex leaves $678 million of free cash flow, and dividends took $470 million of that. Coverage of 1.44 times. Payout of 69 cents on every dollar of free cash. A rule requiring coverage above 1.3 passes that, and so does a rule set at 1.2 or 1.0.

Capital spending came in below depreciation for the year ($361 million against $413 million), which flatters free cash flow a little and is its own signal about where a business sits in its capital cycle. Even adjusting for it, the payout was covered.

The coverage test passes because a dividend cut is rarely an affordability event. It's a capital allocation decision, and the pressure usually shows up somewhere else on the statements first. Here it shows up on the right-hand side of the balance sheet. Net debt, meaning total borrowings less cash, was $977 million plus $6.160 billion minus $394 million, or about $6.7 billion, against $3.852 billion of equity. Add the reported $413 million of depreciation and amortization to the company's own adjusted EBIT of $1.181 billion and you get roughly $1.6 billion of adjusted EBITDA, putting net debt at more than four times it. That multiple leans on management's own adjustments, so treat it as approximate, but no rounding gets it near two. The bundled Buffett Quality Value template sets its nde_max parameter at 2.0 and scores the safety criterion zero above it, and its gate is strict, so a zero on any criterion drops the name. Gross debt versus net debt covers what that netting does and doesn't tell you.

Management named the same pressure. The release describes resetting the dividend as part of strengthening the balance sheet and accelerating debt reduction. Read the two decisions together and the cut looks like debt paydown funded out of the payout.

Direction of travel, and why the top line misreports it

A point-in-time thesis reads trailing numbers because they're filed and auditable, which is the argument in trailing vs forward numbers. The catch on a trend rule is that reported revenue measures a portfolio, and this portfolio kept changing:

That's why the release bridges a 5% reported decline to a 2% organic one. A trend feature computed on reported revenue reads acquisitions, divestitures and the calendar as business performance. In this case the noise ran toward pessimism. It runs the other way just as easily: a company can buy $1 billion of revenue and hold a three-year growth line above zero while everything it already owned shrinks underneath.

You can't fix this with a better field. Organic sales are a company-defined measure that lives in the press release and the MD&A prose. No line of the financial statements carries it, so a point-in-time data lake has no column to put it in. What you can do is stop pretending one number settles the question: run a multi-year growth rate and a shorter slope side by side, treat disagreement between them as a flag, and read the filing when a name gets flagged. Revenue, net income and margins walks the income statement lines these rules are built from.

Writing it down

Here's the shape, as a thesis you could edit and run. The bundled templates are the reference for exact field names, but every function and field below is real DSL:

meta:
  name: payout-durability
  label: Payout Durability
  description: Dividend payers whose cash and top line are holding up underneath the payout.
  scale: { min: 0, max: 2 }

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

params:
  cover_strong: 2.0
  cover_ok:     1.3
  nde_max:      3.0
  rev_floor:    0.0

features:
  fcf_ttm:      ttm(free_cash_flow)
  divs_ttm:     coalesce(ttm(dividends_paid), 0)
  cover:        if(divs_ttm > 0, fcf_ttm / divs_ttm, null)
  rev_cagr_3y:  cagr(revenue, 12)          # reported revenue, portfolio and all
  rev_slope_2y: slope(revenue, 8)          # the shorter view
  fcf_slope_2y: slope(free_cash_flow, 8)
  cash:         latest(cash)
  ebitda_ttm:   ttm(ebitda)
  net_debt_ebitda: if(ebitda_ttm > 0, (latest(total_debt) - cash) / ebitda_ttm, null)

criteria:
  payout_cover:
    rules:
      - { when: "is_null(cover)", score: 0, flag: no_dividend }
      - { when: "cover >= $cover_strong", score: 2 }
      - { when: "cover >= $cover_ok", score: 1 }
      - { else: 0 }
  not_shrinking:
    rules:
      - { when: "is_null(rev_cagr_3y) or is_null(fcf_slope_2y)", score: 0, flag: no_trend_data }
      - { when: "rev_cagr_3y >= $rev_floor and rev_slope_2y >= 0 and fcf_slope_2y >= 0", score: 2 }
      - { when: "rev_cagr_3y >= $rev_floor", score: 1, flag: trend_rolling_over }
      - { else: 0 }
  balance_sheet:
    rules:
      - { when: "is_null(net_debt_ebitda)", score: 0, flag: no_leverage_data }
      - { when: "net_debt_ebitda <= 1.0", score: 2 }
      - { when: "net_debt_ebitda <= $nde_max", score: 1 }
      - { else: 0 }

gate:
  mode: strict

Three things in there do the work. payout_cover is the test that passed at Campbell's, kept because a payout that isn't covered is a different and louder problem. not_shrinking gives full marks only when the three-year growth rate and both two-year slopes agree, and hands out a trend_rolling_over flag when the long window still looks fine while the short one has turned, which is the exact configuration a business rolling over produces. balance_sheet asks who else has a claim on the cash, since a lender's claim outranks a shareholder's.

The strict gate means a name has to clear all three. Drop it to mode: score with a min_score and you get a ranked list instead, where strong coverage can offset middling leverage. That choice is yours to make and re-make, which is the point of keeping the rules in front of you: when a scan surfaces a name, each criterion shows the number it scored and the filing it came from, so a flag is an arithmetic claim you can go check.

What a backtest would and wouldn't settle

Take a value thesis you already run, add not_shrinking and balance_sheet, and run both versions walk-forward on point-in-time fundamentals, where each simulated date sees only what had been filed by then. Point-in-time SEC fundamentals support tests back to 2013. Results are hypothetical and exclude trading costs.

What that test can speak to is whether declining, levered dividend payers were priced correctly during the period you ran. That's a claim about returns, and returns are what a backtest measures.

What it can't do is tell you the rules predict dividend cuts. Cuts are rare, and a rare-event claim needs the events counted, not the returns averaged. A screen that avoided two hundred names to dodge four cuts has paid for the insurance in names it never held. If cut prediction is the claim you care about, the test is different: label the historical cuts, check what fraction your rules flagged in the quarters before each, and check how many names got flagged that never cut. Both numbers matter, and the second one is where enthusiasm usually goes to die.

There's a data caveat sitting inside the thesis, too. dividends_paid is null for companies that pay nothing, which is why the feature coalesces it to zero and the criterion guards for null. Get that wrong and your rules silently rank half the market on a missing value. Null handling deserves the same attention as the thresholds, a habit what makes a backtest honest argues for at more length.

None of this makes Campbell's an interesting case beyond the mechanics. It's a company whose filings told a consistent story for a while: shrinking sales, a big debt load, a payout that stayed put. The rules above would have scored that combination without knowing anything about soup. Change cover_ok to 2.0, or add a rule about interest coverage, and re-run it against the whole US market. Whether the version you end up with is worth acting on is what the backtest is for, and the version is yours.

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

← All articles