{"record":{"id":"ff14c8f3215b9741","repo":"OpenBB-finance/OpenBB","slug":"fetcher-not-found-for-model-model-name-in-prov","errorCode":null,"errorMessage":"Fetcher not found for model '{model_name}' in provider '{provider.name}'.","messagePattern":"Fetcher not found for model '(.+?)' in provider '(.+?)'\\.","errorType":"exception","errorClass":"OpenBBError","httpStatus":null,"severity":"error","filePath":"openbb_platform/core/openbb_core/provider/query_executor.py","lineNumber":31,"sourceCode":"    \"\"\"Class to execute queries from providers.\"\"\"\n\n    def __init__(self, registry: Registry | None = None) -> None:\n        \"\"\"Initialize the query executor.\"\"\"\n        self.registry = registry or RegistryLoader.from_extensions()\n\n    def get_provider(self, provider_name: str) -> Provider:\n        \"\"\"Get a provider from the registry.\"\"\"\n        name = provider_name.lower()\n        if name not in self.registry.providers:\n            raise OpenBBError(\n                f\"Provider '{name}' not found in the registry.Available providers: {list(self.registry.providers.keys())}\"\n            )\n        return self.registry.providers[name]\n\n    def get_fetcher(self, provider: Provider, model_name: str) -> type[Fetcher]:\n        \"\"\"Get a fetcher from a provider.\"\"\"\n        if model_name not in provider.fetcher_dict:\n            raise OpenBBError(\n                f\"Fetcher not found for model '{model_name}' in provider '{provider.name}'.\"\n            )\n        return provider.fetcher_dict[model_name]\n\n    @staticmethod\n    def filter_credentials(\n        credentials: dict[str, SecretStr] | None,\n        provider: Provider,\n        require_credentials: bool,\n    ) -> dict[str, str]:\n        \"\"\"Filter credentials and check if they match provider requirements.\"\"\"\n        filtered_credentials = {}\n\n        if provider.credentials:\n            if credentials is None:\n                credentials = {}\n\n            for c in provider.credentials:","sourceCodeStart":13,"sourceCodeEnd":49,"githubUrl":"https://github.com/OpenBB-finance/OpenBB/blob/3e071fcc2cd9f891cac6040ae60296dba76dab46/openbb_platform/core/openbb_core/provider/query_executor.py#L13-L49","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Call the command without provider= and let OpenBB pick an implementing provider","Check coverage first: obb.coverage.providers / command-provider matrix in docs","Upgrade the provider package - newer versions add fetchers for more models","Remove the stale provider default for that command in openbb_settings.json"],"exampleFix":"# before\nres = obb.crypto.price.historical('BTC-USD', provider='fmp')\n\n# after\nres = obb.crypto.price.historical('BTC-USD', provider='yfinance')","handlingStrategy":"validation","validationCode":"from openbb import obb\n\ndef provider_supports(command: str, provider: str) -> bool:\n    # coverage maps commands to providers that implement them\n    return provider.lower() in set(obb.coverage.providers)","typeGuard":"def provider_implements(obb, command: str, provider: str) -> bool:\n    return provider.lower() in set(obb.coverage.providers)  # refine via command-provider matrix in docs","tryCatchPattern":"from openbb_core.app.model.abstract.error import OpenBBError\n\ntry:\n    res = obb.crypto.price.historical('BTC-USD', provider=p)\nexcept OpenBBError as e:\n    if 'Fetcher not found' in str(e):\n        res = obb.crypto.price.historical('BTC-USD')  # let OpenBB choose\n    else:\n        raise","preventionTips":["Omit provider= by default so the router picks an implementing provider","Check the command-provider coverage matrix when adding new endpoints to scripts","Upgrade provider packages when new standard models land in openbb-core"],"tags":["openbb","providers","fetcher","coverage"],"backgroundTag":null,"analyzedSha":"3e071fcc2cd9f891cac6040ae60296dba76dab46","analyzedAt":"2026-08-14T23:40:48.960Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}