{"record":{"id":"d80b69731dafb535","repo":"OpenBB-finance/OpenBB","slug":"error-no-validated-data-was-found","errorCode":null,"errorMessage":"Error: No validated data was found.","messagePattern":"Error: No validated data was found\\.","errorType":"exception","errorClass":"OpenBBError","httpStatus":null,"severity":"error","filePath":"openbb_platform/core/openbb_core/provider/utils/options_chains_properties.py","lineNumber":73,"sourceCode":"            self.model_dump(\n                exclude_unset=True,\n                exclude_none=True,\n            )\n        )\n\n        if \"underlying_price\" not in chains_data.columns and not self.last_price:\n            raise OpenBBError(\n                \"'underlying_price' was not returned in the provider data.\"\n                + \"\\n\\n Please set the 'last_price' property and try again.\"\n                + \"\\n\\n Note: This error does not impact the standard OBBject `to_df()` method.\"\n            )\n\n        # Add the underlying price to the DataFrame, or override the existing price.\n        if self.last_price:\n            chains_data[\"underlying_price\"] = self.last_price\n\n        if chains_data.empty:\n            raise OpenBBError(\"Error: No validated data was found.\")\n\n        if \"dte\" not in chains_data.columns and \"eod_date\" in chains_data.columns:\n            _date = to_datetime(chains_data.eod_date)\n            temp = DatetimeIndex(chains_data.expiration)\n            temp_ = temp - _date  # type: ignore\n            chains_data[\"dte\"] = [Timedelta(_temp_).days for _temp_ in temp_]\n\n        if \"dte\" in chains_data.columns:\n            chains_data = DataFrame(chains_data[chains_data.dte >= 0])\n\n        if \"dte\" not in chains_data.columns and \"eod_date\" not in chains_data.columns:\n            today = datetime.today().date()\n            chains_data[\"dte\"] = chains_data.expiration - today\n\n        # Add the breakeven price for each option, and the DEX and GEX for each option, if available.\n        try:\n            _calls = DataFrame(chains_data[chains_data.option_type == \"call\"])\n            _puts = DataFrame(chains_data[chains_data.option_type == \"put\"])","sourceCodeStart":55,"sourceCodeEnd":91,"githubUrl":"https://github.com/OpenBB-finance/OpenBB/blob/3e071fcc2cd9f891cac6040ae60296dba76dab46/openbb_platform/core/openbb_core/provider/utils/options_chains_properties.py#L55-L91","documentation":"Raised by OptionsChainsData.dataframe when the DataFrame constructed from the validated model dump is empty after the underlying_price handling. It means the provider result object passed validation but contained zero usable rows (or everything was excluded by exclude_unset/exclude_none during the dump), so there is nothing to enrich.","triggerScenarios":"Calling .dataframe on an OptionsChainsData built from an empty list of contracts; a provider returning an empty chains payload for a symbol with no listed options (some ETFs/OTM-only tickers); constructing OptionsChainsData(results=[]) manually in tests.","commonSituations":"Querying options for tickers without an options chain, pre-market/weekend when a provider returns an empty payload, or upstream API changes silently returning empty results that still pass validation.","solutions":["Check the raw result first: if res.results is empty or res.to_df().empty, skip the enriched access","Confirm the symbol actually has listed options on the provider (try another provider to compare)","Retry during market hours if the provider only populates chains intraday"],"exampleFix":"# before\ndf = res.dataframe  # OpenBBError: No validated data was found.\n\n# after\nif not res.results:\n    raise ValueError(f\"no options data returned for {symbol}\")\ndf = res.dataframe","handlingStrategy":"validation","validationCode":"if not res.results:\n    raise ValueError(f\"provider returned no options rows for {symbol}; skip enrichment\")\n# only now access res.dataframe","typeGuard":null,"tryCatchPattern":"from openbb_core.app.model.abstract.error import OpenBBError\n\ntry:\n    df = res.dataframe\nexcept OpenBBError as e:\n    if \"No validated data was found\" in str(e):\n        df = res.to_df()  # inspect the raw payload to diagnose\n        if df.empty:\n            return None  # or retry with another provider\n    raise","preventionTips":["Check res.results / to_df().empty before any enriched access","Verify the symbol has listed options before building analytics on it","Retry against a second provider when the first returns an empty chain"],"tags":["options","empty-data","dataframe","derivatives"],"backgroundTag":null,"analyzedSha":"3e071fcc2cd9f891cac6040ae60296dba76dab46","analyzedAt":"2026-08-14T23:40:48.960Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}