Data SourcesUpdated 1,347 words, 6 minutes
Where free market data actually comes from, and what each source lags
Eight FRED series traced to the agency or exchange that produces them, with native frequency and the days between last observation and retrieval date, computed.
FRED is a mirror, not a source. Every series it serves is produced by an agency, a central bank, an exchange, or a company, on that producer's schedule and under that producer's terms, and the mirror inherits all of it: the frequency, the release lag, the revision policy, the licensing window. This article takes eight series that appear constantly in financial analysis, names who actually makes each one, and measures, with the attached script, how far behind the calendar each one sat on a single retrieval day. The point is not the numbers, which change daily, but the shape: a "current" dataset is a set of observations of very different ages.
The measurement
The script downloads eight series since 2025-01-01 into one wide CSV, then for each column counts the observations, takes the median spacing in days between them, records the last observation date, and subtracts it from the retrieval date.
for sid in SERIES:
s = df[sid].dropna()
spacing = s.index.to_series().diff().dt.days.median()
last = s.index[-1].date()
print(f"| {sid} | {SOURCE[sid]} | {len(s)} | {spacing:.0f} | {last} | {(RETRIEVED - last).days} | {s.iloc[-1]:,.2f} |")
Five lines of pandas; the value is in reading the result, not in the code. Output of python code/free-market-data-sources-and-lags.py for the file retrieved 2026-09-05:
| series | producer | observations | median spacing (days) | last observation | days behind retrieval | last value |
|---|---|---|---|---|---|---|
| SP500 | S&P Dow Jones Indices | 420 | 1 | 2026-09-04 | 1 | 7,718.60 |
| DGS10 | Federal Reserve Board, H.15 | 419 | 1 | 2026-09-03 | 2 | 4.77 |
| VIXCLS | Cboe | 432 | 1 | 2026-09-03 | 2 | 14.32 |
| MORTGAGE30US | Freddie Mac, PMMS | 88 | 7 | 2026-09-03 | 2 | 6.71 |
| FEDFUNDS | Federal Reserve Board, H.15 | 20 | 31 | 2026-08-01 | 35 | 3.63 |
| UNRATE | Bureau of Labor Statistics | 19 | 31 | 2026-08-01 | 35 | 4.10 |
| CPIAUCSL | Bureau of Labor Statistics | 18 | 31 | 2026-07-01 | 66 | 332.81 |
| GDPC1 | Bureau of Economic Analysis | 6 | 91 | 2026-04-01 | 157 | 24,269.61 |
"Days behind retrieval" is the gap between the date FRED stamps on the last observation and the day we pulled the file. For a monthly series FRED stamps the first of the month, so the 35 days for August unemployment means the observation describes a month that ended five days before retrieval and was published the day before. For GDP the stamp is the first day of the quarter, so 157 days is the distance to April 1 for a quarter that ended June 30 and whose latest estimate was published on 2026-08-26 (the FRED page shows that update date). The column is therefore a mix of two lags: how old the period is, and how long the producer takes to publish it. Both are real; the table does not separate them, and the reader should.
Correction, September 18, 2026: the file attached to this article no longer contains the SP500 column. The FRED series notes carry the line "Reproduction of S&P 500 in any form is prohibited except with the prior written permission of S&P Dow Jones Indices LLC", and shipping the daily closes in a downloadable CSV was exactly that. The index is produced by and copyright S&P Dow Jones Indices LLC. The shipped file now carries the other seven series, all of them from federal agencies or published without that restriction, and the S&P 500 row in the table above is reported from the 2026-09-05 retrieval as five quoted facts about the series: how many observations sat in the window, their spacing, the date of the last one, its age, and that day's close. Quoting five figures with attribution is not redistributing a series. Nothing in the table changed: we re-ran the script and every row prints as published. To measure the S&P 500 lag yourself on any later day, run python code/free-market-data-sources-and-lags.py --download, which pulls the series from FRED, prints today's row for it, and never writes it to disk.
The producers, one by one
S&P 500 (SP500). Produced by S&P Dow Jones Indices, a licensed index. FRED carries it under an agreement that limits the window: the series notes say FRED "will include 10 years of daily history" for these series, and that "since this is a price index and not a total return index, the S&P 500 index here does not contain dividends." The consequence for a researcher is that the free daily close exists, but only for a rolling decade, and any total-return calculation from it is wrong by the dividend yield.
Treasury yields (DGS10). The Federal Reserve Board's H.15 release, which takes the Treasury Department's constant-maturity curve. Daily, with market holidays present as missing rows. FRED posts it the next business day, which is the two-day gap in the table.
VIX (VIXCLS). Cboe's volatility index, daily close, described in the FRED notes as a measure of "market expectation of near term volatility conveyed by stock index option prices." It has 432 observations in the window against 420 for the S&P 500 because Cboe publishes a value on some days when the equity index does not print a FRED close, such as certain holidays; a join on date between the two will have a dozen one-sided rows.
Mortgage rate (MORTGAGE30US). Freddie Mac's Primary Mortgage Market Survey, weekly, dated on Thursday. Freddie Mac's own page says "PMMS results are released weekly on Thursdays at 12 p.m. ET", and the FRED notes record a methodology change on 2022-11-17, from a lender survey to rates from loan applications submitted through Freddie Mac's underwriting system. A series that changed how it is made in late 2022 is two series with one name, and comparisons across that date carry a caveat.
Federal funds (FEDFUNDS). Also the H.15, but as a monthly average of the daily effective rate. The daily series is DFF. Using the monthly average against daily market data is a frequency mismatch that is easy to make and hard to see.
Unemployment (UNRATE) and CPI (CPIAUCSL). Both from the Bureau of Labor Statistics, from two different surveys with two different release calendars. The Employment Situation comes out early in the following month (August 2026 was published 2026-09-04). The CPI comes out around the middle of the following month: the BLS schedule lists the August 2026 CPI for 2026-09-11 and the July 2026 CPI for 2026-08-12. That is why on 2026-09-05 unemployment was one month fresher than inflation, and why any chart that plots them on the same monthly axis is comparing a number that exists with one that does not yet.
Real GDP (GDPC1). The Bureau of Economic Analysis, quarterly, in billions of chained 2017 dollars at a seasonally adjusted annual rate. Each quarter gets three estimates about a month apart. The BEA schedule shows the second-quarter 2026 third estimate on 2026-09-30 and the third-quarter advance estimate on 2026-10-29, so the value in the table is an intermediate estimate that will change at least once more before the next quarter appears at all.
What the table does not measure
Revision risk. The lag column measures age; it says nothing about how much the last value will move. Payrolls and GDP are revised repeatedly; the CPI level is not revised but its seasonal factors are recomputed every year; market closes are final. A series can be both fresh and unstable (the advance GDP estimate) or stale and final (a market close from Thursday). The script does not attempt this, because measuring it needs vintage data, which is a later article.
Coverage and licensing. Two of the eight series exist on FRED only by agreement with a private owner, and one is windowed because of it. The others come from agencies whose data is public. The difference does not show in a CSV and it matters for anything redistributed.
Definitions. CPIAUCSL is seasonally adjusted; the headline 12-month change in the BLS release is from the unadjusted index. FEDFUNDS is a monthly mean. SP500 is a price index. None of that is in the header row. The eight producers document all of it on their own pages, which is why the Sources list here points at the producers and not only at the mirror.
The shipped CSV is the file the table was computed from, minus the S&P 500 column noted above, so the lags can be recomputed for any other retrieval date by running the script with --download and reading the new table.