Yahoo Finance Scraper: Quotes, Financials, Options — $0.84/1k avatar

Yahoo Finance Scraper: Quotes, Financials, Options — $0.84/1k

Pricing

from $0.84 / 1,000 results

Go to Apify Store
Yahoo Finance Scraper: Quotes, Financials, Options — $0.84/1k

Yahoo Finance Scraper: Quotes, Financials, Options — $0.84/1k

Yahoo Finance data for any ticker list, screener or trending feed: live quotes (86 fields), profile, key stats, income/balance/cash-flow statements, earnings, analyst targets, ownership, options chains, price history, news. No login or cookies. MCP-ready for AI agents. $0.84 per 1,000 records.

Pricing

from $0.84 / 1,000 results

Rating

0.0

(0)

Developer

Fortuitous Pirate

Fortuitous Pirate

Maintained by Community

Actor stats

0

Bookmarked

15

Total users

2

Monthly active users

13 days ago

Last modified

Share

Yahoo Finance Scraper: Quotes, Financials, Options, News

Pull Yahoo Finance data for any list of tickers, for a Yahoo screener (most active, day gainers, undervalued growth, crypto, funds, private companies) or for the trending feed, and choose exactly which data you want per ticker: live quote, company profile, key statistics, income statement, balance sheet, cash flow, earnings, analyst targets, ownership, options chains, price history and news.

Works for stocks, ETFs, mutual funds, indices, crypto, FX pairs and futures on every Yahoo-listed exchange (AAPL, 7203.T, SAP.DE, SPY, VFIAX, ^GSPC, BTC-USD, EURUSD=X, GC=F). No login, no API key, no browser. One row per ticker per data type, so a CSV export opens straight into a spreadsheet.

Price: $0.84 per 1,000 rows plus $0.001 per run. A quote for 500 tickers costs $0.42. Annual + quarterly statements for the S&P 500 (3 statements x 2 periods x 500 tickers = 3,000 rows) cost about $2.50.

What you get

Every row carries recordType, symbol, shortName, source (input, list, search, trending, screener), rank (position in the screener/trending list) and scrapedAt.

recordTypeRowsFields
quote1 per tickerAll 86 Yahoo quote fields: regularMarketPrice 343.93, regularMarketChangePercent 1.30, regularMarketVolume, bid/ask, marketCap 5019374977024, trailingPE 39.44, forwardPE, epsTrailingTwelveMonths, epsForward, priceToBook, fiftyTwoWeekLow/High, fiftyDayAverage, twoHundredDayAverage, dividendRate, dividendYield, sharesOutstanding, averageAnalystRating "2.3 - Buy", earningsDate, marketState, pre/post-market price when available
profile1 per tickersector Technology, industry Consumer Electronics, fullTimeEmployees 150000, address1/city/state/country/phone/website, longBusinessSummary, officers[] (name, title, age, totalPay), risk scores; for ETFs and funds: fundProfile (family, category, legal type, expense ratio), topHoldings (holdings with weights, sector weightings, bond ratings), fundPerformance (trailing and annual returns)
keyStats1 per tickerenterpriseValue, profitMargins 0.276, operatingMargins, returnOnEquity 1.49, returnOnAssets, revenueGrowth, earningsGrowth, beta 1.069, shortRatio, sharesShort, heldPercentInsiders, heldPercentInstitutions, trailingEps, forwardEps, pegRatio, enterpriseToRevenue, enterpriseToEbitda, totalCash, totalDebt, debtToEquity, currentRatio, freeCashflow, operatingCashflow, payoutRatio, lastSplitDate, 52WeekChange
financials1 per ticker per periodperiods[], newest first, one object per fiscal period with asOfDate, periodType and 23 line items: totalRevenue 416161000000, costOfRevenue, grossProfit, operatingExpense, researchAndDevelopment, sellingGeneralAndAdministration, operatingIncome, pretaxIncome, taxProvision, netIncome, basicEPS 7.49, dilutedEPS, eBIT, eBITDA, average shares
balanceSheet1 per ticker per period24 line items per period: totalAssets, currentAssets, cashAndCashEquivalents, accountsReceivable, inventory, netPPE, totalLiabilitiesNetMinorityInterest, currentLiabilities, accountsPayable, currentDebt, longTermDebt, totalDebt, netDebt, stockholdersEquity, retainedEarnings, workingCapital, investedCapital, tangibleBookValue, shareIssued
cashFlow1 per ticker per period19 line items per period: operatingCashFlow, investingCashFlow, financingCashFlow, freeCashFlow 136683000000, capitalExpenditure, repurchaseOfCapitalStock, cashDividendsPaid, issuanceOfDebt, repaymentOfDebt, depreciationAndAmortization, stockBasedCompensation, changeInWorkingCapital, beginningCashPosition, endCashPosition
earnings1 per tickernextEarningsDate 2026-11-02, earningsCallDate, epsEstimateAverage/Low/High, revenueEstimateAverage/Low/High, exDividendDate, dividendDate, quarterlyHistory[] (last 4 quarters: epsActual, epsEstimate, surprisePercent), estimateTrend[] (current/next quarter and year: EPS and revenue estimates, analyst counts, growth, EPS revisions), earningsChart, financialsChart
analysts1 per tickertargetHighPrice, targetLowPrice, targetMeanPrice 328.35, targetMedianPrice, recommendationMean, recommendationKey buy, numberOfAnalystOpinions 39, recommendationTrend[] (strong buy / buy / hold / sell / strong sell counts for the last 4 months), upgradeDowngradeHistory[] (up to 100: date, firm, from/to grade, action, price target), recommendedSymbols[] (similar tickers with scores), technicalOutlook (Trading Central short / intermediate / long-term direction and score), keyTechnicals (support, resistance, stop loss), valuation, companySnapshot, researchRecommendation
ownership1 per tickerinsidersPercentHeld 0.0165, institutionsPercentHeld 0.664, institutionsCount, institutions[] (top holders: organization, pctHeld, position, value, pctChange, reportDate), funds[], insiderHolders[], insiderTransactions[] (up to 100: filer, relation, shares, value, date, text), netSharePurchaseActivity
options1 per ticker per expirationexpirationDate, underlyingPrice, callCount, putCount, calls[] and puts[] (each: contractSymbol, strike, lastPrice, bid, ask, volume, openInterest, impliedVolatility, inTheMoney, lastTradeDate), strikes[], availableExpirations[]
history1 per tickerinterval, range, dataPoints, firstDate, lastDate, history[] candles (date, open, high, low, close, adjClose, volume), dividends[], splits[]
news1 per articletitle, publisher, link, publishedAt, type, thumbnail, relatedTickers[]

