OpenBB-finance/OpenBB · warning · EmptyDataError

No data found for the given symbols.

Error message

No data found for the given symbols.

What it means

Raised as EmptyDataError by FMPEquityProfile.a_url: profiles are fetched per symbol concurrently; symbols with no data only emit a warning ('Symbol Error: No data found for X'). Only if ALL requested symbols returned nothing does the provider raise this error.

Source

Thrown at openbb_platform/providers/fmp/openbb_fmp/models/equity_profile.py:153

        results: list = []

        async def get_one(symbol):
            """Get data for one symbol."""
            url = f"{base_url}profile?symbol={symbol}&apikey={api_key}"
            result = await amake_request(
                url, response_callback=response_callback, **kwargs
            )
            if not result:
                warnings.warn(f"Symbol Error: No data found for {symbol}")

            if result:
                results.append(result[0])

        await asyncio.gather(*[get_one(symbol) for symbol in symbols])

        if not results:
            raise EmptyDataError("No data found for the given symbols.")

        return sorted(
            results,
            key=(lambda item: (symbols.index(item.get("symbol", len(symbols))))),
        )

    @staticmethod
    def transform_data(
        query: FMPEquityProfileQueryParams,
        data: list[dict],
        **kwargs: Any,
    ) -> list[FMPEquityProfileData]:
        """Return the transformed data."""
        results: list[FMPEquityProfileData] = []

        for d in data:
            d["year_low"], d["year_high"] = (
                d.pop("range", "-").split("-") if d.get("range") else (None, None)

View on GitHub (pinned to 3e071fcc2c)

Solutions

  1. Check the preceding warnings - they name each failing symbol; fix/remove those from the list
  2. Test one symbol at a time against obb.equity.profile to isolate bad tickers
  3. Verify the FMP API key works at all (if the key is dead, every symbol 'fails')
  4. Catch EmptyDataError and return an empty result set for batch pipelines instead of aborting

Example fix

# before
res = obb.equity.profile(symbol='FOO,BAR,BAZ', provider='fmp')  # none exist -> EmptyDataError

# after
from openbb_core.provider.utils.errors import EmptyDataError
try:
    res = obb.equity.profile(symbol='FOO,AAPL', provider='fmp')  # partial success, warning for FOO
except EmptyDataError:
    res = None
Defensive patterns

Strategy: try-catch

Validate before calling

# pre-validate the universe once
valid = [s for s in symbols if obb.equity.profile(symbol=s, provider='fmp').results]
if not valid:
    raise ValueError('None of the symbols are known to FMP')

Type guard

null

Try / catch

from openbb_core.provider.utils.errors import EmptyDataError
try:
    res = await obb.equity.profile.async_(symbol=','.join(symbols), provider='fmp')
except EmptyDataError:
    res = None  # every symbol failed; individual ones already warned

Prevention

When it happens

Trigger: Calling obb.equity.profile(symbol=...) where every symbol in the comma-separated list failed individually - all invalid/delisted/unknown to FMP. A partial failure (some symbols resolve) does NOT raise; it warns and returns the rest.

Common situations: Bulk-screening symbol lists scraped from another source where none exist on FMP, tickers from a different market (e.g. pure crypto/forex strings), stale tickers after delistings, or an expired key making every per-symbol call return empty.

Related errors


AI-assisted analysis of OpenBB-finance/OpenBB@3e071fcc2c (2026-08-14). Data as JSON: /api/errors/2f4e4aec786152c3. Report an issue: GitHub.