{
  "openapi": "3.0.1",
  "info": {
    "title": "BoardGameGeek (BGG) Board Game Reviews Scraper",
    "description": "Scrape BoardGameGeek (BGG) board game reviews by game name, game ID, or URL. Export review text, ratings, dates, reviewer profiles, locations, ownership, wishlist, collection IDs, and version metadata for sentiment analysis, market research, and review monitoring.",
    "version": "0.6",
    "x-build-id": "pdgIa9n8W9eiwH5Qq"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/thescrapelab~boardgamegeek-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-thescrapelab-boardgamegeek-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/thescrapelab~boardgamegeek-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-thescrapelab-boardgamegeek-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/thescrapelab~boardgamegeek-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-thescrapelab-boardgamegeek-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": {
          "gameNames": {
            "title": "Game names",
            "uniqueItems": true,
            "type": "array",
            "description": "Board game names to search on BoardGameGeek. Each name is resolved to either the first best match or all matching games depending on Match mode. For larger or more reliable runs, use Game IDs or Game URLs instead.",
            "items": {
              "type": "string",
              "minLength": 1
            }
          },
          "gameIds": {
            "title": "Game IDs",
            "uniqueItems": true,
            "type": "array",
            "description": "BoardGameGeek numeric board game IDs to scrape directly. This bypasses name search and is the most reliable option for larger runs.",
            "items": {
              "type": "integer",
              "minimum": 1
            }
          },
          "gameUrls": {
            "title": "Game URLs",
            "uniqueItems": true,
            "type": "array",
            "description": "BoardGameGeek board game URLs to scrape directly, such as https://boardgamegeek.com/boardgame/174430/gloomhaven.",
            "items": {
              "type": "string",
              "minLength": 1
            }
          },
          "matchMode": {
            "title": "Match mode",
            "enum": [
              "first",
              "all"
            ],
            "type": "string",
            "description": "Choose whether each input name should scrape only the first best BoardGameGeek match or every matching game title found.",
            "default": "first"
          },
          "maxReviewsPerGame": {
            "title": "Max reviews per game",
            "minimum": 1,
            "type": "integer",
            "description": "Hard limit for how many reviews to output for each matched game.",
            "default": 50
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "recent",
              "highest"
            ],
            "type": "string",
            "description": "Review order as returned by BoardGameGeek. The Actor takes the first N reviews in that order.",
            "default": "recent"
          },
          "skipGameMetadata": {
            "title": "Skip game metadata",
            "type": "boolean",
            "description": "Start directly from review data instead of first fetching BGG game metadata. This is faster and avoids one fragile request per game, but direct Game ID inputs may have a null game name unless a Game URL or name search supplied it.",
            "default": true
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "maximum": 10,
            "type": "number",
            "description": "Optional minimum numeric rating filter. Leave blank to disable filtering. Reviews without a rating are dropped when this is set."
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum number of review API requests to run in parallel. The default is optimized for low-cost direct ID/URL runs on 256 MB memory.",
            "default": 4
          },
          "requestDelayMs": {
            "title": "Request delay",
            "minimum": 0,
            "type": "integer",
            "description": "Base delay in milliseconds before each BGG API request. Keep at 0 for lowest cost; raise it only if BoardGameGeek starts throttling your run.",
            "default": 0
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "maximum": 3,
            "type": "integer",
            "description": "How many times to retry a failed review request. Lower values reduce paid waiting when BGG blocks or closes requests.",
            "default": 1
          },
          "requestTimeoutSecs": {
            "title": "Request timeout",
            "minimum": 10,
            "maximum": 120,
            "type": "integer",
            "description": "Maximum seconds to spend on a single request handler before failing it. Lower values keep stalled runs cheap.",
            "default": 30
          },
          "useProxy": {
            "title": "Use Apify Proxy",
            "type": "boolean",
            "description": "Use Apify Proxy for BoardGameGeek requests. Leave off for the lowest-cost direct ID/URL runs; enable it only if direct requests are blocked.",
            "default": false
          },
          "proxyGroups": {
            "title": "Proxy groups",
            "uniqueItems": true,
            "type": "array",
            "description": "Optional Apify Proxy groups. Leave as RESIDENTIAL unless you know your account has a better group available.",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "default": [
              "RESIDENTIAL"
            ]
          },
          "debugMode": {
            "title": "Debug mode",
            "type": "boolean",
            "description": "Include additional debug summaries in error rows and logs.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}