Numbers are plain JSON numbers (no "5.02T" strings); dates are ISO 8601.

Use cases

  • Portfolio and watchlist refresh: schedule a daily quote run over your own ticker list (paste it, or point listUrl at a Google Sheet) and push the dataset into Sheets, Airtable or a database.
  • Fundamental screening: pull financials, balanceSheet, cashFlow and keyStats for an index's constituents and rank by margins, growth, leverage or free cash flow yield.
  • Earnings calendar and surprise tracking: earnings gives the next report date, consensus EPS/revenue and the last four quarters' surprises for every ticker you follow.
  • Analyst and price-target monitoring: analysts returns consensus targets, the rating distribution and the upgrade/downgrade log; diff two runs to catch changes.
  • Options research: options exports full chains with implied volatility and open interest for the nearest N expirations or specific dates.
  • Market movers: screener: day_gainers / most_actives / undervalued_growth_stocks or trending: true give you Yahoo's lists with rank and live quote, ready for alerts.
  • News and sentiment feeds: news with maxNews gives headline rows per ticker for an LLM or sentiment pipeline.
  • Backtesting data: history with any range/interval or an explicit startDate/endDate window, including dividends and splits.

Input

Choose tickers

FieldTypeDefaultNotes
tickersstring[]Symbols or Yahoo quote URLs. symbols is accepted as an alias.
listUrlstringPublic CSV/TSV or Google Sheet URL (shared as "anyone with the link"); first column = symbol, header row skipped.
searchQuerystringCompany/fund name or ISIN; matching symbols are added.
trending + trendingRegionboolean, stringfalse, USYahoo trending tickers for a region (US, GB, DE, FR, JP, HK, AU, IN...).
screenerenumOne of 26 Yahoo predefined screeners (see the input form), or custom.
screenerQuery, screenerQuoteType, screenerSortField, screenerSortTypeobject, enum, string, enumCustom screener criteria in Yahoo's operand format (example below).
maxDiscoveredinteger25Cap on symbols taken from search, trending and screener.

With nothing set the actor runs a 3-ticker sample (AAPL, MSFT, GOOGL) so a test run always returns data.

Choose data

