Finance Database

io.github.JerBouma由 GitHub 帳號 JerBouma 發布v2.5.2更新於 Nov 14, 2026

Equities, ETFs, indices, currencies and cryptos, categorised.

發布方自己的服務:Finance Foundation

已驗證Streamable HTTP可網頁執行金融資料與分析

概覽

AI 產生的概覽

讓助理依產業、國家、交易所等條件查詢並篩選 30 萬+ 金融標的:股票、ETF、指數、貨幣與加密貨幣。

可以做什麼
  • 依代號、名稱或 ISIN 跨資產類別尋找標的
  • 依產業、產業群組、國家、交易所、發行商、幣別或市值級距篩選股票、ETF、指數、貨幣與加密貨幣對
  • 查看有哪些資產類別以及各篩選條件的有效值
  • 分頁瀏覽依相關性與主要掛牌地排序的結果
適用情境
適合在需要了解某個國家、產業或類別下有哪些公司、基金或標的時使用,或在進一步分析前確認代號或 ISIN。它是分類目錄,不提供價格或財務資料。
執行需求
可使用託管的遠端端點(無需安裝、無需 API 金鑰、無需登入),或透過 uvx 從 financedatabase 套件的 mcp 附加元件在本機執行 Python 程序。未宣告任何憑證或環境變數。
安裝前請注意
僅提供唯讀查詢,不含價格、基本面或交易功能。託管伺服器會遠端處理你的查詢,請查看其隱私政策。README 提到若要搭配 Finance Toolkit 使用,需另備 FinancialModelingPrep API 金鑰,本伺服器本身不需要。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Finance Database,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.JerBouma%2Ffinancedatabase/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "finance-database": {
      "type": "http",
      "url": "https://financedatabase.jeroenbouma.com/mcp"
    }
  }
}

README

[FinanceDatabase]

[GitHub Sponsors] [Buy Me a Coffee] [LinkedIn] [MCP Server] [Download MCP Bundle] [Documentation] [Supported Python Versions] [PYPI Version] [PYPI Downloads]

As a private investor, the sheer amount of information that can be found on the internet is rather daunting. Trying to understand what types of companies or ETFs are available is incredibly challenging, with millions of companies and derivatives available on the market. Sure, the most traded companies and ETFs can quickly be found simply because they are known to the public (for example, Microsoft, Tesla, S&P 500 ETF, or an All-World ETF). However, what else is out there is often unknown.

This is why I created the FinanceDatabase, a database featuring 300,000+ symbols containing Equities, ETFs, Funds, Indices, Currencies, Cryptocurrencies and Money Markets. It allows you to obtain a broad overview of sectors, industries, types of investments and much more, entirely for free. Everything is stored in CSV files that anyone can read and edit, so the database grows and improves through the community.

The aim of this database is explicitly not to provide up-to-date fundamentals or stock data, as those can be obtained with ease (with the help of this database) by using the Finance Toolkit 🛠️. Instead, it gives insights into the products that exist in each country, industry and sector and provides the most essential information about each product. With this information, you can analyze specific areas of the financial world and/or find a product that is hard to find. By utilising both, it is possible to do a fully-fledged competitive analysis with the tickers found from the FinanceDatabase inputted into the FinanceToolkit.

Some key statistics of the database:

Asset classSymbolsExchangesCoverage
🏢Equities121,6268711 sectors · 75 industries · 118 countries
📦ETFs32,13863636 issuers · 32 categories
💼Funds57,761291,534 fund families · 70 categories
📈Indices82,3966442 categories
💱Currencies2,516–177 currencies
🪙Cryptocurrencies5,845–681 coins · 12 quote currencies
🏦Money Markets1,2254131 fund families
Total303,507

🔌 The Finance Database is also available as an MCP Server

Explore all 300,000+ symbols from Claude, Copilot, Cursor, Windsurf or any MCP-compatible client without writing code. No API key needed.

  • Hosted: connect to https://financedatabase.jeroenbouma.com/mcp — nothing to install and no API key.
  • Local: uvx --from "financedatabase[mcp]" financedatabase-mcp-setup — sets up your client config automatically. See MCP Server Documentation for manual setup.

Table of Contents

  1. Installation
  2. Functionality
  3. MCP Server
  4. Questions & Answers
  5. Contributing
  6. Contact

Installation

