In this post, we’ll walk through a few examples for getting stock earnings data with Python. We will be using yahoo_fin, which was recently updated. The latest version now includes functionality to easily pull earnings calendar information for individual stocks or dates.
If you need to install yahoo_fin, you can use pip:
pip install yahoo_fin
If you already have it installed and need to upgrade, you can update your version like this:
pip install yahoo_fin --upgrade
To get started, let’s import yahoo_fin:
import yahoo_fin.stock_info as si
The first method we’ll cover is the get_earnings_history function. get_earnings_history returns a list of dictionaries. Each dictionary contains an earnings date along with EPS actual / expected information. Let’s test it out with a few sample tickers.
# get earnings history for AAPL aapl_earnings_hist = si.get_earnings_history("aapl")
Depending on the ticker, the data returned may include future earnings dates. Any data for future earnings dates will have a None value for EPS actual. Below, we look at one of the entries returned. We can see the earnings date for this entry is July 30, 2019. The EPS actual is 0.55 and the EPS estimate is 0.53.
If you want to convert the list of earnings dictionaries to a data frame, you can use pandas like this:
import pandas as pd frame <- pd.DataFrame.from_dict(aapl_earnings_hist)
yahoo_fin also now has a function to find the next upcoming earnings date for an input stock ticker. If the next earnings date is known, then you can find it using the get_next_earnings_date method.
si.get_next_earnings_date("aapl") si.get_next_earnings_date("nflx")
What if you want to know all the stocks that have earnings on a specific date? You can find them using the get_earnings_for_date method. This function takes a single date as input and returns a list of dictionaries. Each dictionary contains a ticker, company name, EPS estimate, and (if known) EPS actual. The EPS actual value will only have a value if you input a date in the past – otherwise, you’ll get a None type. get_earnings_for_date can handle a variety of date formats as input.
si.get_earnings_for_date("02/18/2021") si.get_earnings_for_date("2021-02-25") si.get_earnings_for_date("March 1 2021")
Extending from the above section, you can also get all the stocks that have earnings within an input date range. To do that, let’s take a look at the get_earninggs_in_date_range method. This function takes a start date and end date as parameters.
earnings_in_week = si.get_earnings_in_date_range("02/16/2021", "02/23/2021")
If you’re pulling a longer range, this method may take more time as the API needs to pull each day separately.
The last function we’ll cover in the article is the get_earnings method. get_earnings takes an input ticker and returns a dictionary of yearly / quarterly revenue and the last four quarters of EPS actual / estimate data (see here: https://finance.yahoo.com/quote/aapl/financials?p=aapl).
si.get_earnings("aapl") si.get_earnings("amzn")
That’s it for now. In this post we covered how to get stock earnings data with Python and yahoo_fin. Check out more about yahoo_fin by clicking here. If you liked this post, please share it with your friends.
Very excited to announce the early-access preview (MEAP) of my upcoming book, Software Engineering for…
Ever had long-running code that you don't know when it's going to finish running? If…
Background If you've done any type of data analysis in Python, chances are you've probably…
In this post, we will investigate the pandas_profiling and sweetviz packages, which can be used…
In this post, we're going to cover how to plot XGBoost trees in R. XGBoost…
In this post, we'll discuss the underrated Python collections package, which is part of the…