FieldTypeDefaultNotes
dataTypesstring[]["quote"]Any of quote, profile, keyStats, financials, balanceSheet, cashFlow, earnings, analysts, ownership, options, history, news.
statementPeriodsstring[]["annual","quarterly"]Add trailing for TTM income statement and cash flow.
range, intervalenum1mo, 1dHistory window and candle size (1m...3mo). Intraday candles exist for ~30 days (1m) to ~2 years (1h).
startDate, endDateYYYY-MM-DDExplicit history window; overrides range.
includePrePostbooleanfalsePre/post-market candles for intraday intervals.
optionsExpirationsinteger1Nearest N expirations per ticker.
optionsDatesstring[]Specific expirations (YYYY-MM-DD).
optionsAllExpirationsbooleanfalseEvery listed expiration (20-30 rows per ticker).
maxNewsinteger10Articles per ticker.
region, langstringUS, en-USPassed to Yahoo for localized names and news.
maxItemsinteger10Hard cap on rows for the run. Raise it for real jobs.
proxyConfigurationobjectApify proxyDatacenter proxies are enough.

Legacy fields from earlier versions keep working: symbols, dataType (quote / historical / both), historyRange, historyInterval.

Examples

Quotes for a list:

{ "tickers": ["AAPL", "MSFT", "NVDA", "7203.T", "SAP.DE", "BTC-USD"], "maxItems": 1000 }

Quotes for every symbol in a Google Sheet:

{ "listUrl": "https://docs.google.com/spreadsheets/d/1AbC.../edit#gid=0", "maxItems": 5000 }

Annual and quarterly statements plus key stats for two tickers:

{ "tickers": ["AAPL", "MSFT"], "dataTypes": ["financials", "balanceSheet", "cashFlow", "keyStats"], "statementPeriods": ["annual", "quarterly"], "maxItems": 100 }

Today's day gainers with the live quote and analyst targets:

{ "screener": "day_gainers", "maxDiscovered": 50, "dataTypes": ["quote", "analysts"], "maxItems": 200 }

Custom screener: US stocks over $10B market cap with P/E under 15, sorted by market cap:

{
"screener": "custom",
"screenerQuery": { "operator": "AND", "operands": [
{ "operator": "EQ", "operands": ["region", "us"] },
{ "operator": "GT", "operands": ["intradaymarketcap", 10000000000] },
{ "operator": "LT", "operands": ["peratio.lasttwelvemonths", 15] } ] },
"screenerSortField": "intradaymarketcap", "screenerSortType": "DESC",
"maxDiscovered": 100, "maxItems": 100
}

Options chains for the next three expirations:

{ "tickers": ["AAPL", "TSLA"], "dataTypes": ["options"], "optionsExpirations": 3, "maxItems": 10 }

Two years of daily candles with dividends and splits:

{ "tickers": ["SPY"], "dataTypes": ["history"], "range": "2y", "interval": "1d" }

Trending tickers in the UK with news:

{ "trending": true, "trendingRegion": "GB", "dataTypes": ["quote", "news"], "maxNews": 5, "maxItems": 100 }

Output example

A quote row from a real run (trimmed to the most used of its 101 fields):

{
"recordType": "quote",
"symbol": "AAPL",
"shortName": "Apple Inc.",
"longName": "Apple Inc.",
"quoteType": "EQUITY",
"fullExchangeName": "NasdaqGS",
"currency": "USD",
"marketState": "REGULAR",
"regularMarketPrice": 343.9299,
"regularMarketChange": 4.429901,
"regularMarketChangePercent": 1.3048309,
"regularMarketPreviousClose": 339.5,
"regularMarketOpen": 339.205,
"regularMarketDayHigh": 345.25,
"regularMarketDayLow": 338.83,
"regularMarketVolume": 14119082,
"averageDailyVolume3Month": 44069551,
"bid": 335,
"ask": 344.57,
"marketCap": 5019374977024,
"trailingPE": 39.4415,
"forwardPE": 35.93571,
"epsTrailingTwelveMonths": 8.72,
"epsForward": 9.5707,
"priceToBook": 46.729607,
"fiftyTwoWeekLow": 243.42,
"fiftyTwoWeekHigh": 348.15,
"fiftyTwoWeekChangePercent": 31.360031,
"fiftyDayAverage": 326.9164,
"twoHundredDayAverage": 293.16254,
"dividendRate": 1.08,
"dividendYield": 0.32,
"sharesOutstanding": 14594180000,
"averageAnalystRating": "2.3 - Buy",
"earningsDate": "2026-11-02T20:00:00.000Z",
"lastUpdated": "2026-10-21T16:11:58.000Z",
"source": "input",
"scrapedAt": "2026-10-21T16:12:00.038Z"
}

