Yahoo Finance API — Stock Quotes, Fundamentals & Options
Pricing
from $0.90 / 1,000 ticker report (core)s
Yahoo Finance API — Stock Quotes, Fundamentals & Options
Yahoo Finance API: one normalized JSON report per ticker — stock quotes, company profile, fundamentals, earnings, institutional holders, news and options chains. Each block reports its own status instead of silent nulls. Billed only for data actually delivered.
Pricing
from $0.90 / 1,000 ticker report (core)s
Rating
0.0
(0)
Developer
Heim AI
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
6 days ago
Last modified
Categories
Share
Yahoo Finance API — Stock Quotes, Fundamentals, Earnings & Options Chain
Get one normalized JSON report per ticker — live quote, company profile, financial fundamentals, earnings, institutional holders, news, and optional options chains — in a single run. Built for stock screeners, valuation models, research dashboards, and AI agents that need structured stock market data without writing a Yahoo Finance scraper.
The thing that makes this different: every block tells you its own status. If fundamentals were throttled, you get "status": "throttled" — not a silent null you discover three steps later in your pipeline.
| Actor id | kaz_kakyo/yahoo-finance-consolidated |
| Minimal input | { "tickers": ["AAPL"] } |
| Cost | $0.0009/ticker (quote & profile) · $0.0020/ticker (with fundamentals, earnings, holders or news) · $0.0020/options expiry |
| Output | one ticker-report row per ticker, plus one option-chain row per expiry |
| Speed | direct JSON endpoints — no browser, no yfinance dependency |
Quick start
{"tickers": ["AAPL", "MSFT", "NVDA"],"blocks": ["quote", "profile"]}
That's a watchlist snapshot at $0.0009 per ticker. Want the full research pull? Ask for the deep blocks:
{"tickers": ["AAPL"],"blocks": ["quote", "profile", "fundamentals", "earnings", "news", "holders"],"includeOptions": true}
Call it from anywhere:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('kaz_kakyo/yahoo-finance-consolidated').call({ tickers: ['AAPL', 'MSFT'], blocks: ['quote', 'profile'] },{ maxTotalChargeUsd: 1.0 },);const { items } = await client.dataset(run.defaultDatasetId).listItems();
What each block gives you
| Block | Tier | Contains |
|---|---|---|
quote | core | Current/last price, day range, volume, market cap, market state |
profile | core | Sector, industry, country, employee count, business summary |
fundamentals | deep | Financial statement figures and key statistics |
earnings | deep | Earnings history and estimates |
holders | deep | Institutional and major holders |
news | deep | Recent headlines for the ticker |
| options | separate | Calls and puts per expiry date (includeOptions: true) |
Request only what you need — you are billed on what is actually delivered, so a quote-only run costs the core rate.
Output contract
Ticker report — one per requested ticker:
{"type": "ticker-report","ticker": "AAPL","sourceTimestamp": "2026-07-30T20:00:00.000Z","marketState": "closed","currency": "USD","quoteDelaySeconds": 0,"exchange": "NMS","timezone": "America/New_York","blocks": {"quote": { "status": "ok", "data": { "regularMarketPrice": 210.5 } },"profile": { "status": "ok", "data": { "sector": "Technology" } },"fundamentals": { "status": "unavailable", "data": null, "reason": "HTTP 429" }}}
Options chain — one row per ticker × expiry when includeOptions is on:
{ "type": "option-chain", "ticker": "AAPL", "expiry": "2026-08-03", "calls": [], "puts": [] }
Block status values — read these before you parse
| Status | Meaning | What to do |
|---|---|---|
ok | Real data is present in data | Use it |
unavailable | Yahoo returned nothing usable for this block | Treat as missing; check reason |
throttled | Rate-limited upstream | Retry later; not a permanent failure |
schema_changed | Response shape did not match what we expect | Data may exist but is untrusted — do not parse blindly |
A block is only ok when it contains real market data. Metadata-only or empty payloads are reported as unavailable, never dressed up as success.
On freshness: this is not advertised as real-time. Every report carries sourceTimestamp, marketState (pre / regular / post / closed), currency, and quoteDelaySeconds so you can decide whether the data is fresh enough for your use.
Input reference
| Field | Type | Default | Notes |
|---|---|---|---|
tickers | array of strings | — | Required. Symbols, e.g. ["AAPL","MSFT"] |
blocks | array | all six | Any of quote, profile, fundamentals, earnings, news, holders |
includeOptions | boolean | false | Adds options chains as separate rows |
optionExpiries | array of strings | all | Target specific expiry dates, e.g. ["2026-08-03"] |
Pricing
| Event | Price | Charged when |
|---|---|---|
ticker-core-delivered | $0.0009 | At least one block is ok and all ok blocks are core (quote, profile) |
ticker-full-delivered | $0.0020 | At least one deep block is ok (fundamentals, earnings, holders, news) |
option-chain-delivered | $0.0020 | Per delivered ticker × expiry chain |
apify-actor-start | $0.00005 | Per run |
You pay the deep rate only when deep data actually arrives. A ticker is billed at most once — core and full are mutually exclusive — and a report with no ok block is never charged. Cap spend with maxTotalChargeUsd.
Why this one
- One call, one normalized report — no stitching together several endpoints or actors per ticker.
- Honest failures. A blocked or empty block is labelled, never converted into a silent
nullthat quietly corrupts a model downstream. - Priced by what you receive, so cheap watchlist polling stays cheap.
- No browser, no
yfinance— it queries JSON endpoints directly, with crumb/cookie session handling, exponential backoff on 429/5xx, and a residential retry only when a refreshed session is still blocked. - Fails loud. If every ticker is blocked upstream, the run fails with a diagnostic instead of finishing "successfully" with an empty dataset.
Common uses
Watchlist and portfolio monitoring on a schedule · stock screeners and valuation models · earnings-season research · options analytics · competitor and sector tracking · feeding a finance agent or MCP tool with structured ticker data.
Not affiliated with or endorsed by Yahoo. Market data is provided as retrieved and may be delayed; verify before relying on it for trading decisions.