Kodiak Gas Services [KGS]
As of 2026-07-30. Spot $58.90. Two horizons, two instruments (per references/valuation.md).
Test applied and evidence:
Dating the cycle position — required for State B, and this is the load-bearing sentence:
Kodiak is at or very near a cycle peak on the variable that matters. Fleet utilisation is 98.0%, up from 96.9%, the highest in the disclosed series; revenue per revenue-generating horsepower is rising +3.7% year over year; and management's prepared-remark mentions of "pricing" went from 0–1 per call through 2024 to 9 in 2025Q4. Tight capacity plus rising price is the definition of a peak, not a mid-point. I am therefore NOT mean-reverting the margin downward by reflex — the brief is explicit about that error — but I am refusing to extrapolate the +3.7% price term, and I set terminal revenue growth without it.
Consequence of State B: normalise on both revenue and margin; report trough / mid-cycle / peak earnings power; do not combine a peak margin with a peak growth rate.
Basis: the company's own TTM filed operating margin, reconciled through the FY2025 10-K opex
bridge. Not a peer median, not an industry percentile, not max(own, sector).
TTM through Q1 2026, EDGAR OperatingIncomeLoss (filed):
| $000 | |
|---|---|
| Q2 2025 | 99,730 |
| Q3 2025 | 64,200 |
| Q4 2025 (FY 340,010 − 9M 253,116) | 86,894 |
| Q1 2026 | 106,812 |
| TTM EBIT | 357,636 |
| TTM revenue | 1,324,217 |
| TTM operating margin | 27.01% |
| line | $000 | % of revenue |
|---|---|---|
| Revenue | 1,308,100 | 100.0% |
| Cost of operations — Contract Services | (373,493) | (28.55%) |
| Cost of operations — Other Services | (106,432) | (8.14%) |
| Depreciation and amortisation | (276,185) | (21.11%) |
= Gross margin m_gross |
551,990 | 42.20% |
| Selling, general and administrative | (144,070) | (11.01%) |
| Long-lived asset impairment | (6,344) | (0.49%) |
| Loss on sale of assets | (61,566) | (4.71%) |
| = Income from operations | 340,010 | 25.99% |
The bridge closes to the dollar: 42.20 − 11.01 − 0.49 − 4.71 = 25.99% ✓
m_EBIT,T (27.0%) ≤ m_gross,T (42.2%) ✓ — with 15.2pp of headroom, which is ample to fund an
11.0%-of-revenue SG&A base plus normalised disposal losses.
steady_state_check.py — what it flagged, and a defect in its inputpython3 steady_state_check.py --ticker KGS --terminal-margin 0.270 --exit-multiple 7.50
| output | value |
|---|---|
| 2020 margin → latest margin | 31.6% → 31.7% (moved +0.1pp) |
| terminal assumed | 27.0% (−4.7pp vs latest) |
| ROIC measured | 8.3% |
| warranted multiple at measured ROIC | 7.2x |
| exit multiple used vs warranted | 1.04x |
| finding | NO_SCALING_CONTAMINATION_DETECTED |
The tool passes KGS, and its headline "latest margin" is wrong. It reads AV's operatingIncome,
which for FY2025 gives 31.7% against a filed 26.0% (see the defect register). Against the filed
figure the terminal margin is 0.0pp from the trailing actual, not −4.7pp. The verdict is
unchanged — the tool's substantive finding, that a 7.2x warranted multiple is consistent with
Kodiak's low ROIC, is correct and is the most useful thing it says.
| input | value | source | screen agreed? |
|---|---|---|---|
| Spot | $58.90 | screen record, 2026-07-30 | — |
| Shares outstanding | 88,771,027 | 10-Q cover page, dated 2026-05-06 | ✓ exact |
| Market cap | $5,228.6m | ✓ | |
| Cash | $94,363k | 10-Q balance sheet, 2026-03-31 | ✓ |
| Total debt | $2,787,003k | LongTermDebt, 2026-03-31 (no current portion tagged) |
✓ |
| Net debt | −$2,692,640k | ✓ exact | |
| Short-term investments | none — tag absent, not omitted | balance sheet | — |
| EV, lease-EXCLUSIVE | $7,921.3m | ✓ | |
| Operating lease liability, non-current | $42,122k | 10-Q | |
| Finance lease liability, non-current | $3,775k | 10-Q | |
| EV, lease-INCLUSIVE (est.) | ~$7,983m (+0.8%) | current portions sit inside accrued liabilities and are not separately tagged | |
| TTM revenue | $1,324,217k | four filed quarters, verified | ✓ exact |
| TTM EBIT (filed) | $357,636k | EDGAR OperatingIncomeLoss |
screen 26.0% FY basis ✓ |
| Splits | none — SPLITS returned {"data": []} |
queried explicitly |
EV basis statement, as required: the headline EV of $7,921.3m is LEASE-EXCLUSIVE. Adding disclosed non-current operating and finance lease liabilities and an estimated current portion takes it to roughly $7,983m, +0.8%. The difference does not move any conclusion here (EV/EBIT 22.15x → 22.32x); it is stated because a lease-exclusive anchor previously invalidated a seven-name ladder in this project.
| lease-exclusive | lease-inclusive | |
|---|---|---|
| EV / TTM sales | 5.98x | 6.03x |
| EV / TTM EBIT (filed) | 22.15x | 22.32x |
| Net debt / TTM adj. EBITDA (~$690m) | 3.9x |
Per the brief's CORZ/IREN warning: the instrument used here is
~/.claude/skills/investment-memo/assets/reverse_dcf.py, which discounts a five-year interim free
cash flow stream plus a discounted terminal value at an explicit WACC and solves for the revenue
CAGR that sets present value equal to today's EV. It is not an undiscounted required-revenue
test. It was executed; the outputs below are its stdout, not a reconstruction.
--fcf-margin — sign and magnitudeKodiak's free cash flow is POSITIVE, so the direction of the interim-FCF correction is the conservative one: omitting the flag would overstate required CAGR and could only suppress a true PASS, never manufacture a false one. It was supplied anyway.
normalized_fcf.py returns 16.2% at 6% assumed growth (with the two offsetting input errors
documented in the research file). Trailing measures 15.3%.--fcf-margin 0.155. Sensitivity: at 0.05 the required CAGR rises ~1.3pp; at −0.05 it
falls ~2.7pp and would flatter the name. The sign is positive and verified.| parameter | value | why |
|---|---|---|
| solved for | revenue CAGR | |
| horizon | 5 years | |
| WACC | 8.5% | investment-grade-adjacent industrial; Kodiak's own marginal debt cost is 7.6% pre-tax, ~5.5% after tax, and equity vol is 38.6% |
| terminal margin | 27.0% | derived above |
| exit multiple | 7.50x EV/EBIT | not a free parameter — see below |
| FCF margin | +15.5% | measured |
| revenue base | $1,324.2m | verified TTM |
EV_T / EBIT_T = (1−t)(1 − g/ROIC) / (WACC − g)
with t = 28.1% (FY2025 effective rate 31,884/113,472), g = 2.5%, WACC = 8.5%, and ROIC = 6.66% (NOPAT $257.5m ÷ invested capital $3,867.6m):
(0.719)(1 − 0.025/0.0666) / (0.085 − 0.025) = (0.719)(0.6246) / 0.060 = 7.49x
steady_state_check.py independently returns 7.2x at its own 8.3% ROIC. Two derivations, same
neighbourhood.
Kodiak trades at 22.15x EV/EBIT against a 7.5x steady-state-warranted multiple — a 2.95x compression. The cause is not the margin and not the growth rate; it is that ROIC is 6.66% against a WACC of 8.5%, so terminal reinvestment consumes 37.5% of NOPAT to buy 2.5% growth that is worth less than it costs.
EV implied by today's price 7,921m (6.0x current revenue)
Held fixed terminal margin=27.0%, exit multiple=7.5x
Discount rate / horizon 8.5% over 5y
>>> THE MARKET REQUIRES: revenue CAGR of 28.2%
| Required revenue CAGR | 28.2% |
| Demonstrated (organic, Q1'26 YoY) | 4.9% |
| Demonstrated, Contract Services only | 6.2% |
| Demonstrated, screen's acquired figure | 22.7% (rejected — CSI Compressco) |
| MARGIN = demonstrated − required | −23.3pp |
| Verdict | FAIL |
| exit multiple (EV/EBIT) | required revenue CAGR | margin vs 4.9% demonstrated |
|---|---|---|
| 7.5x (identity-warranted) | 28.2% | −23.3pp |
| 10x | 22.1% | −17.2pp |
| 12x | 18.2% | −13.3pp |
| 15x | 13.6% | −8.7pp |
| 18x | 9.9% | −5.0pp |
| 22.15x (today's own multiple, held flat) | 5.9% | −1.0pp |
24.2x (screen's GROWTH_MATCHED anchor) |
4.2% | +0.7pp |
The verdict is entirely the exit multiple, and the screen's is unsupportable. The screen used
24.2x, described as GROWTH_MATCHED from a comparator set of 223 names — which is a
universe-wide median wearing a sector label, exactly the defect recorded in DATA_DEFECTS.md. At
24.2x the name passes by +13.8pp. At the identity-warranted 7.5x it fails by −23.3pp. A 37pp swing
produced by one unexamined parameter.
The honest statement: KGS passes only if you assume its multiple never compresses. Holding today's 22.15x flat for five years, the required CAGR is 5.9% against 4.9% demonstrated — still −1.0pp, still a FAIL, but a narrow one. That is the most generous defensible framing and it is still not a pass.
| revenue | operating margin | EBIT | EV/EBIT at today's $7,921m EV | |
|---|---|---|---|---|
| Peak (today) | $1,324.2m | 27.0% | $357.6m | 22.15x |
| Mid-cycle — utilisation 93%, price flat | $1,256.4m | 24.5% | $307.8m | 25.7x |
| Trough — utilisation 88%, price −5% | $1,129.0m | 21.5% (the FY2024 actual) | $242.7m | 32.6x |
The price paid against mid-cycle earnings power is 25.7x EV/EBIT. For a business earning a 6.7% ROIC, that is the finding.
Daily EV/Sales series built from Alpaca split-adjusted closes and as-known annual revenue (FY revenue stepping in at its 10-K filing date, so the series is not forward-looking), current share count and net debt held constant so the series measures multiple movement.
Window: 2024-03-07 → 2026-07-29, n = 600 trading days. This is Kodiak's entire life as a filer with a 10-K on record — it IPO'd in June 2023.
| EV/Sales | |
|---|---|
| min | 4.64x |
| p10 | 4.91x |
| p25 | 5.06x |
| median | 5.95x |
| p75 | 6.48x |
| p90 | 7.38x |
| max | 8.35x |
| today (on true TTM revenue) | 5.98x |
| today's percentile of own history | 39th (series basis) / ~50th on the true-TTM basis |
History length caveat, declared: 2.4 years and 600 observations. That is short, and the whole
window sits inside a single up-cycle in Permian compression. It is not long enough to have
observed a downturn multiple. I am using it because valuation.md requires the name's own history
and forbids substituting a peer median — but the percentile should be read as "where in this
cycle", not "where in the range of possible regimes."
| $m | |
|---|---|
Consensus FY2026 revenue (AV EARNINGS_ESTIMATES) |
1,515.1 |
| Consensus FY2027 revenue | 1,753.3 |
| NTM (Aug'26–Jul'27), time-weighted | 1,639.3 |
| House NTM — Q1'26 annualised, grown 6% | 1,450.0 |
| 90d ago | 30d ago | 7d ago | now | 90-day change | |
|---|---|---|---|---|---|
| FY2026 EPS | 2.7054 | 2.6492 | 2.5557 | 2.6231 | −3.0% |
| FY2027 EPS | 3.3066 | 2.9668 | 2.9837 | 3.0832 | −6.8% |
Revisions are negative — the worst of the three names in this cluster. The last 7 days turned up (+2.6% on FY2026), which is a change of direction worth one quarter of observation, not a trend.
At the 50th percentile of its own history, 5.95x EV/Sales, on consensus NTM revenue:
| NTM revenue | $1,639.3m |
| × 5.95x | EV $9,753.9m |
| less net debt | −$2,692.6m |
| equity value | $7,061.3m |
| ÷ 88.771m shares | $79.54 |
| to spot ($58.90) | +35.0% |
On the house NTM of $1,450m the same multiple gives $66.86, +13.5%.
The single largest swing factor is the consensus revenue path, and it is not evidenced. Consensus requires Q2'26 revenue of $383.0m against Q1'26 actual of $345.8m — a +10.8% sequential step in a business growing 4.9% year over year at 98% fleet utilisation. I report the consensus-based target as the method-compliant headline and the house figure as the number I would actually underwrite.
Leverage amplifies this: net debt is 34.0% of EV, so a 12% revenue miss becomes an 16% equity move.
No external professional target is on file for KGS in this project, so the sanity band is UNAVAILABLE rather than passed.
Growth-matched, US-listed, contract compression and gas-handling infrastructure. Kept separate from the XYL and FSS sets.
| ticker | company | why in set |
|---|---|---|
| USAC | USA Compression Partners | direct competitor; contract compression, same customers, same Permian concentration |
| AROC | Archrock | direct competitor; largest US contract compressor |
| CEIX / equivalent midstream small caps | not used | different asset |
Declared limitation: the comparator set has n = 2 direct peers, both of which share Kodiak's exact cycle position, leverage profile and ROIC problem. A median of two co-cyclical peers is not an independent anchor — it is the same observation three times. This is why the exit multiple in the implied-path test is taken from the ROIC identity and not from the comparator set, and why the 12-month multiple is taken from Kodiak's own history. The comparator set is recorded for completeness and is not load-bearing on any number in this memo.
The screen's exit_multiple_peer_n: 223 is the defect this replaces.
| output | value |
|---|---|
| Company state | B — cyclical, dated AT/NEAR PEAK on 98.0% utilisation |
| Terminal margin | 27.0%, = own TTM filed operating margin, bridge reconciles to the dollar |
| Exit multiple | 7.5x EV/EBIT, identity-warranted at ROIC 6.66% / WACC 8.5% / g 2.5% |
| Implied compression from today's 22.15x | −66.1% |
| Required revenue CAGR | 28.2% |
| Demonstrated (organic) | 4.9% |
| Valuation margin | −23.3pp — FAIL |
| 12-month target | $79.54, +35.0% at the 50th percentile of its own 2.4-year multiple history (house base: $66.86, +13.5%) |
| Terminal value share of EV | 71.4% — above 60%, so the reverse DCF is mandatory and primary |
| Evidence grade | B− — filings are complete and clean; the multiple history is only 2.4 years and the comparator set is n = 2 |