OpenBB-finance/OpenBB · error · OpenBBError

No summary data found. The data source may have changed.

Error message

No summary data found. The data source may have changed.

What it means

Raised in the 'summary' branch of total_factor_productivity transform: after pivoting the raw table into PERIOD_COLUMN_MAP columns and validating each row, the results list is empty. The message explicitly flags that the Fed's TFP page/table structure may have changed, since a correctly-shaped scrape always yields at least one summary row.

Source

Thrown at openbb_platform/providers/federal_reserve/openbb_federal_reserve/models/total_factor_productivity.py:589

        if frequency == "summary":
            # Summary rows are those that don't match the date pattern
            summary_df = df[~valid_mask].copy()
            summary_df = summary_df.rename(columns={date_col: "period"})
            summary_df = summary_df[summary_df["period"].isin(PERIOD_COLUMN_MAP.keys())]
            summary_df = summary_df.set_index("period").T.reset_index()
            summary_df = summary_df.rename(
                columns={"index": "variable", **PERIOD_COLUMN_MAP}
            )
            summary_df["variable_title"] = summary_df["variable"].map(VARIABLE_TITLES)
            summary_df = summary_df.replace({np.nan: None})

            results: list[FederalReserveTfpData] = [
                FederalReserveTfpData.model_validate(row.to_dict())
                for _, row in summary_df.iterrows()
            ]

            if not results:
                raise OpenBBError(
                    "No summary data found. The data source may have changed."
                )

            return results

        # Time series data
        data_df = df[valid_mask].copy()

        if frequency == "quarter":
            # Convert "YYYY:QN" to proper dates
            date_series = pd.PeriodIndex(
                data_df[date_col].str.replace(":", ""), freq="Q"
            ).to_timestamp()
            data_df[date_col] = date_series.date
        else:
            # Annual: convert year to January 1 of that year
            data_df[date_col] = pd.to_datetime(
                data_df[date_col].astype(int), format="%Y"

View on GitHub (pinned to 3e071fcc2c)

Solutions

  1. Update the openbb-federal-reserve provider package — scraper fixes for layout changes ship as patches.
  2. Inspect the fetched raw data (log the DataFrame before transform) to see which columns the site now emits and compare with PERIOD_COLUMN_MAP.
  3. If maintaining a fork, update PERIOD_COLUMN_MAP and VARIABLE_TITLES to the new table headers.
Defensive patterns

Strategy: try-catch

Try / catch

try:
    res = obb.economy.tfp(provider='federal_reserve', transform='summary')
except OpenBBError as e:
    if 'data source may have changed' in str(e):
        log_provider_update_needed(e)
    raise

Prevention

When it happens

Trigger: Calling the TFP fetcher with the summary transform where the scraped DataFrame's columns no longer align with PERIOD_COLUMN_MAP/VARIABLE_TITLES, so model_validate produces zero rows (or the source table layout changed so summary_df ends up empty before iteration).

Common situations: The Fed redesigned its TFP data page (renamed variables, different period columns); provider version lagging behind the site; np.nan replacement masking rows that then fail validation.

Related errors


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