{
  "title": "Steam research - choose games and source signals",
  "type": "object",
  "schemaVersion": 1,
  "properties": {
    "appIds": {
      "title": "Steam app IDs",
      "type": "array",
      "description": "Steam app IDs to analyze, e.g. 730 (CS2), 292030 (The Witcher 3). Find the ID in any Steam store URL: store.steampowered.com/app/<ID>/.",
      "editor": "stringList",
      "prefill": [
        "730"
      ],
      "sectionCaption": "1 · Games to inspect",
      "sectionDescription": "Supply app IDs or use search terms."
    },
    "searchTerms": {
      "title": "Search terms",
      "type": "array",
      "description": "Search the Steam store by keyword instead of (or in addition to) app IDs. Each term returns Steam's top 10 matches only - there is no pagination - and the results are merged with any app IDs you passed, with duplicates removed.",
      "editor": "stringList",
      "default": [],
      "example": [
        "roguelike deckbuilder",
        "survival horror"
      ]
    },
    "includeReviews": {
      "title": "Include review texts",
      "type": "boolean",
      "description": "Also output the most recent written reviews for each game as separate records (with playtime, votes, language, refunded flag).",
      "editor": "checkbox",
      "default": false,
      "sectionCaption": "2 · Published details",
      "sectionDescription": "Choose the optional details and price region needed for your analysis."
    },
    "maxReviewsPerGame": {
      "title": "Maximum reviews per game",
      "type": "integer",
      "description": "How many recent reviews to pull per game, newest first, from 1 to 2000 (only applies when review texts are enabled). Games with fewer reviews return fewer, and review rows count toward Max results - so a high value here can be cut short by that cap.",
      "editor": "number",
      "default": 20,
      "minimum": 1,
      "maximum": 2000
    },
    "includeSteamSpy": {
      "title": "Include ownership estimates (SteamSpy)",
      "type": "boolean",
      "description": "Enrich each game with SteamSpy data: estimated owner range, daily peak CCU, and top community tags. Adds ~1s per game (SteamSpy rate limit).",
      "editor": "checkbox",
      "default": true
    },
    "includePlayerCount": {
      "title": "Include live player count",
      "type": "boolean",
      "description": "Adds currentPlayers, the live concurrent player count Steam reports right now. A valid but empty game returns 0; a title Steam will not report on comes back null rather than failing the run.",
      "editor": "checkbox",
      "default": true
    },
    "country": {
      "title": "Price region",
      "type": "string",
      "description": "Lowercase two-letter country code that sets the pricing region and currency (us, de, jp, gb, br). An unrecognized code does not error - Steam silently falls back to USD, so a typo returns dollars.",
      "editor": "textfield",
      "default": "us"
    },
    "maxResults": {
      "title": "Maximum saved records",
      "type": "integer",
      "description": "Hard ceiling on total records written per run, counting game rows and review rows together. With review texts off this is roughly one record per game; with them on, each game costs 1 + its review count, so raise this before raising Max reviews per game.",
      "editor": "number",
      "default": 1000,
      "minimum": 1,
      "sectionCaption": "3 · Run limits",
      "sectionDescription": "Bound the collection before expanding your scope."
    },
    "maxRunSeconds": {
      "title": "Run time budget (seconds)",
      "type": "integer",
      "description": "Wall-clock budget for this run, in seconds. When it is reached the Actor stops cleanly and finishes successfully with the rows it already collected, instead of being killed mid-run. Each game costs three or four paced requests (about 2.5 s), so 100 games need roughly 250 s. Raise it (and the run timeout in Run options) for a deliberately large job.",
      "editor": "number",
      "default": 240,
      "minimum": 30
    }
  },
  "description": "Choose Steam app IDs or search terms, then select the public details and review data you need. Prices are regional, and optional ownership figures are estimates rather than verified sales."
}
