{
  "openapi": "3.0.1",
  "info": {
    "title": "Steam Reviews Scraper | Full History, Filters, $0.50/1K",
    "description": "Full review history of any Steam game: positive/negative totals, review score, playtime, filters by language, date and sentiment, incremental runs. Official public data. Pay per review, no start fee.",
    "version": "0.0",
    "x-build-id": "kyWldODV1egKTGeYw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/kesar_chen~steam-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-kesar_chen-steam-reviews-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/kesar_chen~steam-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-kesar_chen-steam-reviews-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/kesar_chen~steam-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-kesar_chen-steam-reviews-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": {
          "apps": {
            "title": "Games",
            "type": "array",
            "description": "Steam app IDs (730), store URLs (https://store.steampowered.com/app/413150/...), or search:name to resolve by name. Required unless mode is canary.",
            "items": {
              "type": "string"
            }
          },
          "languages": {
            "title": "Languages",
            "type": "array",
            "description": "Steam language codes (english, schinese, japanese, german ...). [\"all\"] for every language.",
            "default": [
              "all"
            ],
            "items": {
              "type": "string"
            }
          },
          "sort": {
            "title": "Sort",
            "enum": [
              "recent",
              "updated",
              "helpful",
              "funny"
            ],
            "type": "string",
            "description": "recent walks the full history newest first and is required for sinceDate and incremental mode.",
            "default": "recent"
          },
          "reviewType": {
            "title": "Review type",
            "enum": [
              "all",
              "positive",
              "negative"
            ],
            "type": "string",
            "description": "Filtered on Steam's side, so you only pay for what matches.",
            "default": "all"
          },
          "purchaseType": {
            "title": "Purchase type",
            "enum": [
              "all",
              "steam",
              "non-steam"
            ],
            "type": "string",
            "description": "Filtered on Steam's side. Steam's own default is purchases on Steam only; this Actor defaults to all.",
            "default": "all"
          },
          "sinceDate": {
            "title": "Only reviews since",
            "type": "string",
            "description": "2026-01-01, or relative like 12 months, 30 days, 2 weeks. Applied on Steam's side."
          },
          "untilDate": {
            "title": "Only reviews until",
            "type": "string",
            "description": "Upper bound, same formats. Combine with sinceDate to pick a window, for example the two weeks after a patch."
          },
          "maxReviewsPerApp": {
            "title": "Max reviews per game",
            "minimum": 0,
            "type": "integer",
            "description": "0 = everything that matches. Large games have a million-plus reviews, set a limit or a date range.",
            "default": 3000
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Keep only reviews whose text contains at least one of these words, case-insensitive. Applied after fetching; filtered-out reviews are not charged.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "playtimeMinHours": {
            "title": "Min playtime at review (hours)",
            "minimum": 0,
            "type": "integer",
            "description": "Skip reviews from people who had played less than this when they wrote the review. 0 = no filter.",
            "default": 0
          },
          "playtimeMaxHours": {
            "title": "Max playtime at review (hours)",
            "minimum": 0,
            "type": "integer",
            "description": "0 = no filter.",
            "default": 0
          },
          "steamDeckOnly": {
            "title": "Steam Deck players only",
            "type": "boolean",
            "description": "Only reviews from authors who played mostly on Steam Deck.",
            "default": false
          },
          "includeOffTopic": {
            "title": "Include off-topic review bombs",
            "type": "boolean",
            "description": "Steam hides reviews from periods it flagged as off-topic review activity. Turn on to include them.",
            "default": false
          },
          "summaryWindowMonths": {
            "title": "Summary window (months)",
            "minimum": 0,
            "type": "integer",
            "description": "The summary row counts not-recommended reviews in this window. 0 turns it off.",
            "default": 12
          },
          "incremental": {
            "title": "Incremental (only new reviews since last run)",
            "type": "boolean",
            "description": "Remembers which reviews it has seen per game in a named key-value store and outputs only new ones on later runs. Requires sort = recent.",
            "default": false
          },
          "stateStoreName": {
            "title": "State store name",
            "type": "string",
            "description": "Named key-value store that keeps the incremental state. Named stores never expire.",
            "default": "steam-reviews-state"
          },
          "notifyWebhookUrl": {
            "title": "Notify: webhook URL",
            "type": "string",
            "description": "Paste a Slack incoming webhook, a Discord channel webhook, a Feishu/Lark custom bot webhook, or any HTTPS endpoint. After each job the Actor posts the reviews written in this run that are at or below the rating threshold. With incremental mode on, that means only new low-rated reviews. Unknown hosts receive a JSON body."
          },
          "notifyMaxRating": {
            "title": "Notify: max rating",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Steam has thumbs up/down only: 1 = post only not-recommended reviews (default), 5 = post everything written.",
            "default": 1
          },
          "notifyMaxItems": {
            "title": "Notify: max reviews per message",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "The rest are summarised as a count; all of them are in the dataset.",
            "default": 10
          },
          "notifyEvenIfEmpty": {
            "title": "Notify: post even when nothing matched",
            "type": "boolean",
            "description": "Off = silence when there is nothing at or below the threshold.",
            "default": false
          },
          "includeAuthorId": {
            "title": "Include author Steam ID",
            "type": "boolean",
            "description": "Off by default to keep personal identifiers out of your dataset. Playtime figures are always included.",
            "default": false
          },
          "searchResultsPerKeyword": {
            "title": "Games per search keyword",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "How many games a search:name entry expands to, by store relevance.",
            "default": 1
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "scrape",
              "canary"
            ],
            "type": "string",
            "description": "Leave on scrape.",
            "default": "scrape"
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}