Dataspryva

Use Skool Community Directory, Pricing & Member Finder with Python

Browse Skool's public community directory by category, pull pricing and member-count details for communities you already know, and list top members visible on a public community page.

1. Choose the data you need

Review the published README for supported collection modes, examples, and limits. The recipe below uses the current published input definition.

2. Prepare a source-based input

This JSON contains published prefills and required-field defaults. Review every value for your task before running it; it is not a promise of successful collection.

{
  "category": "",
  "categorySlug": "all",
  "communityType": "all",
  "enrichDetails": true,
  "includeReviews": false,
  "isFree": false,
  "language": "all",
  "maxItems": 3,
  "maxMembersPerCommunity": 30,
  "memberScope": "all",
  "mode": "discover",
  "priceType": "all",
  "searchQueries": [
    "ai"
  ],
  "slugs": [],
  "sortBy": "trending",
  "startUrls": []
}

Download input.example.json and save your reviewed copy as input.json.

FieldTypeRequiredDescription
modestringrequiredWhat to scrape: discover communities from the directory, get details for specific communities, or list visible members.
searchQueriesarrayoptionalKeywords to search the Skool directory for, e.g. ["ai automation", "fitness"]. Leave empty to browse the selected category and sort order.
startUrlsarrayoptionalSkool community URLs, e.g. https://www.skool.com/the-skool-of-life.
slugsarrayoptionalCommunity slugs from the Skool URL, e.g. ["the-skool-of-life", "buildwithskool"]. Alternative to startUrls.
categorySlugstringoptionalBrowse one of Skool's nine directory categories, or all categories. Filtering by category also fills the category fields on each community.
priceTypestringoptionalFilter communities by membership price: free, paid, or free trial.
categorystringoptionalDeprecated alias for categorySlug kept so saved tasks keep working. categorySlug takes precedence when both are set.
isFreebooleanoptionalDeprecated alias for priceType=free kept so saved tasks keep working. priceType takes precedence when set.
communityTypestringoptionalFilter the directory by public or private communities.
languagestringoptionalFilter the directory by the community's language.
sortBystringoptionalOrder the directory by trending or by all-time popularity. Legacy popular/new values are accepted.
minMembersintegeroptionalOnly keep communities with at least this many members.
maxMembersintegeroptionalOnly keep communities with at most this many members.
enrichDetailsbooleanoptionalOpen each discovered community to add pricing, owner, rating, review and roster fields.
includeReviewsbooleanoptionalAdd the latest public reviews (up to five) to each community record.
memberScopestringoptionalWhich public member tab to read: the default members list, the online list, the admin list, or all three combined.
maxItemsintegeroptionalMaximum number of records to emit (communities or members combined).
maxMembersPerCommunityintegeroptionalMaximum public members to emit per community. Skool exposes about 30 rows per tab plus the admin and online tabs.

3. Start an Actor run

Set APIFY_TOKEN in your environment. Python 3.10 or newer is sufficient; this recipe uses no third-party packages.

Execution may incur charges. Review current pricing on Apify. The request asks for a 120-second timeout and a charge limit; these settings are subject to Apify’s pricing and do not guarantee an all-inclusive spending cap.

import json
import os
import urllib.request

# Save the schema-derived example as input.json; review and edit it first.
with open("input.json", encoding="utf-8") as stream:
    actor_input = json.load(stream)

token = os.environ["APIFY_TOKEN"]
request = urllib.request.Request(
    "https://api.apify.com/v2/acts/9EPFdk1OYOKL8zvqC/runs?timeout=120&maxTotalChargeUsd=0.50",
    data=json.dumps(actor_input).encode("utf-8"),
    headers={"Authorization": "Bearer " + token, "Content-Type": "application/json"},
    method="POST",
)
# This starts a potentially billable run. Do not automatically retry this POST.
with urllib.request.urlopen(request, timeout=40) as response:
    run = json.load(response)["data"]
print("Run ID:", run["id"])
print("Status:", run["status"])
# Inspect and download results in Apify Console once the run succeeds.

4. Inspect the actual results

Open the run in Apify Console and wait for a successful completion. Use the published output schema to locate results and the dataset schema to understand declared views. Missing or optional record fields must not be treated as guaranteed values.

Public Skool community records with pricing, owner, rating, review and roster fields, plus public member records.

Questions before you run

Which inputs are required?

The published required fields are mode

What does this guide verify?

The fields, prefills, and schema links are rendered from the published build. This is a usage recipe, not a paid live extraction test. Source availability and collection results can vary.

What if the run request times out?

Check Apify Console before retrying. The first request may already have created a run. Do not automatically repeat a run-creation POST.

Generated from source build tjgDxDV8AsB1A3KHA and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.