Finance Database: 300,000+ Financial Instruments With Rich Metadata, Free And Queryable Via Python

Finding a clean, structured list of financial instruments has always been harder than it should be. Bloomberg sells it. Refinitiv sells it. Yahoo Finance gives you a search bar. If you want “all biotech companies listed in Germany” or “all fixed income ETFs from Vanguard” as a filterable dataset, you’re usually either scraping something or paying for a data vendor. I’ve spent the last few years building and maintaining a free alternative.

The Finance Database covers seven asset classes across 300,000+ symbols:

Asset Class Count Dimensions
Equities 160,869 11 sectors, 68 industries, 117 countries, 84 exchanges
Indices 91,181 63 exchanges
Funds 57,853 1,540 families, 74 categories
ETFs 36,483 320 families, 51 categories
Cryptocurrencies 3,367 351 base currencies
Currencies 2,556 175 currency pairs
Money Markets 1,367 2 exchanges

Each equity record includes: symbol, name, currency, sector, industry group, industry, exchange, market, country, city, market cap tier, ISIN, CUSIP, FIGI, composite FIGI, share class FIGI, and website. ETFs and funds carry family, category group, and category instead of GICS-style classification. Every record has what you need to cross-reference against other data sources.

The data is an aggregation of publicly available sources – no paid API required to use the database itself. It is community-maintained, MIT-licensed, and lives on GitHub as CSV files you can open in Excel if that’s your preference.

The Python package gives you structured filtering and text search:

“`python

Install via: pip install financedatabase -U

import financedatabase as fd

equities = fd.Equities()

All semiconductor companies in Taiwan on primary listings only

equities.select( country=’Taiwan’, industry=’Semiconductors’, only_primary_listing=True )

Free-text search: robotics or automation companies on the Frankfurt exchange

equities.search( summary=[‘Robotics’, ‘Automation’], index=’.F’ )

Explore what’s available before filtering

fd.show_options(‘equities’) “`

The show_options call is useful before you filter – it returns every distinct value per column without loading the full dataset, so you can scope your query without memory overhead.

For anyone doing universe construction for backtests or systematic strategies, the ISIN/FIGI coverage is the most practical part. You can pull a filtered symbol list here and pipe it directly into your price data provider.

The database is not a price or fundamentals source – that’s intentional. Metadata and categorization data is the hard part to get for free and I’ve built a seperate tool for that, the Finance Toolkit.

GitHub page: https://github.com/JerBouma/FinanceDatabase

submitted by /u/Traditional_Yogurt
[link] [comments]

Leave a Reply

Your email address will not be published. Required fields are marked *