If you've ever tried to pull live options data into a Python script, you've probably hit the same wall I did: the cheapest real-time providers start at $99/mo.
Here's how to do it for $20/mo — or free if you stay within 1,000 credits/day.
What You'll Need
- Python 3.8+
-
requestslibrary (pip install requests) - An API key from market-option.com (free tier available, no card required)
Fetching a Full Options Chain
import os
import requests
API_KEY = os.environ["MARKET_OPTIONS_KEY"]
BASE_URL = "https://market-option.com/api/v1"
def get_chain(ticker: str) -> list[dict]:
res = requests.get(
f"{BASE_URL}/options/chain/{ticker}",
params={"apiKey": API_KEY},
)
res.raise_for_status()
return res.json()["results"]
contracts = get_chain("SPY")
print(f"{len(contracts)} contracts returned")
print(contracts[0])
Each contract in results looks like this:
{
"details": {
"contract_type": "call",
"strike_price": 530,
"expiration_date": "2026-01-17",
"ticker": "O:SPY260117C00530000"
},
"last_quote": {
"bid": 3.45,
"ask": 3.50,
"midpoint": 3.475
},
"greeks": {
"delta": 0.42,
"gamma": 0.031,
"theta": -0.18,
"vega": 0.29
},
"implied_volatility": 0.182,
"open_interest": 12418
}
Filtering by Expiration and Strike
def get_near_the_money(ticker: str, expiration: str, spot: float, width: float = 0.05):
"""Return contracts within ±width% of spot price."""
contracts = get_chain(ticker)
low = spot * (1 - width)
high = spot * (1 + width)
return [
c for c in contracts
if c["details"]["expiration_date"] == expiration
and low <= c["details"]["strike_price"] <= high
]
atm = get_near_the_money("SPY", "2026-01-17", spot=530)
for c in atm:
print(
c["details"]["strike_price"],
c["details"]["contract_type"],
c["last_quote"]["bid"],
c["greeks"]["delta"],
)
Scanning for High IV Contracts
def high_iv_scan(ticker: str, iv_threshold: float = 0.5) -> list[dict]:
"""Find contracts with IV above threshold."""
contracts = get_chain(ticker)
return [
c for c in contracts
if c.get("implied_volatility", 0) > iv_threshold
]
spikes = high_iv_scan("AAPL", iv_threshold=0.8)
print(f"Found {len(spikes)} high-IV contracts")
What the API Covers
- Top 100 US equity underlyings (~95% of options volume)
- Chains, quotes, Greeks, IV, open interest
- Plain JSON — no SDK needed
- Pagination via
next_urlfor large chains
Pricing: Free tier gives 1,000 credits/day. Pro is $20/mo with 10,000 credits/minute.
Wrapping Up
Options data doesn't have to be expensive for hobbyist projects or indie algo traders. The examples above are production-ready — just swap in your ticker and you're done.
Try it at market-option.com — new accounts get a 7-day Pro trial automatically.
What would you add to this scanner? Drop a comment below.





















