Discovery
The Discovery Module contains lists of companies, cryptocurrencies, forex, commodities, ETFs and indices including screeners, quotes, performance metrics and more to find and select tickers to use in the Finance Toolkit.
To install the FinanceToolkit it simply requires the following:
pip install financetoolkit -U
search_instruments
The search instruments function allows you to search for a company or financial instrument by name. It returns a dataframe with all the symbols that match the query.
Also known as: find companies, lookup stocks, ticker search, instrument search.
Args:
- query (str): A query to search for, e.g. ‘META’.
- search_method (str, optional): The field to search against. Valid options are ‘symbol’, ‘name’, ‘cik’, ‘cusip’, and ‘isin’. Defaults to ‘name’.
Returns:
pd.DataFrame: A dataframe with all the symbols that match the query.
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
discovery.search_instruments(query='META')
Which returns:
| Symbol | Name | Currency | Exchange | Exchange Code |
|---|---|---|---|---|
| META | Meta Platforms, Inc. | USD | NASDAQ Global Select | NASDAQ |
| META.L | WisdomTree Industrial Metals Enhanced | USD | London Stock Exchange | LSE |
| METAUSD | Metadium USD | USD | CCC | CRYPTO |
| META.MI | WisdomTree Industrial Metals Enhanced | EUR | Milan | MIL |
| META.JK | PT Nusantara Infrastructure Tbk | IDR | Jakarta Stock Exchange | JKT |
get_stock_screener
Screen stocks based on a set of criteria. This can be useful to find companies that match a specific criteria or your analysis. Further filtering can be done by utilising the Finance Toolkit and calculating the relevant ratios to filter by. This can be:
- Market capitalization (market_cap_higher, market_cap_lower)
- Price (price_higher, price_lower)
- Beta (beta_higher, beta_lower)
- Volume (volume_higher, volume_lower)
- Dividend (dividend_higher, dividend_lower)
- Classification (sector, industry, country, exchange, is_etf)
The result is capped at limit companies, 1000 by default. Getting back exactly that many means the list was truncated, which is warned about in the log; narrow the criteria or raise the limit to see the remainder.
Also known as: filter stocks, financial criteria screener.
Args:
- market_cap_higher (int): The minimum market capitalization of the stock, in the currency of the listing rather than in millions.
- market_cap_lower (int): The maximum market capitalization of the stock.
- price_higher (int): The minimum price of the stock.
- price_lower (int): The maximum price of the stock.
- beta_higher (int): The minimum beta of the stock.
- beta_lower (int): The maximum beta of the stock.
- volume_higher (int): The minimum volume of the stock, in shares traded.
- volume_lower (int): The maximum volume of the stock.
- dividend_higher (int): The minimum dividend of the stock, as an amount per share over the last annual period rather than as a yield.
- dividend_lower (int): The maximum dividend of the stock.
- sector (str \| None): The sector to restrict the screen to, e.g. “Energy”.
- industry (str \| None): The industry to restrict the screen to, e.g. “Biotechnology”.
- country (str \| None): The two-letter country code to restrict the screen to, e.g. “US”.
- exchange (str \| None): The exchange code to restrict the screen to, e.g. “NASDAQ”.
- is_etf (bool \| None): Whether to restrict the screen to ETFs or to exclude them.
- limit (int): The maximum number of companies to return. Defaults to 1000.
Returns:
pd.DataFrame: A dataframe with all the symbols that match the query. An empty dataframe is returned when nothing matches.
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
discovery.get_stock_screener(
market_cap_higher=1000000,
market_cap_lower=200000000000,
price_higher=100,
price_lower=200,
beta_higher=1,
beta_lower=1.5,
volume_higher=100000,
volume_lower=2000000,
dividend_higher=1,
dividend_lower=2,
is_etf=False
)
Which returns:
| Symbol | Name | Market Cap | Sector | Industry | Beta | Price | Dividend | Volume | Exchange | Exchange Code | Country |
|---|---|---|---|---|---|---|---|---|---|---|---|
| NKE | NIKE, Inc. | 163403295604 | Consumer Cyclical | Footwear & Accessories | 1.079 | 107.36 | 1.48 | 1045865 | New York Stock Exchange | NYSE | US |
| SAF.PA | Safran SA | 66234006559 | Industrials | Aerospace & Defense | 1.339 | 160.16 | 1.35 | 119394 | Paris | EURONEXT | FR |
| ROST | Ross Stores, Inc. | 46724188589 | Consumer Cyclical | Apparel Retail | 1.026 | 138.785 | 1.34 | 169879 | NASDAQ Global Select | NASDAQ | US |
| HES | Hess Corporation | 44694706090 | Energy | Oil & Gas E&P | 1.464 | 145.51 | 1.75 | 123147 | New York Stock Exchange | NYSE | US |
get_stock_list
The stock list function returns a complete list of all the symbols that can be used in the Finance Toolkit. These are over 60.000 symbols.
Returns: pd.DataFrame: A dataframe with all the symbols in the toolkit.
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
stock_list = discovery.get_stock_list()
# The total list equals over 60.000 rows
stock_list.iloc[38000:38010]
Which returns:
| Symbol | Name | Price | Exchange | Exchange Code |
|---|---|---|---|---|
| LEO.V | Lion Copper and Gold Corp. | 0.09 | Toronto Stock Exchange Ventures | TSX |
| LEOF.TA | Lewinsky-Ofer Ltd. | 263.1 | Tel Aviv | TLV |
| LEON | Leone Asset Management, Inc. | 0.066 | Other OTC | OTC |
| LEON.SW | Leonteq AG | 34.35 | Swiss Exchange | SIX |
| LER.AX | Leaf Resources Limited | 0.014 | Australian Securities Exchange | ASX |
| LERTHAI.BO | LERTHAI FINANCE LIMITED | 265 | Bombay Stock Exchange | BSE |
| LES.WA | Less S.A. | 0.22 | Warsaw Stock Exchange | WSE |
| LESAF | Le Saunda Holdings Limited | 0.071 | Other OTC | PNK |
| LESHAIND.BO | Lesha Industries Limited | 4.68 | Bombay Stock Exchange | BSE |
| LESL | Leslie’s, Inc. | 6.91 | NASDAQ Global Select | NASDAQ |
get_stock_shares_float
Returns the shares float for each company. The shares float is the number of shares available for trading for each company. It also includes the number of shares outstanding and the date.
Returns: pd.DataFrame: A dataframe with the shares float for each company.
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
shares_float = discovery.get_stock_shares_float()
shares_float.iloc[50000:50010]
Which returns:
| Symbol | Date | Free Float | Float Shares | Outstanding Shares |
|---|---|---|---|---|
| OPY.AX | NaT | 51.4746 | 119853548 | 2.3284e+08 |
| OPYGY | NaT | 4.49504 | 60892047 | 1.35465e+09 |
| OQAL | 2024-01-01 13:12:23 | 0 | 0 | 226543 |
| OQLGF | 2023-12-31 21:48:07 | 0.6765 | 1150607 | 1.70082e+08 |
| OR | 2024-01-02 05:18:03 | 99.3281 | 183921869 | 1.85166e+08 |
| OR-R.BK | 2024-01-01 05:29:30 | 23.153 | 2778360000 | 1.2e+10 |
| OR.BK | 2024-01-02 03:52:39 | 22.7847 | 2734164000 | 1.2e+10 |
| OR.PA | 2024-01-02 07:57:35 | 45.2727 | 242084445 | 5.34725e+08 |
| OR.SW | 2023-12-31 13:38:10 | 45.2727 | 355743960 | 7.8578e+08 |
| OR.TO | 2023-12-31 17:56:33 | 99.3317 | 183928535 | 1.85166e+08 |
get_sectors_performance
Returns the historical performance of every sector, one column per sector.
The values are the average percentage change of the companies in that sector on that date, so 1.25 means +1.25% and not +125%. One API call is made per sector because the combined endpoint this used to read was retired and now answers with an empty response.
Without a date range the API hands back only the earliest days it holds, so pass start_date and end_date to look at a recent window.
Args:
- start_date (str \| None): The start date to filter data with, e.g. “2024-01-01”.
- end_date (str \| None): The end date to filter data with, e.g. “2024-12-31”.
Returns:
pd.DataFrame: A dataframe with the sectors performance for each sector.
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
sectors_performance = discovery.get_sectors_performance()
sectors_performance.tail()
Which returns:
| Date | Basic Materials | Communication Services | Consumer Cyclical | Consumer Defensive | Energy | Financial Services | Healthcare | Industrials | Real Estate | Technology | Utilities |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2024-02-26 | -2.0728 | -1.454 | 0.7303 | 0.324 | -0.1413 | -0.0491 | 2.7031 | -1.2333 | 0.4945 | 0.2893 | -1.5214 |
| 2024-02-27 | 2.8956 | 1.0041 | -0.7125 | 0.1136 | 2.5373 | 3.0268 | 9.1978 | -0.5179 | 0.7542 | 0.0419 | 4.6884 |
| 2024-02-28 | 4.343 | -0.8573 | -0.9692 | -0.0826 | -3.6163 | 1.8261 | -0.9719 | 1.0113 | -0.2592 | -0.6251 | 1.6461 |
| 2024-02-29 | -1.3336 | 0.7907 | 1.2483 | 3.4536 | 0.6259 | -0.5633 | -1.4379 | -4.1022 | 1.7541 | 1.2096 | 9.9286 |
| 2024-03-01 | 0.8526 | 0.0092 | 1.5435 | -3.7427 | 1.399 | -0.8531 | 2.544 | 0.1322 | 0.1964 | 1.6327 | -2.0912 |
get_biggest_gainers
Returns the biggest gainers for the day. This includes the symbol, the name, the price, the change and the change percentage.
Returns: pd.DataFrame: A dataframe with the biggest gainers for the day.
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
biggest_gainers = discovery.get_biggest_gainers()
biggest_gainers.head(10)
Which returns:
| Symbol | Name | Change | Price | Change % |
|---|---|---|---|---|
| AAME | Atlantic American Corporation | 0.3001 | 2.4501 | 13.9581 |
| ADAP | Adaptimmune Therapeutics plc | 0.1029 | 0.793 | 14.9109 |
| ADTX | Aditxt, Inc. | 1.81 | 6.63 | 37.5519 |
| AFMD | Affimed N.V. | 0.0861 | 0.625 | 15.977 |
| AIH | Aesthetic Medical International Holdings Group Limited | 0.1016 | 0.6896 | 17.2789 |
| ANTE | AirNet Technology Inc. | 0.1229 | 0.8299 | 17.3833 |
| APRE | Aprea Therapeutics, Inc. | 1.04 | 4.7 | 28.4153 |
| ASTR | Astra Space, Inc. | 0.55 | 2.28 | 31.7919 |
| BHG | Bright Health Group, Inc. | 2.37 | 7.63 | 45.057 |
| BROG | Brooge Energy Limited | 0.73 | 3.68 | 24.7458 |
get_biggest_losers
Returns the biggest losers for the day. This includes the symbol, the name, the price, the change and the change percentage.
Returns: pd.DataFrame: A dataframe with the biggest losers for the day.
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
biggest_losers = discovery.get_biggest_losers()
biggest_losers.head(10)
Which returns:
| Symbol | Name | Change | Price | Change % |
|---|---|---|---|---|
| AGAE | Allied Gaming & Entertainment Inc. | -0.2 | 1.06 | -15.873 |
| AVTX | Avalo Therapeutics, Inc. | -2.7339 | 9.1 | -23.1023 |
| BAYAR | Bayview Acquisition Corp Right | -0.03 | 0.12 | -20 |
| BBLG | Bone Biologics Corporation | -1.48 | 4.52 | -24.6667 |
| BKYI | BIO-key International, Inc. | -0.6 | 3 | -16.6667 |
| BREA | Brera Holdings PLC Class B Ordinary Shares | -0.2064 | 0.6112 | -25.2446 |
| BTBT | Bit Digital, Inc. | -0.86 | 4.23 | -16.8959 |
| BTCS | BTCS Inc. | -0.69 | 1.63 | -29.7414 |
| BTDR | Bitdeer Technologies Group | -3.36 | 9.86 | -25.416 |
| BYN | Banyan Acquisition Corporation | -2.035 | 10.9 | -15.7325 |
get_most_active_stocks
Returns the most active stocks for the day. This includes the symbol, the name, the price, the change and the change percentage.
Returns: pd.DataFrame: A dataframe with the most active stocks for the day.
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
most_active_stocks = discovery.get_most_active_stocks()
most_active_stocks.head(10)
Which returns:
| Symbol | Name | Change | Price | Change % |
|---|---|---|---|---|
| AAPL | Apple Inc. | -1.05 | 192.53 | -0.5424 |
| ADTX | Aditxt, Inc. | 1.81 | 6.63 | 37.5519 |
| AMD | Advanced Micro Devices, Inc. | -1.35 | 147.41 | -0.9075 |
| AMZN | Amazon.com, Inc. | -1.44 | 151.94 | -0.9388 |
| BAC | Bank of America Corporation | -0.21 | 33.67 | -0.6198 |
| BITF | Bitfarms Ltd. | -0.41 | 2.91 | -12.3494 |
| BITO | ProShares Bitcoin Strategy ETF | -0.33 | 20.49 | -1.585 |
| CAN | Canaan Inc. | -0.5 | 2.31 | -17.7936 |
| CLSK | CleanSpark, Inc. | -2.08 | 11.03 | -15.8657 |
| DISH | DISH Network Corporation | 0.11 | 5.77 | 1.9435 |
get_delisted_stocks
The delisted stocks function returns a page of delisted stocks including the IPO and delisted date.
The endpoint hands out at most 100 rows per call, so this is one page of the list rather than the whole of it. Walk page upwards until an empty frame comes back to collect everything.
Args:
- page (int): The page of results to retrieve, starting at 0. Defaults to 0.
- limit (int): The number of results per page, capped at 100 by the API. Defaults to 100.
Returns:
pd.DataFrame: A dataframe with one page of delisted stocks.
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
delisted_stocks = discovery.get_delisted_stocks()
delisted_stocks.head(10)
Which returns:
| Symbol | Name | Exchange | IPO Date | Delisted Date |
|---|---|---|---|---|
| AAIC | Arlington Asset Investment Corp. | NYSE | 1997-12-23 | 2023-12-14 |
| ABCM | Abcam plc | NASDAQ | 2010-12-03 | 2023-12-12 |
| ADZ | DB Agriculture Short ETN | AMEX | 2008-04-16 | 2023-10-27 |
| AENZ | Aenza S.A.A. | NYSE | 2013-07-24 | 2023-12-08 |
| AKUMQ | Akumin Inc | NASDAQ | 2018-03-08 | 2023-10-25 |
| ALTMW | Kinetik Holdings Inc - Warrants (09/11/2023) | NASDAQ | 2017-05-01 | 2023-11-07 |
| ARCE | Arco Platform Limited | NASDAQ | 2018-09-26 | 2023-12-07 |
| ARTEW | Artemis Strategic Investment Corporation | NASDAQ | 2021-11-22 | 2023-11-03 |
| ASPAU | Abri SPAC I, Inc. | NASDAQ | 2021-08-10 | 2023-11-02 |
| AVID | Avid Technology, Inc. | NASDAQ | 1993-03-12 | 2023-11-07 |
get_crypto_list
The crypto list function returns a complete list of all crypto symbols that can be used in the Finance Toolkit. These are over 4.000 symbols.
Returns: pd.DataFrame: A dataframe with all the symbols in the toolkit.
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
crypto_list = discovery.get_crypto_list()
crypto_list.head(10)
Which returns:
| Symbol | Name | Exchange | ICO Date | Circulating Supply | Total Supply |
|---|---|---|---|---|---|
| .ALPHAUSD | .Alpha USD | CCC | 2022-03-16 | 0 | nan |
| 00USD | 00 Token USD | CCC | 2022-10-11 | 2.32688e+08 | 1e+09 |
| 0NEUSD | Stone USD | CCC | 2022-04-26 | 9.77209e+14 | 9.77213e+14 |
| 0X0USD | 0x0.ai USD | CCC | 2023-01-31 | 8.68563e+08 | 8.9125e+08 |
| 0X1USD | 0x1.tools: AI Multi-tool Plaform USD | CCC | 2023-01-04 | 0 | nan |
| 0XAUSD | 0xApe USD | CCC | 2022-11-26 | 0 | nan |
| 0XBTCUSD | 0xBitcoin USD | CCC | 2018-06-04 | 9.70675e+06 | 2.09989e+07 |
| 0XENCRYPTUSD | Encryption AI USD | CCC | 2023-04-27 | 8.68563e+08 | nan |
| 0XGASUSD | 0xGasless USD | CCC | 2023-06-07 | 9.52864e+06 | nan |
| 0XMRUSD | 0xMonero USD | CCC | 2022-09-01 | 1.86525e+06 | 1.86525e+06 |
get_forex_list
The forex list function returns a complete list of all forex symbols that can be used in the Finance Toolkit. These are over 1.000 symbols.
Returns: pd.DataFrame: A dataframe with the forex symbols.
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
forex_list = discovery.get_forex_list()
forex_list.head(10)
Which returns:
| Symbol | From Currency | To Currency | From Name | To Name |
|---|---|---|---|---|
| AEDAUD | AED | AUD | United Arab Emirates Dirham | Australian Dollar |
| AEDBHD | AED | BHD | United Arab Emirates Dirham | Bahraini Dinar |
| AEDCAD | AED | CAD | United Arab Emirates Dirham | Canadian Dollar |
| AEDCHF | AED | CHF | United Arab Emirates Dirham | Swiss Franc |
| AEDDKK | AED | DKK | United Arab Emirates Dirham | Danish Krone |
| AEDEUR | AED | EUR | United Arab Emirates Dirham | Euro |
| AEDGBP | AED | GBP | United Arab Emirates Dirham | British Pound Sterling |
| AEDILS | AED | ILS | United Arab Emirates Dirham | Israeli New Shekel |
| AEDINR | AED | INR | United Arab Emirates Dirham | Indian Rupee |
| AEDJOD | AED | JOD | United Arab Emirates Dirham | Jordanian Dinar |
get_commodity_list
The commodity list function returns a complete list of all commodity symbols that can be used in the Finance Toolkit.
Returns: pd.DataFrame: A dataframe with all the commodities available.
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
commodity_list = discovery.get_commodity_list()
commodity_list.head(10)
Which returns:
| Symbol | Name | Exchange | Trade Month | Currency |
|---|---|---|---|---|
| ALIUSD | Aluminum Futures | nan | Nov | USD |
| BZUSD | Brent Crude Oil | nan | Sep | USD |
| CCUSD | Cocoa | nan | Dec | USD |
| CLUSD | Crude Oil | nan | Oct | USD |
| CTUSX | Cotton | nan | Dec | USX |
| DCUSD | Class III Milk Futures | nan | Jan | USD |
| DXUSD | US Dollar | nan | Sep | USD |
| ESUSD | E-Mini S&P 500 | nan | Jun | USD |
| GCUSD | Gold Futures | nan | Dec | USD |
| GFUSX | Feeder Cattle Futures | nan | Oct | USX |
get_etf_list
The etf list function returns a complete list of all etf symbols that can be used in the Finance Toolkit.
Returns: pd.DataFrame: A dataframe with all the etf symbols.
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
etf_list = discovery.get_etf_list()
etf_list.head(10)
Which returns:
| Symbol | Name |
|---|---|
| 00XL.DE | WisdomTree Copper - EUR Daily Hedged |
| 00XP.DE | WisdomTree Natural Gas - EUR Daily Hedged |
| 00XR.DE | WisdomTree Silver - EUR Daily Hedged |
| 00XS.DE | WisdomTree Wheat - EUR Daily Hedged |
| 00XT.DE | WisdomTree Brent Crude Oil - EUR Daily Hedged |
| 020Y.L | iShares € Govt Bond 20yr Target Duration UCITS ETF |
| 069500.KS | Samsung KODEX 200 ETF |
| 069660.KS | Kiwoom KIWOOM 200 ETF |
| 091160.KS | Samsung KODEX Semicon ETF |
| 091170.KS | Kodex Banks |
get_index_list
The index list function returns a complete list of all etf symbols that can be used in the Finance Toolkit.
Returns: pd.DataFrame: A dataframe with all the index symbols.
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
index_list = discovery.get_index_list()
index_list.head(10)
Which returns:
| Symbol | Name | Exchange | Currency |
|---|---|---|---|
| 000001.SS | SSE Composite Index | SHH | CNY |
| 399967.SZ | CSI National Defense | SHZ | CNY |
| 512.HK | CES China HK Mainland Index | HKSE | HKD |
| DE000SLA30S3.SG | Solactive Equal Weight Canada Oil & Gas Index | STU | EUR |
| DX-Y.NYB | US Dollar Index | ICEF | USD |
| FTSEMIB.MI | FTSE MIB Index | MIL | EUR |
| IDX30.JK | IDX30 | JKT | IDR |
| IMOEX.ME | MOEX Russia Index | MCX | RUB |
| ITLMS.MI | FTSE Italia All-Share Index | MIL | EUR |
| KOSPI200.KS | KOSPI 200 Index | KSC | KRW |
get_stock_news
Returns the latest stock market news articles. This includes the ticker symbol (when applicable), publisher, title, a short snippet, and the article URL.
Also known as: stock news feed, market news headlines.
Args:
- pages (int, optional): The number of pages to collect, each page is a separate API call, e.g. pages=5 makes 5 calls. Defaults to 1.
- limit (int, optional): The number of articles to return per page. Defaults to 100.
- start_date (str, optional): The start date to filter data with.
- end_date (str, optional): The end date to filter data with.
Returns:
pd.DataFrame: A dataframe with the latest stock market news articles.
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
stock_news = discovery.get_stock_news(limit=5)
stock_news[["Symbol", "Publisher", "Title"]]
Which returns:
| Published Date | Symbol | Publisher | Title |
|---|---|---|---|
| 2026-07-07 11:02:16 | VOD | Proactive Investors | Starlink threat to BT, Vodafone and other telecoms is ‘limited’, says analyst |
| 2026-07-07 11:01:15 | TNDM | Zacks Investment Research | Does TNDM Stock Still Deserve a Place in Your Portfolio? |
| 2026-07-07 11:01:13 | OMCL | Zacks Investment Research | What’s Fueling Omnicell Stock’s 52.6% Rally Over the Past Year? |
| 2026-07-07 11:01:10 | AMAT | Zacks Investment Research | Best Momentum Stock to Buy for July 7th |
| 2026-07-07 11:01:09 | GS | Zacks Investment Research | Goldman Sachs (GS) Earnings Expected to Grow: What to Know Ahead of Next Week’s Release |
get_general_news
Returns the latest general news articles, spanning macroeconomic and broad market coverage rather than a specific ticker.
Also known as: general market news, macro news feed.
Args:
- pages (int, optional): The number of pages to collect, each page is a separate API call, e.g. pages=5 makes 5 calls. Defaults to 1.
- limit (int, optional): The number of articles to return per page. Defaults to 100.
Returns:
pd.DataFrame: A dataframe with the latest general news articles.
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
general_news = discovery.get_general_news(limit=5)
general_news[["Publisher", "Title"]]
Which returns:
| Published Date | Publisher | Title |
|---|---|---|
| 2026-07-07 10:56:10 | Zacks Investment Research | ASE Technology Surges 169% YTD: Should You Still Buy the Stock? |
| 2026-07-07 10:53:31 | NYTimes | Companies Brace for Fresh Political Uncertainty at U.S. Agencies |
| 2026-07-07 10:41:20 | Zacks Investment Research | Why LATAM (LTM) is a Top Value Stock for the Long-Term |
| 2026-07-07 10:35:53 | Reuters | AI startup CEO pleaded guilty in US to trading on insider tips from lawyers |
| 2026-07-07 10:30:10 | Fox Business | TENSIONS RISING: Trump delivers unmistakable warning |
get_press_releases
Returns the latest official company press releases, such as earnings announcements, mergers, and other corporate communications.
Also known as: corporate announcements, company press releases.
Args:
- pages (int, optional): The number of pages to collect, each page is a separate API call, e.g. pages=5 makes 5 calls. Defaults to 1.
- limit (int, optional): The number of articles to return per page. Defaults to 100.
- start_date (str, optional): The start date to filter data with.
- end_date (str, optional): The end date to filter data with.
Returns:
pd.DataFrame: A dataframe with the latest company press releases.
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
press_releases = discovery.get_press_releases(limit=5)
press_releases[["Symbol", "Publisher", "Title"]]
Which returns:
| Published Date | Symbol | Publisher | Title |
|---|---|---|---|
| 2026-07-07 11:01:00 | VERI | GlobeNewsWire | Portnoy Law Firm Announces Class Action on Behalf of Veritone, Inc. Investors |
| 2026-07-07 11:00:00 | VSH | GlobeNewsWire | Vishay Intertechnology Standard-Level 40 V MOSFETs Prevent False Triggering… |
| 2026-07-07 11:00:00 | TBBK | GlobeNewsWire | Old National Bancorp Announces Schedule for Second-Quarter Earnings Release… |
| 2026-07-07 10:59:00 | SRAD | GlobeNewsWire | Portnoy Law Firm Announces Class Action on Behalf of Sportradar Group AG Investors |
| 2026-07-07 10:58:00 | CVLT | GlobeNewsWire | Portnoy Law Firm Announces Class Action on Behalf of Commvault Systems, Inc. Investors |
get_crypto_news
Returns the latest cryptocurrency news articles.
Also known as: crypto news feed, digital asset news.
Args:
- pages (int, optional): The number of pages to collect, each page is a separate API call, e.g. pages=5 makes 5 calls. Defaults to 1.
- limit (int, optional): The number of articles to return per page. Defaults to 100.
Returns:
pd.DataFrame: A dataframe with the latest cryptocurrency news articles.
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
crypto_news = discovery.get_crypto_news(limit=5)
crypto_news[["Symbol", "Publisher", "Title"]]
Which returns:
| Published Date | Symbol | Publisher | Title |
|---|---|---|---|
| 2026-07-07 10:54:44 | STAKEUSD | Crypto Briefing | Former Tether investment chief seeks to sell 1% stake in the stablecoin giant |
| 2026-07-07 10:53:57 | BTCUSD | AMBCrypto | Tether backs Brazil’s Mercado Bitcoin while USDT faces growing restrictions in Europe |
| 2026-07-07 10:50:00 | BTCUSD | UToday | Satoshi’s Bitcoin Saved? Digital Chamber Steps In to Protest $240 Billion Court Seizure |
| 2026-07-07 10:38:15 | BTCUSD | Crypto Economy | Binance Rolls Out New Bitcoin Yield Product to Help Holders Boost Returns Without Selling |
| 2026-07-07 10:37:19 | BTCUSD | Crypto Briefing | $470B of Bitcoin at risk from advancing quantum computing |
get_forex_news
Returns the latest forex news articles.
Also known as: forex news feed, currency market news.
Args:
- pages (int, optional): The number of pages to collect, each page is a separate API call, e.g. pages=5 makes 5 calls. Defaults to 1.
- limit (int, optional): The number of articles to return per page. Defaults to 100.
Returns:
pd.DataFrame: A dataframe with the latest forex news articles.
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
forex_news = discovery.get_forex_news(limit=5)
forex_news[["Symbol", "Publisher", "Title"]]
Which returns:
| Published Date | Symbol | Publisher | Title |
|---|---|---|---|
| 2026-07-07 10:16:59 | AUDUSD | Action Forex | AUDUSD – Recovery Faces Increased Headwinds from Initial Fibo Resistance |
| 2026-07-07 10:11:55 | EURGBP | FX Street | EUR/GBP Price Forecast: Bearish bias persists below 0.8600 |
| 2026-07-07 09:59:12 | GBPUSD | FX Street | British Pound: Capped by layered resistance against US Dollar – Scotiabank |
| 2026-07-07 09:29:14 | XAUUSD | FXEmpire | Gold Price Analysis – Gold Clings to $4,000 Floor Facing Heavy MA Resistance |
| 2026-07-07 09:21:33 | XAGUSD | FXEmpire | Silver Price Analysis – Silver Holds Above $60 as Strong Dollar Restricts Gains |
search_stock_news
Searches stock market news articles by one or more ticker symbols.
Also known as: ticker news search, company news lookup.
Args:
- symbols (str \| list[str]): One or more ticker symbols, e.g. “AAPL” or [“AAPL”, “MSFT”].
- pages (int, optional): The number of pages to collect, each page is a separate API call, e.g. pages=5 makes 5 calls. Defaults to 1.
- limit (int, optional): The number of articles to return per page. Defaults to 100.
- start_date (str, optional): The start date to filter data with.
- end_date (str, optional): The end date to filter data with.
Returns:
pd.DataFrame: A dataframe with stock news articles matching the given symbols.
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
stock_news = discovery.search_stock_news(symbols="AAPL", limit=5)
stock_news[["Symbol", "Publisher", "Title"]]
Which returns:
| Published Date | Symbol | Publisher | Title |
|---|---|---|---|
| 2026-07-07 10:46:52 | AAPL | Benzinga | Walmart, Apple And Nike May Be Agentic AI’s First Winners. Grocery May Be The First Loser |
| 2026-07-07 10:20:11 | AAPL | Forbes | Why Investors Fell Back In Love With Apple’s Cheap AI Strategy |
| 2026-07-07 09:26:50 | AAPL | Benzinga | Forget the iPhone. Apple’s AI Story May Belong to Macs |
| 2026-07-07 08:55:03 | AAPL | 247 Wallst | Stock Market Live July 7, 2026: S&P 500 (SPY) Drops on Tech Concerns |
| 2026-07-07 08:44:43 | AAPL | The Motley Fool | How Apple Can Actually Benefit From the Memory Supply Shortage |
search_press_releases
Searches company press releases by one or more ticker symbols.
Also known as: press release search, corporate announcement lookup.
Args:
- symbols (str \| list[str]): One or more ticker symbols, e.g. “AAPL” or [“AAPL”, “MSFT”].
- pages (int, optional): The number of pages to collect, each page is a separate API call, e.g. pages=5 makes 5 calls. Defaults to 1.
- limit (int, optional): The number of articles to return per page. Defaults to 100.
- start_date (str, optional): The start date to filter data with.
- end_date (str, optional): The end date to filter data with.
Returns:
pd.DataFrame: A dataframe with press releases matching the given symbols.
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
press_releases = discovery.search_press_releases(symbols="AAPL", limit=5)
press_releases[["Symbol", "Publisher", "Title"]]
Which returns:
| Published Date | Symbol | Publisher | Title |
|---|---|---|---|
| 2026-06-19 17:00:00 | AAPL | PRNewsWire | Xiao-I Corporation Provides Update on First-Instance Rulings in Patent Litigation… |
| 2026-06-17 09:00:00 | AAPL | Business Wire | Addigy Expands Identity for Apple Fleets: IdP-Native Login, FileVault… |
| 2026-06-16 13:23:00 | AAPL | GlobeNewsWire | Pennsylvania Expansion Continues: Apple Blossom Joins Legend Senior Living |
| 2026-06-09 14:28:00 | AAPL | GlobeNewsWire | Charlotte Volsch, Apple Valley, California Broker, Named Among Real Trends 2026… |
| 2026-06-09 09:58:00 | AAPL | Business Wire | MIKROE develops Spatial Anchor R1 & S1 for Apple Vision Pro |
search_crypto_news
Searches cryptocurrency news articles by one or more coin/token symbols.
Also known as: crypto news search, coin news lookup.
Args:
- symbols (str \| list[str]): One or more crypto symbols, e.g. “BTCUSD” or [“BTCUSD”, “ETHUSD”].
- pages (int, optional): The number of pages to collect, each page is a separate API call, e.g. pages=5 makes 5 calls. Defaults to 1.
- limit (int, optional): The number of articles to return per page. Defaults to 100.
Returns:
pd.DataFrame: A dataframe with crypto news articles matching the given symbols.
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
crypto_news = discovery.search_crypto_news(symbols="BTCUSD", limit=5)
crypto_news[["Symbol", "Publisher", "Title"]]
Which returns:
| Published Date | Symbol | Publisher | Title |
|---|---|---|---|
| 2026-07-07 10:53:57 | BTCUSD | AMBCrypto | Tether backs Brazil’s Mercado Bitcoin while USDT faces growing restrictions in Europe |
| 2026-07-07 10:50:00 | BTCUSD | UToday | Satoshi’s Bitcoin Saved? Digital Chamber Steps In to Protest $240 Billion Court Seizure |
| 2026-07-07 10:38:15 | BTCUSD | Crypto Economy | Binance Rolls Out New Bitcoin Yield Product to Help Holders Boost Returns Without Selling |
| 2026-07-07 10:37:19 | BTCUSD | Crypto Briefing | $470B of Bitcoin at risk from advancing quantum computing |
| 2026-07-07 10:27:30 | BTCUSD | CryptoSlate | Bitcoin dominance hits one-month low as altcoin winners start breaking away |
search_forex_news
Searches forex news articles by one or more currency pair symbols.
Also known as: forex news search, currency pair news lookup.
Args:
- symbols (str \| list[str]): One or more forex pairs, e.g. “EURUSD” or [“EURUSD”, “GBPUSD”].
- pages (int, optional): The number of pages to collect, each page is a separate API call, e.g. pages=5 makes 5 calls. Defaults to 1.
- limit (int, optional): The number of articles to return per page. Defaults to 100.
Returns:
pd.DataFrame: A dataframe with forex news articles matching the given symbols.
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
forex_news = discovery.search_forex_news(symbols="EURUSD", limit=5)
forex_news[["Symbol", "Publisher", "Title"]]
Which returns:
| Published Date | Symbol | Publisher | Title |
|---|---|---|---|
| 2026-07-07 07:16:08 | EURUSD | FX Street | Euro: Upside bias held above strong support against US Dollar – UOB |
| 2026-07-07 06:56:14 | EURUSD | Action Forex | EUR/USD Analysis: Who Is in Control? |
| 2026-07-07 06:53:07 | EURUSD | Forexcom | EUR/USD forecast: Dollar holds the upper hand as traders await Fed minutes |
| 2026-07-07 02:15:13 | EURUSD | FX Street | Euro Summer range holds against US Dollar – Commerzbank |
| 2026-07-07 01:58:21 | EURUSD | FX Street | EUR/USD Price Forecast: Turns broadly sideways below 20-day EMA |
get_ipo_calendar
Returns the calendar of upcoming and recent initial public offerings (IPOs), including expected pricing, exchange, and share count. This is distinct from the “IPO Date” field on a company’s profile, which only shows a single past date.
Note that the date range is limited to a maximum of 90 days.
Also known as: IPO pipeline, upcoming listings.
Args:
- start_date (str, optional): The start date to filter data with.
- end_date (str, optional): The end date to filter data with.
Returns:
pd.DataFrame: A dataframe with upcoming and recent IPOs.
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
ipo_calendar = discovery.get_ipo_calendar(start_date="2024-01-01", end_date="2024-06-01")
ipo_calendar.head()
Which returns:
| Symbol | Date | Company | Exchange | Status | Shares | Price Range | Market Cap |
|---|---|---|---|---|---|---|---|
| SMTK | 2024-05-31 | SmartKem, Inc. | NASDAQ | Expected | nan | nan | |
| NEWTG | 2024-05-31 | NewtekOne, Inc. 8.50% Fixed Rate Senior Notes | NASDAQ | Expected | nan | nan | |
| KDLY | 2024-05-31 | Kindly MD, Inc. | NASDAQ | Priced | 1240910 | 6825005 | |
| KDLYW | 2024-05-31 | Kindly MD, Inc. Warrants | NASDAQ | Expected | nan | nan | |
| SECR | 2024-05-31 | IndexIQ Active ETF Trust | NYSE | Expected | nan | nan |
get_ipo_disclosures
Returns IPO disclosure filings - the regulatory filings made ahead of an IPO, including filing dates, effectiveness dates, and CIK numbers, with direct links to the official SEC documents.
Also known as: pre-IPO SEC filings, IPO regulatory disclosures.
Args:
- start_date (str, optional): The start date to filter data with.
- end_date (str, optional): The end date to filter data with.
Returns:
pd.DataFrame: A dataframe with IPO disclosure filings.
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
ipo_disclosures = discovery.get_ipo_disclosures(start_date="2024-01-01", end_date="2024-06-01")
ipo_disclosures.head()
Which returns:
| Symbol | Filing Date | Accepted Date | Effectiveness Date | CIK | Form |
|---|---|---|---|---|---|
| BIPH | 2024-05-31 | 2024-05-31 | 2024-05-31 | 0001406234 | CERT |
| BIPJ | 2024-05-31 | 2024-05-31 | 2024-05-31 | 0001406234 | CERT |
| BRIPF | 2024-05-31 | 2024-05-31 | 2024-05-31 | 0001406234 | CERT |
| NAKAW | 2024-05-31 | 2024-05-31 | 2024-05-31 | 0001946573 | CERT |
| BIPI | 2024-05-31 | 2024-05-31 | 2024-05-31 | 0001406234 | CERT |
get_ipo_prospectuses
Returns IPO prospectus filings, including public offering price, discounts and commissions, and proceeds before expenses, with links to the official SEC prospectus documents.
Also known as: IPO pricing details, S-1/424B4 filings.
Args:
- start_date (str, optional): The start date to filter data with.
- end_date (str, optional): The end date to filter data with.
Returns:
pd.DataFrame: A dataframe with IPO prospectus filings.
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
ipo_prospectuses = discovery.get_ipo_prospectuses(start_date="2024-01-01", end_date="2024-06-01")
ipo_prospectuses.head()
Which returns:
| Symbol | IPO Date | Public Price Per Share | Public Price Total | Form |
|---|---|---|---|---|
| LUCYW | 2022-08-14 | 73 | 4024429 | S-1 |
| LBGJ | 2024-05-29 | 5 | 25000000 | F-1/A |
| CDIX | 2005-12-21 | 5 | 8000000 | S-1/A |
| LUCY | 2022-08-13 | 73 | 4024429 | S-1 |
| ERES | 2023-07-02 | 0.02 | 100 | S-1/A |
get_stock_splits_calendar
Returns the calendar of upcoming and recent stock splits across all companies, including the split date and ratio. Same calendar pattern as the earnings and dividend calendars.
Note that the date range is limited to a maximum of 90 days.
Also known as: split schedule, upcoming stock splits.
Args:
- start_date (str, optional): The start date to filter data with.
- end_date (str, optional): The end date to filter data with.
Returns:
pd.DataFrame: A dataframe with upcoming and recent stock splits.
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
splits_calendar = discovery.get_stock_splits_calendar(start_date="2024-01-01", end_date="2024-06-01")
splits_calendar.head()
Which returns:
| Symbol | Date | Numerator | Denominator | Split Type |
|---|---|---|---|---|
| ALZ.ST | 2024-05-31 | 617 | 500 | stock-split |
| RCSL4.SA | 2024-05-31 | 1 | 4 | stock-split |
| BFG.NZ | 2024-05-31 | 3 | 10 | stock-split |
| CRTX.L | 2024-05-31 | 1 | 160 | stock-split |
| DAVANGERE.NS | 2024-05-31 | 10 | 1 | stock-split |
get_sector_performance
Returns sector performance - the average price change per sector. Provide exactly one of date (a snapshot across all sectors on that date) or sector (the historical time series for one sector).
Also known as: sector performance snapshot, sector performance history, sector trend.
Args:
- date (str, optional): The date to retrieve a snapshot for, e.g. “2024-02-01”.
- sector (str, optional): The sector to retrieve the history for, e.g. “Energy”.
Returns:
pd.DataFrame: A dataframe with sector performance, indexed by Sector (snapshot) or Date (historical).
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
sector_snapshot = discovery.get_sector_performance(date="2024-02-01")
sector_snapshot.head()
sector_history = discovery.get_sector_performance(sector="Energy")
sector_history.tail()
Which returns:
| Sector | Date | Exchange | Average Change |
|---|---|---|---|
| Basic Materials | 2024-02-01 | NASDAQ | -0.31481 |
| Communication Services | 2024-02-01 | NASDAQ | 0.85070 |
| Consumer Cyclical | 2024-02-01 | NASDAQ | 1.81130 |
| Consumer Defensive | 2024-02-01 | NASDAQ | 1.74347 |
| Energy | 2024-02-01 | NASDAQ | 0.63975 |
get_industry_performance
Returns industry performance - the average price change per industry. Provide exactly one of date (a snapshot across all industries on that date) or industry (the historical time series for one industry).
Also known as: industry performance snapshot, industry performance history, industry trend.
Args:
- date (str, optional): The date to retrieve a snapshot for, e.g. “2024-02-01”.
- industry (str, optional): The industry to retrieve the history for, e.g. “Biotechnology”.
Returns:
pd.DataFrame: A dataframe with industry performance, indexed by Industry (snapshot) or Date (historical).
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
industry_snapshot = discovery.get_industry_performance(date="2024-02-01")
industry_snapshot.head()
industry_history = discovery.get_industry_performance(industry="Biotechnology")
industry_history.tail()
Which returns:
| Industry | Date | Exchange | Average Change |
|---|---|---|---|
| Advertising Agencies | 2024-02-01 | NASDAQ | 3.8660 |
| Aerospace & Defense | 2024-02-01 | NASDAQ | 0.5853 |
| Agricultural Farm Products | 2024-02-01 | NASDAQ | 1.6564 |
| Agricultural Inputs | 2024-02-01 | NASDAQ | 0.5436 |
| Agricultural - Machinery | 2024-02-01 | NASDAQ | 1.4934 |
get_sector_pe
Returns sector price-to-earnings (P/E) ratios. Provide exactly one of date (a snapshot across all sectors on that date) or sector (the historical time series for one sector).
Also known as: sector P/E snapshot, sector P/E history, sector valuation trend.
Args:
- date (str, optional): The date to retrieve a snapshot for, e.g. “2024-02-01”.
- sector (str, optional): The sector to retrieve the history for, e.g. “Energy”.
Returns:
pd.DataFrame: A dataframe with sector P/E ratios, indexed by Sector (snapshot) or Date (historical).
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
sector_pe = discovery.get_sector_pe(date="2024-02-01")
sector_pe.head()
sector_pe_history = discovery.get_sector_pe(sector="Energy")
sector_pe_history.tail()
Which returns:
| Sector | Date | Exchange | PE Ratio |
|---|---|---|---|
| Basic Materials | 2024-02-01 | NASDAQ | 15.6877 |
| Communication Services | 2024-02-01 | NASDAQ | 25.9425 |
| Consumer Cyclical | 2024-02-01 | NASDAQ | 55.2588 |
| Consumer Defensive | 2024-02-01 | NASDAQ | 31.7298 |
| Energy | 2024-02-01 | NASDAQ | 14.4114 |
get_industry_pe
Returns industry price-to-earnings (P/E) ratios. Provide exactly one of date (a snapshot across all industries on that date) or industry (the historical time series for one industry).
Also known as: industry P/E snapshot, industry P/E history, industry valuation trend.
Args:
- date (str, optional): The date to retrieve a snapshot for, e.g. “2024-02-01”.
- industry (str, optional): The industry to retrieve the history for, e.g. “Biotechnology”.
Returns:
pd.DataFrame: A dataframe with industry P/E ratios, indexed by Industry (snapshot) or Date (historical).
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
industry_pe = discovery.get_industry_pe(date="2024-02-01")
industry_pe.head()
industry_pe_history = discovery.get_industry_pe(industry="Biotechnology")
industry_pe_history.tail()
Which returns:
| Industry | Date | Exchange | PE Ratio |
|---|---|---|---|
| Advertising Agencies | 2024-02-01 | NASDAQ | 71.0960 |
| Aerospace & Defense | 2024-02-01 | NASDAQ | 46.0186 |
| Agricultural Farm Products | 2024-02-01 | NASDAQ | 7.4529 |
| Agricultural Inputs | 2024-02-01 | NASDAQ | 58.9849 |
| Agricultural - Machinery | 2024-02-01 | NASDAQ | 10.3538 |
get_mergers_acquisitions_latest
Returns the most recent mergers and acquisitions deal announcements, including the acquirer and target companies and a link to the underlying SEC filing.
Also known as: M&A feed, deal announcements.
Args:
- limit (int, optional): The number of results to return. Defaults to 100.
- page (int, optional): The page number to retrieve. Defaults to 0.
Returns:
pd.DataFrame: A dataframe with the latest mergers and acquisitions.
As an example:
from financetoolkit import Discovery
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
mergers_acquisitions = discovery.get_mergers_acquisitions_latest(limit=5)
mergers_acquisitions[["Company Name", "Targeted Company Name", "Transaction Date"]]
Which returns:
| Symbol | Company Name | Targeted Company Name | Transaction Date |
|---|---|---|---|
| THRM | GENTHERM Inc | Modine Manufacturing Company | 2026-07-02 |
| DBCAU | D. Boral Acquisition I Corp. | D. Boral ARC Acquisition I Corp. Cl A | 2026-07-01 |
| DBCA | D. Boral Acquisition I Corp. | D. Boral ARC Acquisition I Corp. Cl A | 2026-07-01 |
| CYCCP | Cyclacel Pharmaceuticals, Inc. | Bio Green Med Solution, Inc. | 2026-06-16 |
| CYCC | Cyclacel Pharmaceuticals, Inc. | Bio Green Med Solution, Inc. | 2026-06-16 |