OpenBB-finance/OpenBB · error · OpenBBError
No valid dataflows found to search indicators in.This might
Error message
No valid dataflows found to search indicators in.This might be due to incorrect dataflow IDs.
What it means
Raised by search_indicators when the dataflows argument WAS provided but none of the supplied IDs exist in the loaded metadata's self.dataflows dict (or, in the no-dataflows branch, the dataflows dict itself is empty). Distinct from error 594: filters were given, but they match zero known dataflows. The message hints the IDs may simply be wrong.
Source
Thrown at openbb_platform/providers/imf/openbb_imf/utils/metadata.py:220
Returns
-------
list[dict]
A list of matching indicators with table/hierarchy information included.
"""
target_dataflow_ids: list = []
if dataflows:
target_dataflow_ids = (
[dataflows] if isinstance(dataflows, str) else dataflows
)
else:
if not query and not keywords:
raise OpenBBError(
"A query must be provided when no dataflows and keywords are specified."
)
target_dataflow_ids = list(self.dataflows.keys())
if not target_dataflow_ids:
raise OpenBBError(
"No valid dataflows found to search indicators in."
"This might be due to incorrect dataflow IDs."
)
# Build a map of indicators to their tables for enrichment
indicator_to_tables: dict[str, list[dict]] = {}
# Also build searchable text for each indicator from their tables
indicator_table_text: dict[str, str] = {}
for df_id in set(target_dataflow_ids):
try:
hierarchies = self.get_dataflow_hierarchies(df_id)
for hierarchy in hierarchies:
try:
structure = self.get_dataflow_table_structure(
df_id, hierarchy["id"]
)
# Build searchable table textView on GitHub (pinned to 3e071fcc2c)
Solutions
- List valid IDs first: inspect meta.dataflows.keys() or use search_dataflows(query='trade') to discover the right ID.
- Strip and upper-case user-supplied IDs; verify each is present before searching.
- If self.dataflows is empty, re-initialize the metadata object (its load step failed — check network) rather than retrying the search.
Example fix
# before res = meta.search_indicators(dataflows=['trade_stats']) # after valid_ids = list(meta.dataflows.keys()) df_id = next(d for d in valid_ids if 'TRADE' in d.upper()) # e.g. 'IMTS' res = meta.search_indicators(dataflows=[df_id])
Defensive patterns
Strategy: validation
Validate before calling
wanted = [d.strip().upper() for d in dataflows_list]
valid = [d for d in wanted if d in meta.dataflows]
if not valid:
raise ValueError(f'No known dataflows in {wanted}; valid examples: {sorted(meta.dataflows)[:5]}')
res = meta.search_indicators(dataflows=valid, query=query) Type guard
def are_known_dataflows(ids: list[str], catalog: dict) -> bool:
return bool(ids) and all(i in catalog for i in ids) Try / catch
try:
res = meta.search_indicators(dataflows=ids, query=q)
except OpenBBError as e:
if 'No valid dataflows' in str(e):
ids = [d for d in meta.dataflows if q.lower() in d.lower()]
res = meta.search_indicators(dataflows=ids, query=q)
else:
raise Prevention
- Normalize IDs (strip/upper) and check membership in meta.dataflows before searching.
- Discover IDs programmatically, don't hard-code guesses.
- If the catalog itself is empty, re-initialize the metadata object first.
When it happens
Trigger: dataflows='imts ' (trailing space), dataflows=['DOT','IMF'] vs actual IDs like 'IMTS' or 'DOT' depending on catalog version; metadata object built from a failed/partial load so self.dataflows is empty.
Common situations: Guessing dataflow IDs from topic names; casing/whitespace mistakes; offline or interrupted metadata initialization leaving an empty catalog; IMF renaming dataflows between releases.
Related errors
- Query string is empty or invalid -> '{query}'
- A query must be provided when no dataflows and keywords are
- Dataflow '{dataflow_id}' not found.
- Invalid {name}(s): {', '.join(invalid)}
- Invalid indicator code(s) for dataflow '{dataflow}': {'; '.j
AI-assisted analysis of OpenBB-finance/OpenBB@3e071fcc2c (2026-08-14).
Data as JSON: /api/errors/7447044d37cb7103.
Report an issue: GitHub.