{"id":41542,"date":"2026-06-25T16:27:12","date_gmt":"2026-06-25T14:27:12","guid":{"rendered":"https:\/\/www.graviton.at\/letterswaplibrary\/finance-database-300000-financial-instruments-with-rich-metadata-free-and-queryable-via-python\/"},"modified":"2026-06-25T16:27:12","modified_gmt":"2026-06-25T14:27:12","slug":"finance-database-300000-financial-instruments-with-rich-metadata-free-and-queryable-via-python","status":"publish","type":"post","link":"https:\/\/www.graviton.at\/letterswaplibrary\/finance-database-300000-financial-instruments-with-rich-metadata-free-and-queryable-via-python\/","title":{"rendered":"Finance Database: 300,000+ Financial Instruments With Rich Metadata, Free And Queryable Via Python"},"content":{"rendered":"<p><!-- SC_OFF --><\/p>\n<div class=\"md\">\n<p>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 &#8220;all biotech companies listed in Germany&#8221; or &#8220;all fixed income ETFs from Vanguard&#8221; as a filterable dataset, you&#8217;re usually either scraping something or paying for a data vendor. I&#8217;ve spent the last few years building and maintaining a free alternative.<\/p>\n<p>The Finance Database covers seven asset classes across 300,000+ symbols:<\/p>\n<table>\n<thead>\n<tr>\n<th align=\"left\">Asset Class<\/th>\n<th align=\"right\">Count<\/th>\n<th align=\"left\">Dimensions<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\">Equities<\/td>\n<td align=\"right\">160,869<\/td>\n<td align=\"left\">11 sectors, 68 industries, 117 countries, 84 exchanges<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Indices<\/td>\n<td align=\"right\">91,181<\/td>\n<td align=\"left\">63 exchanges<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Funds<\/td>\n<td align=\"right\">57,853<\/td>\n<td align=\"left\">1,540 families, 74 categories<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">ETFs<\/td>\n<td align=\"right\">36,483<\/td>\n<td align=\"left\">320 families, 51 categories<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Cryptocurrencies<\/td>\n<td align=\"right\">3,367<\/td>\n<td align=\"left\">351 base currencies<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Currencies<\/td>\n<td align=\"right\">2,556<\/td>\n<td align=\"left\">175 currency pairs<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Money Markets<\/td>\n<td align=\"right\">1,367<\/td>\n<td align=\"left\">2 exchanges<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>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.<\/p>\n<p>The data is an aggregation of publicly available sources &#8211; 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&#8217;s your preference.<\/p>\n<p>The Python package gives you structured filtering and text search:<\/p>\n<p>&#8220;`python<\/p>\n<h1>Install via: pip install financedatabase -U<\/h1>\n<p>import financedatabase as fd<\/p>\n<p>equities = fd.Equities()<\/p>\n<h1>All semiconductor companies in Taiwan on primary listings only<\/h1>\n<p>equities.select( country=&#8217;Taiwan&#8217;, industry=&#8217;Semiconductors&#8217;, only_primary_listing=True )<\/p>\n<h1>Free-text search: robotics or automation companies on the Frankfurt exchange<\/h1>\n<p>equities.search( summary=[&#8216;Robotics&#8217;, &#8216;Automation&#8217;], index=&#8217;.F&#8217; )<\/p>\n<h1>Explore what&#8217;s available before filtering<\/h1>\n<p>fd.show_options(&#8216;equities&#8217;) &#8220;`<\/p>\n<p>The <code>show_options<\/code> call is useful before you filter &#8211; it returns every distinct value per column without loading the full dataset, so you can scope your query without memory overhead.<\/p>\n<p>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.<\/p>\n<p>The database is not a price or fundamentals source &#8211; that&#8217;s intentional. Metadata and categorization data is the hard part to get for free and I&#8217;ve built a seperate tool for that, the <a href=\"https:\/\/github.com\/JerBouma\/FinanceToolkit\">Finance Toolkit<\/a>.<\/p>\n<p>GitHub page: <a href=\"https:\/\/github.com\/JerBouma\/FinanceDatabase\">https:\/\/github.com\/JerBouma\/FinanceDatabase<\/a><\/p>\n<\/div>\n<p><!-- SC_ON -->   submitted by   <a href=\"https:\/\/www.reddit.com\/user\/Traditional_Yogurt\"> \/u\/Traditional_Yogurt <\/a> <br \/> <span><a href=\"https:\/\/www.reddit.com\/r\/datasets\/comments\/1ufb7fn\/finance_database_300000_financial_instruments\/\">[link]<\/a><\/span>   <span><a href=\"https:\/\/www.reddit.com\/r\/datasets\/comments\/1ufb7fn\/finance_database_300000_financial_instruments\/\">[comments]<\/a><\/span><\/p><div class='watch-action'><div class='watch-position align-right'><div class='action-like'><a class='lbg-style1 like-41542 jlk' href='javascript:void(0)' data-task='like' data-post_id='41542' data-nonce='72e055e984' rel='nofollow'><img class='wti-pixel' src='https:\/\/www.graviton.at\/letterswaplibrary\/wp-content\/plugins\/wti-like-post\/images\/pixel.gif' title='Like' \/><span class='lc-41542 lc'>0<\/span><\/a><\/div><\/div> <div class='status-41542 status align-right'><\/div><\/div><div class='wti-clear'><\/div>","protected":false},"excerpt":{"rendered":"<p>Finding a clean, structured list of financial instruments has always been harder than it should be. Bloomberg&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[85],"tags":[],"class_list":["post-41542","post","type-post","status-publish","format-standard","hentry","category-datatards","wpcat-85-id"],"_links":{"self":[{"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/posts\/41542","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/comments?post=41542"}],"version-history":[{"count":0,"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/posts\/41542\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/media?parent=41542"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/categories?post=41542"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/tags?post=41542"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}