def handle_response(response): if response.status_code == 200: return response.json() else: return {"error": f"Failed to fetch data. Status code: {response.status_code}"} def get_income_statement(ticker, period='annual', limit=5): """ Fetches the income statement for a given company (ticker) over a specified period and with a limit on the number of records returned. Parameters: ----------- ticker : str The stock symbol or CIK (Central Index Key) for the company (e.g., 'AAPL' for Apple or '0000320193' for its CIK). period : str, optional The reporting period for the income statement. Allowable values are: - 'annual' : Retrieves the annual income statement (default). - 'quarter' : Retrieves the quarterly income statement. limit : int, optional Limits the number of records returned. The default value is 5. Returns: -------- dict or list of dict The income statement data, including fields like date, symbol, reported currency, filing date, etc. Example: -------- get_income_statement('AAPL', period='annual', limit=5) Response format: ---------------- [ { "date": "2022-09-24", "symbol": "AAPL", "reportedCurrency": "USD", "cik": "0000320193", "fillingDate": "2022-10-28", "acceptedDate": "2022-10-27 18:01:14", ... }, ... ] """ BASE_URL = "https://financialmodelingprep.com/api/v3" params = { "period": period, # Accepts 'annual' or 'quarter' "limit": limit, # Limits the number of records returned "apikey": os.environ['FMP_API_KEY'] # API Key for authentication } # Construct the full URL with query parameters endpoint = f"{BASE_URL}/income-statement/{ticker}?{urlencode(params)}" response = requests.get(endpoint) return handle_response(response) def ticker_search(query, limit=10, exchange='NYSE'): """ Searches for ticker symbols and exchanges for both equity securities and exchange-traded funds (ETFs) by searching with the company name or ticker symbol. Parameters: ----------- query : str The name or ticker symbol to search for (e.g., 'AA' for Alcoa). limit : int, optional Limits the number of records returned. The default is 10. exchange : str, optional Specifies the exchange to filter results by. Allowable values include: - 'NYSE' : New York Stock Exchange (default). - 'NASDAQ' : NASDAQ Exchange. - Other exchange codes supported by the API. Returns: -------- dict or list of dict The search results, including the symbol, name, currency, stock exchange, and exchange short name. Example: -------- ticker_search('AA', limit=10, exchange='NASDAQ') Response format: ---------------- [ { "symbol": "PRAA", "name": "PRA Group, Inc.", "currency": "USD", "stockExchange": "NasdaqGS", "exchangeShortName": "NASDAQ" }, { "symbol": "PAAS", "name": "Pan American Silver Corp.", "currency": "USD", "stockExchange": "NasdaqGS", "exchangeShortName": "NASDAQ" }, ... ] """ BASE_URL = "https://financialmodelingprep.com/api/v3" params = { "limit": limit, "exchange": exchange, "apikey": os.environ['FMP_API_KEY'] } endpoint = f"{BASE_URL}/search?query={query}&{urlencode(params)}" response = requests.get(endpoint) return handle_response(response) def company_profile(symbol): """ Fetches a company's profile, including key stats such as price, market capitalization, beta, and other essential details. Parameters: ----------- symbol : str The stock ticker symbol or CIK (Central Index Key) for the company (e.g., 'AAPL' for Apple). Returns: -------- dict or list of dict The company's profile data, including fields such as symbol, price, beta, market cap, industry, CEO, and description. Example: -------- company_profile('AAPL') Response format: ---------------- [ { "symbol": "AAPL", "price": 145.30, "beta": 1.25, "volAvg": 98364732, "mktCap": 2423446000000, "lastDiv": 0.88, "range": "122.25-157.33", "changes": -2.00, "companyName": "Apple Inc.", "currency": "USD", "cik": "0000320193", "isin": "US0378331005", "cusip": "037833100", "exchange": "NasdaqGS", "exchangeShortName": "NASDAQ", "industry": "Consumer Electronics", "website": "https://www.apple.com", "description": "Apple Inc. designs, manufactures, and markets smartphones, personal computers, tablets, wearables, and accessories worldwide." } ] """ BASE_URL = "https://financialmodelingprep.com/api/v3" params = { 'apikey': os.environ['FMP_API_KEY'] } endpoint = f"{BASE_URL}/profile/{symbol}?{urlencode(params)}" response = requests.get(endpoint) return handle_response(response) def stock_grade(symbol, limit = 500): BASE_URL = "https://financialmodelingprep.com/api/v3" params = { 'apikey':os.environ['FMP_API_KEY'], 'limit':limit } endpoint = f"{BASE_URL}/grade/{symbol}?{urlencode(params)}" response = requests.get(endpoint) return handle_response(response) def current_market_cap(symbol): """ Fetches the current market capitalization of a given company based on its stock symbol. Parameters: ----------- symbol : str The stock ticker symbol for the company (e.g., 'AAPL' for Apple). Returns: -------- dict or list of dict The market capitalization data, including fields such as symbol, date, and market cap. Example: -------- current_market_cap('AAPL') Response format: ---------------- [ { "symbol": "AAPL", "date": "2023-03-02", "marketCap": 2309048053309 } ] """ BASE_URL = "https://financialmodelingprep.com/api/v3" params = { 'apikey': os.environ['FMP_API_KEY'] } endpoint = f"{BASE_URL}/market-capitalization/{symbol}?{urlencode(params)}" response = requests.get(endpoint) return handle_response(response) def historical_market_cap(symbol, from_date=None, to_date=None, limit=None): """ Fetches the historical market capitalization of a given company within a specified date range. Parameters: ----------- symbol : str The stock ticker symbol for the company (e.g., 'AAPL' for Apple). from_date : str, optional The start date for the historical data in 'YYYY-MM-DD' format (e.g., '2023-10-10'). Default is None, which fetches data from the earliest available date. to_date : str, optional The end date for the historical data in 'YYYY-MM-DD' format (e.g., '2023-12-10'). Default is None, which fetches data up to the latest available date. limit : int, optional Limits the number of records returned. Default is None, which fetches all available records. Returns: -------- dict or list of dict The historical market cap data, including fields such as symbol, date, and market capitalization. Example: -------- historical_market_cap('AAPL', from_date='2023-10-10', to_date='2023-12-10', limit=100) Response format: ---------------- [ { "symbol": "AAPL", "date": "2023-03-02", "marketCap": 2313794623242 } ] """ BASE_URL = "https://financialmodelingprep.com/api/v3" params = { 'apikey': os.environ['FMP_API_KEY'], 'from': from_date, 'to': to_date, 'limit': limit } endpoint = f"{BASE_URL}/historical-market-capitalization/{symbol}?{urlencode(params)}" response = requests.get(endpoint) return handle_response(response) def analyst_recommendations(symbol): """ Fetches the analyst recommendations for a given company based on its stock symbol. This includes buy, hold, and sell ratings. Parameters: ----------- symbol : str The stock ticker symbol for the company (e.g., 'AAPL' for Apple). Returns: -------- dict or list of dict The analyst recommendation data, including fields such as buy, hold, sell, and strong buy ratings. Example: -------- analyst_recommendations('AAPL') Response format: ---------------- [ { "symbol": "AAPL", "date": "2023-08-01", "analystRatingsBuy": 21, "analystRatingsHold": 6, "analystRatingsSell": 0, "analystRatingsStrongSell": 0, "analystRatingsStrongBuy": 11 } ] """ BASE_URL = "https://financialmodelingprep.com/api/v3" params = { 'apikey': os.environ['FMP_API_KEY'] } endpoint = f"{BASE_URL}/analyst-stock-recommendations/{symbol}?{urlencode(params)}" response = requests.get(endpoint) return handle_response(response) def stock_peers(symbol): """ Fetches a list of companies that are considered peers of the given company. These peers are companies that trade on the same exchange, are in the same sector, and have a similar market capitalization. Parameters: ----------- symbol : str The stock ticker symbol for the company (e.g., 'AAPL' for Apple). Returns: -------- dict or list of dict The peers data, including a list of peer company ticker symbols. Example: -------- stock_peers('AAPL') Response format: ---------------- [ { "symbol": "AAPL", "peersList": [ "LPL", "SNEJF", "PCRFY", "SONO", "VZIO", ... ] } ] """ params = { 'apikey': os.environ['FMP_API_KEY'], 'symbol': symbol } BASE_URL = "https://financialmodelingprep.com/api/v4" endpoint = f"{BASE_URL}/stock_peers?{urlencode(params)}" response = requests.get(endpoint) return handle_response(response) def earnings_historical_and_upcoming(symbol, limit=100): """ Fetches historical and upcoming earnings announcements for a given company. The response includes the date, EPS (earnings per share), estimated EPS, revenue, and estimated revenue. Parameters: ----------- symbol : str The stock ticker symbol for the company (e.g., 'AAPL' for Apple). limit : int, optional Limits the number of records returned. The default is 100. Returns: -------- dict or list of dict The earnings data, including fields such as date, EPS, estimated EPS, revenue, and estimated revenue. Example: -------- earnings_historical_and_upcoming('AAPL', limit=100) Response format: ---------------- [ { "date": "1998-10-14", "symbol": "AAPL", "eps": 0.0055, "epsEstimated": 0.00393, "time": "amc", "revenue": 1556000000, "revenueEstimated": 2450700000, "updatedFromDate": "2023-12-04", "fiscalDateEnding": "1998-09-25" } ] """ params = { 'apikey': os.environ['FMP_API_KEY'], 'limit': limit } endpoint = f"{BASE_URL}/historical/earning_calendar/{symbol}?{urlencode(params)}" response = requests.get(endpoint) return handle_response(response) def intraday_stock_prices(timeframe, symbol, from_date=None, to_date=None, extended='false'): """ Fetches the historical intraday stock price for a given company over a specified timeframe. Parameters: ----------- timeframe : str The time interval for the stock data. Allowable values are: - '1min' : 1 minute interval - '5min' : 5 minute interval - '15min' : 15 minute interval - '30min' : 30 minute interval - '1hour' : 1 hour interval - '4hour' : 4 hour interval symbol : str The stock symbol for which to retrieve the data (e.g., 'AAPL' for Apple). from_date : str, optional The start date for the historical data in 'YYYY-MM-DD' format (e.g., '2023-08-10'). Default is None, which fetches all available data up to the present. to_date : str, optional The end date for the historical data in 'YYYY-MM-DD' format (e.g., '2023-09-10'). Default is None, which fetches data from the beginning up to the current date. extended : str, optional Whether to fetch extended market data (pre-market and after-hours). Allowable values: - 'true' : Fetch extended market data - 'false' : Fetch only regular market hours data (default). Returns: -------- dict or list of dict The historical intraday stock data, including open, high, low, close, and volume for each time interval. Example: -------- intraday_stock_price('5min', 'AAPL', from_date='2023-08-10', to_date='2023-09-10', extended='false') Response format: ---------------- [ { "date": "2023-03-02 16:00:00", "open": 145.92, "low": 145.72, "high": 146.00, "close": 145.79, "volume": 1492644 }, ... ] """ BASE_URL = "https://financialmodelingprep.com/api/v3" params = { 'apikey': os.environ['FMP_API_KEY'], 'from': from_date, 'to': to_date, 'extended': extended } endpoint = f"{BASE_URL}/historical-chart/{timeframe}/{symbol}?{urlencode(params)}" response = requests.get(endpoint) return handle_response(response) def daily_stock_prices(symbol, from_date=None, to_date=None, serietype='line'): """ Fetches the daily End-Of-Day (EOD) stock price for a given company over a specified date range. Parameters: ----------- symbol : str The stock symbol for which to retrieve the data (e.g., 'AAPL' for Apple). from_date : str, optional The start date for the historical data in 'YYYY-MM-DD' format (e.g., '1990-10-10'). Default is None, which fetches the earliest available data. to_date : str, optional The end date for the historical data in 'YYYY-MM-DD' format (e.g., '2023-10-10'). Default is None, which fetches data up to the most recent date. serietype : str, optional The type of data series to return. Allowable values are: - 'line' : Line chart data (default). - 'other types' can be specified if supported by the API in the future. Returns: -------- dict or list of dict The daily stock data, including open, high, low, close, volume, adjusted close, etc. Example: -------- daily_stock_price('AAPL', from_date='1990-10-10', to_date='2023-10-10', serietype='line') Response format: ---------------- { "symbol": "AAPL", "historical": [ { "date": "2023-10-06", "open": 173.8, "high": 176.61, "low": 173.18, "close": 176.53, "adjClose": 176.53, "volume": 21712747, "unadjustedVolume": 21712747, "change": 2.73, "changePercent": 1.57077, "vwap": 175.44, "label": "October 06, 23", "changeOverTime": 0.0157077 }, ... ] } """ BASE_URL = "https://financialmodelingprep.com/api/v3" params = { 'apikey': os.environ['FMP_API_KEY'], 'from': from_date, 'to': to_date, 'serietype': serietype } endpoint = f"{BASE_URL}/historical-price-full/{symbol}?{urlencode(params)}" response = requests.get(endpoint) return handle_response(response)