Skip to content
Finance Lessons

Fixed-Income Analytics

Bootstrapping the Yield Curve

Strip coupon bonds into pure spot (zero) rates one maturity at a time by no-arbitrage, see why a single yield can't price every maturity, and build the discount curve the whole market trades off.

13 min Updated Jun 10, 2026

So far we’ve spoken of “the yield” as if a bond had one. But a 6% coupon paid in year 1 and the face value paid in year 10 should not be discounted at the same rate — money for one year and money for ten years cost differently. The market prices each maturity with its own spot rate (the yield on a pure zero-coupon claim at that horizon), and the collection of those rates is the spot curve. The trouble: almost no zeros trade at every maturity, so we can’t read the spot curve off the screen. We have to build it — by bootstrapping, stripping coupon bonds apart one maturity at a time. This is the single most important construction in fixed income; every discount factor, every valuation, every forward rate descends from it.

Before you read — take a guess

Why can't a single yield to maturity correctly discount every cash flow of a coupon bond?

Spot rates: the price of money at each horizon

Analogy. Imagine renting money like you rent a car: a one-day rental and a one-year rental have completely different daily rates. The spot rate ztz_t is the rental rate for money borrowed today and repaid in a single lump at time tt — it’s the yield on a pure zero-coupon bond maturing at tt. There’s a different ztz_t for every horizon, and together they form the term structure of interest rates.

Why spot rates are the “true” rates. A zero-coupon bond has exactly one cash flow, so its yield discounts that cash flow with no blending — it’s a clean, unambiguous price of money for that horizon. The discount factor for time tt is

DFt=1(1+zt)t,DF_t = \frac{1}{(1+z_t)^t},

and any cash flow at time tt, from any bond, must be discounted by this same DFtDF_t — otherwise an arbitrageur could buy the cheap version and sell the dear one. Spot rates are the atoms; a coupon bond’s price is just a sum of its cash flows times the appropriate discount factors.

The term structure: a curve, not a number
3%4%5%6%3m1y2y5y10y30yMaturityYield
Short rate (3m)
3.6%
Long rate (10y)
5.0%
10y − 3m spread
+1.40%

Upward-sloping: longer money pays more — the healthy, everyday shape.

Each maturity has its own rate. Normally the curve slopes up (longer money costs more); it can flatten, or even invert (short rates above long) — a classic recession warning. Bootstrapping recovers this curve from traded bond prices.

Info:

Par yield vs. spot rate vs. YTM — three different curves

Don’t conflate them. The YTM of a coupon bond is a single rate that prices that whole bond. The par yield at maturity tt is the coupon rate that would make a fresh tt-maturity bond price exactly at par. The spot rate ztz_t is the yield on a pure zero at tt. They only coincide for a one-period bond; beyond that they diverge, and bootstrapping is precisely the machine that converts observed par/coupon yields into the underlying spot rates.

The bootstrap: solve one maturity at a time

Analogy. Bootstrapping is climbing a ladder where each rung must be built from the rungs below it. You can’t reach the 3-year spot rate until you’ve nailed the 1- and 2-year rates, because a 3-year coupon bond’s early coupons need to be discounted at those rates first. So you start at the bottom and climb.

The recursion. Given the prices of coupon bonds at maturities 1,2,3,1, 2, 3, \dots:

  1. Year 1. A 1-year bond has a single cash flow, so its yield is the 1-year spot rate z1z_1. Read it straight off.
  2. Year 2. A 2-year bond pays a coupon at year 1 and coupon + face at year 2. Discount the year-1 coupon using z1z_1 (now known), subtract that present value from the bond’s price, and the remainder is the present value of the year-2 cash flow. Solve for z2z_2.
  3. Year tt. Every spot rate z1,,zt1z_1, \dots, z_{t-1} is known, so a tt-maturity bond’s first t1t-1 coupons can all be discounted. Subtract them from the price, leaving a single equation in ztz_t. Solve.

Each step has exactly one unknown because every shorter rate is already locked in. That’s the magic — and the constraint: you must have a bond (or a price) at every maturity step, with no gaps.

Bootstrapping the spot curve, rung by rungStep 1 of 4
Spot (zero) rate
1y2y3y4yMaturity4.00%

1yStart at the short end

The 1-year bond has a single cash flow, so its yield already is the 1-year spot rate. Nothing to strip — read it straight off.

Resolved spot rate: 4.00%

Step through the ladder. Each maturity reuses every spot already solved to strip the next bond down to a single unknown. You can never solve a long rate before the shorter ones beneath it — the curve is built from the short end out.

Think first

