OpenBB-finance/OpenBB · warning · OpenBBError
No data rows found for dataflow '{dataflow}' with parameters
Error message
No data rows found for dataflow '{dataflow}' with parameters: {param_info}. The IMF constraints API reports this combination as valid, but no actual observations were returned in the data. URL -> {url} What it means
Deep in fetch_data: the XML contained a DataSet but parsing produced zero data rows, despite the IMF constraints API earlier reporting the dimension combination valid. Raised as EmptyDataError-wrapped OpenBBError with the parameters and URL for diagnosis.
Source
Thrown at openbb_platform/providers/imf/openbb_imf/utils/query_builder.py:922
].get(derivation_type, derivation_type)
derivation_types_in_series.add(derivation_type)
all_data_rows.append(obs_row)
if indicator_code and derivation_types_in_series:
if len(derivation_types_in_series) == 1:
all_series_derivation_types[indicator_code] = list(
derivation_types_in_series
)[0]
else:
all_series_derivation_types[indicator_code] = "; ".join(
sorted(derivation_types_in_series)
)
if not all_data_rows:
# Build a more helpful error message with parameter info
param_info = ", ".join(f"{k}={v}" for k, v in kwargs.items() if v)
raise OpenBBError(
EmptyDataError(
f"No data rows found for dataflow '{dataflow}' with parameters: "
+ f"{param_info}. "
+ "The IMF constraints API reports this combination as valid, "
+ "but no actual observations were returned in the data. "
+ f"URL -> {url}"
)
)
# Create DataFrame and clean up
df = DataFrame(all_data_rows)
df = df.rename(columns={"value": "OBS_VALUE"})
df["OBS_VALUE"] = to_numeric(df["OBS_VALUE"], errors="coerce")
# Parse TIME_PERIOD into valid date format
if "TIME_PERIOD" in df.columns:
df["TIME_PERIOD"] = df["TIME_PERIOD"].apply(parse_time_period)
View on GitHub (pinned to 3e071fcc2c)
Solutions
- Open the URL from the message and confirm no Series/Obs elements exist server-side.
- Widen the query (wildcard a dimension) or extend the date range, then filter locally.
- Pick an adjacent indicator in the same hierarchy that actually has data.
- Handle it as expected empty data in ETL (log and continue) rather than a crash.
Example fix
# before
try:
df = qb.fetch_data(url)
except OpenBBError:
raise # pipeline dies on structurally-valid-but-empty series
# after
try:
df = qb.fetch_data(url)
except OpenBBError as e:
if 'No data rows found' in str(e):
df = pd.DataFrame() # expected gap; continue
else:
raise Defensive patterns
Strategy: fallback
Try / catch
try:
df = qb.fetch_data(url)
except OpenBBError as e:
if 'No data rows found' in str(e):
df = pd.DataFrame() # or widen the key / extend dates and retry once
else:
raise Prevention
- Expect structurally-valid-but-unpopulated series when exploring IMF catalogs.
- Widen the query (wildcard a dimension, extend dates) before concluding data is missing.
- Log the URL from the message for post-hoc verification in a browser.
When it happens
Trigger: A series exists in metadata/constraints but has no observations for the requested key (e.g. discontinued indicator, country not reporting that series), or all observations were filtered out by the requested date range handled downstream.
Common situations: Exploring the SDMX catalog and picking codes that are structurally valid but never populated; requesting recent periods for slow-reporting series.
Related errors
- No data found in the response. URL: {url}
- No presentation hierarchies found for dataflow '{dataflow_id
- OBBject Extension Error -> An OBBject extension that acts
- Please install polars: `pip install polars pyarrow` to use
- Chart not found.
AI-assisted analysis of OpenBB-finance/OpenBB@3e071fcc2c (2026-08-14).
Data as JSON: /api/errors/7eb8bfe0a18e3422.
Report an issue: GitHub.