Before installation, consider starring the project on GitHub which helps others find the project as well.

[image]

To install the FinanceDatabase it simply requires the following:

pip install financedatabase -U

Then within Python use:

python
import financedatabase as fd
equities = fd.Equities()

No API key is needed. Each asset class is downloaded once and cached locally, see Questions & Answers for how the cache works.

Functionality

This section is an introduction to the FinanceDatabase. Find with the link below a Jupyter Notebook in which you can see many more examples, including the full output of each query.


Find the Getting Started Notebook for the FinanceDatabase here.


A basic example of how to use the FinanceDatabase is shown below. Every code snippet in the sections that follow builds on this same equities instance. Initialization of each asset class is only required once, so save it to a variable to query the database much more quickly.

python
import financedatabase as fd
# Initialize the Equities databaseequities = fd.Equities()
# Select all equitiesequities.select()

A portion of the output is shown below. The tables in this section are cut off to five entries and a selection of the columns due to the sheer size of the database.

symbolnamecurrencysectorindustryexchangemarketcountrymarket_capisin
AAPLApple Inc.USDInformation TechnologyComputers & HardwareNMSNASDAQ Global SelectUnited StatesMega CapUS0378331005
ASML.ASASML Holding N.V.EURInformation TechnologySemiconductors & Chip EquipmentAMSEuronext AmsterdamNetherlandsMega CapNL0010273215
7203.TToyota Motor CorporationJPYConsumer DiscretionaryAutomobilesJPXTokyo Stock ExchangeJapanMega CapJP3633400001
NESN.SWNestle S.A.CHFConsumer StaplesFood ProductsEBSSIX Swiss ExchangeSwitzerlandMega CapCH0038863350
SAP.DESAP SEEURInformation TechnologySoftwareGERXETRAGermanyMega CapDE0007164600

And below the actively listed equities are counted per sector.

[Sectors]

Each asset class has the same three functions: select to filter on the database's categories, search to look for any text in any column and show_options to see which values a category can take. The asset classes are fd.Equities(), fd.ETFs(), fd.Indices(), fd.Currencies() and fd.Cryptos(), which are updated weekly from official exchange and market sources.

Three capabilities cut across all of them:

  • Lists of values. Every filter accepts a single value or a list, e.g. country=['Netherlands', 'Belgium'], returning the entries that match any of them.
  • only_primary_listing and exclude_delisted. A company is often listed on many exchanges. only_primary_listing=True keeps only its primary listing, and delisted symbols are left out by default (exclude_delisted=False to include them).
  • pandas or Polars. Queries run lazily with Polars and return a pandas DataFrame by default, or a Polars DataFrame with as_pandas=False.

Exploring the Options

With show_options, all possible options are given per column. This is useful as it doesn't require loading the larger data files.

python
# Show the options of every column of the equitiesoptions = fd.show_options("equities")
# Select the sectorsoptions["sector"]

This returns the eleven sectors used for equities:

text
['Communication Services', 'Consumer Discretionary', 'Consumer Staples', 'Energy', 'Financials', 'Health Care', 'Industrials', 'Information Technology', 'Materials', 'Real Estate', 'Utilities']

Once an asset class is loaded, show_options is also available on the class itself, where it shows the options that remain after filtering. For example, the industries of the financial companies in the Netherlands:

python
# Show the industries of financial companies in the Netherlandsequities.show_options(    selection="industry",    sector="Financials",    country="Netherlands",)

Which returns:

text
['Banks', 'Capital Markets', 'Consumer Lending', 'Insurance', 'Payments & Specialty Finance']

And below the number of companies in each of these industries is shown. Each company is counted once, however many exchanges it is listed on: listings that share an ISIN, share class FIGI, website or the first word of their name (such as Aegon and its perpetual bonds) are combined.

[Options]

The options of every column can be shown this way, including currency, exchange, market, country and market_cap (Mega, Large, Mid, Small, Micro and Nano Cap). Find the Notebook here and the full documentation here.

Selecting Equities

Given these options, it becomes possible to filter the database on the categories you are interested in. For example, the 'Insurance' companies in the 'United States', one row per company. The sector can be omitted here since the industry already implies 'Financials'.

python
# Select the primary listings of insurance companies in the United Statesequities.select(    country="United States",    industry="Insurance",    only_primary_listing=True,)

This returns 194 companies, of which a few of the larger ones are shown below.

