Strasmore Research
Learn Matt ConnorBy Matt Connor · data as of September 17, 2026 · refreshed weekly

What Is the 3m10y Spread? The Fed's Yield Curve

The 3m10y spread is the yield curve behind the New York Fed's recession model. Twenty years of readings, every inversion since 1985, and where it sits now.

The 3m10y spread is the difference between the 10-year Treasury yield and the 3-month Treasury bill yield, quoted in basis points (one basis point is a hundredth of a percentage point). It is the yield-curve measure the Federal Reserve Bank of New York feeds into its published recession-probability model, and the one Fed staff research tends to prefer over the more familiar 2s10s spread. When the 10-year yields less than the bill, the spread is negative and the curve is inverted on this measure.

What is the 3m10y spread?

Take the 10-year constant-maturity Treasury yield, subtract the 3-month constant-maturity yield, and multiply by 100 to get basis points. The two legs are different animals. A 3-month bill matures in thirteen weeks, and over a window that short its yield sits within a few basis points of the federal funds rate the Fed sets at each meeting. The 10-year yield is the market's blend of where short rates are expected to average over the coming decade, plus a term premium: the extra yield investors ask for holding a long bond through ten years of uncertainty. Side by side, the spread answers one plain question. How far is the 10-year yield above, or below, where the Fed has set the policy rate right now?

Why does the Fed watch 3m10y instead of 2s10s?

Estrella and Mishkin's 1996 research at the New York Fed built the recession-probability model the bank still updates monthly, and it uses the 3-month bill against the 10-year note. A 2018 paper by Fed Board economists Engstrom and Sharpe made a related argument: most of the curve's forecasting power sits at the front end, between the current policy rate and where the market expects it within about six quarters. The 2-year yield sits between those points, a forecast of the policy rate averaged over two years rather than the rate itself. 2s10s, then, compares two forecasts, while 3m10y compares a forecast (the 10-year) against a fact (the policy rate, as the bill expresses it). The 2022 hiking cycle shows the difference in actual yields.

QueryThree tenors through the 2022 hiking cycle, monthly averages
42 rows (showing 20)
monthmonth_labelthree_month_yieldtwo_year_yieldten_year_yield
2021-07-01Jul 20210.050.221.32
2021-08-01Aug 20210.050.221.28
2021-09-01Sep 20210.040.241.37
2021-10-01Oct 20210.050.391.58
2021-11-01Nov 20210.050.511.56
2021-12-01Dec 20210.060.681.47
2022-01-01Jan 20220.150.981.76
2022-02-01Feb 20220.311.441.93
2022-03-01Mar 20220.451.912.13
2022-04-01Apr 20220.762.542.75
2022-05-01May 20220.992.622.9
2022-06-01Jun 20221.5433.14
2022-07-01Jul 20222.33.042.9
2022-08-01Aug 20222.723.252.9
2022-09-01Sep 20223.223.863.52
2022-10-01Oct 20223.874.383.98
2022-11-01Nov 20224.324.53.89
2022-12-01Dec 20224.364.293.62
2023-01-01Jan 20234.694.213.53
2023-02-01Feb 20234.794.533.75
The exact SQL behind every number
SELECT
    toStartOfMonth(date)                          AS month,
    formatDateTime(month, '%b %Y')                AS month_label,
    round(avg(toFloat64(yield_3_month)), 2)       AS three_month_yield,
    round(avg(toFloat64(yield_2_year)), 2)        AS two_year_yield,
    round(avg(toFloat64(yield_10_year)), 2)       AS ten_year_yield
FROM global_markets.treasury_yields
WHERE date >= toDate('2021-07-01')
  AND date <  toDate('2025-01-01')
  AND yield_3_month > 0
  AND yield_2_year > 0
  AND yield_10_year > 0
GROUP BY month
ORDER BY month
Run this yourself

From Jul 2021 to Dec 2024, the 3-month yield went from 0.05% to 4.39%, the 2-year from 0.22% to 4.23%, and the 10-year from 1.32% to 4.39%. The paths, more than the endpoints, are the lesson. The 2-year climbed first, months ahead of the first hike in March 2022. The 3-month climbed in steps, each step landing in the weeks after an FOMC decision, then sat on a plateau while the 2-year drifted beneath it. Ahead of the first cut in September 2024 the 2-year fell; the 3-month fell only afterward. A spread built on the 3-month reads the policy rate as it is. A spread built on the 2-year reads it as the market expects it to become.

Twenty years of the 3m10y spread, month by month

The panel below averages each month's daily closes over the past twenty years and plots 3m10y next to 2s10s on one axis.

