Yahoo Finance Quote Scraper
Pricing
from $1.25 / 1,000 results
Yahoo Finance Quote Scraper
Scrape Yahoo Finance quotes by ticker: price, change and changePercent, previousClose, day range, 52-week range, marketCap as an exact 4449911701504 rather than 4.45T, peRatio, eps, volume, dividendYield, beta, currency and exchange. Equities, ETFs, indices and futures. No API key or session crumb.
Yahoo Finance Scraper — price, market cap and PE ratio by ticker
This Actor collects Yahoo Finance quotes by ticker symbol. It returns the price, change, day range,
52-week range, market cap, PE ratio, EPS, volume, dividend yield and beta as numbers —
4449911701504, not the "4.45T" the quote page displays.
No Yahoo account, API key or session crumb is used — this reads the public quote page.
What it returns
| Field | Type | Notes |
|---|---|---|
ticker | string | Normalised to upper case, e.g. AAPL |
name | string | Company or fund name, e.g. Apple Inc. |
price | number | Regular-market price, e.g. 304.91 |
currency | string | e.g. USD |
change, changePercent | number | Full precision, e.g. -3.350006 and -1.0867469 — the percent field is already in percent, not a fraction |
previousClose | number | |
dayLow, dayHigh | number | Today's range |
fiftyTwoWeekLow, fiftyTwoWeekHigh | number | 52-week range |
marketCap | number | Exact, e.g. 4449911701504 — the page shows "4.45T" |
peRatio | number | Trailing PE; null for a company with no trailing earnings |
eps | number | Trailing EPS, negative where the company is loss-making |
volume | number | e.g. 34168163 — the page shows "34.17M" |
dividendYield | number | In percent, e.g. 0.35 for "0.35%"; falls back to a fund's distribution yield |
beta | number | Falls back to a fund's 3-year beta where no plain beta is published |
exchange | string | e.g. NasdaqGS |
sourceUrl, collectedAt | string | Provenance for every row |
Input
{ "tickers": ["AAPL", "MSFT", "BRK-B", "^GSPC", "SHEL.L"] }
| Field | Description |
|---|---|
tickers | Yahoo Finance symbols. Required, 1–200. |
maxItems | Cap on dataset items. Default 1000. Free plans stop at 250 requests and 250 results — see below. |
concurrency | Tickers fetched in parallel. Default 5. |
Symbols are upper-cased and de-duplicated, so aapl and AAPL collapse to one fetch. Beyond plain
US equities the input accepts suffixed foreign listings (SHEL.L, 7203.T), class shares (BRK-B),
indices (^GSPC) and futures (CL=F). Only symbols are accepted — not Yahoo Finance URLs.
How it reads exact numbers
The Yahoo Finance quote page is a SvelteKit app that inlines the JSON responses of the API calls it
made, so the whole quote is already present in the HTML as exact numbers, with 4449911701504
sitting alongside the "4.45T" that gets rendered. This Actor reads that embedded quoteSummary
payload directly — there is no model-backed extraction and no display string to unpick.
Requesting the same payload from query1.finance.yahoo.com directly is not possible without the
per-session crumb and cookie pair the page holds, which answers Invalid Crumb. Reading the
response Yahoo already embedded avoids acquiring one.
Use cases
- Refreshing a portfolio or watchlist with current prices on a schedule
- Screening a ticker universe on PE ratio, EPS, market cap or dividend yield
- Backfilling a spreadsheet, dashboard or database with numeric fundamentals
- Comparing a holding against its 52-week range for entry and exit rules
- Building alerts on daily change percent across a list of symbols
Reliability
Every field is read from the payload Yahoo Finance itself embedded in the page, so a value is either
present and exact or absent. Yahoo wraps each measure as { raw, fmt } and degrades an absent one to
an empty object rather than to zero, which this Actor preserves as null — a missing PE ratio comes
back as null, never as a misleading 0.
Percentage measures are converted from Yahoo's stored fraction to percent only where Yahoo's own
formatted value carries a % suffix, so changePercent and dividendYield are consistently in
percent.
A ticker whose page carries no regular-market price is recorded under failures in the run's
SUMMARY rather than emitted as an empty row, and a run in which every ticker failed exits with an
error.
Frequently asked questions
Do I need a Yahoo Finance account, API key or crumb? No. This Actor reads the quote data Yahoo Finance already embeds in its own public quote page, so there is no login, no API key and no per-session crumb to obtain.
Is the market cap a number or a display string? A number. The Yahoo Finance Scraper returns
marketCap as an exact integer such as 4449911701504, where the page renders "4.45T". Price,
volume, EPS and both ranges are numbers too.
What ticker formats does the input accept? Plain US symbols (AAPL), class shares (BRK-B),
suffixed foreign listings (SHEL.L, 7203.T), indices (^GSPC) and futures (CL=F). The input
takes symbols only, not Yahoo Finance URLs.
How many tickers can one run collect? Up to 200 per run, and this Actor returns exactly one row per ticker.
Is changePercent a fraction or a percentage? A percentage. A -1.09% move is returned as
-1.0867469, not as -0.010867469. dividendYield follows the same convention, so 0.35% is
returned as 0.35.
Does it return historical prices, options chains, news or financial statements? No. This Actor returns the current quote summary for each ticker — the fields listed above and nothing further.
Limitations
Current quote data only: no historical price series, no options chains, no analyst estimates, no
financial statements, no news and no ticker search or screening. Values reflect what Yahoo Finance
shows publicly at collection time, stamped in collectedAt, and are delayed or stale exactly as
Yahoo's own page is for that exchange. Fields Yahoo does not publish for a given instrument — a PE
ratio for a loss-making company, a dividend yield for a non-payer — come back as null.
Free plan limit
Runs started from an Apify free plan stop at 250 requests and 250 results, and the run
reports that it reached the limit. Any paid plan runs the full input and maxItems you set. The
tickers input already caps at 200, so in practice a free-plan run is bounded by that ceiling
rather than by the 250 limit.
The limit exists because this Actor fetches through our own infrastructure, which Apify does not cover for free-plan runs. It binds on requests as well as results so that a large input list cannot spend those fetches for rows the run will not return.