symbolnamecurrencysectorindustryexchangemarketcountrymarket_cap
AFLAflac IncorporatedUSDFinancialsInsuranceNYQNew York Stock ExchangeUnited StatesLarge Cap
AJGArthur J. Gallagher & Co.USDFinancialsInsuranceNYQNew York Stock ExchangeUnited StatesLarge Cap
BROBrown & Brown, Inc.USDFinancialsInsuranceNYQNew York Stock ExchangeUnited StatesLarge Cap
CINFCincinnati Financial CorporationUSDFinancialsInsuranceNMSNASDAQ Global SelectUnited StatesLarge Cap
PGRProgressive CorporationUSDFinancialsInsuranceNYQNew York Stock ExchangeUnited StatesLarge Cap

Without only_primary_listing=True, the same query returns 455 listings on 23 exchanges, because every exchange a company trades on is shown by default. Progressive, for example, also appears as PGV.F (Frankfurt), PGV.SG (Stuttgart), PGR.MX (Mexico) and P1GR34.SA (B3). The primary listing of a company is its listing on the main exchange of its home market, or without one its listing on the largest main exchange abroad. It is worked out from the data itself, so it works for companies anywhere: for ASML it is ASML.AS on Euronext Amsterdam, not ASML on NASDAQ or ASMLF over the counter. To get the listings in a particular country instead, such as the US listings of ASML, filter on the exchange, market or currency.

For the Netherlands, it makes sense to select the market "Euronext Amsterdam" (exchange "AMS"), here together with the market cap:

python
# Select the large insurance companies on Euronext Amsterdamequities.select(    country="Netherlands",    industry="Insurance",    market="Euronext Amsterdam",    market_cap="Large Cap",)

This gives the following three companies:

symbolnamecurrencysectorindustryexchangemarketcountrymarket_capisin
AGN.ASAegon N.V.EURFinancialsInsuranceAMSEuronext AmsterdamNetherlandsLarge CapBMG0112X1056
ASRNL.ASASR Nederland N.V.EURFinancialsInsuranceAMSEuronext AmsterdamNetherlandsLarge CapNL0011872643
NN.ASNN Group N.V.EURFinancialsInsuranceAMSEuronext AmsterdamNetherlandsLarge CapNL0010773842

Every filter also accepts a list, so both queries can be combined into one with country=["Netherlands", "United States"] and market=["Euronext Amsterdam", "New York Stock Exchange", "NASDAQ Global Select"]. Equities can be selected on country, sector, industry_group, industry, currency, exchange, mic, market and market_cap. Find the Notebook here and the full documentation here.

Searching the Database

If the categorization doesn't lead to the results you are looking for, search filters on any column via a custom string. If the text is found anywhere in the column, the entry is returned. Searches are not case sensitive unless case_sensitive=True is set, index searches the symbol and, just like select, every argument accepts a list.

python
# Search for robotics or education companies with equipment on the Frankfurt Stock Exchangeequities.search(    summary=["Robotics", "Education"],    industry="Equipment",    market="Frankfurt",    index=".F",)

This returns the instruments listed on the Frankfurt Stock Exchange in an industry containing "Equipment" and with "Robotics" or "Education" in their summary. Filtering on index=".F" is an alternative way to find the exchange or market you are looking for.

symbolnamecurrencysectorindustryexchangemarketcountrymarket_cap
1YO.FYangtze Optical Fibre And Cable Joint Stock Limited CompanyEURInformation TechnologyNetworking & Communications EquipmentFRAFrankfurt Stock ExchangeChinaLarge Cap
2IU.FBoxlight CorporationEURInformation TechnologyNetworking & Communications EquipmentFRAFrankfurt Stock ExchangeUnited StatesNano Cap
49V.FVertiv Holdings CoEURIndustrialsElectrical EquipmentFRAFrankfurt Stock ExchangeUnited StatesLarge Cap
A1Z1.FeEnergy Group PlcEURIndustrialsElectrical EquipmentFRAFrankfurt Stock ExchangeUnited KingdomNano Cap
A8B.FAmbarella, Inc.EURInformation TechnologySemiconductors & Chip EquipmentFRAFrankfurt Stock ExchangeUnited StatesMid Cap

And below the results are counted per industry.

[Search]

The search function works on every column of every asset class, including name, isin, cusip and figi. Find the Notebook here and the full documentation here.

