OpenBB-finance/OpenBB · error · OpenBBError

Fetcher not found for model '{model_name}' in provider '{pro

Error message

Fetcher not found for model '{model_name}' in provider '{provider.name}'.

What it means

OpenBBError from QueryExecutor.get_fetcher: the named provider exists in the registry, but its fetcher_dict has no entry for the requested model name - i.e. this provider does not implement the data model the command maps to. Every command/model combination is provider-specific, and coverage is not uniform across providers.

Source

Thrown at openbb_platform/core/openbb_core/provider/query_executor.py:31

    """Class to execute queries from providers."""

    def __init__(self, registry: Registry | None = None) -> None:
        """Initialize the query executor."""
        self.registry = registry or RegistryLoader.from_extensions()

    def get_provider(self, provider_name: str) -> Provider:
        """Get a provider from the registry."""
        name = provider_name.lower()
        if name not in self.registry.providers:
            raise OpenBBError(
                f"Provider '{name}' not found in the registry.Available providers: {list(self.registry.providers.keys())}"
            )
        return self.registry.providers[name]

    def get_fetcher(self, provider: Provider, model_name: str) -> type[Fetcher]:
        """Get a fetcher from a provider."""
        if model_name not in provider.fetcher_dict:
            raise OpenBBError(
                f"Fetcher not found for model '{model_name}' in provider '{provider.name}'."
            )
        return provider.fetcher_dict[model_name]

    @staticmethod
    def filter_credentials(
        credentials: dict[str, SecretStr] | None,
        provider: Provider,
        require_credentials: bool,
    ) -> dict[str, str]:
        """Filter credentials and check if they match provider requirements."""
        filtered_credentials = {}

        if provider.credentials:
            if credentials is None:
                credentials = {}

            for c in provider.credentials:

View on GitHub (pinned to 3e071fcc2c)

Solutions

  1. Call the command without provider= and let OpenBB pick an implementing provider
  2. Check coverage first: obb.coverage.providers / command-provider matrix in docs
  3. Upgrade the provider package - newer versions add fetchers for more models
  4. Remove the stale provider default for that command in openbb_settings.json

Example fix

# before
res = obb.crypto.price.historical('BTC-USD', provider='fmp')

# after
res = obb.crypto.price.historical('BTC-USD', provider='yfinance')
Defensive patterns

Strategy: validation

Validate before calling

from openbb import obb

def provider_supports(command: str, provider: str) -> bool:
    # coverage maps commands to providers that implement them
    return provider.lower() in set(obb.coverage.providers)

Type guard

def provider_implements(obb, command: str, provider: str) -> bool:
    return provider.lower() in set(obb.coverage.providers)  # refine via command-provider matrix in docs

Try / catch

from openbb_core.app.model.abstract.error import OpenBBError

try:
    res = obb.crypto.price.historical('BTC-USD', provider=p)
except OpenBBError as e:
    if 'Fetcher not found' in str(e):
        res = obb.crypto.price.historical('BTC-USD')  # let OpenBB choose
    else:
        raise

Prevention

When it happens

Trigger: Calling a command the provider doesn't support: obb.crypto.price.historical('BTC-USD', provider='fmp') when FMP's fetcher dict lacks that model; requesting e.g. 'economy.gdp' from a provider that only covers markets. The router's provider list for the command normally excludes such providers, so this typically appears with explicit provider= or stale defaults.

Common situations: Forcing a provider on commands where it has no coverage; defaults file pinning a provider for a command after a schema/model rename; version mismatch where an older provider package lacks fetchers for newer standard models.

Related errors


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