Shash Singh

Valuing Chipotle

A DCF and comparable companies analysis of Chipotle Mexican Grill (NYSE: CMG)

Chipotle was trading at $36.95 when I pulled the data. My base-case discounted cash flow model values it at $21.20 a share, and even my bull case only gets to $27.59. The comparable companies analysis gives a wide range that includes the market price.

So instead of focusing on one target price, I tried to answer a more useful question: what would you need to believe to pay $36.95?

SummaryPer share
Market price$36.95
DCF, base case$21.20
DCF, bear to bull$12.76 to $27.59
Comparable companies range$10.45 to $80.14

Approach

I valued the company two ways. The DCF projects five years of free cash flow, adds a terminal value, and discounts everything back at Chipotle's cost of capital. Every input is my own assumption, so the result depends on how reasonable those assumptions are.

The comparable companies analysis applies the trading multiples of six restaurant companies to Chipotle's financials. It relies on how the market currently prices the sector instead of on my forecasts. Using both gives a way to check one method against the other.

The DCF

Revenue grows 9.2% in 2026, in line with analyst consensus, then slows to 7.0% by 2030. Operating margin starts at 16.5% and rises to 17.5%, which stays inside Chipotle's range over the last four years. Capital spending is about 5% of revenue, mostly for new restaurants. The discount rate is 9.49%, and cash flows after 2030 grow at 3% a year.

From enterprise value to share priceAmount
Present value of 2026 to 2030 cash flows$6.12B
Present value of terminal value$20.03B
Enterprise value$26.14B
Plus net cash$0.68B
Equity value$26.82B
Shares outstanding1.265B
Value per share$21.20

How I handled leases

Chipotle has no bonds or bank loans. The $5.42 billion of debt on its balance sheet is lease liabilities, because it rents almost all of its restaurants.

Rent is already subtracted before operating income, so the cost of those leases is already in the cash flows. If I also subtracted the lease liability as debt, I would be counting the same cost twice, which would take $4.28 off the value per share. I left leases out of net debt and treated the company as financed entirely by equity. That decision lives in one function:

src/dcf/equity_bridge.py

def net_debt(total_debt, cash, treat_leases_as_debt, lease_share_of_total_debt):
    # For CMG, all reported debt is leases (lease_share_of_total_debt = 1.0).
    if treat_leases_as_debt:
        debt_in_bridge = total_debt
    else:
        debt_in_bridge = total_debt * (1.0 - lease_share_of_total_debt)
    return debt_in_bridge - cash

With no debt in the capital structure, the discount rate is just the cost of equity from CAPM: a 4.8% risk-free rate plus a beta of 0.94 times a 5.0% equity risk premium, which comes to 9.49%.

Checking the terminal value

The terminal value is about 77% of the enterprise value, so I wanted to confirm it made sense. In the last forecast year, capital spending is 1.67 times depreciation. That looked high for a company growing 3% a year, so I checked what it implies.

After subtracting depreciation, net reinvestment is $384 million, or 16.2% of after-tax operating profit. Funding 3% growth with that much reinvestment implies an 18.5% return on new capital. That is reasonable for Chipotle, so I kept the assumption.

Scenarios

I also ran bear and bull cases. They change revenue growth, margins, and terminal growth but keep the same 9.49% discount rate.

Market price, $36.95

Value per share in each scenario.
Scenario2030 revenue2030 marginTerminal growthValue
Bear$14.3B14.5%2.0%$12.76
Base$18.0B17.5%3.0%$21.20
Bull$20.5B19.0%3.5%$27.59

Two results stood out. First, even the bull case is below the market price, and its 19.0% margin is already higher than anything Chipotle has reported. That suggests the market price has more to do with a lower discount rate than with better operating results.

Second, the bear case still earns a 10.6% return on new capital, which is above the 9.49% cost of capital. A tougher bear case would need returns to fall below the cost of capital.

Sensitivity

This table shows the value per share for different discount rates and terminal growth rates. The outlined cell is the base case.

Rows are the discount rate (WACC). Columns are terminal growth. Darker cells are higher values. The colored cell is the only one above the market price.

Only one combination gets above $36.95: a 7.5% discount rate with 4.0% terminal growth. That needs a cost of equity about two points lower than CAPM gives and long-run growth faster than the economy, both at once.

Comparable companies

I picked six restaurant companies with business models similar to Chipotle's.

CompanyEV/RevenueEV/EBITDAP/ERevenue growth
Sweetgreen1.51xn/mn/m3.8%
Shake Shack2.24x20.2x71.0x17.2%
Wingstop5.72x17.6x25.8x6.4%
Domino's3.23x15.9x19.0x4.3%
Yum! Brands6.18x17.6x18.8x12.2%
CAVA5.23x44.7x107.4x31.3%
Chipotle4.15x22.6x34.2x9.3%

n/m means not meaningful. Sweetgreen has negative earnings and EBITDA.

Applying the peer multiples to Chipotle's numbers gives a range of $10.45 to $80.14, with the median multiples pointing to about $33. Chipotle's EV/EBITDA of 22.6x is higher than every peer except CAVA, which lines up with what the DCF shows.

I left Sweetgreen out of the P/E comparison because it loses money. The data source still reported a P/E of 77x for it, so I filtered on actual net income and earnings per share instead of trusting the ratio. Including it would have raised the peer median P/E from 25.8x to 48.4x. Without it, the median P/E implies $29.43 a share, close to the $29.28 from EV/EBITDA.

Limitations

How I built it

The model is written in Python using pandas and yfinance. All the assumptions are in one configuration file, so changing an input doesn't require touching the calculation code. For example:

config/assumptions.yaml

revenue_growth:     [0.092, 0.100, 0.090, 0.080, 0.070]   # FY2026-FY2030
operating_margin:   [0.165, 0.168, 0.171, 0.173, 0.175]
tax_rate: 0.25
terminal_growth_rate: 0.030

Financial data is saved by the date it was pulled, so rerunning the model later produces the same numbers shown here. The project has 33 tests covering the calculations, and they run automatically on GitHub whenever the code changes. The tables and charts on this page come from the model's output.