Exploring other Asset Classes

All of these functions are also available for the other asset classes. The only difference is the class name and the columns. For example, ETFs use fd.ETFs() and are selected on category_group, category and family instead.

python
# Initialize the ETFs databaseetfs = fd.ETFs()
# Select the Fixed Income ETFs of Vanguardetfs.select(    category_group="Fixed Income",    family="Vanguard Asset Management",)

For example, see some of the Vanguard bond ETFs listed in Berlin below:

symbolnamecurrencycategory_groupcategoryfamilyexchange
0250.BEVanguard Intermediate-Term Corporate Bond Index Fund ETF SharesEURFixed IncomeCorporate BondsVanguard Asset ManagementBER
0251.BEVanguard Short-Term Corporate Bond Index Fund ETF SharesEURFixed IncomeCorporate BondsVanguard Asset ManagementBER
0252.BEVanguard Total World Bond ETFEURFixed IncomeInvestment Grade BondsVanguard Asset ManagementBER
025L.BEVanguard Total International Bond Index Fund ETF SharesEURFixed IncomeInvestment Grade BondsVanguard Asset ManagementBER
025N.BEVanguard Long-Term Corporate Bond Index Fund ETF SharesEURFixed IncomeCorporate BondsVanguard Asset ManagementBER

The same applies to search, for example to find semiconductor indices across providers and countries:

python
# Initialize the Indices databaseindices = fd.Indices()
# Search for indices with "Semiconductor" in their nameindices.search(name="Semiconductor")

Which returns semiconductor indices from the US, South Korea and Taiwan, including their price, net and total return variants, of which a few are shown below:

symbolnamecurrencycategory_groupcategoryexchange
^SOXPHLX SemiconductorUSDInformation TechnologyTechnologyNIM
^ICESEMIICE Semiconductor IndexUSDInformation TechnologyTechnologyNYS
^NQSSSENasdaq US Smart Semiconductor IndexUSDInformation TechnologyTechnologyNIM
^KQ47Kosdaq Semiconductors IndexKRWInformation TechnologyTechnologyKOE
SEC.TWTSEC semiconductor subindexTWDInformation TechnologyTechnologyTAI

And below all actively listed ETFs are divided over their category groups.

[ETFs]

The categories of each asset class can again be found with show_options, e.g. fd.Indices().show_options(selection="category") returns the 42 index categories, from 'Corporate Bonds' and 'Emerging Markets' to 'Small Cap' and 'Value'. Cryptocurrencies are selected on cryptocurrency and currency and currencies on base_currency and quote_currency. Find the Notebook here and the full documentation here.

Combining with the Finance Toolkit

The FinanceDatabase has a direct integration with the Finance Toolkit, making it possible to do financial analysis on the instruments you've found. Any selection can be loaded into the Finance Toolkit with to_toolkit.

To be able to get started, you need to obtain an API Key from FinancialModelingPrep. This is used to gain access to 30+ years of financial statements, both annually and quarterly. Note that the Free plan is limited to 250 requests each day, 5 years of data, and only features companies listed on US exchanges.


Obtain an API Key from FinancialModelingPrep here.


Returning to the three large insurance companies in the Netherlands:

python
# Select the large insurance companies on Euronext Amsterdamdutch_insurance_companies = equities.select(    country="Netherlands",    industry="Insurance",    market="Euronext Amsterdam",    market_cap="Large Cap",)
# Load them into the Finance Toolkittoolkit = dutch_insurance_companies.to_toolkit(api_key="FINANCIAL_MODELING_PREP_KEY")
# Obtain historical market data for all tickershistorical_data = toolkit.get_historical_data()
# Select the results for ASR Nederlandhistorical_data.xs("ASRNL.AS", axis=1, level=1)

For example, a portion of the historical data for ASR Nederland is shown below.

dateOpenHighLowCloseAdj CloseVolumeDividendsReturnCumulative Return
2026-09-3073.2673.6471.8872.1672.164353240-0.01183.608
2026-10-0171.5271.7270.5871716665820-0.01613.55
2026-10-0271.1471.5470.6671.4871.4840847500.00683.574
2026-10-0571.572.3671.472.1672.1637543500.00953.608
2026-10-0672.4473.172.472.8272.826328200.00913.641

And below the cumulative returns of Aegon, ASR Nederland and NN Group are plotted, including the S&P 500 as benchmark.

