No. of Recommendations: 4
Since Yahoo became seriously unreliable as a data source for split & dividend adjusted historical data a couple of years ago, I have been using Investopedia discussed in this post:
https://boards.fool.com/boris-did-you-check-out-the-one-that...

It would appear that Investopedia have recently stopped providing free historical price data in spite of what it says here:
https://www.investopedia.com/ask/answers/find-historical-sto...

If you try to follow these instructions, you will find that the "Historical Data" link is missing.

Looks like I'll have to figure out one of the other solutions...

StevnFool
Print the post Back To Top
No. of Recommendations: 16
It would appear that Investopedia have recently stopped providing free historical price data...

I've been using that as my main data source lately, and ran into the same problem. The solution I found was alphavantage.co . They give price data with splits and dividends, in an otherwise unadjusted format - exactly what I need. They call it "adjusted" but that just means they also include an adjusted close that I ignore. They want you to get your own API key (for free), and then you can easily fetch their data - no web scraping required.

Hopefully these guys will last!

- Jamie
Print the post Back To Top
No. of Recommendations: 2
The solution I found was alphavantage.co .

I've used https://www.tiingo.com for a few years. Similar service. Free for my needs. Pricing details here: https://api.tiingo.com/products/end-of-day-stock-price-data
Print the post Back To Top
No. of Recommendations: 3
Quandl is the source I have started using, similarly just need a free API key and it will return data in csv, json, or xml. I have NYSE and Naz volume and A/D data pumping into a Google Sheet with a cheesy formula to parse out the data stream into columns I can use.
Print the post Back To Top
No. of Recommendations: 0
Tiingo seems promising as well.
Print the post Back To Top
No. of Recommendations: 2
For any Google Sheets users, this seems to be a simple enough way to extract the historical adjusted close from Yahoo for a single ticker and date at a time. I won't guarantee that this will continue to work but it works today …

In my case:

Cell A2 contains the ticker symbol
Cell B1 contains the date for which I want the adjusted close price
Cell B2 contains the following formula

=index(importHTML("https://finance.yahoo.com/quote/" & $A2 & "/history?period1=" & B$1*86400-2209078800 & "&period2=" & B$1*86400-2209078800 & "&interval=1d&filter=history&frequency=1d", "table",1),2,6)

If you had a list of tickers in column A and a list of dates in row one, you can copy this formula across and down.

So far, I have been unsuccessful in getting Excel (using VBA to parse the data) to pull in similar data starting with the same basic URL.

StevnFool
Print the post Back To Top
No. of Recommendations: 1
So far, I have been unsuccessful in getting Excel (using VBA to parse the data) to pull in similar data starting with the same basic URL.

With my EXCEL add-in, I just grab the JSON data within the web page. It's all there. Something like this:

"HistoricalPriceStore":{"prices":[{"date":1554481498,"open":215.8800048828125,"high":216.47000122070312,"low":215.447998046875,"close":216,"volume":440849,"adjclose":216},{"date":1554384600,"open":213.5,"high":215.27000427246094,"low":212.3300018310547,"close":215.02999877929688,"volume":1560900,"adjclose":215.02999877929688},
Print the post Back To Top
No. of Recommendations: 1
It appears that my Google Sheets suggestion in post 273817 above for grabbing Yahoo data has some issues.

I believe it is because the response time from the Yahoo page is too slow that the Google Sheets INDEX function times out before Yahoo returns the data so you get a lot of cells with a #REF error.

One workaround which give better results but is both cumbersome and still not perfect is to avoid using the INDEX function.

One way of doing this is to pull the data into a different sheet.

Lets assume that as before, in Sheet1 we have:

Cell A2 contains the ticker symbol
Cell B1 contains the date for which I want the adjusted close price

In Sheet2, then you could use one cell to pull the URL together. Say we use cell A1. In this cell we would have the formula:

="https://finance.yahoo.com/quote/" & Sheet1!A2 & "/history?period1=" & Sheet1!B1*86400-2209078800 & "&period2=" & Sheet1!B1*86400-2209078800 & "&interval=1d&filter=history&frequency=1d"

Then we could enter the following formula in Cell A3 to pull in the data:

=importHTML(A1, "table",1)

This will pull the data into a table that covers the range A3:G4 and an additional note in A5. The adjusted close price will be in cell F4

So back in Sheet1, to pull the adjusted close back into Cell B2, you would enter the formula

=Sheet2!F4

This will probably work for a few datapoints but I don't think will be too successful for a large number of datapoints.

StevnFool
Print the post Back To Top
No. of Recommendations: 0
With my EXCEL add-in, I just grab the JSON data within the web page. It's all there

Thanks. I'll have to admit that I like to figure this stuff out myself and do my own macros. JSON is one of those ones that I just haven't spent enough time on yet to figure it out. Maybe some day …

StevnFool
Print the post Back To Top
No. of Recommendations: 5
It appears that my Google Sheets suggestion in post 273817 above for grabbing Yahoo data has some issues.

Just sign up for a free account at tiingo or one of the couple other sites that I can't recall just now.

Then the google sheets formula is:

=index(importdata("https: //api. tiingo. com/tiingo/daily/" & A21 & "/prices?token={YourToken}&format=csv"),2,7)

No need to fight Yahoo to get a current quote (for most issues) when there are at least 3 other commercial sources for free.
Print the post Back To Top
No. of Recommendations: 1
JSON is one of those ones that I just haven't spent enough time on yet to figure it out.

That particular set of JSON data is easy to parse:

* Read the source code of the web page
* Extract everything between "HistoricalPriceStore" and "]"
* Split the extracted data using "},{"

Then it's just a matter of cycling through the split results, one day at a time, parsing out the items you want.
Print the post Back To Top