Yahoo Finance Options Scraper avatar

Yahoo Finance Options Scraper

Pricing

from $1.00 / 1,000 records

Go to Apify Store
Yahoo Finance Options Scraper

Yahoo Finance Options Scraper

Extract Yahoo Finance options with no API key: five trend screeners and the full chain for any underlying, with strike, expiry, premium, bid and ask, volume, open interest and implied volatility. Export data, run via API, schedule and monitor runs, or integrate with other tools.

Pricing

from $1.00 / 1,000 records

Rating

5.0

(1)

Developer

Public Money

Public Money

Maintained by Apify

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

21 hours ago

Last modified

Categories

Share

Options data is where the free APIs stop. Yahoo publishes five screeners and a full chain for every underlying it lists, and neither is reachable without a session. This Actor reads both: one record per contract with strike, expiry, premium, bid and ask, volume, open interest and implied volatility, either from a screener or from the whole chain.

What it does

  • Two routes on one input. Trends returns the five Yahoo screeners, chain returns every listed contract for the underlyings you name.
  • Reads all five screeners: most active, gainers, losers, highest implied volatility and highest open interest. Pick any combination.
  • Returns one record per contract, keyed on contractSymbol, so calls and puts at every strike and expiry are separate rows.
  • Carries implied volatility as a percent next to the premium, which is what tells you whether a contract is expensive rather than just moving.
  • Reports volume against open interest, the pair that separates a new position from an existing one being traded.
  • Needs no API key. Yahoo exposes no supported options API at all, which is why this reads the public pages.

Use cases

You need toHow this Actor does it
Find unusual activityRun the most-active screener and compare volume against openInterest
Screen for expensive premiumRun the highest-implied-volatility screener and read impliedVolatilityPercent
Price a spreadPull the chain for one underlying and read bid and ask at each strike
Watch one expiryPull the chain and filter on expirationDate
Track a positionSchedule the chain route and follow one contractSymbol over time
Feed a trading agentCall the Actor over MCP and let the model ask for what it needs

Quick start

  1. Click Try for free.
  2. Leave Route on trends for the screeners, or switch it to chain for a full chain.
  3. For trends, pick the screeners you want: most-active, gainers, losers, highest-implied-volatility, highest-open-interest.
  4. For a chain, add the underlyings in Tickers, one per line.
  5. Click Start. Rows appear within seconds.
  6. Export as JSON, CSV, Excel or XML, or read the dataset over the API.

Input

FieldTypeDefaultWhat it controls
routestringtrendstrends reads the screeners, chain reads every contract for your tickers
trendsarraymost-activeWhich screeners to read on the trends route
tickersarrayAAPLUnderlyings to read on the chain route
maxItemsinteger0Caps how many contracts are returned. 0 returns them all
{
"route": "trends",
"trends": [
"most-active",
"highest-implied-volatility"
],
"maxItems": 0
}

Output

One dataset item per contract. A ticker Yahoo lists no options for comes back with status: "failed" and a reason, so an empty chain is distinguishable from a bad symbol.

Field groupFields
Contractstatus, contractSymbol, tickerSymbol, contractType, strike, expirationDate, url
Premiumvalue, changePercent, bid, ask
Activityvolume, openInterest
VolatilityimpliedVolatilityPercent
{
"status": "ok",
"contractSymbol": "AAPL261218C00320000",
"tickerSymbol": "AAPL",
"contractType": "call",
"strike": 320.0,
"expirationDate": "2026-12-18",
"value": 14.85,
"changePercent": -6.31,
"bid": 14.75,
"ask": 14.95,
"volume": 18422,
"openInterest": 41208,
"impliedVolatilityPercent": 28.4,
"url": "https://finance.yahoo.com/quote/AAPL261218C00320000"
}

Integrations

Run it over the API and get the rows back in one call:

curl -X POST "https://api.apify.com/v2/acts/publicmoney~yahoo-options-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"route": "trends", "trends": ["most-active", "highest-implied-volatility"], "maxItems": 0}'

From Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("publicmoney/yahoo-options-scraper").call(run_input={"route": "trends", "trends": ["most-active", "highest-implied-volatility"], "maxItems": 0})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["tickerSymbol"], item["value"])

Give an AI agent the Actor over MCP:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?actors=publicmoney/yahoo-options-scraper"
}
}
}

Schedules run it on any cron, webhooks fire when a run finishes, and platform integrations push the dataset to Google Sheets, Slack, Airtable, Zapier or your own endpoint.

Cost

Pay per event, so you pay for records rather than compute time.

EventFree tierTop volume tier
Record with data$0.002$0.0007
Actor start$0.00005 per GBSame

A record that returned no data is published as a failure row and is never charged. Six volume tiers apply, so the per-record price falls with monthly volume.

Troubleshooting

IssueSolution
A ticker returns failedYahoo lists no options for it. Index and many foreign listings have no chain.
The chain route returns a very large number of rowsThat is the whole chain: every strike at every expiry, calls and puts. Set Max items, or filter after the run.
impliedVolatilityPercent is missingYahoo publishes no IV for that contract, which happens on very thin strikes.
volume is 0 but openInterest is highNothing traded today and the position is held from earlier. That contrast is the useful signal.
Premiums look staleOptions quotes go stale fast outside market hours. Read the run time and treat an out-of-hours pull as the last print.

FAQ

Does Yahoo Finance have an options API?

No. Yahoo publishes no supported API for options at all, and the internal endpoints need a session. This Actor reads the public screener and chain pages.

What is the difference between the two routes?

trends gives you Yahoo's own five screeners, which is where you look when you do not know what to look at. chain gives you every contract for an underlying you name, which is what you want when you already do.

How do I find unusual options activity?

Run the most-active screener and compare volume against openInterest. Volume far above open interest means new positions rather than existing ones changing hands.

Does it return historical options data?

No. Each record is the current quote for that contract. To build a series, schedule the chain route and let the dataset accumulate.

Are the Greeks included?

No. Yahoo publishes implied volatility but not delta, gamma, theta or vega, so neither does this Actor. Computing them from strike, expiry, premium and the underlying is your call, and the fields you need for it are all here.

Do I need a Yahoo Finance API key?

No. You need an Apify token to call the Actor over the API. No Yahoo Finance credential is involved anywhere.

Can I get this data in Python?

Yes, with the apify-client package as shown above. It returns parsed JSON, so there is no HTML or response handling on your side.

Can I get the data into Excel or Google Sheets?

Yes. Export the dataset as XLSX or CSV, or connect the Google Sheets integration so each run appends to a sheet.

Can an AI agent call this Actor?

Yes. Add it to an MCP client with the config above and the model can request what it needs on its own. Every record is flat JSON with named fields, so no post-processing is needed.

This Actor reads public Yahoo Finance data that needs no login and collects no personal data. Scraping public data is generally lawful, and how you store, redistribute or act on market data is governed by your own agreements and local rules. Take your own legal advice for your use case.

Changelog

  • 0.0.1 First release. Trend screeners and full chains.

Feedback

Found a field Yahoo Finance publishes that this Actor misses, or an input it rejects? Open an issue on the Issues tab with the input and what you expected. A daily test runs every Actor in the fleet against live sources, so parser fixes ship fast.