[FinanceToolkit]

Now let's make it more advanced by calculating the profitability ratios for each company:

python
# Collect all Profitability Ratios for all tickersprofitability_ratios = toolkit.ratios.collect_profitability_ratios()
# Select the results for ASR Nederlandprofitability_ratios.loc["ASRNL.AS"]

For example, see some of the profitability ratios of ASR Nederland below.

20182019202020212022202320242025
Net Profit Margin0.10550.1160.08110.0910.16660.08140.04270.024
Income Before Tax Profit Margin0.15640.15150.11040.12310.22020.10890.06880.0328
Effective Tax Rate0.21680.19830.20750.22330.26090.21810.26990.1882
Return on Assets0.01070.01440.00830.0118-0.02590.00980.00610.0036
Return on Equity0.11180.160.09820.1305-0.25910.14270.09690.0552

And below these and other profitability ratios of ASR Nederland, each with its latest value, the change over the period and its trend.

[Ratios]

This works for the other asset classes too. For example, Ethereum quoted in BTC, CAD, EUR, GBP and USD can be loaded with fd.Cryptos().select(cryptocurrency="ETH").to_toolkit(api_key=...), after which get_historical_data(period="quarterly") returns its quarterly returns in each currency. This is just a small snippet of what is available within the Finance Toolkit, see the GitHub page of the Finance Toolkit here or the example Notebook here for more information.

MCP Server

The Finance Database MCP Server gives any AI assistant that supports the Model Context Protocol (MCP) direct access to the database. Ask in plain English for, say, every mid cap semiconductor company in Taiwan or the bond ETFs of a given issuer, and the assistant queries the database on your behalf. No API key is needed. Find the tools, example prompts and how to host the server yourself in the MCP Server Documentation.

Remote server

Connect directly to the hosted server at https://financedatabase.jeroenbouma.com/mcp. Nothing needs to be installed locally and no API key or sign-in is required. See the privacy policy for what the hosted server processes.

ClientSteps
Claude DesktopCustomize → Connectors → Add custom connector → paste the URL
Claude.aiCustomize → Connectors → Add custom connector → paste the URL
Claude Codeclaude mcp add --transport http finance-database https://financedatabase.jeroenbouma.com/mcp
VS CodeCommand Palette → MCP: Add Server → HTTP → paste the URL
CursorSettings → Features → MCP Servers → Add new → http → paste the URL
WindsurfSettings → MCP Servers → Add Server → Remote/HTTP → paste the URL

Local installation

Run the setup wizard — it locates your client's config file and writes the MCP entry automatically:

bash
uvx --from "financedatabase[mcp]" financedatabase-mcp-setup

For manual config, add the following to your client's MCP config file (e.g. claude_desktop_config.json or .cursor/mcp.json; VS Code's .vscode/mcp.json uses servers instead of mcpServers):

json
{  "mcpServers": {    "finance-database": {      "command": "uvx",      "args": ["--from", "financedatabase[mcp]", "financedatabase-mcp"]    }  }}

Alternatively, download the Finance Database MCPB bundle and open it with Claude Desktop.

Questions & Answers

This section includes frequently asked questions. If you have any questions that are not answered here, consider creating an Issue or reach out to me via the contact details below.

How is the data obtained?

The data is an aggregation of publicly available sources: the official listing directories that exchanges publish (such as Nasdaq Trader, HKEX, NSE, the Japan Exchange Group, ASX, TSX, Deutsche Börse Xetra, Euronext and SIX Swiss Exchange), open reference data (OpenFIGI, SEC EDGAR, the ISO 4217 currency lists, CoinGecko) and contributions from the community. I strictly maintain the rule that all data in this database must be freely accessible to everyone. Data requiring paid subscriptions is never included. Information that companies charge for is typically owned and maintained by those companies, making public sharing of such data a violation of their Terms of Service (ToS). However, publicly available data can be freely shared (read more about the legality of web scraping here). This database will always remain completely free.

What categorization method is used?

Equities are classified in this database's own three levels: 11 sectors, which are divided into industry groups and then industries. Every valid combination is listed in scripts/categories.json. The categories are curated by hand and from public sources, and the weekly update classifies new companies the same way. All categorizations in the database are independently developed and can be freely modified.

How can I find out which countries, sectors and/or industries exist within the database without needing to check the database manually?

