{
  "title": "Yahoo Finance Quotes & Fundamentals Watchlist",
  "type": "object",
  "schemaVersion": 1,
  "description": "Start with AAPL. Paste up to20 Yahoo Finance tickers or their plain quote overview URLs. Source timestamps, currency and reported delay stay explicit; missing optional fundamentals stay null.",
  "properties": {
    "symbols": {
      "title": "Ticker watchlist",
      "type": "array",
      "editor": "stringList",
      "description": "Yahoo symbols, such as AAPL, MSFT or BRK-B, or https://finance.yahoo.com/quote/AAPL/. Only public overview pages; no query parameters or other hosts. Duplicate symbols are removed. Empty input uses AAPL.",
      "prefill": [
        "AAPL"
      ],
      "default": [
        "AAPL"
      ]
    },
    "maxResults": {
      "title": "Maximum saved quotes",
      "type": "integer",
      "description": "One paid row per successful symbol. Keep this at least as large as your watchlist for complete coverage and baseline updates. Errors and skipped unchanged observations are not paid rows.",
      "default": 20,
      "minimum": 1,
      "maximum": 20
    },
    "comparePrevious": {
      "title": "Compare with the last complete watchlist",
      "type": "boolean",
      "description": "Records new, changed and unchanged quotes with exact changed fields and previous values. Observation times and quote timestamps alone do not count as changes. History updates only after the complete watchlist and output succeed.",
      "default": false
    },
    "onlyChanges": {
      "title": "Save changed quotes only",
      "type": "boolean",
      "description": "Enables comparison and skips unchanged observations without a result charge. The first comparison emits all successful symbols. Use the same symbols and baseline label on later runs.",
      "default": false
    },
    "snapshotName": {
      "title": "Baseline label",
      "type": "string",
      "editor": "textfield",
      "description": "Use1–80 letters, numbers, underscores or hyphens. Keep the same label and symbols for repeat checks; run one writer per baseline at a time.",
      "default": "default",
      "pattern": "^[-\\w]{1,80}$"
    },
    "maxRunSeconds": {
      "title": "Run time budget (seconds)",
      "type": "integer",
      "description": "30–120 seconds, at least one second per source origin between requests. Source blocks stop collection without bypasses; partial runs do not advance history.",
      "default": 90,
      "minimum": 30,
      "maximum": 120
    }
  },
  "required": []
}