An annual financials row holds periods[] like:

{ "asOfDate": "2025-09-30", "periodType": "12M", "totalRevenue": 416161000000, "costOfRevenue": 220960000000, "grossProfit": 195201000000, "operatingIncome": 133050000000, "netIncome": 112010000000, "dilutedEPS": 7.46, "eBITDA": 144748000000 }

The run's key-value store also gets an OUTPUT record: { records, symbols, dataTypes, apiCalls, failed: [{ symbol, section, error }] }. A section that fails for one ticker (unknown symbol, no options listed, fund without statements) is listed there; every other row is still saved.

Pricing

Pay per row: $0.000837 per row ($0.84 per 1,000) plus $0.001 per run. There are no add-on fees for options, statements or news: a row is a row.

JobRowsCost
Daily quotes for 200 tickers200$0.17
Quotes for the whole S&P 500 from a CSV503$0.42
Annual + quarterly statements (3 types) for 100 tickers600$0.50
Options, nearest 4 expirations, 50 tickers200$0.17
10 news headlines for 100 tickers1,000$0.84

Apify platform usage (compute at 512 MB, a few MB of datacenter proxy traffic) is billed separately and is a few cents per run. maxItems caps what you can be charged.

Limits and FAQ

Is the data real-time? Quotes are what Yahoo Finance shows: real-time for US exchanges, 15-20 minutes delayed for some international exchanges (exchangeDataDelayedBy says how much).

Which tickers work? Anything with a Yahoo Finance quote page. Use Yahoo's suffixes for non-US listings (.L, .DE, .T, .HK, .AX, .TO...). Unknown symbols are reported in OUTPUT.failed and skipped.

Statements for ETFs, indices, crypto? Yahoo has no financial statements for them; the actor skips those with a note instead of producing empty rows. ETFs and funds get fundProfile, topHoldings and fundPerformance in the profile row.

ESG scores? Yahoo stopped serving its esgScores data; every symbol returns HTTP 404 as of October 2026. esg is still accepted in dataTypes for older configurations but produces no rows.

Options Greeks? Yahoo publishes implied volatility, not Greeks. Compute delta/gamma from impliedVolatility, strike, underlyingPrice and expirationDate downstream if you need them.

How many rows is a screener? Up to maxDiscovered (Yahoo pages 250 at a time; day_gainers has ~150 entries on a typical day, most_shorted_stocks several thousand).

Rate limits? The actor makes one request per 50 tickers for quotes and one to three requests per ticker for the other data types, with short pauses. Thousands of tickers per run are fine; it refreshes its Yahoo session automatically if a request is refused.

Why one row per ticker per data type instead of one giant record? So each data type has a fixed, flat shape you can open in Excel or load into a table. Filter on recordType.

Integrations

  • API: start a run with POST https://api.apify.com/v2/acts/fortuitous_pirate~yahoo-finance-scraper/runs?token=... and read .../runs/{id}/dataset/items?format=csv (or json, xlsx). Use run-sync-get-dataset-items for small jobs to get the rows in the same call.
  • Python: from apify_client import ApifyClient; run = ApifyClient(token).actor("fortuitous_pirate/yahoo-finance-scraper").call(run_input={"tickers": ["AAPL"], "dataTypes": ["quote", "earnings"]}); rows = client.dataset(run["defaultDatasetId"]).list_items().items.
  • JavaScript: const run = await new ApifyClient({ token }).actor('fortuitous_pirate/yahoo-finance-scraper').call({ screener: 'most_actives', maxDiscovered: 100, maxItems: 100 });
  • Schedules: run it every morning before the open and let a webhook (ACTOR.RUN.SUCCEEDED) notify your service with the dataset id.
  • Make / Zapier / n8n: use the Apify module or node with this actor's id; map the dataset rows to Sheets, Slack, Notion or a database.
  • AI agents and MCP: the actor is available through the Apify MCP server; an agent can call it with natural-language instructions such as "get analyst price targets and the next earnings date for NVDA and AMD".

Support

Open an issue on this actor's Issues tab with the run id and the input. Reports of symbols or fields that look wrong are fixed quickly.