For this you can use the show_options function, either for an asset class as a whole (fd.show_options("equities")), which doesn't require any data to be loaded, or on a loaded asset class to see the options that remain after filtering. See Exploring the Options for more information.

When I try to collect data I notice that not all tickers return output, why is that?

Some tickers are merely holdings of companies and therefore do not really have any data attached to them. Therefore, it makes sense that not all tickers return data. If you are still in doubt, search the ticker on Google to see if there is really no data available. If you can't find anything about the ticker, consider updating the database by visiting the Contributing Guidelines.

How is the database kept up to date?

Every Sunday (and after every change to the database) an automated update runs on GitHub Actions:

Asset classWhat the weekly update doesSource
EquitiesAdds new listings on NASDAQ, NYSE and NYSE American and refreshes their market cap tiers; adds new equities in Hong Kong, India, Japan, Australia and Canada. A ticker that is replaced by a new one is marked delisted. Bonds, notes, warrants and other papers that are not company shares are kept out.US-Stock-Symbols, HKEX, NSE, JPX, ASX, TSX/TSXV
ETFsAdds new ETFs in the United States, Hong Kong, India, Japan, Canada, Germany (Xetra), Euronext (Amsterdam, Paris, Brussels, Lisbon, Oslo) and Switzerland. A new line of an existing fund takes its name and categories; blank categories are filled from the fund's other listings or, where clearly decisive, from its name.Nasdaq Trader, HKEX, NSE, JPX, TSX, Deutsche Börse, Euronext, SIX, Börse Frankfurt
CryptocurrenciesAdds the coins in the top 500 by market cap against the usual quote currencies and removes coins that are no longer listed anywhere.CoinGecko
CurrenciesAdds new currencies (such as SLE or ZWG) with their usual pairs and removes withdrawn ones (such as HRK after Croatia adopted the euro).ISO 4217 (SIX)
IndicesAdds the indices Euronext publishes and keeps the categories of ETF iNAVs in line with the index they track.Euronext

Each source is applied on its own, so a source that is unavailable or changes its format is skipped for that week without affecting the others, and implausible changes (such as a large share of market cap tiers changing at once) are not applied. Before anything is committed, the update is checked against the previous version of the database and undone if it would introduce duplicate symbols, symbols in two asset classes, changed columns or a large loss of rows. Delisted tickers are kept on purpose, marked as delisted, for historical research. The scripts and their rules are described in scripts/README.md.

Not everything can be automated. Classifications of existing companies, corporate events outside the automated sources (mergers, renames, migrations) and exchanges without a public listing directory still rely on the community. If you notice outdated information, please consider contributing through the Contributing Guidelines.

What happened to Funds and Money Markets?

Since October 2026, funds and money markets are no longer maintained. Unlike exchange-listed instruments, mutual and money market funds have no public source that keeps them current worldwide, and the data had become outdated (many funds closed or merged, many new ones missing). fd.Funds() and fd.MoneyMarkets() remain available in the Python package as they are, with a warning when loaded, but they are no longer part of the MCP server. Funds that trade on a stock exchange under a regular ticker, such as listed open-ended funds in China or listed funds on Euronext Amsterdam, were moved to the ETFs so they stay maintained and searchable.

Is the data downloaded every time I use the package?

No. Each dataset is downloaded once and cached in your user cache folder (or the folder set in FINANCEDATABASE_CACHE_DIR). Once a day the package checks for a newer version and only downloads it when it changed; offline, the cached copy is used. Queries run lazily with Polars and return pandas by default, or Polars with as_pandas=False, e.g. equities.select(country="Canada", as_pandas=False).

Contributing

First of all, thank you for taking the time to contribute (or at least read the Contributing Guidelines)! 🚀


Find the Contributing Guidelines here.


The FinanceDatabase serves the role of providing anyone with any type of financial product categorization entirely for free. To achieve this, it relies on community involvement to add, edit and remove tickers over time. This is made easy enough that anyone, even those with a lack of coding experience, can contribute because of the use of CSV files that can be manually edited with ease.

Below are those that made significant contributions to the project. Thank you!

