1. API
  2. Recipes
  3. Watchlist IV rank screen

Recipe, one Python file

Watchlist IV rank screen

Your watchlist ranked by IV rank in one call, with the names worth selling premium on at the top. One batch call returns IV rank, IV percentile and the current 30-day implied vol for up to 25 symbols. The script sorts the list, flags the names above 50 and below 20, and prints what each one's implied vol is against its own year.

1Endpoint it calls
PremiumPlan and above, from $55/mo
2026-09-08Output captured

What it prints

The output,
as captured.

Run against the live API on 2026-09-08 with a real token. Anyone running a premium-selling or premium-buying list who checks it every morning.

python3 watchlist_iv_rank_screen.pystdout, 2026-09-08
        IV rank  IV pct  IV 30d  52w low  52w high  read
COIN       55.9    58.0    66.1     49.5      79.2  rich: lean to selling
CRWD       52.4    76.0    50.0     32.6      65.9  rich: lean to selling
NFLX       46.7    75.0    33.1     26.3      41.0  middle: no edge
SMCI       43.7    61.0    71.9     51.9      97.7  middle: no edge
MU         30.5    35.0    61.1     43.6     101.1  middle: no edge
AMD        22.2    41.0    50.0     41.0      81.7  middle: no edge
PLTR       17.5    36.0    46.3     43.0      61.9  cheap: lean to buying
TSLA       15.5    37.0    41.0     37.5      60.0  cheap: lean to buying
NVDA       14.8    18.0    34.4     32.0      48.4  cheap: lean to buying
AVGO        6.1     9.0    37.4     36.3      54.6  cheap: lean to buying

IV rank places today's 30-day implied vol inside its 52-week range; percentile is the share of days below it.

The script

One file,
requests and nothing else.

Set APEXVOL_API_TOKEN from Account, then API Access, and run it. The token is the only configuration.

watchlist_iv_rank_screen.pyPython 3.10+, pip install requests
import os
import sys

import requests

# One token, any paid or trial plan: Account, then API Access.
TOKEN = os.environ.get("APEXVOL_API_TOKEN") or sys.exit("set APEXVOL_API_TOKEN")
BASE = os.environ.get("APEXVOL_API_URL", "https://apexvol.com") + "/api/mcp/data"
S = requests.Session()
S.headers["Authorization"] = f"Bearer {TOKEN}"


def get(path, **params):
    r = S.get(BASE + path, params=params, timeout=90)
    body = r.json()
    if not body.get("success"):
        sys.exit(f"{path}: HTTP {r.status_code}: {body.get('error')}")
    return body["data"]


WATCHLIST = "NVDA,AMD,TSLA,AVGO,MU,PLTR,COIN,NFLX,CRWD,SMCI"
data = get("/batch/iv-rank", tickers=WATCHLIST)

rows = sorted(data["results"].items(), key=lambda kv: -(kv[1].get("iv_rank") or 0))
print(f"{'':7}{'IV rank':>8}{'IV pct':>8}{'IV 30d':>8}{'52w low':>9}{'52w high':>10}  read")
for sym, d in rows:
    rank = d.get("iv_rank") or 0
    read = "rich: lean to selling" if rank >= 50 else ("cheap: lean to buying" if rank <= 20 else "middle: no edge")
    print(f"{sym:7}{rank:>8.1f}{(d.get('iv_percentile') or 0):>8.1f}{d['current_iv']:>8.1f}"
          f"{d['iv_min_52w']:>9.1f}{d['iv_max_52w']:>10.1f}  {read}")
for sym, err in data["errors"].items():
    print(f"{sym:7} {err}")
print()
print("IV rank places today's 30-day implied vol inside its 52-week range; percentile is the share of days below it.")

How it works

1. Batch the list
GET /batch/iv-rank?tickers=... spends one rate-limit unit for the whole watchlist.
2. Sort and flag
IV rank above 50 leans to selling, below 20 to buying; the percentile says how often the year was lower.
3. Act on the tails
The rest of the list is a no-edge day; the script only argues about the ends.

Schedule it

cron
35 13 * * 1-5 APEXVOL_API_TOKEN=avmcp_... python3 watchlist_iv_rank_screen.py
09:35 New York, weekdays. Times in the crontab are UTC.
Claude Code
/loop 1h python3 watchlist_iv_rank_screen.py
Runs it on an interval inside a session, and the assistant reads the output each time.

The same job, no code

Ask an assistant
with the MCP server.

Connect the ApexVol MCP server and this recipe is one prompt. It ships in the client's prompt picker as recipe-watchlist-iv-rank-screen.

In Claude, Cursor or ChatGPTthrough the MCP server
You

Rank my watchlist by IV rank and tell me which names are expensive or cheap against their own year: NVDA, AMD, TSLA, AVGO, MU, PLTR, COIN, NFLX, CRWD, SMCI.

The assistant calls get_iv_rank and answers from the same JSON the script prints.

Set it up in:

Under the hood

1 endpoint,
one token.

Each card opens the endpoint's page: parameters and bounds, every field, a real response and a console that runs it on your ticker.

Access

Plan
Premium and above. Every endpoint follows the tier of its web feature; the chips on the cards say which.
Cost
Measured in upstream data requests against the monthly allowance, not calls; a batch call counts one rate-limit unit and one data request per symbol. GET /api/mcp/data/me/usage shows the meter.
Reference
The rate-limits guide, the conventions and the error model. The whole API as one Markdown file: /llms-full.txt.

Included with
every paid plan.

From $55 a month. Create a token under Account, then API Access, and this script runs as it is.

Real market data, not a sandbox. See it live on AAPL.

7 days free, cancel anytime Card required · no charge for 7 days
Start trial →