A 1-year zero yields 4%. A 2-year bond with a 5% annual coupon trades at par ($100). What is the 2-year spot rate z₂? (Set up the equation; you don't need to fully solve.)

Hint: Discount the $5 year-1 coupon at z₁ = 4%, subtract from $100, then the year-2 $105 must discount to the remainder.

A full worked bootstrap

Let’s bootstrap three rates from three par bonds (all priced at $100 par, annual coupons).

MaturityCouponPrice
1 year4.0%$100
2 years5.0%$100
3 years6.0%$100

Step 1 — the 1-year spot. The 1-year par bond pays $104 in one year for $100 today:

100=1041+z1    1+z1=1.04    z1=4.00%.100 = \frac{104}{1+z_1} \;\Rightarrow\; 1+z_1 = 1.04 \;\Rightarrow\; z_1 = 4.00\%.

Step 2 — the 2-year spot. The 2-year bond pays $5 (year 1) and $105 (year 2):

100=51.04+105(1+z2)2.100 = \frac{5}{1.04} + \frac{105}{(1+z_2)^2}.

The first term is 4.8084.808, so 105(1+z2)2=95.192\frac{105}{(1+z_2)^2} = 95.192, giving (1+z2)2=1.1030(1+z_2)^2 = 1.1030 and z2=5.02%z_2 = 5.02\%.

Step 3 — the 3-year spot. The 3-year bond pays $6, $6, $106:

100=61.04+6(1.0502)2+106(1+z3)3.100 = \frac{6}{1.04} + \frac{6}{(1.0502)^2} + \frac{106}{(1+z_3)^3}.

The first two terms are 5.769+5.439=11.2085.769 + 5.439 = 11.208, so 106(1+z3)3=88.792\frac{106}{(1+z_3)^3} = 88.792, giving (1+z3)3=1.1938(1+z_3)^3 = 1.1938 and z3=6.08%z_3 = 6.08\%.

MaturitySpot rate ztz_tDiscount factor DFtDF_t
1 year4.00%0.9615
2 years5.02%0.9066
3 years6.08%0.8377

Notice the spot curve (4.00, 5.02, 6.08) sits above the par/coupon curve (4, 5, 6) when the curve slopes upward — because each later par coupon was being “subsidised” by the cheap early discounting, and stripping reveals the true, higher long-horizon rate.

In the bootstrap above, why must you solve for z₁ before z₂?

Discount factors and no-arbitrage

The deeper truth. Bootstrapping really recovers a set of discount factors DF1,DF2,DF3,DF_1, DF_2, DF_3, \dots — the present value today of $1 delivered at each future date. Spot rates are just discount factors in disguise (DFt=(1+zt)tDF_t = (1+z_t)^{-t}). Once you have the discount factors, you can price any cash flow stream — any bond, swap, or structured note — by multiplying each cash flow by its date’s discount factor and summing. The curve is a universal pricing kernel.

Why no-arbitrage forces it. If two instruments deliver the same cash flow at the same date but imply different discount factors, you could buy the cheap one and sell the dear one for a riskless profit. Markets stamp that out, so a single consistent set of discount factors must price every default-free cash flow. Bootstrapping is how you extract that unique set from observed prices.

Fill in the bootstrap mechanics.

Pick the right option for each blank, then check.

Bootstrapping solves for spot rates . Each step has exactly unknown because every shorter rate is already known. The output is a set of , which by must price every default-free cash flow consistently.

Match each curve concept to its precise meaning.

Pick a term, then click its definition.

The practical wrinkles

Real bootstrapping is messier than three tidy par bonds:

  • Gaps and interpolation. Bonds don’t exist at every maturity, so you must interpolate the curve between traded points — linearly on the spot rates, on the log-discount factors, or with splines. Different interpolation choices give slightly different forward rates, which matters for derivatives.
  • Coupon timing. Real coupons are semiannual and bonds have odd settlement dates, so you bootstrap on the actual cash-flow dates, not neat integer years.
  • Instrument choice. Practitioners build the short end from money-market rates and futures, and the long end from swaps or government bonds — splicing several instrument types into one continuous curve.
  • Errors compound. Because the recursion reuses earlier rates, a mispriced short bond contaminates every longer rate above it. Clean inputs at the short end matter enormously.
Warning:

The recursion is only as clean as its inputs

Bootstrapping’s elegance is also its fragility: every long rate is built on the shorter rates beneath it, so an error or illiquidity at the short end propagates up the whole curve. That’s why desks obsess over the quality and liquidity of the short-end instruments, and why a single stale quote can quietly distort an entire curve — and every valuation that depends on it.

A mispricing in the 1-year bond used to bootstrap a curve will:

When to use it

You bootstrap whenever you need to discount cash flows correctly across maturities: pricing a bond off the curve rather than a single YTM, valuing a swap, marking a portfolio, or — crucially — extracting the forward rates the market has priced (the next lesson). Anytime a single yield would blur together cash flows of different horizons, you reach for the bootstrapped spot curve. It’s the foundation layer; nearly everything quantitative in fixed income sits on top of it.

Putting it together

A bond doesn’t have one yield — each of its cash flows lives at a different horizon and earns a different spot rate. Because zeros rarely trade at every maturity, we bootstrap the spot curve from coupon-bond prices: start at the short end, where the 1-year bond hands you z1z_1 directly, then climb, reusing every solved rate to strip the next bond down to a single unknown. The output is a set of discount factors that — by no-arbitrage — uniquely price every default-free cash flow. Mind the practical wrinkles (interpolation, coupon timing, error propagation), and you’ve built the curve the entire market trades off.

Big picture

Bootstrapping the spot curve

  • Bootstrapping
    • Why
      • Each horizon has its own rate
      • One YTM mis-discounts each cash flow
      • Zeros rarely trade at every maturity
    • Spot rate z_t
      • Yield on a pure zero at t
      • DF_t = 1/(1+z_t)^t
      • The "true" price of money at t
    • The recursion
      • 1-yr bond → z₁ directly
      • Strip known coupons, solve next z
      • One unknown per step
      • Short end first, climb up
    • Output
      • A set of discount factors
      • Prices any cash-flow stream
      • Unique by no-arbitrage
    • Wrinkles
      • Interpolation between maturities
      • Semiannual / odd-date coupons
      • Splice money-market + swaps + bonds
      • Errors compound up the ladder
From observed coupon-bond prices, strip out a spot rate per maturity — short end first, one unknown per step — yielding the discount factors that price everything by no-arbitrage.

Recap: bootstrapping

Question 1 of 50 correct

A spot rate z_t is best defined as:

Check your answer to continue.

Next — spot, forward, and term-structure models — we use the spot curve to extract the forward rates the market has priced for future periods, then take a first quantitative look at how rates themselves evolve: the mean-reverting Vasicek and CIR models that bridge into stochastic processes.

Mark lesson as complete