# Skool Community Scraper - Catalogue & Owner Insights (`axlymxp/skool-community-scraper`) Actor

Find Skool communities for niche research and creator partnerships. Export member counts, visible pricing, public owner links, review ratings, and optional feedback samples. Search the indexed catalogue or target exact communities, with structured JSON results.

- **URL**: https://apify.com/axlymxp/skool-community-scraper.md
- **Developed by:** [axly](https://apify.com/axlymxp) (community)
- **Categories:** Lead generation, Social media
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 dataset items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Skool Community Scraper

Build a structured view of Skool communities for niche research, creator partnerships, and competitive analysis. Export public member counts, visible prices, owner links, and review ratings without supplying a Skool login.

Catalogue mode follows the search index's cursor pages beyond the usual 1,000-result query ceiling. Discovery mode gives you curated categories and ranks. Exact URLs let you refresh known communities. Each result is one community snapshot with a stable ID and observation timestamp.

### Data You Get

| Field group               | Fields                                                                                                                        | Type                                              |
| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- |
| Identity                  | `id`, `slug`, `display_name`, `url`, `about_url`                                                                              | String                                            |
| Description               | `description`, `long_description`, `keywords`, `language`                                                                     | Text, string array                                |
| Membership                | `total_members`, `total_admins`, `total_online_members`                                                                       | Integer or null                                   |
| Activity and courses      | `total_posts`, `num_courses`, `num_modules`                                                                                   | Integer or null                                   |
| Pricing                   | `is_paid`, `price_amount`, `price_amount_cents`, `price_currency`, `price_interval`, `has_free_trial`, `pricing_source`       | Boolean, number, text; nullable where unavailable |
| Visibility and affiliates | `is_private`, `affiliate_percent`                                                                                             | Boolean/integer or null                           |
| Reviews                   | `review_count`, `review_average_rating`, `review_samples`, `review_sample_status`                                             | Integer, number, array, status                    |
| Owner                     | `owner_id`, `owner_slug`, `owner_first_name`, `owner_last_name`, `owner_bio`, `owner_location`, `owner_links`, `owner_status` | Nullable text, links object, status               |
| Discovery                 | `discovery_rank`, `discovery_category`                                                                                        | Integer/text or null                              |
| Media                     | `logo_url`, `cover_url`                                                                                                       | URL or null                                       |
| Provenance                | `source_mode`, `source_queries`, `created_at`, `updated_at`, `scraped_at`, `schema_version`                                   | Text, string array, timestamps                    |

Unknown values stay `null`. A community with a hidden price can still have `is_paid: true`; missing visible pricing is never treated as proof that membership is free. Amounts keep their original currency and billing interval. These are observed public values, not a checkout quote or verified revenue.

The optional review sample contains up to five reviews with ID, rating, text, and timestamps. It does not include reviewer contact information. Review counts and average ratings are community-wide source aggregates, not statistics computed from the small sample.

### Use Cases

- **Partnership teams:** shortlist communities by niche, language, and size, then inspect their owners' published links.
- **Community creators:** compare visible pricing, course counts, and feedback before entering a niche.
- **Analysts:** build dated snapshots for your own longitudinal research without confusing unknown prices with free groups.
- **SaaS teams:** load stable community IDs and typed fields into data pipelines or CRM enrichment workflows.

### Input

| Parameter                | Default     | Meaning                                                                                                    |
| ------------------------ | ----------- | ---------------------------------------------------------------------------------------------------------- |
| `mode`                   | `catalogue` | `catalogue`, `discovery`, or `urls`                                                                        |
| `keywords`               | `[]`        | Up to ten terms; empty browses the source. Not allowed in URL mode                                         |
| `communityUrls`          | `[]`        | Required in URL mode; group URLs, `/about` URLs, or slugs                                                  |
| `maxItems`               | `100`       | Overall output limit, 1 to 100,000                                                                         |
| `maxCandidates`          | `10000`     | Work limit for sparse filters; must be at least `maxItems`                                                 |
| `price`                  | `all`       | `all`, `paid`, `free`, or `free-trial`                                                                     |
| `visibility`             | `all`       | `all`, `public`, or `private` public metadata                                                              |
| `language`               | empty       | Source language name such as `english`                                                                     |
| `category`               | empty       | Discovery only: hobbies, music, money, spirituality, tech, health, sports, self\_improvement, relationships |
| `sort`                   | `trending`  | Discovery only: `trending` or `top-v2`                                                                     |
| `minMembers`             | `0`         | Minimum current member count                                                                               |
| `maxMembers`             | omitted     | Optional maximum member count                                                                              |
| `includeOwnerDetails`    | `true`      | Public owner profile and observed social links                                                             |
| `maxReviewsPerCommunity` | `0`         | Set 1 to 5 for review samples                                                                              |
| `proxyConfiguration`     | direct      | Optional Apify/custom proxy; no automatic paid escalation                                                  |

#### Keyword Search

```json
{
    "mode": "catalogue",
    "keywords": ["copywriting"],
    "maxItems": 100,
    "maxCandidates": 10000,
    "includeOwnerDetails": true
}
```

#### Community Details and Feedback

```json
{
    "mode": "urls",
    "communityUrls": ["https://www.skool.com/aivideobootcamp"],
    "maxItems": 1,
    "maxReviewsPerCommunity": 3
}
```

#### Output Example

Selected fields from a public-community snapshot; values change over time:

```json
{
    "id": "e256cd9ef1ac4dbe9197634db46e9e3b",
    "slug": "makerschool",
    "display_name": "Maker School: AI Automation",
    "url": "https://www.skool.com/makerschool",
    "is_paid": true,
    "price_amount": null,
    "price_currency": null,
    "price_interval": null,
    "pricing_source": "algolia_and_rest",
    "review_count": 92,
    "review_average_rating": 5.0,
    "source_mode": "urls",
    "schema_version": "1.0"
}
```

### Limits and Run Summary

Catalogue results are unordered and limited to records currently present in Skool's search index. They are not a census of every Skool community. Discovery is capped at 34 pages and its documented 1,000-community pool; categories do not bypass that cap. Category and rank are unavailable in other modes.

`maxItems` applies to output after filtering, while `maxCandidates` bounds the number of unique candidate details examined. A run may return fewer rows because of filters, unavailable groups, source limits, or a platform budget limit.

The **Run summary** output links to `RUN-SUMMARY` in the key-value store. Inspect `stop_reason`, `complete`, `failed`, `enrichment_failures`, and `source_capped`. `complete` means the selected source was exhausted without known gaps, not that every Skool community was scraped. Reaching your requested limit is a normal successful run even though source coverage is incomplete.

Optional owner/review failures are explicit in each row's status. Core failures are listed in the summary; a blocked source or a run where all requested details fail does not silently succeed as an empty scrape.

### Scheduling and Integrations

Use Apify schedules for fresh snapshots, webhooks for completion notifications, and dataset exports for JSON, CSV, or Excel. Integrate through the Apify API, Make, Zapier, n8n, or your own pipeline. Preserve both `id` and `scraped_at` when comparing snapshots.

An interrupted run resumes only with its matching input, checkpoint, and dataset. New cloud runs use fresh storage and produce new snapshots; there is no cross-run historical database or automatic change detection.

### MCP and AI Workflows

After publication, invoke `axlymxp/skool-community-scraper` through the Apify MCP server or API. Supply a small `maxItems`, use the documented input modes, and read the run summary as well as the dataset. Null prices and partial-coverage status must remain visible in downstream analysis.

### FAQ

**Does it require a Skool account?** No. The selected endpoints expose public community metadata, owner profiles, and public reviews. Private posts, member lists, and course content are out of scope.

**Does it include owner emails or phone numbers?** No. It returns observed public profile links and profile text, not private contact records or guessed addresses.

**Can a private community appear?** Yes, when its public metadata is available. That does not grant access to its member-only content.

**Does it calculate MRR?** No. Total members multiplied by an advertised price is not verified recurring revenue.

**Why is a paid community's price missing?** Some groups do not expose a public display price. A matched catalogue paid flag is retained independently of that missing amount.

**Does it guarantee all results?** No. The index changes, groups can disappear, and source/query limits apply. Review samples are deliberately bounded. Always inspect the coverage summary.

**What happens when Skool changes?** Unexpected response shapes fail explicitly instead of producing fabricated values. Report the run ID and a non-sensitive input example through the actor's Issues tab. Do not include cookies or credentials.

**What are my compliance responsibilities?** Use the data only where permitted by applicable law, Skool's terms, and your contractual obligations. Public profile data can still be personal data under GDPR, CCPA, and other laws. This tool does not provide legal advice.

This is an independent tool, not affiliated with or endorsed by Skool. Brand assets and trademarks belong to their respective owners.

# Actor input Schema

## `mode` (type: `string`):

Catalogue uses cursor pagination; Discovery is curated and capped; URLs fetches exact communities.

## `keywords` (type: `array`):

Up to ten searches. Leave empty to browse the selected source. Not used in URL mode.

## `communityUrls` (type: `array`):

Required in URL mode (Source = Specific communities). Accepts Skool group URLs, /about URLs, or slugs, e.g. https://www.skool.com/aivideobootcamp. Ignored in other modes.

## `maxItems` (type: `integer`):

Total emitted communities across all input searches and URLs.

## `maxCandidates` (type: `integer`):

Bounds work when member filters exclude many communities. Must be at least Maximum communities.

## `price` (type: `string`):

Unknown prices remain unknown. A paid community can hide its visible price.

## `visibility` (type: `string`):

Private community results contain public metadata only, never member-only content.

## `language` (type: `string`):

Optional source language name such as english, spanish, or german. Validated against current Skool options.

## `category` (type: `string`):

Only for Discovery mode. Catalogue records do not have a verified category mapping.

## `sort` (type: `string`):

Only affects Discovery. Catalogue results are unordered.

## `minMembers` (type: `integer`):

Apply after fetching current community detail. Zero disables the lower bound.

## `maxMembers` (type: `integer`):

Optional upper bound, at least Minimum members.

## `includeOwnerDetails` (type: `boolean`):

Adds public owner names, bio, location, and observed social links.

## `maxReviewsPerCommunity` (type: `integer`):

Zero disables sampling. Up to five public reviews inside each community row. Review aggregates are included independently.

## `proxyConfiguration` (type: `object`):

Direct by default. Optional Apify or custom proxy; no automatic paid proxy escalation.

## Actor input object example

```json
{
  "mode": "catalogue",
  "keywords": [
    "copywriting"
  ],
  "communityUrls": [],
  "maxItems": 100,
  "maxCandidates": 10000,
  "price": "all",
  "visibility": "all",
  "language": "",
  "category": "",
  "sort": "trending",
  "minMembers": 0,
  "includeOwnerDetails": true,
  "maxReviewsPerCommunity": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `communities` (type: `string`):

One row per community snapshot.

## `summary` (type: `string`):

Coverage, limits, and failure counts.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "copywriting"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("axlymxp/skool-community-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "keywords": ["copywriting"] }

# Run the Actor and wait for it to finish
run = client.actor("axlymxp/skool-community-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "copywriting"
  ]
}' |
apify call axlymxp/skool-community-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,axlymxp/skool-community-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/x8AnY5Qa3I9xIg8Go/builds/zvlHRpSTCjhUmQCgt/openapi.json
