This page documents FMP (Financial Modeling Prep) and Intrinio, the two most comprehensive commercial financial data providers in the OpenBB Platform. FMP provides 60+ fetchers and Intrinio provides 40+ fetchers covering equity fundamentals, company filings, analyst estimates, ownership data, and financial metrics.
For economic data providers (FRED, Federal Reserve), see page 4.1. For additional providers (YFinance, SEC, Nasdaq), see page 4.3.
FMP and Intrinio are commercial API providers that offer extensive coverage of equity fundamental data, SEC filings, earnings estimates, and institutional ownership. Both require API keys and implement the provider abstraction pattern with standard models.
| Feature | FMP | Intrinio |
|---|---|---|
| Fetchers | 60+ | 40+ |
| Pricing | Commercial API | Commercial API |
| Coverage | US equities, international, crypto, forex | US equities, international |
| Unique Features | Growth metrics, earnings transcripts, executive compensation | Data tags system, options chains, as-reported financials |
| Authentication | API key from financialmodelingprep.com | API key from intrinio.com |
| Fundamentals | Balance sheet, income, cash flow, ratios, metrics | Balance sheet, income, cash flow, ratios, metrics, reported financials |
| Options | Not available | Options chains, unusual activity, snapshots |
| Estimates | Analyst estimates, price targets, forward EPS/EBITDA | Consensus estimates, forward EPS/sales/EBITDA/PE |
| Ownership | Insider trading, institutional ownership, major holders | Insider trading, share statistics |
| Calendar | Earnings, dividends, IPO, splits | IPO |
Sources:
Both FMP and Intrinio register their fetchers through the Provider class, which maps standard model names to provider-specific fetcher implementations.
Diagram: FMP and Intrinio Provider Registration
The fmp_provider and intrinio_provider instances are defined in openbb_platform/providers/fmp/openbb_fmp/__init__.py72-152 and openbb_platform/providers/intrinio/openbb_intrinio/__init__.py66-116 Each provider's fetcher_dict maps standard model names to fetcher classes.
Sources:
FMP provides 60+ fetchers covering equity fundamentals, filings, estimates, ownership, and market data. It is registered as the fmp_provider in openbb_platform/providers/fmp/openbb_fmp/__init__.py72-152
FMP requires an API key from financialmodelingprep.com. The credentials are stored as fmp_api_key in user settings.
Setup instructions are embedded in the provider definition at openbb_platform/providers/fmp/openbb_fmp/__init__.py151
Sources:
Diagram: FMP Fetcher Organization by Category
FMP provides 60+ fetchers organized into fundamental data (9 fetchers), filings (5 fetchers), ownership (4 fetchers), estimates (6 fetchers), calendar events (4 fetchers), and executive data (2 fetchers). Complete list in openbb_platform/providers/fmp/openbb_fmp/__init__.py78-148
Sources:
FMP fetchers follow the standard three-stage pattern: transform_query(), aextract_data(), and transform_data(). This example shows the balance sheet fetcher.
Diagram: FMP Balance Sheet Fetcher Execution
The fetcher transforms query parameters, makes an authenticated API request to financialmodelingprep.com, and transforms the response into standardized data models. Implementation at openbb_platform/providers/fmp/openbb_fmp/models/balance_sheet.py
Sources:
FMP fetchers extend standard models with provider-specific parameters. Key examples:
| Fetcher | Standard Params | FMP-Specific Params | Key Output Fields |
|---|---|---|---|
FMPBalanceSheetFetcher | symbol, period, limit | None | total_assets, total_liabilities, total_equity, fiscal_period, filing_date |
FMPIncomeStatementFetcher | symbol, period, limit | None | revenue, cost_of_revenue, gross_profit, net_income, eps, eps_diluted |
FMPCashFlowStatementFetcher | symbol, period, limit | None | net_cash_flow_from_operations, capital_expenditure, free_cash_flow |
FMPCompanyFilingsFetcher | symbol, form_type | cik, start_date, end_date, page, limit | filing_date, report_type, report_url, filing_url, accepted_date |
FMPInsiderTradingFetcher | symbol, limit | transaction_type, statistics | transaction_date, securities_transacted, transaction_price, securities_owned |
FMPInstitutionalOwnershipFetcher | symbol | year, quarter, page | holder, shares, date_reported, pct_change, market_value |
FMPFinancialRatiosFetcher | symbol, period, limit | ttm (include TTM) | current_ratio, debt_to_equity, return_on_equity, return_on_assets |
FMPForwardEpsEstimatesFetcher | symbol | fiscal_period, limit, include_historical | date, estimated_revenue_high, estimated_revenue_low, number_analyst_estimated_revenue |
FMPPriceTargetFetcher | symbol, limit | None | published_date, news_url, analyst_name, analyst_company, price_target |
Sources:
FMP provides several unique fetchers not available in other providers:
Growth Metrics: FMPBalanceSheetGrowthFetcher, FMPIncomeStatementGrowthFetcher, FMPCashFlowStatementGrowthFetcher provide year-over-year growth percentages for all financial statement line items.
Earnings Transcripts: FMPEarningsCallTranscriptFetcher returns full text of earnings call transcripts by year and quarter.
Executive Compensation: FMPExecutiveCompensationFetcher provides detailed compensation data for key executives including salary, bonus, stock awards, and total compensation.
Revenue Segmentation: FMPRevenueGeographicFetcher and FMPRevenueBusinessLineFetcher break down revenue by geographic region and business segment.
Government Trades: FMPGovernmentTradesFetcher tracks trades by US government officials.
Testing: Integration tests are in openbb_platform/extensions/equity/integration/test_equity_python.py21-600 and unit tests with VCR cassettes are in openbb_platform/providers/fmp/tests/test_fmp_fetchers.py105-700
Sources:
Intrinio provides 40+ fetchers with advanced features including a searchable data tags system, options chains, as-reported financials, and NLP-enhanced filings. The provider is registered as intrinio_provider in openbb_platform/providers/intrinio/openbb_intrinio/__init__.py66-116
Intrinio requires an API key from intrinio.com. The credentials are stored as intrinio_api_key in user settings.
Setup instructions are embedded in the provider definition at openbb_platform/providers/intrinio/openbb_intrinio/__init__.py115
Sources:
Diagram: Intrinio Fetcher Organization
Intrinio provides 40+ fetchers organized into fundamentals (6 fetchers), data tags (3 fetchers), options (3 fetchers), filings/ownership (3 fetchers), estimates (5 fetchers), and additional data (4+ fetchers). The data tags system and options fetchers are unique to Intrinio.
Sources:
Intrinio's data tags system provides access to 20,000+ financial metrics through a searchable taxonomy. The system consists of three fetchers: IntrinioSearchAttributesFetcher, IntrinioHistoricalAttributesFetcher, and IntrinioLatestAttributesFetcher.
Diagram: Intrinio Data Tags API Flow
The data tags system workflow: (1) Search for tags by query string, (2) Query historical time series by tag and frequency, (3) Get latest values for tags. Tags support comma-separated strings or lists. Implementations at openbb_platform/providers/intrinio/openbb_intrinio/models/search_attributes.py openbb_platform/providers/intrinio/openbb_intrinio/models/historical_attributes.py openbb_platform/providers/intrinio/openbb_intrinio/models/latest_attributes.py
Sources:
Intrinio is the only provider in this section offering comprehensive options data through three fetchers: IntrinioOptionsChainsFetcher, IntrinioOptionsUnusualFetcher, and IntrinioOptionsSnapshotsFetcher.
Diagram: Intrinio Options Chains Architecture
The options chains fetcher supports filtering by moneyness, option type, strike price range, and expiration date. Returns full Greeks (delta, gamma, theta, vega, rho) and implied volatility. Implementation at openbb_platform/providers/intrinio/openbb_intrinio/models/options_chains.py
Unusual Options Activity: IntrinioOptionsUnusualFetcher identifies unusual trading activity with filters for trade type (block, sweep, large), sentiment (bullish, bearish, neutral), and minimum trade value. Test at openbb_platform/providers/intrinio/tests/test_intrinio_fetchers.py180-192
Options Snapshots: IntrinioOptionsSnapshotsFetcher retrieves full market snapshots of all options for a given date. Note: This endpoint can return very large datasets and is disabled in tests with @pytest.mark.skip.
Sources:
Intrinio fetchers provide extensive filtering and customization options:
| Fetcher | Standard Params | Intrinio-Specific Params | Key Features |
|---|---|---|---|
IntrinioBalanceSheetFetcher | symbol, period, limit | fiscal_year | Filter to specific fiscal year |
IntrinioCompanyFilingsFetcher | symbol, form_type | start_date, end_date, limit, thea_enabled | thea_enabled=True returns NLP-processed filings |
IntrinioHistoricalAttributesFetcher | symbol, tag | frequency, tag_type, sort, start_date, end_date | Tags support comma-separated values or lists |
IntrinioReportedFinancialsFetcher | symbol, statement_type | period, fiscal_year, limit | Returns as-reported (not standardized) financials |
IntrinioInsiderTradingFetcher | symbol, limit | start_date, end_date, ownership_type, sort_by | sort_by options: updated_on, filed_on |
IntrinioOptionsChainsFetcher | symbol | date, delay, option_type, moneyness, strike_price_gte, strike_price_lte | Full Greeks and implied volatility |
IntrinioOptionsUnusualFetcher | None | source, trade_type, sentiment, start_date, min_value | Filters for unusual options activity |
IntrinioForwardEpsEstimatesFetcher | symbol | fiscal_period, fiscal_year, calendar_year, calendar_period | Multiple date filtering options |
Sources:
The SEC provider accesses data directly from the Securities and Exchange Commission EDGAR system, including advanced Form 4 insider trading processing.
The SEC provider includes a sophisticated Form 4 processing system that parses XML filings and caches data locally.
Diagram: SEC Form 4 Processing Pipeline
The Form 4 fetcher creates a local SQLite database to cache parsed filings. The database is compressed with gzip when not in use. The parser handles complex XML structures including derivative securities, multiple owners, and footnotes.
Sources:
The Form 4 parser maps XML fields to standardized database columns with proper type conversions:
| XML Field | Database Column | Type | Description |
|---|---|---|---|
filingDate | filing_date | DATE | Date the form was filed |
transactionDate | transaction_date | DATE | Date of the transaction |
transactionCode | transaction_type | TEXT | Type code (P, S, A, M, etc.) |
transactionShares | securities_transacted | REAL | Number of shares transacted |
transactionPricePerShare | transaction_price | MONEY | Price per share |
transactionTotalValue | transaction_value | MONEY | Total transaction value |
sharesOwnedFollowingTransaction | securities_owned | REAL | Shares owned after transaction |
isDirector | director | BOOLEAN | Owner is a director |
isOfficer | officer | BOOLEAN | Owner is an officer |
officerTitle | owner_title | TEXT | Officer's title |
Transaction codes are mapped to descriptions (e.g., "P" → "Open market or private purchase of non-derivative or derivative security").
Sources:
Diagram: SEC Form 4 Caching Workflow
The caching system reduces load on SEC servers by storing parsed Form 4 data locally. The database is compressed when not in use to save disk space. On close, the table is sorted by filing_date for efficient queries.
Sources:
Provides calendar events and filings for US-listed companies.
| Fetcher | Purpose | Key Fields |
|---|---|---|
NasdaqCalendarDividendFetcher | Upcoming dividend payments | ex_dividend_date, payment_date, declaration_date, amount |
NasdaqCalendarEarningsFetcher | Earnings release calendar | report_date, symbol, name, market_cap |
NasdaqCompanyFilingsFetcher | SEC filings via Nasdaq API | filing_date, form_group, year |
Sources:
Provides data for Canadian companies and funds.
Diagram: TMX Provider GraphQL Query Pattern
The TMX provider uses GraphQL queries with date range chunking to fetch large datasets efficiently. Each query fetches up to 1000 records per weekly chunk, then aggregates results.
Sources:
Focuses on fundamental data with advanced filtering.
| Fetcher | Query Parameters | Notable Features |
|---|---|---|
PolygonBalanceSheetFetcher | symbol, period, filing_date filters | include_sources, order, sort by filing date or period |
PolygonIncomeStatementFetcher | symbol, period, date range filters | Up to 12 filters for filing_date and period_of_report_date |
PolygonCashFlowStatementFetcher | Same as income statement | filing_date_lt, filing_date_gte, etc. |
Polygon's standout feature is granular date filtering with operators: filing_date, filing_date_lt, filing_date_lte, filing_date_gt, filing_date_gte, plus equivalent filters for period_of_report_date.
Sources:
Benzinga (commercial API):
Finviz (free):
Sources:
All company filings fetchers implement the CompanyFilings standard model, allowing provider interchangeability.
Diagram: CompanyFilings Standard Model Inheritance
The standard model defines required fields (filing_date, report_type, report_url). Each provider extends this with additional fields. Field validators in the standard model (like convert_date) apply to all providers.
Sources:
Providers extend standard models to add unique data points while maintaining compatibility:
| Standard Field | FMP Extension | Intrinio Extension | SEC Extension |
|---|---|---|---|
filing_date | ✓ Required | ✓ Required | ✓ Required |
report_type | formType (alias) | ✓ | form |
report_url | finalLink (alias) | ✓ | ✓ |
| Additional | filing_url, cik, symbol, accepted_date | id, sec_unique_id, instance_url, industry_group, word_count, thea_enabled | primary_doc, items, size, complete_submission_url, filing_url |
The __alias_dict__ in data models maps provider API field names to standard names. For example, FMP uses "formType" but it's aliased to report_type.
Sources:
Integration tests validate that each provider correctly implements standard models using @pytest.mark.parametrize:
Diagram: Multi-Provider Integration Test Pattern
A single test function validates multiple providers by parametrizing the provider parameter. This ensures all providers correctly implement the standard interface.
Sources:
Tests also validate provider-specific parameters:
Each provider's test suite includes parameter combinations that test unique features (like FMP's pagination, Intrinio's NLP flag, or SEC's caching).
Sources:
Provider-specific unit tests use VCR (Video Cassette Recorder) to record HTTP responses:
Diagram: VCR Test Recording Pattern
VCR records API responses on the first test run, then replays them in subsequent runs. This allows tests to run without API keys and ensures consistent test data. Sensitive data (API keys) are filtered before recording.
Sources:
Refresh this wiki