{
  "$schema": "https://json-schema.org/draft-07/schema#",
  "$comment": "SINGLE SOURCE OF TRUTH for every ticker universe on OptionIncomeTools. Every doc/homepage/methodology/glossary MUST match a `size` here. Preflight Gate 15 fails the build if any HTML page ships a vague ticker count (e.g., '70+ tickers') without matching a registered universe.",
  "registry": "https://optionincometools.com/data/universe-registry.json",
  "generatedAt": "2026-07-16",
  "maintainer": {
    "name": "Akash Dedhia",
    "role": "Founder & Lead Analyst",
    "url": "https://optionincometools.com/about"
  },
  "universes": {
    "core54": {
      "name": "Core 54",
      "size": 54,
      "sourceCode": "worker/src/index.js::DEFAULT_TICKERS (line ~1087)",
      "sourceCodeUrl": "https://github.com/VYZE-INC/optiontrading/blob/main/worker/src/index.js",
      "asOf": "2026-07-16",
      "reviewCadence": "Quarterly",
      "description": "Curated list of 54 liquid US-listed underlyings and ETFs with active weekly options chains. Powers the Live Opportunities dashboard, Wheel Screener, and default per-ticker scans. Can be overridden per-deployment via the POPULAR_TICKERS environment variable.",
      "downloadUrl": "https://optionincometools.com/data/universe-core54.csv",
      "usedBy": [
        "/opportunities",
        "/screen/wheel/",
        "/screen/dividend-cc/"
      ],
      "tickers": [
        "SPY","QQQ","AAPL","MSFT","NVDA","GOOGL","META","AMZN","TSLA","AMD",
        "INTC","NFLX","ORCL","AVGO","JPM","BAC","XOM","CVX","JNJ","UNH",
        "V","MA","PG","KO","WMT","DIS","HD","F","SOFI","T",
        "VZ","PFE","MRNA","COIN","PLTR","SHOP","SBUX","NKE","BABA","CRM",
        "ADBE","MU","CSCO","IBM","NOW","CRWD","SNOW","UBER","ABNB","RBLX",
        "RIVN","LCID","CCL","DKNG"
      ]
    },
    "sweepBroad": {
      "name": "Sweeper Broad Universe",
      "size": 200,
      "sizeApprox": true,
      "sourceCode": "worker/src/index.js::SWEEP_DEFAULT_UNIVERSE (line ~6998)",
      "asOf": "2026-07-16",
      "reviewCadence": "Quarterly",
      "description": "~200 broad-index, sector, international, bond, commodity, leveraged, and income ETFs used by the Iron Condor Sweeper and Iron Butterfly Sweeper. Optimized for tight bid-ask spreads and reliable options-chain depth.",
      "usedBy": [
        "/sweeper/condor/",
        "/sweeper/butterfly/"
      ]
    },
    "ndx100": {
      "name": "Nasdaq-100",
      "size": 100,
      "sourceCode": "worker/src/leaps-universe.js::NDX100",
      "asOf": "2026-07-15",
      "reviewCadence": "Annual (Nasdaq-100 rebalance) + ad-hoc on additions/deletions",
      "description": "Standard Nasdaq-100 constituents. Used by TA Paper Trader, Nasdaq-100 Double Calendar Scanner, and as one of six LEAPS universes.",
      "usedBy": [
        "/paper/ta-scan/",
        "/dcal/",
        "/leaps/ (universe=ndx100)"
      ]
    },
    "sp500Top200": {
      "name": "S&P 500 Top 200",
      "size": 200,
      "sourceCode": "worker/src/leaps-universe.js::SP500_TOP",
      "asOf": "2026-07-15",
      "reviewCadence": "Annual (S&P 500 reconstitution) + ad-hoc on additions/deletions",
      "description": "Largest 200 S&P 500 constituents by index weight. Used as one of six LEAPS universes.",
      "usedBy": [
        "/leaps/ (universe=sp500)"
      ]
    },
    "djia": {
      "name": "Dow Jones Industrial Average",
      "size": 30,
      "sourceCode": "worker/src/leaps-universe.js::DJIA",
      "asOf": "2026-07-15",
      "reviewCadence": "Ad-hoc on DJIA committee changes",
      "description": "The 30 Dow Jones Industrial Average components.",
      "usedBy": [
        "/leaps/ (universe=djia)"
      ]
    },
    "leapsUnion": {
      "name": "LEAPS Default Union (S&P 500 top-200 + Nasdaq-100)",
      "size": 246,
      "sourceCode": "worker/src/leaps-universe.js::getUniverse('default')",
      "asOf": "2026-07-15",
      "reviewCadence": "Whenever underlying NDX-100 or S&P 500 rebalance",
      "description": "Deduplicated union of the S&P 500 Top 200 and Nasdaq-100 universes. Default for the LEAPS Opportunity Finder. On-demand scans are currently capped at the first 120 tickers per API-budget constraint (Polygon rate limit).",
      "usedBy": [
        "/leaps/ (universe=default)"
      ]
    },
    "cspLeaderboard": {
      "name": "CSP Discovery Universe",
      "size": 200,
      "sizeApprox": true,
      "sourceCode": "worker/src/csp-analytics.js (Phase 3.1 nightly cron)",
      "asOf": "2026-07-01",
      "reviewCadence": "Monthly",
      "description": "Curated list of ~200 liquid put-optionable US equities and ETFs, scanned nightly by Workers Cron to power the CSP Discovery Leaderboard and Suggestions panel.",
      "usedBy": [
        "/leaderboard/csp/",
        "/screener-csp-optimizer/ (suggestions)"
      ]
    },
    "customScreener": {
      "name": "Custom Multi-Strategy Screener Universe",
      "size": 470,
      "sizeApprox": true,
      "sourceCode": "worker/src/index.js::customScreenerUniverse()",
      "asOf": "2026-07-15",
      "reviewCadence": "Quarterly + ad-hoc for delistings/mergers",
      "description": "~470 liquid US equities and ETFs. The largest universe on the site. Used only by the Custom Multi-Strategy Screener where user-supplied filters constrain the search.",
      "usedBy": [
        "/screener/custom/"
      ]
    },
    "forwardFactor": {
      "name": "Forward-Factor Earnings Universe",
      "size": 100,
      "sourceCode": "worker/src/ff-universe.js",
      "asOf": "2026-07-15",
      "reviewCadence": "Quarterly aligned with earnings-season calendars",
      "description": "Top-100 earnings-rich US equities where forward-factor calendar spreads are most viable. Names chosen for reliable earnings dates + options-chain depth around the announcement.",
      "usedBy": [
        "/strategies/forward-factor/universe/"
      ]
    }
  },
  "earningsScreenerNote": "The Earnings Volatility Screener is not a fixed-universe scanner: it filters dynamically to underlyings with an earnings announcement in the target DTE window AND a valid options chain. Effective universe changes daily.",
  "changelog": [
    { "date": "2026-07-16", "change": "Registry created. Reconciled homepage 70+ ticker claim to actual Core 54 count. Wheel Screener corrected from ambiguous 30 to accurate 54. Wheel Score glossary normalization statement corrected to reference Core 54. LEAPS universes documented. Preflight Gate 15 added to fail build on future vague/inconsistent universe counts." }
  ]
}
