{
  "openapi": "3.0.1",
  "info": {
    "title": "Steam Store Games Scraper",
    "description": "Scrapes the Steam store: search or browse by tag, genre, feature, OS and language. Returns price and discount in your chosen store currency, review score and count, release date, developers, publishers, genres, Metacritic score and achievements.",
    "version": "0.1",
    "x-build-id": "Ij8dJGe8esVqHJu2k"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapyx~steam-games-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapyx-steam-games-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/scrapyx~steam-games-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapyx-steam-games-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/scrapyx~steam-games-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapyx-steam-games-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Free-text store searches — one crawl per entry, each with its own SEARCH_SUMMARY row. Leave empty to browse the whole catalogue filtered only by the fields below (Steam lists ~274,000 items in total).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "tags": {
            "title": "Tags",
            "type": "array",
            "description": "Steam tags by name — 'RPG', 'Indie', 'Souls-like', 'Open World'. Multiple tags combine with AND (verified: RPG 59,235 + Action 110,871 → 21,818 for both). All 430 tags Steam publishes are resolved live at run time, so new tags work without an update. A name Steam does not know is REFUSED with suggestions rather than sent — Steam answers an unknown filter with the full unfiltered catalogue and a healthy 200, so an unmatched tag would silently return everything.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "contentTypes": {
            "title": "Content types",
            "type": "array",
            "description": "Restrict to certain store item types by name: 'Games', 'Software', 'Downloadable Content', 'Demos', 'Soundtracks', 'Videos', 'Mods', 'Hardware', 'Playtests'. Leave empty for everything.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "playerModes": {
            "title": "Player modes",
            "type": "array",
            "description": "Filter by number-of-players facets by name: 'Single-player', 'Multi-player', 'Co-op', 'PvP', 'Online PvP', 'LAN Co-op' and similar.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "features": {
            "title": "Features",
            "type": "array",
            "description": "Filter by Steam feature facets by name: 'Steam Achievements', 'Steam Trading Cards', 'Steam Cloud', 'Full controller support' and similar.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "operatingSystems": {
            "title": "Operating systems",
            "type": "array",
            "description": "'Windows', 'macOS' or 'SteamOS + Linux'.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "languages": {
            "title": "Supported languages",
            "type": "array",
            "description": "Restrict to titles supporting a language, by name — 'English', 'Japanese', 'Simplified Chinese'. All 103 languages Steam publishes are resolved live.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Store region (sets the currency)",
            "enum": [
              "us",
              "gb",
              "de",
              "fr",
              "ca",
              "au",
              "br",
              "jp",
              "id",
              "in",
              "ru",
              "tr"
            ],
            "type": "string",
            "description": "Which Steam store region to price against. THIS MATTERS: without it Steam prices in whatever currency the exit IP resolves to, so a rotating proxy pool can change the currency midway through a crawl. Steam does not reject an unknown region — it silently falls back to the IP — so only verified regions are offered here.",
            "default": "us"
          },
          "sortBy": {
            "title": "Sort order",
            "enum": [
              "_ASC",
              "Released_DESC",
              "Name_ASC",
              "Price_ASC",
              "Price_DESC",
              "Reviews_DESC"
            ],
            "type": "string",
            "description": "Careful — two of these are implicit FILTERS, not just orderings. 'Release date' drops items with no usable date (63,610 → 49,845 on one measured query) and 'User review score' drops items with no reviews (→ 18,752). When that happens the summary row reports sortImplicitlyFiltered:true along with the unsorted total, so you can see what was excluded. An unknown sort is refused, because Steam silently ignores one.",
            "default": "_ASC"
          },
          "onlyDiscounted": {
            "title": "Only discounted items",
            "type": "boolean",
            "description": "Restrict to items currently on sale (Steam's 'Discounts & Events' facet — 8,423 items when measured).",
            "default": false
          },
          "hideFreeToPlay": {
            "title": "Hide free-to-play",
            "type": "boolean",
            "description": "Exclude free-to-play titles.",
            "default": false
          },
          "maxItems": {
            "title": "Max items per search",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many apps per search term. Set to 0 for unlimited — Steam's pagination is genuinely honest here (past the last page it returns zero rows rather than re-serving page 1), so an unlimited crawl terminates correctly, but a broad query can mean tens of thousands of rows at 100 per request.",
            "default": 100
          },
          "includeAppDetails": {
            "title": "Fetch full app details",
            "type": "boolean",
            "description": "Fetch each app from Valve's public appdetails API — developers, publishers, genres, Metacritic score, achievement count, exact integer prices, descriptions, platform support and screenshot/movie counts. Costs one extra request per app (the endpoint does not accept batches). Turn it off for a fast list-only crawl; search rows still carry name, price, release text and the review score.",
            "default": true
          },
          "language": {
            "title": "Content language",
            "type": "string",
            "description": "Language for descriptions and localised fields returned by the details API, e.g. 'english', 'german', 'japanese'.",
            "default": "english"
          },
          "maxConcurrency": {
            "title": "Max concurrent requests",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "How many requests may be in flight at once. This absorbs latency variance; it is NOT the throttle — the crawl rate is set by 'Minimum interval between requests' below.",
            "default": 5
          },
          "minRequestInterval": {
            "title": "Minimum interval between requests (seconds)",
            "minimum": 0.05,
            "maximum": 10,
            "type": "number",
            "description": "The actual speed control: the shortest gap between two requests to Steam, across all workers. An unpaced burst of 199 detail calls sustained 2.6 req/s with no rejection, but Steam serves no bot challenge at all and that is worth preserving. Values below 0.05s are clamped.",
            "default": 0.3
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Steam runs no bot mitigation on these public store endpoints. Residential with NO country pin is the cloud default: the store region comes from the 'Store region' field above, so the exit IP does not affect prices, and an unpinned pool keeps rotation wide.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}