{
  "openapi": "3.0.1",
  "info": {
    "title": "Skool Scraper - Communities, Pricing, Owners, Member Reviews",
    "description": "2833 unique Skool communities from a sharded crawl where the catalogue stops at 1000. A community card carries 54 filled fields against 22 in a catalogue row, and member reviews come in full, 214 of 214. Skool leads scraper: community owners, paid plans, members count. No login. Public pages only.",
    "version": "0.1",
    "x-build-id": "8otNwwaX9dsF825zv"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/snow_leo_data~skool-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-snow_leo_data-skool-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/snow_leo_data~skool-scraper/runs": {
      "post": {
        "operationId": "runs-sync-snow_leo_data-skool-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/snow_leo_data~skool-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-snow_leo_data-skool-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": {
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Words to search the Skool catalogue for. Every term is a separate query with its own 1000-community ceiling, so several terms see more than one ever can. Matched by Skool against community names and descriptions.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Skool's own nine categories. Each one is a separate query with its own ceiling: hobbies, music, money, spirituality, tech, health, sports, self_improvement, relationships.",
            "default": [
              "money"
            ],
            "items": {
              "type": "string"
            }
          },
          "communityUrls": {
            "title": "Community URLs or handles",
            "type": "array",
            "description": "Named communities to fetch directly, as a full link (https://www.skool.com/vegan) or a bare handle (vegan). These are always fetched from the community card, whatever the enrichment switch says.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxCommunitiesPerQuery": {
            "title": "Max communities per query",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How deep to go into each search term or category before moving to the next one. The catalogue never returns more than 1000 per query (34 pages of 30), so anything above that is capped.",
            "default": 120
          },
          "enrichCommunities": {
            "title": "Fetch the full community card",
            "type": "boolean",
            "description": "On: every community found in the catalogue is also fetched from Skool's community endpoint - 47 filled fields instead of 21, including the owner, posts, courses, rating, affiliate percent and marketing tools. Off: catalogue fields only, one request per 30 communities.",
            "default": true
          },
          "reviewsPerCommunity": {
            "title": "Reviews per community",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "How many member reviews to attach to each community. Reviews carry the rating, the text, the author and whether that author is still paying. 0 means none. Reviews do not add rows, so they do not add cost per result.",
            "default": 0
          },
          "maxItems": {
            "title": "Max communities",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many communities have been DELIVERED, not merely looked at - so a narrow filter still fills the quota. 0 means no limit.",
            "default": 50
          },
          "priceType": {
            "title": "Free or paid",
            "enum": [
              "any",
              "free",
              "paid"
            ],
            "type": "string",
            "description": "Keep only free communities, only paid ones, or both. Decided by the price the community actually publishes, never by Skool's membership model number - that number carries a price in some communities and not in others.",
            "default": "any"
          },
          "minMonthlyPriceUsd": {
            "title": "Min monthly price, USD",
            "minimum": 0,
            "type": "number",
            "description": "Keep communities costing at least this much per month. Yearly plans are converted to a monthly figure first. 0 switches the filter off.",
            "default": 0
          },
          "maxMonthlyPriceUsd": {
            "title": "Max monthly price, USD",
            "minimum": 0,
            "type": "number",
            "description": "Keep communities costing at most this much per month. 0 switches the filter off.",
            "default": 0
          },
          "minMembers": {
            "title": "Min members",
            "minimum": 0,
            "type": "integer",
            "description": "Keep communities with at least this many members. 0 switches the filter off.",
            "default": 0
          },
          "maxMembers": {
            "title": "Max members",
            "minimum": 0,
            "type": "integer",
            "description": "Keep communities with at most this many members. 0 switches the filter off.",
            "default": 0
          },
          "minRating": {
            "title": "Min review rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Keep communities rated at least this highly by their own members. Needs the community card, so it only works with enrichment on.",
            "default": 0
          },
          "minReviews": {
            "title": "Min number of reviews",
            "minimum": 0,
            "type": "integer",
            "description": "Keep communities with at least this many member reviews. Needs the community card.",
            "default": 0
          },
          "minPosts": {
            "title": "Min posts",
            "minimum": 0,
            "type": "integer",
            "description": "Keep communities with at least this many posts - the plainest measure of whether a community is alive. Needs the community card.",
            "default": 0
          },
          "minCourses": {
            "title": "Min courses",
            "minimum": 0,
            "type": "integer",
            "description": "Keep communities with at least this many classroom courses. Needs the community card.",
            "default": 0
          },
          "minAffiliatePercent": {
            "title": "Min affiliate percent",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Keep communities paying at least this share to affiliates. Needs the community card.",
            "default": 0
          },
          "marketingTools": {
            "title": "Uses marketing tools",
            "type": "array",
            "description": "Keep communities wired to at least one of these: Zapier, Google Ads, Meta Conversions API, Hyros, Skool Auto DM. Needs the community card.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "nameContains": {
            "title": "Text in name or description",
            "type": "string",
            "description": "Keep communities whose handle, name, description or landing page contains this text. Case is ignored.",
            "default": ""
          },
          "reviewTextContains": {
            "title": "Text in reviews",
            "type": "string",
            "description": "Keep communities where at least one fetched review contains this text. Needs Reviews per community above zero.",
            "default": ""
          },
          "onlyChanged": {
            "title": "Monitor mode: only new and changed",
            "type": "boolean",
            "description": "Remember what was delivered and, on later runs, write only communities that are new or whose numbers moved - members, price, posts, courses, rating, owner. Every row says which fields changed and what they were before.",
            "default": false
          },
          "emitUnchanged": {
            "title": "Also write unchanged communities",
            "type": "boolean",
            "description": "Keep the memory of monitor mode but write every community anyway, each labelled NEW, UPDATED or UNCHANGED.",
            "default": false
          },
          "compact": {
            "title": "Compact rows",
            "type": "boolean",
            "description": "Drop empty fields from every row. Smaller payload for AI agents and spreadsheets that choke on wide sparse tables.",
            "default": false
          },
          "concurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "How many community cards are fetched at once. The catalogue itself is always paced at a steady rate, because Skool's CDN blocks an address that asks too fast.",
            "default": 6
          },
          "timeoutSeconds": {
            "title": "Timeout per request",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "How long to wait for one response before retrying it.",
            "default": 30
          },
          "inputDatasetId": {
            "title": "Community handles from another dataset",
            "type": "string",
            "description": "Take community handles or links from the dataset of another run, so this Actor can be chained after any other one.",
            "default": ""
          },
          "urlField": {
            "title": "Field holding the handle",
            "type": "string",
            "description": "Which field of that dataset carries the community link or handle.",
            "default": "url"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}