{
  "openapi": "3.0.1",
  "info": {
    "title": "Liquipedia Scraper - Esports Tournaments & Teams",
    "description": "Extract structured esports tournaments, teams, players, transfers, brackets and match schedules from Liquipedia across 80+ game wikis. Prize pools, rosters, final standings and results as typed JSON, not raw HTML. Reads only the official MediaWiki API. $0.002 per record plus $0.001 per run.",
    "version": "0.8",
    "x-build-id": "huHrqRVWSH7zMkX6a"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/clintsa~liquipedia-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-clintsa-liquipedia-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/clintsa~liquipedia-scraper/runs": {
      "post": {
        "operationId": "runs-sync-clintsa-liquipedia-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/clintsa~liquipedia-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-clintsa-liquipedia-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",
        "required": [
          "wiki"
        ],
        "properties": {
          "wiki": {
            "title": "Liquipedia game wiki",
            "type": "string",
            "description": "The Liquipedia game wiki to read, taken from the URL: `https://liquipedia.net/dota2/...` is `dota2`. Used for every bare page title and for category or search discovery. Entries in `pages` that are full URLs carry their own wiki and ignore this value. Examples: `dota2`, `counterstrike`, `leagueoflegends`, `valorant`, `rocketleague`, `overwatch`, `apexlegends`, `rainbowsix`, `starcraft2`, `mobilelegends`."
          },
          "pages": {
            "title": "Liquipedia page URLs or titles",
            "type": "array",
            "description": "The pages to scrape. Accepted formats include `ESL One/Birmingham/2024`, `https://liquipedia.net/dota2/ESL_One/Birmingham/2024`, `counterstrike:Natus Vincere`, and `valorant/TenZ`. Underscores, URL encoding, and `index.php?title=` links are all normalized, and Liquipedia redirects are followed, so `The International 2024` resolves to `The International/2024` automatically. Leave empty when you use `category` or `search` instead.",
            "items": {
              "type": "string"
            }
          },
          "category": {
            "title": "Scrape a whole category",
            "type": "string",
            "description": "Optional. Enumerate every article in a Liquipedia category on the selected wiki and scrape all of it, for example `Tournaments`, `Teams`, `Players`, or `2024 Tournaments`. The `Category:` prefix is optional. Always combine this with a sensible `maxPagesPerWiki` value, because large categories hold thousands of pages."
          },
          "search": {
            "title": "Scrape search results",
            "type": "string",
            "description": "Optional full-text search across articles on the selected wiki, for example `Champions 2024`. Matching pages are scraped in relevance order. Combine with `maxPagesPerWiki` to cap the run."
          },
          "entityTypes": {
            "title": "Keep only these record types",
            "type": "array",
            "description": "Optional filter applied after each page is parsed. `tournament` covers pages with a league infobox, `player` and `team` the corresponding profile infoboxes, `transfer` the rows of a transfer archive or feed, `match` the entries of the match ticker, `headtohead` the derived pairings, and `other` any page without an infobox. Leave empty to keep everything. Keep this stable across runs that share a monitor ID, otherwise filtered-out records look removed.",
            "items": {
              "type": "string",
              "enum": [
                "tournament",
                "player",
                "team",
                "transfer",
                "match",
                "headtohead",
                "other"
              ],
              "enumTitles": [
                "Tournaments",
                "Players",
                "Teams",
                "Transfers",
                "Ticker matches",
                "Head-to-head",
                "Other pages"
              ]
            },
            "default": []
          },
          "includeMatches": {
            "title": "Include match results",
            "type": "boolean",
            "description": "Add every `{{Match}}` on a tournament page as a `matches` array with opponents, date, best-of, and a derived score. Coverage depends on the wiki: Dota 2 and Overwatch pages carry per-map winners, Counter-Strike pages carry per-side round counts, and Valorant and League of Legends transclude their matches from LiquipediaDB so their pages carry none. Each match reports how its score was derived in `scoreSource`. Costs no extra requests.",
            "default": false
          },
          "includeBrackets": {
            "title": "Include bracket structure",
            "type": "boolean",
            "description": "Add the playoff bracket as a `brackets` array: the layout, every `R1M1`-style slot, the round it belongs to, and the round's name read from the editors' own headings. Slots that are still empty are kept, so the shape of the bracket is reported even on the wikis that keep their results in LiquipediaDB. A bracket published only as `{{ShowBracket}}` is listed with `source: \"liquipediadb\"` and no slots, so \"no bracket\" stays distinguishable from \"bracket not in the wikitext\". Costs no extra requests.",
            "default": false
          },
          "includeStandings": {
            "title": "Include final standings (slower)",
            "type": "boolean",
            "description": "Add the final placement table as a `standings` array - which team finished in which place, with prize money and points. Liquipedia builds this table from its own database when a page renders, so it needs a different API call that its terms limit to one request per 30 seconds. Enable it for a shortlist of tournaments, not for a large category crawl, and raise the run timeout to at least 30 seconds per tournament.",
            "default": false
          },
          "maxStandingsLookups": {
            "title": "Maximum standings lookups per run",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Safety cap on the slow standings lookups described above. Each one takes about 30 seconds, so the default of 8 fits inside the 300-second default run timeout. Raise both together if you need more: allow roughly 30 seconds per tournament. Tournaments beyond the cap are still returned, with `standings` left out.",
            "default": 8
          },
          "includeHeadToHead": {
            "title": "Include head-to-head records",
            "type": "boolean",
            "description": "Add one record per pair of opponents that met in the matches on the scraped pages, with series played, series won by each side, maps won, the tournaments involved, and the first and last meeting. Liquipedia's own head-to-head pages are database queries that the API does not expose, so these are derived from this run's matches and cover exactly the pages you scraped - `derivedFrom` and `tournaments` say so on every record. Costs no extra requests.",
            "default": false
          },
          "includeTransferFeed": {
            "title": "Include the live transfer feed (slower)",
            "type": "boolean",
            "description": "Add the wiki's latest roster moves as one record per transfer: date, the players involved with their countries, the team left, the team joined, the roles on each side, and the sources cited. This feed is rendered from Liquipedia's database, so it costs one 30-second request per wiki. For bulk or historical transfers, put the quarterly archives such as `Transfers/2025/1st Quarter` into `pages` instead - those are read from the wikitext at full speed and cost nothing extra.",
            "default": false
          },
          "transferFeedPage": {
            "title": "Transfer feed page",
            "type": "string",
            "description": "Optional. The page the transfer feed is read from. The default suits every wiki; override it only to read a different rendered transfer list.",
            "default": "Portal:Transfers"
          },
          "includeMatchTicker": {
            "title": "Include upcoming and live matches (slower)",
            "type": "boolean",
            "description": "Add the wiki's match ticker as one record per match: the exact kickoff instant in UTC, both opponents, the tournament, the best-of, and the score once a match is finished. A match that has not started reports no score rather than the ticker's placeholder `0 : 0`. The ticker is rendered from Liquipedia's database, so it costs one 30-second request per wiki.",
            "default": false
          },
          "matchTickerPage": {
            "title": "Match ticker page",
            "type": "string",
            "description": "Optional. The page the match ticker is read from. The default suits every wiki; override it only to read a different rendered ticker.",
            "default": "Liquipedia:Matches"
          },
          "includeResults": {
            "title": "Include career results and earnings (slower)",
            "type": "boolean",
            "description": "Add each player's or team's tournament history to their record: total career winnings, recent placements with prize money and opponents, and individual awards. Liquipedia computes all of it from its own database when a page renders, so it costs one 30-second request per profile. A profile page lists its most recent placements only - put the `/Results` subpage into `pages` for the full history.",
            "default": false
          },
          "maxResultLookups": {
            "title": "Maximum career-result lookups per run",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Safety cap on the slow career-result lookups described above. Each one takes about 30 seconds. Profiles beyond the cap are still returned, without the career fields.",
            "default": 4
          },
          "maxPagesPerWiki": {
            "title": "Maximum pages per wiki",
            "minimum": 0,
            "type": "integer",
            "description": "Limit how many pages are fetched from each wiki. Set to `0` for every page the selection returns. Explicit `pages` entries are used first, then category and search results. Keep this stable across runs that share a monitor ID, because it decides which pages the change monitor compares. The prefilled health-check input returns one record.",
            "default": 1
          },
          "includeWikitext": {
            "title": "Include raw wikitext",
            "type": "boolean",
            "description": "Add the page's full raw wikitext to each record as `wikitext`. Useful when you want to parse a section this Actor does not extract yet. Transfer archives are the exception: they expand into one record per move, so the page's wikitext is not attached to them. Leave disabled for smaller and cheaper datasets.",
            "default": false
          },
          "contactEmail": {
            "title": "Contact email for the API User-Agent",
            "type": "string",
            "description": "Optional. Liquipedia's API Terms of Use ask every client to identify itself with contact details. This Actor already sends its own Actor URL; adding your email makes the requests traceable to you, which is good practice for heavy or scheduled use."
          },
          "monitorId": {
            "title": "Change monitor ID",
            "type": "string",
            "description": "Persistent namespace for change tracking. Keep the same value for the same wiki, pages, and filters. Use another value for an independent monitor or schedule.",
            "default": "default"
          },
          "onlyChangesSince": {
            "title": "Return only changes since",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}T.*$",
            "type": "string",
            "description": "Optional ISO 8601 timestamp such as `2026-08-01T00:00:00.000Z`. When set, the dataset contains only records detected as new, updated, or removed since that time. The first run creates the baseline and returns everything as `new`."
          },
          "requestDelayMillis": {
            "title": "Delay between API requests (milliseconds)",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Optional extra pacing. Liquipedia's API Terms of Use allow at most one request per two seconds, and this Actor always honours that floor, so values below 2100 have no effect. Raise it only if you run several Liquipedia Actors from the same account at the same time.",
            "default": 2100
          },
          "useApifyProxy": {
            "title": "Use Apify Proxy",
            "type": "boolean",
            "description": "Liquipedia's MediaWiki API works without a proxy, and this Actor is built to stay inside the published rate limits, so a proxy is normally unnecessary. Enable it only as a network fallback.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Apify Proxy configuration",
            "type": "object",
            "description": "Optional proxy configuration used only when `useApifyProxy` is enabled."
          },
          "startUrls": {
            "title": "Additional Liquipedia URLs (compatibility input)",
            "type": "array",
            "description": "Optional compatibility alias so input written for other Liquipedia Actors keeps working. Entries are normalized and combined with `pages`; new integrations should use `pages`.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}