{"record":{"id":"a4b5e2bbfef56ef0","repo":"OpenBB-finance/OpenBB","slug":"measure-measure-is-only-available-for-monthly","errorCode":null,"errorMessage":"Measure '{measure}' is only available for monthly frequency.","messagePattern":"Measure '(.+?)' is only available for monthly frequency\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"openbb_platform/providers/famafrench/openbb_famafrench/utils/helpers.py","lineNumber":819,"sourceCode":"        A tuple containing a list of pandas DataFrames and a list of metadata dictionaries.\n        In most scenarios, there will only be 1 DataFrame and 1 metadata dictionary.\n\n    Raises\n    ------\n    ValueError\n        When an invalid combination of parameters or unsupported values are supplied.\n    \"\"\"\n    if frequency and frequency.lower() not in [\"monthly\", \"annual\", \"daily\"]:\n        raise ValueError(\n            f\"Frequency {frequency} not supported. Choose from 'monthly', 'annual', or 'daily'.\"\n        )\n    if measure and measure not in [\"value\", \"equal\", \"number_of_firms\", \"firm_size\"]:\n        raise ValueError(\n            f\"Measure {measure} not supported. \"\n            + \"Choose from 'value', 'equal', 'number_of_firms', or 'firm_size'.\"\n        )\n    if measure in [\"number_of_firms\", \"firm_size\"] and frequency == \"annual\":\n        raise ValueError(\n            f\"Measure '{measure}' is only available for monthly frequency.\"\n        )\n    if \"Factor\" in dataset:\n        measure = None\n\n    file = download_file(dataset)\n    table, desc = read_csv_file(file)\n    dfs, metadata = process_csv_tables(table, desc)\n\n    if frequency:\n        out_dfs = [\n            df\n            for df, meta in zip(dfs, metadata)\n            if meta[\"frequency\"].lower() == frequency.lower()\n        ]\n        out_metadata = [\n            meta for meta in metadata if meta[\"frequency\"].lower() == frequency.lower()\n        ]","sourceCodeStart":801,"sourceCodeEnd":837,"githubUrl":"https://github.com/OpenBB-finance/OpenBB/blob/3e071fcc2cd9f891cac6040ae60296dba76dab46/openbb_platform/providers/famafrench/openbb_famafrench/utils/helpers.py#L801-L837","documentation":"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.","triggerScenarios":"Calling a US portfolio endpoint with measure='number_of_firms' (or 'firm_size') and frequency='annual'.","commonSituations":"Defaulting every request to annual data; building a frequency selector that ignores the chosen measure.","solutions":["Use frequency='monthly' for 'number_of_firms' and 'firm_size'.","In UIs, force monthly when either of those measures is selected.","If you need annual firm counts, aggregate the monthly data client-side."],"exampleFix":"// before\nobb.economy.famafrench.research_portfolios(measure='firm_size', frequency='annual')\n\n// after\nobb.economy.famafrench.research_portfolios(measure='firm_size', frequency='monthly')","handlingStrategy":"validation","validationCode":"if measure in ('number_of_firms', 'firm_size'):\n    assert frequency != 'annual', f'{measure} is monthly-only'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Constrain the frequency selector to monthly when firm_size or number_of_firms is chosen.","Aggregate monthly firm data client-side if annual views are needed."],"tags":["famafrench","validation","measure","frequency"],"backgroundTag":null,"analyzedSha":"3e071fcc2cd9f891cac6040ae60296dba76dab46","analyzedAt":"2026-08-14T23:40:48.960Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}