# Skool Scraper (`shahidirfan/skool-scraper`) Actor

Extract member data, posts, and community insights from Skool instantly. Perfect for creator economy research, competitive benchmarking, and market analysis. Get clean, structured JSON output.

- **URL**: https://apify.com/shahidirfan/skool-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Automation, Developer tools, Other
- **Features:** Limited permissions
- **Stats:** 13 total users, 4 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.80 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Skool Discovery Scraper do?

Skool Discovery Scraper collects public community listings from [Skool Discovery](https://www.skool.com/discovery) and returns a clean dataset for market research, creator prospecting, competitive analysis, and community monitoring.

Each record can include the community name, URL, description, discovery rank, member counts, pricing signals, tags, branding assets, owner details, course and module counts, activity totals, and timestamps. Enter a Skool Discovery URL, choose the result limit, and run the Actor from Apify Console.

### Why use Skool Discovery Scraper?

- **Market research** - Compare communities by audience size, ranking, category context, pricing, and available features.
- **Creator prospecting** - Find communities that may be relevant for partnerships, sponsorships, services, or audience research.
- **Competitive analysis** - Track public positioning, branding, pricing, activity, and community growth signals over time.
- **Structured datasets** - Receive consistent JSON records that can be exported or connected to downstream workflows.
- **Repeatable monitoring** - Schedule runs in Apify to build snapshots and compare changes across time.

### What data can you extract from Skool?

| Field | Type | Description |
|-------|------|-------------|
| `id` | String | Unique community identifier. |
| `slug` | String | Community slug used in the public URL. |
| `url` | String | Direct community URL. |
| `displayName` | String | Public community name. |
| `description` | String | Community description when published. |
| `rank` | Integer | Position in the Discovery results. |
| `tags` | Array | Community tags when available. |
| `categoryId` | String | Discovery category context when available. |
| `totalMembers` | Integer | Total community members. |
| `totalAdmins` | Integer | Number of community administrators. |
| `totalOnlineMembers` | Integer | Members currently shown as online. |
| `totalPosts` | Integer | Total posts in the community. |
| `totalRules` | Integer | Number of community rules. |
| `numCourses` | Integer | Number of available courses. |
| `numModules` | Integer | Number of available modules. |
| `privacy` | Integer | Public privacy mode indicator. |
| `minPostLevel` | Integer | Minimum level required to post when available. |
| `lpAccessType` | String | Learning product access type when available. |
| `annualPrice` | Number | Annual membership price when available. |
| `annualPriceCurrency` | String | Currency for the annual price. |
| `monthlyPrice` | Number | Monthly membership price when available. |
| `monthlyPriceCurrency` | String | Currency for the monthly price. |
| `coverImageUrl` | String | Community cover image URL. |
| `logoUrl` | String | Community logo URL. |
| `logoBigUrl` | String | Larger community logo URL. |
| `faviconUrl` | String | Community favicon URL. |
| `initials` | String | Community initials. |
| `brandColor` | String | Published brand color value. |
| `ownerName` | String | Owner name when available. |
| `ownerDisplayName` | String | Owner display name when available. |
| `ownerAvatarUrl` | String | Owner avatar URL when available. |
| `links` | Object or Array | Public community links when available. |
| `features` | Object or Array | Published community features when available. |
| `tabs` | Object or Array | Published tab configuration when available. |
| `createdAt` | String | Community creation timestamp. |
| `updatedAt` | String | Community update timestamp. |
| `sourceUrl` | String | Discovery URL used for the record. |

Fields that are not published by a community are omitted from that record.

### How to use Skool Discovery Scraper

1. Open the Actor in Apify Console.
2. Keep the default Skool Discovery URL or enter another public Discovery URL.
3. Set `results_wanted` to the maximum number of communities to save.
4. Set `max_pages` to control how many Discovery pages the run may request.
5. Start the run and review the dataset preview.
6. Download the results or connect the dataset to another workflow.

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `startUrl` | String | No | `"https://www.skool.com/discovery"` | Public Skool Discovery URL to start from. |
| `results_wanted` | Integer | No | `20` | Maximum number of communities to save. Minimum: `1`. |
| `max_pages` | Integer | No | `1` | Maximum number of Discovery pages to request. Minimum: `1`. |

The Actor accepts one Discovery URL per run. Use a URL that is publicly accessible and contains the Discovery context you want to collect.

### Usage Examples

#### Basic extraction

Collect the default first set of communities from Skool Discovery:

```json
{
  "startUrl": "https://www.skool.com/discovery",
  "results_wanted": 20
}
```

#### Larger collection

Increase the result limit when you need a broader community dataset:

```json
{
  "startUrl": "https://www.skool.com/discovery",
  "results_wanted": 100,
  "max_pages": 5
}
```

#### Bounded monitoring run

Use a small page cap for a repeatable scheduled snapshot:

```json
{
  "startUrl": "https://www.skool.com/discovery",
  "results_wanted": 50,
  "max_pages": 2
}
```

### Sample Output

```json
{
  "id": "37a997125c1a4a7aa2ecbf73c79e8468",
  "slug": "calligraphy",
  "url": "https://www.skool.com/calligraphy",
  "displayName": "Calligraphy Skool",
  "description": "Learn modern calligraphy in a practical community.",
  "rank": 1,
  "tags": ["art", "calligraphy"],
  "categoryId": "",
  "totalMembers": 1412,
  "totalAdmins": 4,
  "totalOnlineMembers": 27,
  "totalPosts": 912,
  "totalRules": 8,
  "numCourses": 6,
  "numModules": 44,
  "privacy": 0,
  "minPostLevel": 1,
  "annualPrice": 399,
  "annualPriceCurrency": "USD",
  "monthlyPrice": 39,
  "monthlyPriceCurrency": "USD",
  "coverImageUrl": "https://assets.skool.com/example/cover-md.jpg",
  "logoUrl": "https://assets.skool.com/example/logo.jpg",
  "logoBigUrl": "https://assets.skool.com/example/logo-big.jpg",
  "faviconUrl": "https://assets.skool.com/example/favicon.jpg",
  "initials": "CS",
  "brandColor": "#5B4BFF",
  "ownerName": "Example Creator",
  "ownerDisplayName": "Example Creator",
  "ownerAvatarUrl": "https://assets.skool.com/example/avatar.jpg",
  "createdAt": "2024-08-15T01:33:13.866416Z",
  "updatedAt": "2025-08-25T20:26:24.360076Z",
  "sourceUrl": "https://www.skool.com/discovery"
}
```

### Tips for Best Results

- Start with `results_wanted: 20` to check the dataset shape before a larger run.
- Keep `max_pages` aligned with the size of the collection you need.
- Use a complete public Skool Discovery URL for the intended browsing context.
- Schedule recurring runs when you need community, pricing, or ranking snapshots.
- Check several records before treating a missing field as a collection problem. Communities publish different amounts of information.
- Review the dataset preview before connecting the results to a CRM, spreadsheet, or reporting pipeline.

### Integrations and Export Formats

- **Google Sheets** - Review rankings, membership counts, and pricing in a spreadsheet.
- **Airtable** - Build a searchable community research database.
- **Make or Zapier** - Trigger workflows after a run completes.
- **Webhooks** - Notify downstream services when fresh data is ready.
- **Apify API** - Start runs and retrieve dataset items programmatically.

Apify datasets can be downloaded in JSON, CSV, Excel, XML, and other supported formats.

### Frequently Asked Questions

#### How many communities can I collect?

You can set any practical value for `results_wanted`. Start with `20`, then increase the limit and `max_pages` for a broader collection.

#### Can I run this Actor on a schedule?

Yes. Create an Apify schedule to refresh the Discovery dataset hourly, daily, weekly, or on a custom timetable.

#### Why are some output fields missing?

Fields are omitted when a community does not publish the corresponding information. Compare several records before assuming the run failed.

#### Does the Actor collect private community information?

No. The Actor is intended for publicly available community listings and public profile information.

#### Can I export the dataset to CSV or Excel?

Yes. Apify datasets support JSON, CSV, Excel, XML, and additional export formats from the dataset view.

#### What should I do if a run returns no records?

Confirm that `startUrl` is a public Skool Discovery URL, run again with the default inputs, and check the run log and dataset preview. If the source changes, report the issue from the Actor page.

#### Is collecting public Skool data legal?

You are responsible for following Skool's terms, applicable laws, privacy requirements, and any restrictions that apply to your intended use of public data.

### Related Actors

- [Apify Store Scraper](https://apify.com/shahidirfan/apify-store-scraper) - Collect Apify Store listings for marketplace research, competitor monitoring, and portfolio analysis.
- [Twitch Categories Scraper](https://apify.com/shahidirfan/twitch-categories-scraper) - Track creator economy categories, viewer counts, and trending content for market research.
- [RSS / XML Scraper](https://apify.com/shahidirfan/rss-xml-scraper) - Collect structured feed data for content monitoring and research pipelines.

### Support

For issues, feature requests, or output questions, use the Issues and Discussions sections on the Actor page.

### Legal Notice

This Actor is intended for legitimate research, monitoring, and data organization workflows using publicly available information. Users are responsible for complying with Skool's terms, applicable laws, privacy requirements, and the terms of any connected service.

# Actor input Schema

## `startUrl` (type: `string`):

Skool Discovery URL to start from.

## `results_wanted` (type: `integer`):

Maximum number of communities to collect.

## `max_pages` (type: `integer`):

Maximum number of discovery pages to request.

## Actor input object example

```json
{
  "startUrl": "https://www.skool.com/discovery",
  "results_wanted": 20,
  "max_pages": 1
}
```

# Actor output Schema

## `allFields` (type: `string`):

No description

# 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 = {
    "startUrl": "https://www.skool.com/discovery",
    "results_wanted": 20,
    "max_pages": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/skool-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 = {
    "startUrl": "https://www.skool.com/discovery",
    "results_wanted": 20,
    "max_pages": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/skool-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 '{
  "startUrl": "https://www.skool.com/discovery",
  "results_wanted": 20,
  "max_pages": 1
}' |
apify call shahidirfan/skool-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,shahidirfan/skool-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/Z1ub605HItojAZejq/builds/KhJNil4ODohR4BQQV/openapi.json
