- Category
- Finance
- Rank
- No. 18Tools index
- Pricing
- Open Source
- Type
- TOOL
- Builder
- openbb-finance
- GitHub
- 72.8k stars
- Latest release
- Open-Data-Platform-v1.0.2
- Date
About
Open-source financial data platform that consolidates proprietary, licensed, and public data sources into a unified API. Provides a 'connect once, consume everywhere' infrastructure for analysts, quants, and AI agents to access financial data through Python, REST APIs, Excel, and other interfaces.
What it does
OpenBB is an open-source platform that pulls financial data from many vendors through one consistent Python interface. Each data source lives in its own small plugin package, and importing the library generates the callable namespace from whatever plugins are installed. Because every provider registers its fetchers under shared standard names, swapping one vendor for another leaves your code unchanged. The same functions can also be published as a web API, and the project ships a command-line client and a desktop shell alongside.
Why it's ranked here
Every financial data vendor ships a different schema, and this codebase absorbs that mess in one place, provider by provider, behind stable model names. The plugin seam is proven at volume: the tree carries a separate package per data source, and the ones inspected reduce to a single declaration each. The same installed plugins back the Python library, the web API and an agent-facing server without duplicating fetch logic, and a scaffolding tool lets a private feed live outside the tree while still tracking upstream. A real, unglamorous problem, solved well.
What's good
The widget contract for the analyst workspace is generated straight from the API's own schema, so new endpoints reach the interface without a second registry to keep in sync, and a custom backend can override the generated routes with its own. The provider boundary is genuinely thin: the two provider packages inspected amount to little more than a list of fetchers, one of them needing no credentials at all. Code hygiene is enforced by machinery rather than convention, with formatters, linters, type checks, spell checks, secret detection and a check that blocks committing generated files.
Tradeoffs
The AGPL license is a deliberate constraint: run a modified copy behind a network service and you owe your users the source. Building the namespace at import time means a failed plugin import degrades quietly, printing a message and handing back a bare application instead of raising an error. The web server module does substantial work the moment it loads, parsing command-line arguments, reading settings from the home directory and generating its schema, so it resists being used as an ordinary library. And the polished analyst workspace the project showcases is a hosted product, not code in the repository.
How to use it well
Install only the extensions you need rather than the everything bundle, since the generated namespace reflects exactly what is installed. After adding or removing extensions, trigger the rebuild explicitly instead of relying on the automatic one at next import. When serving the API, know that host and port fall back to environment variables, that port numbers below 1025 are replaced with a default, and that an occupied port is silently swapped for a free one. Use the bundled scaffolder to create new provider or router extensions instead of hand-wiring the registration yourself.
Technical notes+
Importing openbb runs PackageBuilder auto_build inside openbb_platform/core/openbb/__init__.py, which then imports openbb.package.__extensions__ and constructs the obb accessor; on ImportError it prints "Failed to import extensions. Are any installed?" and falls back to a bare app. A build() export from the same module regenerates the namespace explicitly. Provider packages such as openbb_platform/providers/cboe/openbb_cboe/__init__.py only import fetcher classes and declare a Provider whose fetcher_dict maps standard model names to them; openbb_platform/providers/federal_reserve/openbb_federal_reserve/__init__.py registers keys like YieldCurve and TreasuryRates, so swapping providers keeps call sites identical. openbb_platform/extensions/platform_api/openbb_platform_api/main.py runs at module scope: it parses argv, reads settings files from the home directory, calls app.openapi(), builds widgets.json from that document and serves apps.json and agents.json beside it, first checking whether the host app already serves /widgets.json, /apps.json or /agents.json before installing its own routes. Host and port fall back to OPENBB_API_HOST and OPENBB_API_PORT; ports below 1025 become 6900 and a busy port is swapped for a free one. cookiecutter/openbb_cookiecutter/cli.py scaffolds router, provider, obbject, on_command_output and charting extensions. desktop/src-tauri/src/main.rs is a Tauri shell with handlers to install conda, set up Python environments and start Jupyter servers, self-updating from a latest.json on GitHub Releases. .pre-commit-config.yaml runs black, ruff, mypy, pylint, pydocstyle, codespell, nbstripout and detect-secrets.
Observed
- License
- GNU Affero General Public License v3.0
- Interfaces
- Python library, REST API server, command-line client, MCP server extension, and a Tauri desktop shell in one repository
- Install surface
- pip packages: the core library, an all-extras variant for the API server, and a separate terminal client package
- Provider registration shape
- The CBOE provider registers 11 fetchers and the Federal Reserve provider 13 under shared model names; one declares credentials as none and the other omits the field entirely
- Generated namespace
- The Python namespace is built at import time from whichever extensions are installed
Read from README.md, LICENSE, .pre-commit-config.yaml, openbb_platform/core/openbb/__init__.py, openbb_platform/core/openbb_core/__init__.py, cli/openbb_cli/__init__.py, cli/openbb_cli/cli.py, openbb_platform/extensions/platform_api/openbb_platform_api/main.py, openbb_platform/extensions/mcp_server/openbb_mcp_server/__init__.py, openbb_platform/extensions/equity/openbb_equity/__init__.py, openbb_platform/providers/cboe/openbb_cboe/__init__.py, openbb_platform/providers/federal_reserve/openbb_federal_reserve/__init__.py, openbb_platform/obbject_extensions/charting/openbb_charting/__init__.py, cookiecutter/openbb_cookiecutter/cli.py, desktop/src-tauri/src/main.rs.
What it can do
Consolidate multiple financial data sources into unified API
Proprietary, licensed, and public financial data sources → Unified API endpoint
Access financial data through Python
Python code requests → Financial datasets and data objects
Retrieve financial data via REST API
HTTP requests to REST endpoints → JSON financial data responses
Integrate financial data into Excel
Excel workbook connections → Live financial data in spreadsheets
Provide data infrastructure for AI agents
AI agent data queries → Structured financial data feeds
Build financial research dashboards
Dashboard configuration and data requirements → Interactive financial data visualizations
Serve data to MCP servers
MCP server connection requests → Financial data streams for AI copilots
Tags
Media

Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.
