Skip to content

Ken French Data Library — factors & test portfolios

Verified May 16, 2026 · tested with live CSV-zip fetch (F-F_Research_Data_Factors, 200, monthly-fresh)

asset-pricingfactorstime-seriesfreeno-api-keyacademic

The Ken French Data Library (Tuck/Dartmouth) is the canonical free source for asset-pricing factors and test assets: FF3/FF5/FF6 factors, momentum, industry portfolios, and 100+ characteristic-sorted portfolio sets. No authentication, updated monthly. It is what the ZeroPaper pipeline uses to compute alphas and build test assets. This page is the distilled recipe.

Option 1 — pandas-datareader (preferred)

Section titled “Option 1 — pandas-datareader (preferred)”
# pip install pandas-datareader
import pandas_datareader.data as web
ff3 = web.DataReader("F-F_Research_Data_Factors", "famafrench", start="1963")
ff3[0].head() # dict of DataFrames; [0] = monthly: Mkt-RF, SMB, HML, RF
import pandas as pd, zipfile, io, requests
url = ("https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/"
"ftp/F-F_Research_Data_Factors_CSV.zip")
z = zipfile.ZipFile(io.BytesIO(requests.get(url).content))
df = pd.read_csv(z.open(z.namelist()[0]), skiprows=3)

The reason to read this page rather than the library site. Verified against a live download on the date above.

  • Returns are in PERCENT, not decimal. Mkt-RF = 1.23 means 1.23%, not 123%. Divide by 100 before compounding or regressing. This is the single most common error against this data.
  • CSV has a multi-line text header. Numeric data starts after a preamble — skiprows=3 for the factors file, but it varies by dataset; never assume, inspect.
  • One file often holds multiple tables. Monthly and annual tables are stacked in the same CSV, separated by blank lines and a second header. Read only to the first blank line, or split deliberately — a naive read_csv silently concatenates them.
  • Dates are YYYYMM integers for monthly files (e.g. 202401), not parseable dates. Convert explicitly.
  • Value- vs equal-weighted. Many portfolio sets ship both; the file/column must be stated or the result isn’t reproducible.
  • pandas-datareader returns a dict, not a DataFrame — [0] is monthly, [1] annual, with a 'DESCR' key documenting the build.
DatasetContents
F-F_Research_Data_FactorsMkt-RF, SMB, HML, RF (monthly/annual)
F-F_Research_Data_5_Factors_2x3+ RMW, CMA
F-F_Momentum_FactorMOM
25_Portfolios_5x5Size × B/M test assets
100_Portfolios_10x10Size × B/M, fine grid
6_Portfolios_2x3The sorts used to build the factors

100+ more on the site (industry, international, single-sort characteristics).

  • Factor models: regress excess returns on FF3/FF5/FF6.
  • GRS test: joint test that a set of alphas is zero (use the matching test-portfolio set).
  • Sharpe ratios: mean/std of factor returns, annualized appropriately.
  • Fama-MacBeth: cross-sectional regressions on portfolio test assets.
  • Always report sample period and value- vs equal-weighting.

Fama, E. F., and K. R. French. Data from the Kenneth R. French Data Library, Tuck School of Business, Dartmouth College; https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html, accessed YYYY-MM-DD. Cite the originating papers (Fama-French 1993, 2015; Carhart 1997) as appropriate.

Found an error or want a topic covered? Open an issue, use the Edit page link above, or email contact@instituteforautomatedresearch.org. Edits are reviewed before publishing; provenance and accuracy are the point.