Query3m10y and 2s10s spreads, monthly averages over twenty years
241 rows (showing 20)
monthmonth_labelspread_3m10y_bpsspread_2s10s_bps
2006-09-01Sep 2006-21-5
2006-10-01Oct 2006-32-7
2006-11-01Nov 2006-48-15
2006-12-01Dec 2006-41-11
2007-01-01Jan 2007-35-12
2007-02-01Feb 2007-44-13
2007-03-01Mar 2007-52-1
2007-04-01Apr 2007-313
2007-05-01May 2007-12-2
2007-06-01Jun 20073612
2007-07-01Jul 2007419
2007-08-01Aug 20073636
2007-09-01Sep 20075351
2007-10-01Oct 20075256
2007-11-01Nov 20077981
2007-12-01Dec 200710398
2008-01-01Jan 200892127
2008-02-01Feb 2008156176
2008-03-01Mar 2008223189
2008-04-01Apr 2008236163
The exact SQL behind every number
SELECT
    toStartOfMonth(date)                                                              AS month,
    formatDateTime(month, '%b %Y')                                                    AS month_label,
    toInt32(round(avg(toFloat64(yield_10_year) - toFloat64(yield_3_month)) * 100))    AS spread_3m10y_bps,
    toInt32(round(avg(toFloat64(yield_10_year) - toFloat64(yield_2_year)) * 100))     AS spread_2s10s_bps
FROM global_markets.treasury_yields
WHERE date >= toStartOfMonth(subtractYears(today(), 20))
  AND yield_3_month > 0
  AND yield_2_year > 0
  AND yield_10_year > 0
GROUP BY month
ORDER BY month
Run this yourself

The series runs from Sep 2006 through Sep 2026, 241 months in all, with the final month a partial reading while it is still in progress. The latest monthly average is 88 bps for 3m10y and 38 bps for 2s10s. Two features repeat in every cycle. The 3m10y line swings through a wider range than 2s10s, one leg of it pinned to the policy rate while the other floats. And it turns later, both into an inversion and out of one: the 2-year moves when the market expects the Fed to act, the 3-month moves when the Fed acts.

Every 3m10y inversion since 1985

An inversion is any stretch in which the spread is negative. Counted on daily closes, the curve can flicker across zero for a day and back, which splits one episode into a dozen fragments. The panel below uses monthly averages instead: an episode starts in the first month whose average spread is below zero and ends with the last consecutive month that stays there. Depth is the lowest monthly average inside the episode.

QueryEvery 3m10y inversion since 1985, on monthly averages
beganendedstart_datemonths_inverteddeepest_month_bpsaverage_depth_bps
Jun 1989Aug 19891989-06-013-16-11
Nov 1989Dec 19891989-11-012-7-6
Jul 2000Jan 20012000-07-017-70-42
Aug 2006May 20072006-08-0110-52-34
May 2019Sep 20192019-05-015-36-17
Feb 2020Feb 20202020-02-011-4-4
Nov 2022Nov 20242022-11-0125-173-115
Mar 2025Apr 20252025-03-012-6-5
Jun 2025Aug 20252025-06-013-4-3
The exact SQL behind every number
SELECT
    formatDateTime(min(month), '%b %Y')   AS began,
    formatDateTime(max(month), '%b %Y')   AS ended,
    toString(min(month))                  AS start_date,
    count()                               AS months_inverted,
    toInt32(round(min(spread_bps)))       AS deepest_month_bps,
    toInt32(round(avg(spread_bps)))       AS average_depth_bps