UserContribution
doksonMade very significant contributions to the quality of the database in #138, #139, #140, #141, #142, #143, #144, #145, #146 and #147, added the MIC column (#149), enriched the FIGIs and added 709 missing tickers (#150, #151) and fixed the CI workflows (#154).
JonArnfredBuilt the identifier validation that now checks every pull request (#159), filled missing share class FIGIs (#158), made the database workflow preserve CSV values exactly as written (#166) and fixed the test suite (#160).
AlfaStakeAdded ISIN codes for ETFs (#124) and corrected and enriched 229 equity ISINs (#126).
pettijohnAdded missing currencies and company names from SEC data (#135, #136).
desaijimmyMade changes to Equities dataset including the Split of Daimler to Mercedes-Benz and Daimler Trucks
nindogoIntroduced a variety of new equities from the Nairobi Securities Exchange and introduced the country Kenya into the dataset.
colin99dHelped in the conversion of the Finance Database package to Object-Oriented, making the code much more efficient.

Contact

If you have any questions about the FinanceDatabase or would like to share with me what you have been working on, feel free to reach out to me via:

If you'd like to support my efforts, either help me out via the Contributing Guidelines or Sponsor Me.

[Star History Chart]

來源:README.md,提交 7c89ecd

工具

8

equities

Equities

List listed companies (stocks) matching filters such as country, sector, industry group, industry, exchange and market cap tier, or matching a free-text query on symbol or name. Every filter accepts one value or several comma-separated values. Use show_options('equities', '<field>') to see valid filter values. Returns categorisation (sector, industry, country, exchange, market cap tier), not prices.

輸入參數miclimitquerymarketoffsetsectorcountrycurrencyexchangeindustrymarket_capshow_columns另有 4 個

etfs

ETFs

List exchange-traded funds matching filters such as category group, category, family (issuer), currency and exchange, or matching a free-text query on symbol or name. Every filter accepts one value or several comma-separated values. Use show_options('etfs', '<field>') to see valid filter values.

輸入參數miclimitqueryfamilyoffsetcategorycurrencyexchangeshow_columnscategory_groupinclude_summaryinclude_delisted另有 1 個

indices

Indices

List market indices matching filters such as category group, category, currency and exchange, or matching a free-text query on symbol or name (e.g. query='S&P 500'). Every filter accepts one value or several comma-separated values. Use show_options('indices', '<field>') to see valid filter values.

輸入參數miclimitqueryoffsetcategorycurrencyexchangeshow_columnscategory_groupinclude_summary

currencies

Currencies

List currency pairs matching a base currency and/or quote currency (ISO codes, comma-separated for several), or matching a free-text query on symbol or name (e.g. query='EURUSD').

輸入參數limitqueryoffsetshow_columnsbase_currencyquote_currencyinclude_summary

cryptos

Cryptocurrencies

List cryptocurrency pairs matching a cryptocurrency (e.g. 'ETH') and/or the currency it is quoted in (e.g. 'USD' or 'BTC'), or matching a free-text query on symbol or name. Every filter accepts one value or several comma-separated values.

輸入參數limitqueryoffsetcurrencyshow_columnscryptocurrencyinclude_summary

search_categories

List Asset Classes

List the Finance Database's asset classes (which instruments exist and how they are classified, no prices), with their tool, size and filters. Use this first to see what is available. Each asset class has its own tool (e.g. `equities`) whose filters are listed here; `show_options` gives the valid values of each filter. Returns: str: Markdown table of asset classes.

無需輸入參數。

show_options

Show Filter Options

Show the valid values of a Finance Database filter (e.g. every sector or country) for an asset class. Use this before filtering an asset class tool so the exact values are known. Filters narrow the options to what actually occurs, e.g. the industries of the 'Health Care' sector in Germany. Returns: str: Compact JSON with the values and their total count.

輸入參數limitfiltersselectionasset_class必填include_delisted

search_instruments

Search Instruments

Find which instruments exist in the Finance Database by ticker, name or ISIN, across equities, ETFs, indices, currencies and cryptocurrencies at once, with their symbol, exchange and classification (no prices or financial data). Matches are case-insensitive substrings of the symbol or name (plus exact ISIN/CUSIP/FIGI matches), ordered by relevance: exact symbol first, then symbols and names starting with the query, primary listings and larger companies first. Each row says which asset class tool has the full record. Returns: str: Compact JSON with the matches and their total count per asset class.

輸入參數limitquery必填offsetasset_classesinclude_delisted

版本歷史

1
  1. v2.5.2最新Nov 14, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Finance 整合