{
  "openapi": "3.0.1",
  "info": {
    "title": "Theqoo Scraper – K-pop Community Posts & Comments (No API)",
    "description": "Scrape theqoo (theqoo.net), Korea's top K-pop and entertainment community, with no API or login: board listings (HOT, Square, per-artist boards) and full posts with all comments, comment numbers, same-commenter markers and @reply targets. Cloudflare handled via Korean residential proxy.",
    "version": "1.0",
    "x-build-id": "8K8I8qknUryxKybop"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/claude_code_reviewer~theqoo-scraper-en/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-claude_code_reviewer-theqoo-scraper-en",
        "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/claude_code_reviewer~theqoo-scraper-en/runs": {
      "post": {
        "operationId": "runs-sync-claude_code_reviewer-theqoo-scraper-en",
        "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/claude_code_reviewer~theqoo-scraper-en/run-sync": {
      "post": {
        "operationId": "run-sync-claude_code_reviewer-theqoo-scraper-en",
        "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": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "🎯 Mode",
            "enum": [
              "board",
              "thread"
            ],
            "type": "string",
            "description": "What do you want to collect? Pick a mode, then fill in the matching fields below.",
            "default": "board"
          },
          "boards": {
            "title": "📋 Board IDs",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "theqoo board IDs (the {ID} in theqoo.net/{ID}), e.g. hot (HOT), square (Square), ktalk (K-idol talk), beauty, dyb (drama/film/actors), talk (daily talk), or per-artist boards (bts, newjeans, seventeen…). Pasting the board URL works too. Used by Board mode.",
            "items": {
              "type": "string"
            }
          },
          "threadIds": {
            "title": "💬 Post IDs",
            "maxItems": 500,
            "uniqueItems": true,
            "type": "array",
            "description": "theqoo post numbers (the digits in theqoo.net/hot/{number}), e.g. 4371268800. Used by Full post mode.",
            "items": {
              "type": "string"
            }
          },
          "threadUrls": {
            "title": "💬 Post URLs",
            "maxItems": 500,
            "uniqueItems": true,
            "type": "array",
            "description": "Full post URLs, e.g. https://theqoo.net/hot/4371268800. The post number is extracted automatically.",
            "items": {
              "type": "string"
            }
          },
          "bulkInput": {
            "title": "📋 Bulk paste",
            "type": "string",
            "description": "**One item per line** (press Enter for a new line, no quotes or commas needed). Lines are read as board IDs / post numbers / URLs depending on the mode and merged into the fields above. Copying a whole column from Google Sheets or Excel is the fastest way."
          },
          "keywords": {
            "title": "🔍 Title keyword filter",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "(Optional) Board mode: keep only posts whose title contains at least one keyword. theqoo disables search for logged-out visitors, so this filters the titles of the boards you list rather than searching the whole site. Leave empty for no filter. With keywords, each board is scanned for at most 20 pages (about 400 posts).",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "📊 Max items",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Board mode: max posts per board. Full post mode: max number of posts (every comment of each post is fetched; set \"Max comments per post\" to limit that). Up to 500.",
            "default": 50
          },
          "maxReplies": {
            "title": "🧵 Max comments per post (optional)",
            "minimum": 0,
            "type": "integer",
            "description": "Full post mode. Keep only comments #1 to #N (by comment number) of each post. Comments are billed as comment-item events; deleted comments and comments hidden from logged-out visitors (under 1 hour old) are never billed. 0 = post only, empty = all (default). Unrelated to \"Max items\" (number of posts)."
          },
          "dateFrom": {
            "title": "📅 Only posts after (optional)",
            "type": "string",
            "description": "Board mode, by post time. Relative 30m, 12h, 3d, 2w, or a date such as 2026-10-01 (midnight Korea time). Empty = no filter. When set, paging stops as soon as an older page is reached, which keeps scheduled runs cheap. Board lists show only the minute for today's posts and only the date for older ones, so a date-only post counts as the whole day."
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy (default: Korean residential)",
            "type": "object",
            "description": "theqoo blocks datacenter IPs with a Cloudflare security check (403 \"보안 검사중\"). Only the default Apify RESIDENTIAL + country KR was verified to pass reliably, so keep it unless you bring your own proxy.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "KR"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}