FROM
(
    SELECT
        month,
        spread_bps,
        sum(if(spread_bps < 0, 0, 1)) OVER (ORDER BY month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS run_id
    FROM
    (
        SELECT
            toStartOfMonth(date)                                              AS month,
            avg(toFloat64(yield_10_year) - toFloat64(yield_3_month)) * 100    AS spread_bps
        FROM global_markets.treasury_yields
        WHERE date >= toDate('1985-01-01')
          AND yield_3_month > 0
          AND yield_10_year > 0
        GROUP BY month
    )
)
WHERE spread_bps < 0
GROUP BY run_id
ORDER BY start_date
Run this yourself

That definition produces 9 episodes since 1985. The earliest on the table began in Jun 1989 and lasted 3 months. The most recent began in Jun 2025, lasted 3 months, and bottomed at -4 bps in its deepest month, averaging -3 bps across the whole stretch. On the NBER's business-cycle chronology, recessions began in July 1990, March 2001, December 2007, and February 2020, each within about two years of an episode on this table. That regularity is what the New York Fed model rests on: the 3m10y spread has preceded past recessions, with lead times that ranged from a few months to nearly two years. The lead time is the part no model pins down.

Where is the 3m10y spread today?

The last three months of daily closes, both legs and both spreads:

Query3-month and 10-year yields with both spreads, last 90 days
60 rows (showing 20)
datedate_labelthree_month_yieldten_year_yieldspread_3m10y_bpsspread_2s10s_bps
2026-06-22Jun 22, 20263.854.516627
2026-06-23Jun 23, 20263.854.56534
2026-06-24Jun 24, 20263.854.415630
2026-06-25Jun 25, 20263.844.45631
2026-06-26Jun 26, 20263.834.385531
2026-06-29Jun 29, 20263.874.385128
2026-06-30Jun 30, 20263.874.445730
2026-07-01Jul 1, 20263.854.486331
2026-07-02Jul 2, 20263.824.496735
2026-07-06Jul 6, 20263.874.486135
2026-07-07Jul 7, 20263.864.556936
2026-07-08Jul 8, 20263.874.566935
2026-07-09Jul 9, 20263.834.547138
2026-07-10Jul 10, 20263.854.567135
2026-07-13Jul 13, 20263.894.627336
2026-07-14Jul 14, 20263.844.587440
2026-07-15Jul 15, 20263.834.557242
2026-07-16Jul 16, 20263.844.577341
2026-07-17Jul 17, 20263.854.557037
2026-07-20Jul 20, 20263.864.67439
The exact SQL behind every number
SELECT
    date,
    formatDateTime(date, '%b %e, %Y')                                                      AS date_label,
    round(max(toFloat64(yield_3_month)), 2)                                                AS three_month_yield,
    round(max(toFloat64(yield_10_year)), 2)                                                AS ten_year_yield,
    toInt32(round((max(toFloat64(yield_10_year)) - max(toFloat64(yield_3_month))) * 100))  AS spread_3m10y_bps,
    toInt32(round((max(toFloat64(yield_10_year)) - max(toFloat64(yield_2_year))) * 100))   AS spread_2s10s_bps
FROM global_markets.treasury_yields
WHERE date >= today() - 90
  AND yield_3_month > 0
  AND yield_2_year > 0
  AND yield_10_year > 0
GROUP BY date
ORDER BY date
Run this yourself

As of Sep 15, 2026, the 3-month yield closed at 4.11% and the 10-year at 5%, a 3m10y spread of 89 bps; 2s10s closed the same session at 33 bps. The sign carries the reading. A positive number means the 10-year yields more than the bill; a negative one means the curve is inverted on this measure. For how the front end arrived here, the Treasury curve through the first half of 2026 walks each tenor month by month, and how markets price Fed rate odds covers the futures-implied path that the 2-year already embeds and the 3-month does not.

Where 2s10s and 3m10y disagreed

The two spreads agree most of the time. The splits are where the teaching is, and three are worth knowing. The panel below counts, for each window, the sessions on which each spread closed below zero, and shows the first and last such close beside the deepest print.

Query2s10s versus 3m10y in three inversion windows, daily closes
labeldays_2s10s_inverteddays_3m10y_inverteddeepest_2s10s_bpsdeepest_3m10y_bpsfirst_2s10s_inversionfirst_3m10y_inversionlast_2s10s_inversionlast_3m10y_inversion
2006-07235243-19-64Jan 31, 2006Jan 17, 2006Jun 5, 2007Aug 27, 2007
20193104-4-52Aug 27, 2019Mar 22, 2019Aug 29, 2019Oct 10, 2019
2022-24541535-108-189Apr 1, 2022Oct 18, 2022Sep 5, 2024Dec 12, 2024
The exact SQL behind every number
SELECT
    label,
    countIf(spread_2s10s_bps < 0)                                   AS days_2s10s_inverted,
    countIf(spread_3m10y_bps < 0)                                   AS days_3m10y_inverted,
    toInt32(round(min(spread_2s10s_bps)))                           AS deepest_2s10s_bps,
    toInt32(round(min(spread_3m10y_bps)))                           AS deepest_3m10y_bps,
    if(countIf(spread_2s10s_bps < 0) > 0,
       formatDateTime(minIf(date, spread_2s10s_bps < 0), '%b %e, %Y'), 'never') AS first_2s10s_inversion,
    if(countIf(spread_3m10y_bps < 0) > 0,
       formatDateTime(minIf(date, spread_3m10y_bps < 0), '%b %e, %Y'), 'never') AS first_3m10y_inversion,
    if(countIf(spread_2s10s_bps < 0) > 0,
       formatDateTime(maxIf(date, spread_2s10s_bps < 0), '%b %e, %Y'), 'never') AS last_2s10s_inversion,
    if(countIf(spread_3m10y_bps < 0) > 0,
       formatDateTime(maxIf(date, spread_3m10y_bps < 0), '%b %e, %Y'), 'never') AS last_3m10y_inversion
FROM
(
    SELECT
        date,
        multiIf(date BETWEEN toDate('2006-01-01') AND toDate('2007-12-31'), '2006-07',
                date BETWEEN toDate('2019-01-01') AND toDate('2019-12-31'), '2019',
                date BETWEEN toDate('2022-01-01') AND toDate('2024-12-31'), '2022-24',
                'other')                                                        AS label,
        (toFloat64(yield_10_year) - toFloat64(yield_2_year)) * 100              AS spread_2s10s_bps,
        (toFloat64(yield_10_year) - toFloat64(yield_3_month)) * 100             AS spread_3m10y_bps
    FROM global_markets.treasury_yields
    WHERE date >= toDate('2006-01-01')
      AND date <  toDate('2025-01-01')
      AND yield_3_month > 0
      AND yield_2_year > 0
      AND yield_10_year > 0
)
WHERE label != 'other'
GROUP BY label
ORDER BY label
Run this yourself

2006 to 2007 was broad agreement: 2s10s closed inverted on 235 sessions across the two years and 3m10y on 243, with 3m10y the deeper of the two at -64 bps against -19 bps. A recession began in December 2007, and both measures were on the right side of it.

2019 was a genuine split. 3m10y closed inverted on 104 sessions, the first on Mar 22, 2019 and the last on Oct 10, 2019, and bottomed at -52 bps. 2s10s closed inverted on 3 sessions all year. The Fed cut rates three times between July and October 2019, and the recession that arrived in February 2020 came alongside a pandemic no yield curve could have anticipated. A fair scorecard credits 3m10y with reading the 2019 easing and credits neither measure with foreseeing 2020.

2022 to 2024 was the longest 3m10y inversion on the table above, and the two measures disagreed at both ends. 2s10s first closed below zero on Apr 1, 2022; 3m10y did not until Oct 18, 2022. From there 3m10y went far deeper, bottoming at -189 bps against -108 bps for 2s10s. At the exit, 2s10s posted its last negative close on Sep 5, 2024, in the run-up to the Fed's first cut on September 18, 2024; 3m10y stayed negative until Dec 12, 2024, roughly three months into the cutting cycle. Through the first half of 2026 the NBER had not added a business-cycle peak after February 2020 to its chronology, and on the recession question both measures were wrong for the same stretch of time. On the mechanics, each did its job: 2s10s moved when cuts became expected, 3m10y moved when they were delivered. The macro picture entering the second half of 2026 picks up the story from there.

FAQ

What is the 3m10y spread?

The 3m10y spread is the 10-year Treasury yield minus the 3-month Treasury bill yield, expressed in basis points. A negative reading means the bill yields more than the note, which is called an inverted curve. It is the version of the yield curve used in the New York Fed's recession-probability model.

Is the 3m10y spread a better recession indicator than 2s10s?

Fed research has generally favored 3m10y, or the near-term forward spread, on the argument that the short end reads the current policy rate directly while the 2-year reads a forecast of it. Both measures inverted ahead of the 1990, 2001, 2007, and 2020 recessions, and both inverted from 2022 to 2024 with no recession dated through the first half of 2026. Neither works as a timer.

What does it mean when the 3m10y spread is inverted?

An inverted 3m10y means investors are lending to the Treasury for ten years at a lower yield than the Fed's current policy rate, as the 3-month bill expresses it. Read plainly, the bond market expects short rates over the coming decade to average below today's level once a term premium is allowed for. It describes expected rates; it does not date any event.

How does the New York Fed turn the spread into a recession probability?

The model is a probit regression: it takes the monthly average of the 3m10y spread and maps it to the probability of a recession beginning within the next twelve months, fitted on decades of history. The bank publishes the updated figure each month. Its inputs are its own monthly bill and note series; the panels on this page use the Treasury's constant-maturity 3-month and 10-year yields, and the two spreads can differ by a few basis points in a given month.


Every panel on this page carries the SQL that produced it. To pull the same series for any pair of tenors, or to rebuild the inversion table on daily closes rather than monthly averages, ask the Strasmore terminal in plain English.

#yield curve#3m10y#treasuries#recession indicator#2s10s