Finding Historical Earnings Dates and Handling Timing Errors
Summary
The document surveys ways to obtain historical corporate earnings release dates for equity research, including a terminal data function, financial data providers, and company filing records. Some sources return structured quarterly data that can be used in machine-learning workflows, while others may offer calendar views or downloadable records. The suggestions vary in accessibility and coverage, and the document does not establish that any one source provides a complete history for every stock from its IPO onward.
A key data caveat is that an earnings date may not distinguish releases made before, during, or after trading hours. That ambiguity can misalign a daily return with the announcement, so the response recommends measuring price changes across multiple days around the reported date. The material offers practical leads rather than a source-by-source validation or a rigorous comparison of historical accuracy.
Key ideas
- Several commercial and public data sources can provide historical earnings dates or quarterly release records.
- Machine-readable earnings data can support research workflows that need bulk observations.
- Reported dates may omit whether an announcement arrived before, during, or after market hours.
- Measuring price changes across multiple days can reduce timing mismatch in event studies.
Tags
Full text
# Where I can find historical earnings dates for stocks?
# Where I can find historical earnings dates for stocks?
I'm trying to find all of the historical earnings dates (just the dates is good enough) for certain stocks ranging back to their IPOs. I'm plan to use it for my machine learning project.
Yahoo and Nasdaq seem to only list the earnings dates for the last four quarters.
Any suggestions?
Thank you.
## Answer by KarolisR (score 3)
https://quant.stackexchange.com/a/33015
You can use Bloomberg terminal BDH formula on Excel. If you go through the wizard, you'll have to click:
Import data -> Historical End of Day -> Select securities from spreadsheet -> select "LATEST_ANNOUNCEMENT_DT" -> select dates -> finish.
If you don't have access to Bloomberg terminal, try asking some friends if they do. Many university libraries have one, as do most bigger financial companies.
Word of caution: I don't know about other sources, but Bloomberg data is not exactly correct - it doesn't differentiate whether a company reports before, during or after the market hours. To get around this I would measure the price move over 2-3 days around earnings instead of a single day.
## Answer by Gilbert M. (score 3)
https://quant.stackexchange.com/a/58370
Yahoo does provide a great alternative https://finance.yahoo.com/calendar/earnings?symbol=TD.TO
## Answer by user1508000 (score 2)
https://quant.stackexchange.com/a/42093
If you truly don't need the time of the earnings report, you can use Tradier. https://developer.tradier.com/documentation/markets/fundamentals/get-calendars
## Answer by Martin (score 1)
https://quant.stackexchange.com/a/60176
AlphaVantage provides quarterly earnings release dates including EPS (actual/predicted/surprise), see https://www.alphavantage.co/documentation/#earnings
The advantage is that unlike Yahoo Finance's earning calendar it's machine readable (JSON) and it's free (need to sign up for a free API key).
## Answer by Pleb (score 1)
https://quant.stackexchange.com/a/60178
Adding to the solution of @Martin by providing some R code (if one does not have access to a Bloomberg terminal), then you can get quarterly earnings from the alphavantage API. One way of doing this (Apple is used as an example):
```
library(alphavantager)
library(httr)
av_api_key(YOUR API KEY HERE)
temp <- GET("https://www.alphavantage.co/query?
function=EARNINGS&symbol=AAPL&apikey=YOUR API KEY HERE")
AAPL_earnings <- content(temp)
AAPL_earnings <- t(as.data.frame(AAPL_earnings$quarterlyEarnings))
```
Which will produce a dataframe on the form:
The "httr" package is used to scrape the webpage in the GET function, where "content" scrapes the body of the webpage which is a JSON file of data. More intuitively, you could also go to the website in the GET function $\rightarrow$ right-click $\rightarrow$ "save as", and then save it as a JSON file, which can be loaded into your preferable programming language.
Even though this is an old thread, I'll post it here for people who might have the same problems.
## Answer by Chadwick (score 0)
https://quant.stackexchange.com/a/68566
I wasn’t happy with the above answers and created my own.
I pulled the data straight from the sec submissions of earnings reports and put it into csv form.
Anyone can get a full download of all stocks for $60
https://www.earnings-dates.comShown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.