{"record":{"id":"fbf6b6ca4b25aeeb","repo":"OpenBB-finance/OpenBB","slug":"no-summary-data-found-the-data-source-may-have-ch","errorCode":null,"errorMessage":"No summary data found. The data source may have changed.","messagePattern":"No summary data found\\. The data source may have changed\\.","errorType":"exception","errorClass":"OpenBBError","httpStatus":null,"severity":"error","filePath":"openbb_platform/providers/federal_reserve/openbb_federal_reserve/models/total_factor_productivity.py","lineNumber":589,"sourceCode":"        if frequency == \"summary\":\n            # Summary rows are those that don't match the date pattern\n            summary_df = df[~valid_mask].copy()\n            summary_df = summary_df.rename(columns={date_col: \"period\"})\n            summary_df = summary_df[summary_df[\"period\"].isin(PERIOD_COLUMN_MAP.keys())]\n            summary_df = summary_df.set_index(\"period\").T.reset_index()\n            summary_df = summary_df.rename(\n                columns={\"index\": \"variable\", **PERIOD_COLUMN_MAP}\n            )\n            summary_df[\"variable_title\"] = summary_df[\"variable\"].map(VARIABLE_TITLES)\n            summary_df = summary_df.replace({np.nan: None})\n\n            results: list[FederalReserveTfpData] = [\n                FederalReserveTfpData.model_validate(row.to_dict())\n                for _, row in summary_df.iterrows()\n            ]\n\n            if not results:\n                raise OpenBBError(\n                    \"No summary data found. The data source may have changed.\"\n                )\n\n            return results\n\n        # Time series data\n        data_df = df[valid_mask].copy()\n\n        if frequency == \"quarter\":\n            # Convert \"YYYY:QN\" to proper dates\n            date_series = pd.PeriodIndex(\n                data_df[date_col].str.replace(\":\", \"\"), freq=\"Q\"\n            ).to_timestamp()\n            data_df[date_col] = date_series.date\n        else:\n            # Annual: convert year to January 1 of that year\n            data_df[date_col] = pd.to_datetime(\n                data_df[date_col].astype(int), format=\"%Y\"","sourceCodeStart":571,"sourceCodeEnd":607,"githubUrl":"https://github.com/OpenBB-finance/OpenBB/blob/3e071fcc2cd9f891cac6040ae60296dba76dab46/openbb_platform/providers/federal_reserve/openbb_federal_reserve/models/total_factor_productivity.py#L571-L607","documentation":"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.","triggerScenarios":"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).","commonSituations":"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.","solutions":["Update the openbb-federal-reserve provider package — scraper fixes for layout changes ship as patches.","Inspect the fetched raw data (log the DataFrame before transform) to see which columns the site now emits and compare with PERIOD_COLUMN_MAP.","If maintaining a fork, update PERIOD_COLUMN_MAP and VARIABLE_TITLES to the new table headers."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    res = obb.economy.tfp(provider='federal_reserve', transform='summary')\nexcept OpenBBError as e:\n    if 'data source may have changed' in str(e):\n        log_provider_update_needed(e)\n    raise","preventionTips":["Update the provider when the Fed site redesigns pages","Cache summary results; scraper breakages are common"],"tags":["openbb","scraper","upstream-change","tfp"],"backgroundTag":null,"analyzedSha":"3e071fcc2cd9f891cac6040ae60296dba76dab46","analyzedAt":"2026-08-14T23:40:48.960Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}