{
  "openapi": "3.0.1",
  "info": {
    "title": "Skool Post & Comment Scraper",
    "description": "Bulk export posts and full comment threads (with nested replies) from any Skool.com community you've joined. Author profiles, engagement, date filters, multi-group runs. Residential proxies built in.",
    "version": "1.0",
    "x-build-id": "S6npnv34sAZEOWZMw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/goat255~skool-post-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-goat255-skool-post-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/goat255~skool-post-scraper/runs": {
      "post": {
        "operationId": "runs-sync-goat255-skool-post-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/goat255~skool-post-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-goat255-skool-post-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": [
          "groupUrls",
          "cookies"
        ],
        "properties": {
          "listCommunitiesOnly": {
            "title": "List My Communities Only",
            "type": "boolean",
            "description": "When enabled, the actor only lists the communities your account has joined (name, URL, members, posts) and stops. Use this first to pick which communities to scrape, then paste their names or URLs into Group URLs. Requires cookies.",
            "default": false
          },
          "groupUrls": {
            "title": "Group URLs or Names",
            "uniqueItems": true,
            "type": "array",
            "description": "Communities to scrape posts from. Accepts either full Skool URLs (https://www.skool.com/groupname) or just the community name/slug (groupname). Replace the placeholder with your own. Leave this EMPTY to scrape every community your account has joined. You must be a member of each group and supply cookies from the same account; Skool blocks the post feed for non-members even on public groups.",
            "items": {
              "type": "string"
            }
          },
          "maxPostsPerGroup": {
            "title": "Max Posts Per Group",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of posts to collect per group. The feed is ordered by most recent comment activity.",
            "default": 100
          },
          "scrapeComments": {
            "title": "Get Comments",
            "type": "boolean",
            "description": "Also scrape the comments on each post. When off, only the posts themselves are returned (faster, cheaper).",
            "default": false
          },
          "commentsPerPost": {
            "title": "Comments Per Post",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum comments to collect per post (only applies when Get Comments is on).",
            "default": 50
          },
          "includeReplies": {
            "title": "Include Replies",
            "type": "boolean",
            "description": "Nest replies under their parent comment. When off, only top-level comments are returned.",
            "default": true
          },
          "postsDateFrom": {
            "title": "Posts Created From",
            "type": "string",
            "description": "Only include posts created on or after this date (YYYY-MM-DD). Leave empty for no lower bound."
          },
          "postsDateTo": {
            "title": "Posts Created To",
            "type": "string",
            "description": "Only include posts created on or before this date (YYYY-MM-DD). Leave empty for no upper bound."
          },
          "batchSize": {
            "title": "Batch Size",
            "minimum": 10,
            "maximum": 100,
            "type": "integer",
            "description": "Number of posts processed per batch before saving to the dataset. Recommended 30-75."
          },
          "maxConcurrency": {
            "title": "Max Concurrent Requests",
            "minimum": 3,
            "maximum": 30,
            "type": "integer",
            "description": "Parallel requests. Default 10 is reliable. Values above 15 may trigger rate limits on Skool. Max 30.",
            "default": 10
          },
          "maxRetries": {
            "title": "Max Retries",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Retry attempts per failed request. Each retry uses a new proxy session with exponential backoff.",
            "default": 4
          },
          "cookies": {
            "title": "Skool Cookies",
            "type": "array",
            "description": "Cookies from Skool.com for an account that has joined the target groups. Export with the Cookie-Editor browser extension (export all skool.com cookies as JSON). Required - the post feed is gated behind authentication.",
            "default": []
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Proxy settings. Residential proxies are required - Skool blocks datacenter IPs.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}