{
  "openapi": "3.0.1",
  "info": {
    "title": "Skool Communities Scraper",
    "description": "Scrape the whole Skool community directory: members, price, rating, owner contacts, and the posts, members, classroom and calendar of public communities.",
    "version": "0.0",
    "x-build-id": "v4X8Ehl1AXJOQedWa"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nice_dev~skool-communities-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nice_dev-skool-communities-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/nice_dev~skool-communities-scraper/runs": {
      "post": {
        "operationId": "runs-sync-nice_dev-skool-communities-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/nice_dev~skool-communities-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-nice_dev-skool-communities-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": {
          "startUrls": {
            "title": "Start URLs",
            "maxItems": 1000,
            "type": "array",
            "description": "Skool URLs: a community (`https://www.skool.com/my-group`), a discovery search (`https://www.skool.com/discovery?q=ai`), a single post (`https://www.skool.com/my-group/my-post`) or a member profile (`https://www.skool.com/@handle`). When this list is not empty, the search fields below (keyword, whole directory) are ignored; filters, caps and monitoring still apply. Max 1 000 URLs.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "query": {
            "title": "Search keyword",
            "maxLength": 200,
            "type": "string",
            "description": "Free-text search of the Skool directory, exactly as typed on skool.com/discovery (e.g. `ai automation`). Empty = the directory without a keyword."
          },
          "searchQueries": {
            "title": "More search keywords",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Several keywords in one run: one search per keyword. Added to **Search keyword**; a community found by several searches is saved once.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "allCommunities": {
            "title": "Whole directory (no keyword)",
            "type": "boolean",
            "description": "Go through the ENTIRE Skool directory (74 000+ communities, private ones included) instead of searching by keyword. A keyword search stops at 1 000 communities — this does not. Combine with **Max communities** and the filters below to keep the run short.",
            "default": false
          },
          "language": {
            "title": "Language",
            "enum": [
              "",
              "english",
              "spanish",
              "german",
              "french",
              "italian",
              "dutch",
              "portuguese",
              "polish",
              "turkish",
              "arabic",
              "chinese",
              "vietnamese",
              "hebrew",
              "danish",
              "swedish",
              "norwegian",
              "romanian",
              "czech",
              "hungarian",
              "bulgarian"
            ],
            "type": "string",
            "description": "Language declared by the community.",
            "default": ""
          },
          "priceType": {
            "title": "Free or paid",
            "enum": [
              "any",
              "free",
              "paid"
            ],
            "type": "string",
            "description": "Keep only free communities, or only paid ones.",
            "default": "any"
          },
          "privacyType": {
            "title": "Public or private",
            "enum": [
              "any",
              "public",
              "private"
            ],
            "type": "string",
            "description": "A private community still gives its profile (members count, price, posts, courses, owner); its posts, members and courses are only readable with a **Skool cookie** of a member.",
            "default": "any"
          },
          "hasFreeTrial": {
            "title": "Free trial only",
            "type": "boolean",
            "description": "Keep only the paid communities that offer a free trial.",
            "default": false
          },
          "maxItems": {
            "title": "Max communities",
            "minimum": 0,
            "maximum": 200000,
            "type": "integer",
            "description": "Maximum number of communities to save for the whole run (after deduplication and filters). Posts, comments, members and lessons are not counted here — they have their own caps. 0 = no limit.",
            "default": 100
          },
          "maxItemsPerQuery": {
            "title": "Max communities per search",
            "minimum": 0,
            "maximum": 200000,
            "type": "integer",
            "description": "Cap for EACH search (keyword or start URL), so that the first search cannot use up the whole **Max communities** budget. 0 = no per-search cap.",
            "default": 0
          },
          "includeAbout": {
            "title": "About page (rules, levels, links, survey)",
            "type": "boolean",
            "description": "Also read the public About page of each community (1 extra request): long description, custom links, gamification levels, number of rules, join survey questions and the latest reviews. Off = the community profile only (name, slug, members, price, posts, courses, rating, owner), which is always read.",
            "default": true
          },
          "scrapePosts": {
            "title": "Posts",
            "type": "boolean",
            "description": "Save the posts of each community (30 per request): title, text, upvotes, comment count, attachments, videos, channel and full author.",
            "default": false
          },
          "maxPostsPerCommunity": {
            "title": "Max posts per community",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "0 = every post (a large community can hold 20 000+).",
            "default": 100
          },
          "includeComments": {
            "title": "Comments",
            "type": "boolean",
            "description": "Save the comments of each extracted post (1 extra request per post), with their nested replies.",
            "default": false
          },
          "maxCommentsPerPost": {
            "title": "Max comments per post",
            "minimum": 0,
            "maximum": 30,
            "type": "integer",
            "description": "Top-level comments kept per post, each with its replies. Skool gives at most 30 top-level comments per post: 0 = those 30.",
            "default": 25
          },
          "maxRepliesPerComment": {
            "title": "Max replies per comment",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Replies kept under each comment. 0 = every reply.",
            "default": 0
          },
          "scrapeMembers": {
            "title": "Members",
            "type": "boolean",
            "description": "Save the members of each community: name, bio, location, social links, time zone, level, points, join date, last seen and role. Skool shows only ~30 members to a visitor — paste a **Skool cookie** below to get the whole list.",
            "default": false
          },
          "maxMembersPerCommunity": {
            "title": "Max members per community",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "0 = every member Skool returns (~30 without a cookie).",
            "default": 30
          },
          "memberTab": {
            "title": "Which members",
            "enum": [
              "all",
              "admin",
              "online"
            ],
            "type": "string",
            "description": "All members, admins only (the full admin list is public) or members online now.",
            "default": "all"
          },
          "includeMemberProfiles": {
            "title": "Member public profiles",
            "type": "boolean",
            "description": "Also read the public Skool profile of each extracted member (1 extra request per member): followers, following, total contributions, and the list of the communities they are a member of.",
            "default": false
          },
          "scrapeClassroom": {
            "title": "Classroom (courses and lessons)",
            "type": "boolean",
            "description": "Save the courses of each community and their lessons: title, description, cover, section, video link, video length, thumbnail and attached resources. Locked courses are reported as locked, without their lessons.",
            "default": false
          },
          "includeLessonContent": {
            "title": "Lesson text",
            "type": "boolean",
            "description": "Also read the written content of each lesson (1 extra request per lesson — a 50-lesson course means 50 requests).",
            "default": false
          },
          "maxLessonsPerCourse": {
            "title": "Max lessons per course",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "0 = every lesson.",
            "default": 0
          },
          "scrapeCalendar": {
            "title": "Calendar events",
            "type": "boolean",
            "description": "Save the upcoming events of each community: title, description, start and end time, link.",
            "default": false
          },
          "scrapeLeaderboards": {
            "title": "Leaderboards",
            "type": "boolean",
            "description": "Save the leaderboards of each community (top members by points) for the chosen period.",
            "default": false
          },
          "leaderboardWindow": {
            "title": "Leaderboard period",
            "enum": [
              "all",
              "7day",
              "30day",
              "alltime"
            ],
            "type": "string",
            "description": "Which leaderboard to save.",
            "default": "all"
          },
          "cookies": {
            "title": "Skool cookie",
            "type": "string",
            "description": "The `auth_token` cookie of YOUR Skool account (DevTools › Application › Cookies › skool.com), pasted as `auth_token=...` or as the whole cookie header. Your account only sees what it is a member of. Leave empty to scrape public data only."
          },
          "postedAfter": {
            "title": "Created after",
            "type": "string",
            "description": "Only items created on or after this date: `2026-09-01` (a day starts at midnight UTC, the zone of every date saved), or a period before now such as `7 days`, `2 weeks`, `1 month` (API: `24 hours` and full ISO date-times work too). Read on the creation date of a community, a post or a comment, and on the day a member joined; courses, lessons, events and leaderboard entries carry no date and are always kept. A community pasted in **Start URLs** with its posts, members… asked for is always saved: the dates then pick its content."
          },
          "postedBefore": {
            "title": "Created before",
            "type": "string",
            "description": "Only items created on or before this date (the whole day is included, until midnight UTC), or older than a period such as `30 days`."
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Drop the items whose name or title contains one of these words (case and accents ignored).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minMembers": {
            "title": "Min members",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Keep only communities with at least this many members. 0 = no minimum.",
            "default": 0
          },
          "maxMembers": {
            "title": "Max members",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Keep only communities with at most this many members (to find small ones). 0 = no maximum.",
            "default": 0
          },
          "minMonthlyPrice": {
            "title": "Min monthly price (USD)",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Keep only communities whose price, brought back to one month, is at least this. 0 = no minimum.",
            "default": 0
          },
          "maxMonthlyPrice": {
            "title": "Max monthly price (USD)",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Keep only communities whose price, brought back to one month, is at most this. 0 = no maximum.",
            "default": 0
          },
          "minPosts": {
            "title": "Min posts",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Keep only communities with at least this many posts (an active community). 0 = no minimum.",
            "default": 0
          },
          "minCourses": {
            "title": "Min courses",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Keep only communities with at least this many courses in their classroom. 0 = no minimum.",
            "default": 0
          },
          "minRating": {
            "title": "Min rating",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Keep only communities rated at least this (1 to 5). Communities with no review are dropped. 0 = no minimum.",
            "default": 0
          },
          "minMrr": {
            "title": "Min estimated MRR (USD)",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Keep only communities whose ESTIMATED monthly revenue (members × monthly price) is at least this. It is an estimate computed from public numbers, not a figure published by Skool. 0 = no minimum.",
            "default": 0
          },
          "maxMrr": {
            "title": "Max estimated MRR (USD)",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Same, as a maximum. 0 = no maximum.",
            "default": 0
          },
          "requireContact": {
            "title": "With a contact only",
            "type": "boolean",
            "description": "Keep only communities whose owner shows at least one way to be reached: website, e-mail or a social network.",
            "default": false
          },
          "hasAffiliateProgram": {
            "title": "With an affiliate programme only",
            "type": "boolean",
            "description": "Keep only communities that pay a commission to the members who bring new paying members. The commission itself is in the `affiliatePercent` field of every result.",
            "default": false
          },
          "onlyNew": {
            "title": "Only new items",
            "type": "boolean",
            "description": "Skip the communities, posts, comments, members and lessons that a previous run (same **Memory key**) already delivered: they are not saved and not charged, and their page is not even opened. First run = everything is new.",
            "default": false
          },
          "stateKey": {
            "title": "Memory key",
            "pattern": "^[a-zA-Z0-9_-]{1,64}$",
            "maxLength": 64,
            "type": "string",
            "description": "Name of the memory used by **Only new items**. Give each schedule / task its own key (e.g. `ai-communities`) so that they do not share their memory. Letters, digits, `-` and `_`.",
            "default": "default"
          },
          "resetState": {
            "title": "Reset the memory",
            "type": "boolean",
            "description": "Forget everything remembered under this **Memory key** before the run: this run returns (and charges) every item again. Untick it afterwards.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy or your own proxies. Keep the default: it is included in the price. The residential Apify proxy is not available in this Actor.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum number of requests processed in parallel. A community's About page is read right after its profile, in the same slot: never more than this many calls to Skool at once.",
            "default": 8
          },
          "maxRequestsPerMinute": {
            "title": "Max requests per minute",
            "minimum": 10,
            "maximum": 2000,
            "type": "integer",
            "description": "Global request rate. Lower it if the site answers HTTP 429 / 403 in the log. It counts the profile of a community and its About page as ONE request: with **About page** on, up to twice this number of calls reach Skool per minute — halve it to keep the same pace.",
            "default": 300
          },
          "minRequestIntervalMs": {
            "title": "Min delay between requests",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Smallest gap between two calls to Skool, in milliseconds — the About page of a community included. Unlike the per-minute rate, this spreads the calls evenly instead of letting them go out in a burst. 0 = no gap.",
            "default": 0
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Retries per request before it is marked as failed.",
            "default": 5
          },
          "debugLog": {
            "title": "Debug log",
            "type": "boolean",
            "description": "Include debug messages in the run log.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}