OpenBB-finance/OpenBB · error · OpenBBError
Invalid industry '{v}'. Available industries are: {', '.join
Error message
Invalid industry '{v}'. Available industries are:
{', '.join(INDUSTRY_MAP)} What it means
Finviz equity screener query params validator rejects the `industry` field when the value is not a key of INDUSTRY_MAP. The message lists all valid industry names. It fires during pydantic validation, before any HTTP request, so no API quota is consumed.
Source
Thrown at openbb_platform/providers/finviz/openbb_finviz/models/equity_screener.py:140
description=QUERY_DESCRIPTIONS.get("limit", ""),
)
@field_validator("signal", mode="before", check_fields=False)
@classmethod
def validate_signal(cls, v):
"""Validate the signal."""
if v is not None and v not in SIGNALS:
raise OpenBBError(
f"Invalid signal '{v}'. Available signals are:\n{SIGNALS_DESC_STR}"
)
return v if v else None
@field_validator("industry", mode="before", check_fields=False)
@classmethod
def validate_industry(cls, v):
"""Validate the industry."""
if v is not None and v not in INDUSTRY_MAP:
raise OpenBBError(
f"Invalid industry '{v}'. Available industries are:\n{', '.join(INDUSTRY_MAP)}"
)
return v if v else None
@field_validator("preset", mode="before", check_fields=False)
@classmethod
def validate_preset(cls, v):
"""Check to reject running template file."""
if v is not None and v == "screener_template":
raise OpenBBError(
f"Invalid preset '{v}'. Please rename the file to use as a preset."
)
return v if v else None
@field_validator("filters_dict", mode="before", check_fields=False)
@classmethod
def validate_filters_dict(cls, v):
"""Validate the filters_dict."""View on GitHub (pinned to 3e071fcc2c)
Solutions
- Pick the exact industry name from the INDUSTRY_MAP list printed in the error
- Validate against openbb_finviz INDUSTRY_MAP programmatically before constructing the query
- Fuzzy-match user input to the closest key when accepting free-form input
Example fix
# before q = FinvizEquityScreenerQueryParams(industry="Tech") # not in INDUSTRY_MAP # after from openbb_finviz.utils.reference_data import INDUSTRY_MAP # dict name->no match = [k for k in INDUSTRY_MAP if "software" in k.lower()] q = FinvizEquityScreenerQueryParams(industry=match[0])
Defensive patterns
Strategy: validation
Validate before calling
from openbb_finviz.utils.reference_data import INDUSTRY_MAP
if industry is not None and industry not in INDUSTRY_MAP:
candidates = [k for k in INDUSTRY_MAP if industry.lower() in k.lower()]
industry = candidates[0] if len(candidates) == 1 else None
assert industry is None or industry in INDUSTRY_MAP Type guard
def is_valid_industry(v: str | None) -> bool:
return v is None or v in INDUSTRY_MAP Try / catch
from openbb_core.app.model.obb_error import OpenBBError
try:
q = FinvizEquityScreenerQueryParams(industry=industry)
except OpenBBError as e:
raise ValueError(f"Fix industry selection: {e}") from e Prevention
- Use Finviz's granular industry names, not GICS/Yahoo sectors
- Populate dropdowns from INDUSTRY_MAP so users cannot type invalid values
- Re-validate stored industry strings after upgrading the provider
When it happens
Trigger: Passing industry='Technology' (not a valid Finviz industry name; Finviz uses granular names like 'Software - Application'); mismatched casing/punctuation; industries renamed between finvizfinance versions.
Common situations: Users assuming GICS or Yahoo sector/industry vocabulary; hard-coded industry strings that broke when the Finviz taxonomy changed; copy-paste from the Finviz UI that introduces trailing spaces.
Related errors
- Invalid signal '{v}'. Available signals are: {SIGNALS_DESC_S
- Invalid preset '{v}'. Please rename the file to use as a pre
- Invalid JSON format for 'filters_dict': {e}
- Invalid 'filters_dict' format. Must be a dictionary or seria
- Invalid preset '{preset}'. Available presets are: {list(pres
AI-assisted analysis of OpenBB-finance/OpenBB@3e071fcc2c (2026-08-14).
Data as JSON: /api/errors/918b20c45de82061.
Report an issue: GitHub.