OpenBB-finance/OpenBB · error · ValueError

Measure '{measure}' is only available for monthly frequency.

Error message

Measure '{measure}' is only available for monthly frequency.

What it means

Raised by the US research-portfolios helper when measure is 'number_of_firms' or 'firm_size' together with frequency='annual'. Those two sheets exist only in the monthly files of the Fama/French research datasets, so the combination cannot be served.

Source

Thrown at openbb_platform/providers/famafrench/openbb_famafrench/utils/helpers.py:819

        A tuple containing a list of pandas DataFrames and a list of metadata dictionaries.
        In most scenarios, there will only be 1 DataFrame and 1 metadata dictionary.

    Raises
    ------
    ValueError
        When an invalid combination of parameters or unsupported values are supplied.
    """
    if frequency and frequency.lower() not in ["monthly", "annual", "daily"]:
        raise ValueError(
            f"Frequency {frequency} not supported. Choose from 'monthly', 'annual', or 'daily'."
        )
    if measure and measure not in ["value", "equal", "number_of_firms", "firm_size"]:
        raise ValueError(
            f"Measure {measure} not supported. "
            + "Choose from 'value', 'equal', 'number_of_firms', or 'firm_size'."
        )
    if measure in ["number_of_firms", "firm_size"] and frequency == "annual":
        raise ValueError(
            f"Measure '{measure}' is only available for monthly frequency."
        )
    if "Factor" in dataset:
        measure = None

    file = download_file(dataset)
    table, desc = read_csv_file(file)
    dfs, metadata = process_csv_tables(table, desc)

    if frequency:
        out_dfs = [
            df
            for df, meta in zip(dfs, metadata)
            if meta["frequency"].lower() == frequency.lower()
        ]
        out_metadata = [
            meta for meta in metadata if meta["frequency"].lower() == frequency.lower()
        ]

View on GitHub (pinned to 3e071fcc2c)

Solutions

  1. Use frequency='monthly' for 'number_of_firms' and 'firm_size'.
  2. In UIs, force monthly when either of those measures is selected.
  3. If you need annual firm counts, aggregate the monthly data client-side.

Example fix

// before
obb.economy.famafrench.research_portfolios(measure='firm_size', frequency='annual')

// after
obb.economy.famafrench.research_portfolios(measure='firm_size', frequency='monthly')
Defensive patterns

Strategy: validation

Validate before calling

if measure in ('number_of_firms', 'firm_size'):
    assert frequency != 'annual', f'{measure} is monthly-only'

Prevention

When it happens

Trigger: Calling a US portfolio endpoint with measure='number_of_firms' (or 'firm_size') and frequency='annual'.

Common situations: Defaulting every request to annual data; building a frequency selector that ignores the chosen measure.

Related errors


AI-assisted analysis of OpenBB-finance/OpenBB@3e071fcc2c (2026-08-14). Data as JSON: /api/errors/a4b5e2bbfef56ef0. Report an issue: GitHub.