{
  "openapi": "3.0.1",
  "info": {
    "title": "Skool Communities Scraper - Discovery, Members, Pricing",
    "description": "Scrape Skool communities from the public discovery directory and about pages: name, URL, description, category, members, price, courses, rating and owner display name. No login, no emails. US$ 3 per 1,000 communities.",
    "version": "0.1",
    "x-build-id": "f0BF5FeFdFAZDj5UU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapewise~skool-communities/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapewise-skool-communities",
        "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/scrapewise~skool-communities/runs": {
      "post": {
        "operationId": "runs-sync-scrapewise-skool-communities",
        "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/scrapewise~skool-communities/run-sync": {
      "post": {
        "operationId": "run-sync-scrapewise-skool-communities",
        "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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "communities",
              "discover",
              "discovery",
              "community",
              "scrape"
            ],
            "type": "string",
            "description": "Default 'search': lists communities from skool.com/discovery for each keyword, with the filters below. 'communities': reads the public about page of each community in 'Community URLs or slugs'. If you send only URLs or slugs, the Actor switches to 'communities' by itself. 'discover', 'discovery' and 'scrape' mean search and 'community' means communities, for inputs written for other Skool scrapers.",
            "default": "search"
          },
          "searchQueries": {
            "title": "Search keywords",
            "type": "array",
            "description": "Keywords searched on the Skool discovery page, one per line (marketing, fitness, real estate, ai automation). Each keyword returns up to 'Max communities per search', at most 1,000 (Skool's own limit), ranked by relevance. Duplicates across keywords are delivered once. Empty lists the whole directory with the filters below. Also read from searchTerms, queries, query, searchQuery or keywords.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Community URLs or slugs",
            "type": "array",
            "description": "For 'communities' mode, one per line: skool.com/makerschool, skool.com/makerschool/about or just the slug (makerschool). A skool.com/discovery link with filters runs as a search with those filters. A community that does not exist returns a free COMMUNITY_NOT_FOUND row. Also read from communityUrls, communityUrl, urls or communities.",
            "items": {
              "type": "string"
            }
          },
          "category": {
            "title": "Category",
            "type": "string",
            "description": "One Skool discovery category: hobbies, music, money, spirituality, tech, health, sports, self_improvement or relationships. Empty (default) means all. By API, 'categories' as a list runs each category as its own slice of up to 1,000, which is how to go past the per search limit. An unknown category returns a free INVALID_CATEGORY row. The row's 'category' field is filled only when you filter by it."
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Community language as Skool names it (english, spanish, portuguese, german, french) or a two letter code (EN, ES, PT). Empty (default) means all languages. An unknown language returns a free INVALID_LANGUAGE row."
          },
          "price": {
            "title": "Price",
            "enum": [
              "all",
              "free",
              "paid",
              "free-trial"
            ],
            "type": "string",
            "description": "Skool's own price filter. Default 'all' (free and paid). 'free': free only. 'paid': paid only. 'free-trial': paid with a free trial. Also read from membership, or paidOnly: true.",
            "default": "all"
          },
          "communityType": {
            "title": "Community type",
            "enum": [
              "all",
              "public",
              "private"
            ],
            "type": "string",
            "description": "Skool's filter for public or private communities. Default 'all'. Private means posts need membership; the about page this Actor reads is public in both cases.",
            "default": "all"
          },
          "sortBy": {
            "title": "Sort",
            "enum": [
              "trending",
              "top"
            ],
            "type": "string",
            "description": "Order of the directory when no keyword is searched. Default 'trending'; 'top' is Skool's most popular order. With a keyword Skool ranks by relevance and ignores this. Neither order is strictly by members: sort by 'members' afterwards if you need that.",
            "default": "trending"
          },
          "minMembers": {
            "title": "Minimum members",
            "minimum": 0,
            "type": "integer",
            "description": "Skip communities with fewer members than this. Default 0 (no minimum). Paging continues until 'Max communities per search' communities pass the filter, so a high minimum reads more pages but you pay only for communities delivered.",
            "default": 0
          },
          "minPriceUsd": {
            "title": "Minimum monthly price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only communities whose monthly price in USD is at least this (for example 50). Annual prices are divided by 12; free communities count as 0, so any value above 0 drops them. Empty means no minimum."
          },
          "maxPriceUsd": {
            "title": "Maximum monthly price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only communities whose monthly price in USD is at most this, using the same monthly equivalent as the minimum. Empty means no maximum."
          },
          "includeDetails": {
            "title": "Include about page details",
            "type": "boolean",
            "description": "On by default. Opens each community's public about page and adds courses, modules, rating, review count, online members, posts, admins, creation date, full about text, affiliate commission and the owner's display name and profile link. One extra light request per community at the same price; turn it off only for a faster list of names, members and prices.",
            "default": true
          },
          "maxItems": {
            "title": "Max communities per search",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum communities per keyword, or per category slice when no keyword is given. Default 30, maximum 1,000 (Skool stops each search at 1,000). You pay US$ 3 per 1,000 communities delivered, so 30 cost US$ 0.09. Also read from maxCommunities or maxResults.",
            "default": 30
          },
          "compareWithPreviousRun": {
            "title": "Track growth between runs",
            "type": "boolean",
            "description": "Off by default. Each community comes back with its member count and monthly price from the last time you received it: previousMembers, membersChange, membersChangePercent, previousMonthlyPrice, priceChanged, firstSeenAt and isNewCommunity. History lives in the key-value store 'skool-communities-history' in your own account; delete it to start over. No extra charge.",
            "default": false
          },
          "onlyNew": {
            "title": "Only communities you have not received yet",
            "type": "boolean",
            "description": "Off by default. Delivers, and charges, only communities that never came back in an earlier run with this option or with growth tracking on. Those you already have are skipped before their about page is opened and do not count toward the limit; a run with nothing new ends successfully with nothing charged. Skool lists by trending or relevance, not by date, so 'new to you' includes communities that just climbed into the list.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Default: Apify datacenter proxy. Skool uses AWS protection; a blocked request is retried with a new proxy session, and one still blocked returns a free BLOCKED row. Change it only if you see BLOCKED rows.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}