Xylem [XYL]
Screen: reports/scan_universe/XYL_analysis.json, as-of 2026-07-30, Quality PASS, Valuation PASS at
+8.2pp.
| screen field | screen value | verified value | source | result |
|---|---|---|---|---|
shares |
233,486,812 | 233,486,812 | 10-Q cover page 2026-07-24 | exact |
revenue_ttm |
8,812,000,000 | 9,126,000,000 | four filed quarters: 2,268 + 2,397 + 2,125 + 2,336, each EDGAR-verified | WRONG by −$314m, −3.44% |
net_cash |
−1,671,000,000 | −1,650,000,000 | cash $1,276m − total debt $2,926m (10-Q debt note) | $21m / 1.3% off — the screen took LongTermDebt = $2,947m from XBRL; the 10-Q's own debt table totals $2,926m |
ev |
28,902,566,884 | 28,881,600,000 | 0.07% off | |
ev_sales |
3.2799 | 3.164 | 3.7% overstated by the revenue error | |
op_margin_pct |
14.0 (FY2025) | 13.54 (FY2025 filed) / 14.48 (TTM) | 10-K | close; TTM is the better base |
gross_margin_pct |
39.9 | 38.46 (FY2025 filed) | 10-K | 1.4pp high |
revenue_cagr_demonstrated |
18.1 | 1.3 organic | 10-Q organic decomposition | invalid — Evoqua acquisition |
exit_multiple |
23.5, GROWTH_MATCHED, peer_n: 286 |
9.59x | ROIC identity | invalid — 286-name "peer" set |
required_cagr_pct |
9.9 | 19.3 | reverse_dcf | wrong by 9.4pp |
valuation_margin_pp |
+8.2 | −18.0 | sign flip, 26.2pp swing |
$9,126m is the sum of four consecutive, individually EDGAR-verified quarters:
| quarter | revenue $m | EDGAR source |
|---|---|---|
| 2025-07-01 → 2025-09-30 | 2,268 | 10-Q filed 2025-10-28 |
| Q4 2025 (FY 9,035 − 9M 6,638) | 2,397 | 10-K filed 2026-02-25 |
| 2026-01-01 → 2026-03-31 | 2,125 | 10-Q filed 2026-04-28 |
| 2026-04-01 → 2026-06-30 | 2,336 | 10-Q filed 2026-07-28 |
| TTM | 9,126 |
The screen's $8,812m is not any four-consecutive-quarter sum, and it is not FY2025 ($9,035m) either. The direction is conservative — understating revenue overstates EV/Sales — but it is wrong, and on a name where the memo's conclusion is a re-rating from the 6th percentile, a 3.4% revenue error moves the percentile.
Note the shape: the screen got the hardest input right (a cover-page share count updated six days before the run) and the easiest input wrong (a sum of four filed quarters). Difficulty is not a predictor of which fields are wrong.
The DATA_DEFECTS.md discipline is explicit that an untested defect list becomes a prior and a prior
causes an agent to reject correct numbers. Every listed field was checked against the filing:
| field | AV value | filed value | result |
|---|---|---|---|
totalRevenue, all quarters |
2,336 / 2,125 / 2,397 / 2,268 | identical | CLEAN, byte-identical |
grossProfit FY2025 |
38.5% of revenue | 3,475 / 9,035 = 38.46% | CLEAN |
operatingIncome FY2025 |
13.5% of revenue | 1,223 / 9,035 = 13.54% | CLEAN — contrast KGS, where the same field is +21.9% |
operatingIncome, quarterly |
390 / 244 / 353 / 334 | ties to segment tables | CLEAN |
SPLITS |
{"symbol":"XYL","data":[]} |
— | nil, queried explicitly and stated |
cashAndShortTermInvestments |
not used | shortTermInvestments and longTermInvestments are both absent from the balance sheet |
not applicable — nothing for the composite to exclude. The INSM defect does not fire |
EARNINGS_ESTIMATES |
41 records, full 7/30/60/90-day history | — | CLEAN — not the empty-array-at-HTTP-200 failure |
EARNINGS_CALL_TRANSCRIPT |
10 of 12 quarters, speaker/title/sentiment populated |
— | partial coverage, stated |
av_vs_edgar.py |
5 periods compared, 0 disagreements | — | VERIFIED |
AV's normalized statements are clean on XYL across every field this project has recorded a defect in. That is the finding, and it is reported because a defect list without negative results is a prior, not evidence.
Fields deliberately not used regardless: ebit, ebitda, sellingGeneralAndAdministrative,
OVERVIEW.OperatingMarginTTM, OVERVIEW.MarketCapitalization. All opex lines came from the FY2025
10-K income statement.
| tool | result |
|---|---|
normalized_fcf.py --ticker XYL |
INDETERMINATE — "no growth capex identified above the maintenance rate." This is the correct output, and it was checked rather than worked around: Xylem's capex is 3.7% of revenue and it is genuinely not building. Trailing FCF (10.5%) used directly, which is the tool's own stated condition |
steady_state_check.py |
two flags, both accepted: TERMINAL_ABOVE_EVERY_OBSERVED_YEAR (16.0% vs a 13.5% annual peak — accepted with a named mechanism: Q2'26 printed 16.7%, restructuring ends 2027 by disclosure, 350bp of quantified productivity) and EXIT_MULTIPLE_UNWARRANTED_AT_STEADY_STATE (9.59x vs 6.1x warranted at its 6.5% ROIC — not overridden; the identity multiple is used, not the market's) |
reverse_dcf.py |
ran with --fcf-margin 0.105. Confirmed to be a DCF, not the undiscounted required-revenue test that CORZ and IREN substituted |
av_vs_edgar.py |
VERIFIED, 5 periods. Note the KGS finding: this tool compares revenue, not operating income |