Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Yahoo Finance URL not working

I have been using the following URL to fetch historical data from yahoo finance for quite some time now but it stopped working as of yesterday.

https://ichart.finance.yahoo.com/table.csv?s=SPY

When browsing to this site it says:

Will be right back...

Thank you for your patience.

Our engineers are working quickly to resolve the issue.

However, since this issue is still existing since yesterday I am starting to think that they discontinued this service?

My SO search only pointed me to this topic, which was related to https though...

Is anyone else experiencing this issue? How can I resolve this problem? Do they offer a different access to their historical data?

like image 966
jrn Avatar asked May 17 '17 17:05

jrn


People also ask

Is Yahoo Finance API down?

Yahoo Finance API is Discontinued.

Can I use Yahoo Finance data on my website?

You have to take permission from them. Its publicly available data, so should be totally fine as long as you acknowledge them.


Video Answer


1 Answers

Yahoo has gone to a Reactjs front end which means if you analyze the request headers from the client to the backend you can get the actual JSON they use to populate the client side stores.

Hosts:

  • query1.finance.yahoo.com HTTP/1.0
  • query2.finance.yahoo.com HTTP/1.1 (difference between HTTP/1.0 & HTTP/1.1)

If you plan to use a proxy or persistent connections use query2.finance.yahoo.com. But for the purposes of this post, the host used for the example URLs is not meant to imply anything about the path it's being used with.


Fundamental Data

(substitute your symbol for: AAPL)

  • /v10/finance/quoteSummary/AAPL?modules=

Inputs for the ?modules= query:

    [        'assetProfile',        'summaryProfile',        'summaryDetail',        'esgScores',        'price',        'incomeStatementHistory',        'incomeStatementHistoryQuarterly',        'balanceSheetHistory',        'balanceSheetHistoryQuarterly',        'cashflowStatementHistory',        'cashflowStatementHistoryQuarterly',        'defaultKeyStatistics',        'financialData',        'calendarEvents',        'secFilings',        'recommendationTrend',        'upgradeDowngradeHistory',        'institutionOwnership',        'fundOwnership',        'majorDirectHolders',        'majorHoldersBreakdown',        'insiderTransactions',        'insiderHolders',        'netSharePurchaseActivity',        'earnings',        'earningsHistory',        'earningsTrend',        'industryTrend',        'indexTrend',        'sectorTrend'] 

Example URL: querying for all of the above modules

  • https://query2.finance.yahoo.com/v10/finance/quoteSummary/AAPL?modules=assetProfile%2CsummaryProfile%2CsummaryDetail%2CesgScores%2Cprice%2CincomeStatementHistory%2CincomeStatementHistoryQuarterly%2CbalanceSheetHistory%2CbalanceSheetHistoryQuarterly%2CcashflowStatementHistory%2CcashflowStatementHistoryQuarterly%2CdefaultKeyStatistics%2CfinancialData%2CcalendarEvents%2CsecFilings%2CrecommendationTrend%2CupgradeDowngradeHistory%2CinstitutionOwnership%2CfundOwnership%2CmajorDirectHolders%2CmajorHoldersBreakdown%2CinsiderTransactions%2CinsiderHolders%2CnetSharePurchaseActivity%2Cearnings%2CearningsHistory%2CearningsTrend%2CindustryTrend%2CindexTrend%2CsectorTrend

The %2C is the Hex representation of , and needs to be inserted between each module you request. details about the hex encoding bit(if you care)


Options contracts

  • /v7/finance/options/AAPL (current expiration)
  • /v7/finance/options/AAPL?date=1679011200 (March 17, 2023 expiration)

Example URL:

  • https://query2.finance.yahoo.com/v7/finance/options/AAPL (current expiration)
  • https://query2.finance.yahoo.com/v7/finance/options/AAPL?date=1679011200 (Match 17, 2023 expiration)

Any valid future expiration represented as a UNIX timestamp can be used in the ?date= query. If you query for the current expiration the JSON response will contain a list of all the valid expirations that can be used in the ?date= query. (here is a post explaining converting human-readable dates to UNIX timestamp in Python)


Price

  • /v8/finance/chart/AAPL?symbol=AAPL&period1=0&period2=9999999999&interval=3mo

Possible inputs for &interval=: 1m, 5m, 15m, 30m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo

m (minute) intervals are limited to 30days with period1 and period2 spaning a maximum of 7 days per/request. Exceeding either of these limits will result in an error and will not round

h (hour) interval is limited to 730days with no limit to span. Exceeding this will result in an error and will not round

period1=: UNIX timestamp representation of the date you wish to start at.

d (day), wk (week), mo (month) intervals with values less than the initial trading date will be rounded up to the initial trading date.

period2=: UNIX timestamp representation of the date you wish to end at.

For all intervals: values greater than the last trading date will be rounded down to the most recent timestamp available.

Add pre & post market data

&includePrePost=true

Add dividends & splits

&events=div%7Csplit

%7C is hex for |. , will work but internally yahoo uses pipe

Example URL:

  • https://query1.finance.yahoo.com/v8/finance/chart/AAPL?symbol=AAPL&period1=0&period2=9999999999&interval=1d&includePrePost=true&events=div%7Csplit

The above request will return all price data for ticker AAPL on a 1-day interval including pre and post-market data as well as dividends and splits.

Note: the values used in the price example URL for period1= & period2= are to demonstrate the respective rounding behavior of each input.`

like image 103
Ryder Brooks Avatar answered Oct 13 '22 05:10

Ryder Brooks