Business, webdev

Yahoo Finance (hidden) API

London vis a vis Finance
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!

Standard

77 thoughts on “Yahoo Finance (hidden) API

  1. Pingback: Yahoo Finance (hidden) API « Ido's Blog

  2. 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?

  3. 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?

  4. 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.

  5. 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.

    • Bob Kaye says:

      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

      • Shivam Garg says:

        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

  6. 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.

  7. 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

  8. Deepak Mani says:

    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.

  9. Daahrmmie Boiyelove says:

    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?

  10. Koen says:

    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.

  11. Sean says:

    /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?

  12. Sturle says:

    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.)

  13. Karki says:

    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.

  14. Mickey Cohen says:

    c8 is not working to return the After Hours (or pre-market) price of a symbol. It returns the EPS and the close price

  15. Bill Pierce says:

    Does anyone know how to get a stock’s Beta, Operating Cash Flow, & Payout Ratio? They aren’t in the list of tags,

  16. Rick Steele says:

    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?

  17. richardvalenta@sunflower.com says:

    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?

    • Mickey Cohen says:

      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.

      • bkate2 says:

        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…

      • Mickey Cohen says:

        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

      • bkaye2 says:

        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

      • Mickey Cohen says:

        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

  18. 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!

  19. jb60606 says:

    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

    • Mickey Cohen says:

      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.

Leave a reply to a2zidxdotcom Cancel reply