I was looking for long time after a way to get some finance data from sources like: google, yahoo etc’ without the need to parse long html pages. Than, a friend point me to some simple pipe that fetch this information. From there it was a short step to gain access to this nice (hidden) API was inevitable.
In a nutshell, if you want to get data on some stocks you can use this request:
http://finance.yahoo.com/d/quotes.csv?s=GE+PTR+MSFT&f=snd1l1yr
where some special tags:
a | Ask | a2 | Average Daily Volume | a5 | Ask Size |
b | Bid | b2 | Ask (Real-time) | b3 | Bid (Real-time) |
b4 | Book Value | b6 | Bid Size | c | Change & Percent Change |
c1 | Change | c3 | Commission | c6 | Change (Real-time) |
c8 | After Hours Change (Real-time) | d | Dividend/Share | d1 | Last Trade Date |
d2 | Trade Date | e | Earnings/Share | e1 | Error Indication (returned for symbol changed / invalid) |
e7 | EPS Estimate Current Year | e8 | EPS Estimate Next Year | e9 | EPS Estimate Next Quarter |
f6 | Float Shares | g | Day’s Low | h | Day’s High |
j | 52-week Low | k | 52-week High | g1 | Holdings Gain Percent |
g3 | Annualized Gain | g4 | Holdings Gain | g5 | Holdings Gain Percent (Real-time) |
g6 | Holdings Gain (Real-time) | i | More Info | i5 | Order Book (Real-time) |
j1 | Market Capitalization | j3 | Market Cap (Real-time) | j4 | EBITDA |
j5 | Change From 52-week Low | j6 | Percent Change From 52-week Low | k1 | Last Trade (Real-time) With Time |
k2 | Change Percent (Real-time) | k3 | Last Trade Size | k4 | Change From 52-week High |
k5 | Percebt Change From 52-week High | l | Last Trade (With Time) | l1 | Last Trade (Price Only) |
l2 | High Limit | l3 | Low Limit | m | Day’s Range |
m2 | Day’s Range (Real-time) | m3 | 50-day Moving Average | m4 | 200-day Moving Average |
m5 | Change From 200-day Moving Average | m6 | Percent Change From 200-day Moving Average | m7 | Change From 50-day Moving Average |
m8 | Percent Change From 50-day Moving Average | n | Name | n4 | Notes |
o | Open | p | Previous Close | p1 | Price Paid |
p2 | Change in Percent | p5 | Price/Sales | p6 | Price/Book |
q | Ex-Dividend Date | r | P/E Ratio | r1 | Dividend Pay Date |
r2 | P/E Ratio (Real-time) | r5 | PEG Ratio | r6 | Price/EPS Estimate Current Year |
r7 | Price/EPS Estimate Next Year | s | Symbol | s1 | Shares Owned |
s7 | Short Ratio | t1 | Last Trade Time | t6 | Trade Links |
t7 | Ticker Trend | t8 | 1 yr Target Price | v | Volume |
v1 | Holdings Value | v7 | Holdings Value (Real-time) | w | 52-week Range |
w1 | Day’s Value Change | w4 | Day’s Value Change (Real-time) | x | Stock Exchange |
y | Dividend Yield |
Simple, right? 🙂
As for historical data you can use something like:
http://finance.yahoo.com/q/hp?s=WU&a=01&b=19&c=2010&d=01&e=19&f=2010&g=d
where the FROM date is: &a=01&b=10&c=2010
and the TO date is: &d=01&e=19&f=2010
You can also get it as CSV file with link like:
http://ichart.finance.yahoo.com/table.csv?s=WU&a=01&b=19&c=2010&d=01&e=19&f=2010&g=d&ignore=.csv
Now, if you want to play with the data you are getting from yahoo! you can run some fun SQL like:
Getting the Standard divination of a specific stock:
SELECT stock, STD(Close-Price) from `historic_prices` where stock = "NFLX" AND date > "2010-01-01" group by stock
This will give you the Standard divination on Netflix (hot hot stock these days) from the beginning of 2010 (and like the meaning of the universe… it’s 42!)
Here is another way to work with finance data from NodeJS.
Happy hacking!
Pingback: Yahoo Finance (hidden) API « Ido's Blog
Any idea if it’s possible to get this data historically?
Not from them… but there are some services that will be happy to sell you this data.
Do you know which tags to use for industry and sector information?
The tags that you can use to get info. on industry and sector (e.g. SPX or in a link: http://finance.yahoo.com/d/quotes.csv?s=SPX&f=snd1l1yr)
won’t return data. So my guess is that they are not supporting it.
If you find otherwise – please update us in the comments.
It’s working for me. You need %5E which acts as the caret character. Also, I guess SPX has now been renamed to GSPC. Here is an example:
http://finance.yahoo.com/d/quotes.csv?s=GOOG+%5EGSPC&f=spol1c1p2
any idea to get share outstanding value from key statistics
I actually found some information buried in a forum that this is a reverse-engineered way of pulling the data and violates the Yahoo TOS. Is this true?
Can you share the forum page?
Hey guys little off topic but i recently found a cool new free market data api thats pretty easy to use http://freemarketdataapi.barchartondemand.com
Reblogged this on Globalbrowse.
Yeah can we use this api for commercial purpose.
Spot on with this write-up, I really feel this web site
needs much more attention. I’ll probably be back again to see more, thanks for the info!
How do we know last trade is sell or buy?
It’s always both…
Hello, guys!
I didn’t catch how to distinguish one company from another if they have the same ticker, but in different countries.
For example:
iShares gold trust trades in US with ticker IAU.
Intrepid Mines trades in Canada with ticker IAU.
What will I get if I make try this:
http://ichart.finance.yahoo.com/table.csv?s=IAU&a=01&b=19&c=2010&d=01&e=19&f=2010&g=d&ignore=.csv
Thanks for finally writing about >Yahoo Finance (hidden) API
| Ido Green <Liked it!
Good to hear it!
Thanks!
Is there any way we can find the market cap for a particular exchange?
distinguish one company from another: for Canada, use .TO at the end of the company. TRP.TO
The issue I run into is getting historical bid ask prices. How do you combine a date with a ticker and a bid ask price quote over some time when the “f” parameter acts as both the year parameter and the tags parameter?
To get the history you need to use the following url
http://ichart.finance.yahoo.com/table.csv?s=IAU&a=01&b=19&c=2010&d=01&e=19&f=2010&g=d&ignore=.csv
The a= start month -1
b=day
c=year
d= end month-1
e=day
f=year
I think you missed the point of his message – he was asking how if f=YYYY can we supply the other format tags which were for the f= parameter on the non-historic url.
Is there a place where there is a complete list of available tickers and indexes that are supported by the Yahoo Finance API. I see some tickers like AAL.L where the .L indicates London. I assume that this could be used to identify a stock from a particular exchange but do not know if this applies to all stocks. I also see some are prefixed by ^GSPC (encoded as %5EGSPC), is there a list of these? Any advice as to where to find a complete list would be appreciated and I an sure it will be of help to others.
https://help.yahoo.com/kb/SLN2310.html <– all suffixes for all exchanges
I found a more concise url for the csv of the historical prices:
‘http://chart.finance.yahoo.com/x?s=CCNI&t=3m’
hey, I found your article really helpful. Is it possible to get historical data for multiple stocks at once. As of now, using this method I am getting it for a single stock only.
Replace the ({0}) in the query below using string.format() with a string listing the stocks for which you want the data…..similarly, you can use the same technique to replace the hard coded dates with programmatic input …
http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.historicaldata%20where%20symbol%20in%20({0})%20and%20startDate%20=%20%222012-09-13%22%20and%20endDate%20=%20%222012-09-14%22&diagnostics=true&env=store://datatables.org/alltableswithkeys”;
Paste the following into your browser address field to generate the data on a browser page…
http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.historicaldata%20where%20symbol%20in%20(“YHOO”,”AAPL”,”GOOG”,”MSFT”)%20and%20startDate%20=%20″2012-09-13″%20and%20endDate%20=%20″2012-09-14″&diagnostics=true&env=store://datatables.org/alltableswithkeys
Hi Ido,
Thanks for your reply. I tried using the given below url but unfortunately it did not seem to work. Actually I need to download S&P 500 stock historical data every three months. The information that is given on the page helps me download it for a single stock at a time. Is there a way I can read it on a page or download it directly for multiple stocks at a time. Looking forward to hearing from you.
[cid:image001.jpg@01CCE4D5.40FEF740]
Thanks & Regards,
Shivam Garg
Business Analyst- GCP, Institutional Decision Science
American Express |Zone 6, DLF City V | RIM-CoE, Gurgaon
Hi, I need historical data for multiple stocks at a single time. Is it possible using any other hacks, as these support historical data for a single stock at a time.
Anyone have a query or a request that will get provide dividend history for a stock/mutual fund…?
Thanks for your reply. I tried using the given below url but unfortunately it did not seem to work. Actually I need to download S&P 500 stock historical data every three months. The information that is given on the page helps me download it for a single stock at a time. Is there a way I can read it on a page or download it directly for multiple stocks at a time. Looking forward to hearing from you.
Try this….same query, but replaced some characters with hex equivalents….
http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.historicaldata%20where%20symbol%20in%20(%22YHOO%22,%22AAPL%22,%22GOOG%22,%22MSFT%22)%20and%20startDate%20=%20%222012-09-13%22%20and%20endDate%20=%20%222012-09-14%22&diagnostics=true&env=store://datatables.org/alltableswithkeys
Scroll down the resultant display and you’ll see the xml formatted data for the four stocks….
I am also struggling with stocks that have dots in it, showing location, such as PHM.MC. If you have any recommendation how to solve it, please let me know.
I have built some tool using this API, you can check it on GitHub https://github.com/nikolamilosevic86/FinAnalyzer
We have this issue reported, so if anyone knows how can be information about these stocks retrieved, please give me a hint so I can integrate it.
Thank you
Nikola
which tags used to get buy rate and sell rate of currency
Hi there,
I was wondering if you could point me to a place to find company overview information such as Full Time Employees, Address, Phone Number (for both public and private) companies via an API.
Hello, I need help finding a whole bunch of values on yahoo finance.
Capital Expenditures is on of them. Can you please point me in the right direction?
Hello Ido,
I use this system for some time, but I’m missing a tag in order to download the “adjusted close” on a daily basis. From this historical data download, you get the adjusted close automatically, but I can’t use the historical data download as I also need other values that are not available in the historical data-set.
Do you have a solution for my problem?
Thanks, Koen.
This is a nice article. Currently I am getting all currencies based on this end point.
http://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote?format=json
But it the base currency is “USD” in the response. Is there anyway to change it to “INR” (Indian Rupees)?
Thanks
/usr/bin/curl -s ‘http://download.finance.yahoo.com/d/quotes.csv?s=fb&f=b2’
returns: N/A
I wonder if yahoo has disabled the real time data?
What is the time zone for t1 etc? It seems to be UTC+1. Is this related to some time zone, e.g. Europe/London? (CET is now UTC+2 due to DST.)
Thank you for this info. Yahoo response is much better than Google.Great job!
GIYORA SHARABU you were able to fetch realtime data from Yahoo?
Hi, Please tell me how to get stock data for BSE and NSE if i pass this url am not getting datas
http://query.yahooapis.com/v1/public/yql?f=Date.Now&q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22LT.BO%22)&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys
please some one help me on how to pass for BSE and NSE in url
Thanks, Bro!! This web page is really helpful!!
I note that there is only 50-day Moving average in the yahoo API. Is there any special tag I can use to get 10-day and 20-day moving average of multiple stocks from yahoo or google in one time?
Just like the following (but it can fetch only 50-day moving average):
http://finance.yahoo.com/d/quotes.csv?s=GE+PTR+MSFT&f=snd1l1m3
Hi, I want to retrieve historical market cap values from yahoo finance. Can some one help me with that (may be give an example query). I see that I have to enter j1 in query to get marketcap, but it does not work for me. Please help.
c8 is not working to return the After Hours (or pre-market) price of a symbol. It returns the EPS and the close price
Does anyone know how to get a stock’s Beta, Operating Cash Flow, & Payout Ratio? They aren’t in the list of tags,
http://chart.finance.yahoo.com seems to have stopped working as off todat
The CSV method for Historical Data is not working anymore. Is there an alternative to http://ichart.finance.yahoo.com/table.csv?s=WU&a=01&b=19&c=2010&d=01&e=19&f=2010&g=d&ignore=.csv
What happened on May 15th this all stopped working. Does anyone have an answer to what you can now use to get the Historical Data from Yahoo?
I think they have blocked these Hidden API Endpoints. Too bad !!
http://www.google.com/finance/historical?q=AAPL&startdate=Nov 1, 2011&enddate=Nov 30, 2011&output=csv
is almost equivalent to Yahoo’s:http://ichart.finance.yahoo.com/table.csv?s=WU&a=01&b=19&c=2010&d=01&e=26&f=2010&g=d&ignore=.csv
Differences:
Adjust Close – not provided.
Date field is variable length no leading zero, so you need to extract the date till “,” rather than yahoo’s “first 10 positions”
When there is no data Google returns “-” and Yahoo “0.00” so you need to add a step: (VBA) Replace(sLine, “-“, “0.00”) if you need a true number.
That’s all.
It works nicely for me.
Mickey
The new location is http://download.finance.yahoo.com/d/quotes.csv for normal quotes (non history)
As for the charts — I’m not sure if those are still working.
The google link is great.. But if we are analyzing History Adjusted Close is a must
I was able to use numeric dates in the URL http://www.google.com/finance/historical?q=AAPL&startdate=11-1-2011&enddate=11-30-2011&output=csv
which made it easier to set them.
I found Google does not allow downloading output for indexes (Dow Jones, NASDAQ, S&P) – only can get it as a web page if you leave off “&output.csv” of the URL. The download to spreadsheet link is also missing from those pages of index history.
Anyone know how to get historical data for the indexes using VBA?
There is a nice way using Excel’s PowerQuery to retrieve data directly from google.
It does not work from yahoo because yahoo mandates you to have a “signed-in cookie”.
An excel example can be downloaded from here:
https://drive.google.com/open?id=0BzmWnV1ncQlKeWRrTElZOGh6RHc
I guess it can also be down with PowerShell script.
Best,
Mickey
The excel Power Query is now updated to support getting the SP500 index withing a range date range.
Note: the “dates” are just plain text and passed to Google “as is”. Google would understand them when they look like dates.
Enjoy.
Is there any way to get historical data for more than one stock with a single call out to Google….similar to the seemingly discontinued Yahoo call…
For those interested in Power Query see http://www.myonlinetraininghub.com/ the examples there can help understand the solution.
So far I have not been able to retrieve multiple stocks in “one call” as I am interested in historical {data} vectors having 5/6 fields per day. Obtaining multiple stocks results in a 3-way matrix of {date}/{stock}/{data}. There is no query for getting {data} for {stocks} vector for historical {date} range. Maybe just for “yesterday’s closing price”. It is certainly possible to do so with VBA.
Best,
Mickey
Thanks for the reply…
My need is somewhat different than yours….I’m looking for either the opening or closing price for about 55 stocks/mutual funds for a given day in the past…the Yahoo query gave me all the data in one easily digested CSV…I can do it with Google by looping thru the stock symbols, but that’s inelegant and Google doesn’t return the data for mutual funds…I can get the data for both types from other sources by looping and then screen scraping, which is also inelegant but may end up being the only way to do it…
I also used Yahoo’s Dividend History database, but that too has been shutdown…I can’t even find a new source for that data…
Any thought..?
Bob
The next step to what I have done is to “cause” the web-connection procedure of VBA/PowerQuery/other to log into a yahoo account (which I assume you have) and only then process the data. Both VBA and PowerQuery can process tables on web-page automatically and extract the table.
The step after that, at least with google, is that they usually display 30/50/100 rows and you have to “press something” to get the next page.
Thus, if the procedure to perform login which the session is opened is determined, the rest is “just programming”.
I will explore it when I have time.
Best,
Mickey
Hey thanks Mickey. I will try it out when I get a chance.
Unfortunately, historical data from http://ichart.finance.yahoo.com/table.csv is no longer working. I tried to find free or at least cheap alternative and found this one: https://eodhistoricaldata.com/. It provides the data with CSV, exactly the same format as Yahoo Finance, then it’s easy to switch, just by replacing URLs.
Using the following, how can I pull up the information on mutual funds such as VTSAX? It’s not working for the mutual funds.
http://www.google.com/finance/historical?q=AAPL&startdate=11-1-2011&enddate=11-30-2011&output=csv
You can use https://eodhistoricaldata.com/ for VTSAX as well. It works fine, just check search box.
What’s the best place to get stock data now… for example, P/E ratios, ask, bid, beta etc.. via an api?
I can get it all from Yahoo (including Adjusted Close) using special parsing will be uploaded in the next few days.
Best,Mickey
Hey Mickey. Where have you uploaded the mechanism of retrieving Adjusted Close from Yahoo ?
Good day! I could have sworn I’ve ben to this website before
but after browsing through any of the posts I realized it’s new to me.
Anyhow, I’m definitely happy I stumbled uon it annd I’ll be bookmarking it and checking back often!
is anyone able to successfully retrieve ex-div date, and dividend price? The date appears to be from historical (last quarter, etc), and the div price (which I’m assuming is the “d – Dividend/Share flag) isn’t even in the ballpark. Thanks
correction: The Dividend/Share flag gives you the Forward Annual Dividend
http://www.signalsolver.com/download-historical-stock-price-data-excel/
This appears to work for adj. close.
Mickey
This is the download link for the excel that does it with the Macros:
http://www.signalsolver.com/wp-content/uploads/2017/10/GetHistoricalStockPrices-V1.0f.xlsm
I did heard that Yahoo Finance API had stopped.
You could use Market XLS as an alternative.
One interface form stopped. Yet the pointers I gave hereinabove work very well and are totally free.
One point on efficiency. Getting the cookie once is sufficient for all subsequent queries. As it is pretty slow, it would not be advised to repeat it inside your quotes loop.
The VBA stopped working on 2018.03.29. There is a correction here:
http://www.signalsolver.com/download-historical-stock-price-data-excel/
Just replace
“https://finance.yahoo.com/lookup?s=rubbish”
with
“https://finance.yahoo.com/lookup?q=” & StockSymbol
Best,
Mickey