# Skool API (`maximedupre/skool-api`) Actor

Find public Skool communities from keywords or public URLs, or look up a community by URL or public identifier. Get public profiles, visible member details, and source discovery rank when provided, with category and access filters.

- **URL**: https://apify.com/maximedupre/skool-api.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Developer tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 community profiles

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

### 🔎 Find Public Skool Communities

Skool API helps researchers, community managers, marketers, and developers find public Skool communities and get structured community profiles, visible member details, and health data. Use it to compare communities, inspect a public profile, or send data to another workflow. It reads only data exposed on public Skool pages and does not change communities or members.

- Find public Skool communities from keywords with the **[Skool Scraper](https://apify.com/maximedupre/skool-api/examples/skool-scraper)** example.
- Look up a public Skool community profile with the **[Skool API](https://apify.com/maximedupre/skool-api/examples/skool-api)** example.
- Explore public Skool plugin details with the **[Skool Plugins](https://apify.com/maximedupre/skool-api/examples/skool-plugins)** example.
- Find a clear answer about Skool with the **[Skool Help](https://apify.com/maximedupre/skool-api/examples/skool-help)** example.
- Plan a Skool automation with the **[Skool Zapier](https://apify.com/maximedupre/skool-api/examples/skool-zapier)** example.

#### 📊 Public Skool Community Data

**Community rows**

Each community row uses `resultType: "community"` and can include the public name, URL, description, category, free or paid access, pricing, member and activity counts, owner, branding, update time, discovery source, discovery rank, and visible members. A field appears when the public source provides it. Visible member data includes only members or contributors shown on a public community page. It is not a full roster.

The Actor saves the first eligible community match at once. If another keyword, URL, or ID finds the same community later, that later match is ignored. `discoveredFrom` shows the keyword or public URL that first found the saved row.

**Health rows**

Health rows use `resultType: "health"` and report whether the Actor health check passed and which Actor version it reports.

#### ▶️ Run a Public Skool Lookup

**Choose a target**

Select one task per run: discover by keywords, discover from public URLs, get a community profile, or check Actor health.

**Use a direct lookup**

For one known community, use its public URL or public identifier. This skips discovery and returns the profile when the public source exposes it.

**Keep the run focused**

Use `maxItems` to stop each discovery search after the number of communities you need. Leave it empty to return all available results until each source is exhausted.

**Check a workflow**

Use `health` to get a source-independent health value and Actor version before a workflow uses the data.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
|---|---|---|
| `target` | string | Required. Choose `discoverByKeywords`, `discoverFromUrls`, `getCommunityProfile`, or `health`. |
| `keywords` | array of strings | For keyword discovery, enter one or more words or short phrases that may find public Skool communities. |
| `discoveryUrls` | array of URL objects | For URL discovery, add public Skool discovery or community page URLs. |
| `communityUrlsOrIds` | array of strings | For profile lookup, enter public Skool community URLs or identifiers. |
| `category` | string | Optional filter for both discovery targets. Leave it empty to include all categories. |
| `accessType` | string | For both discovery targets, choose `all`, `free`, or `paid`. |
| `sortBy` | string | For both discovery targets, choose `popular` or `trending`. |
| `maxItems` | integer | Optional work limit for keyword and URL discovery. Each search stops after this many matched communities. Leave it empty to return all available results until each source is exhausted. |

**Example input**

This is the public input from the successful current-beta default-input discovery run:

```json
{
  "target": "discoverByKeywords",
  "keywords": [
    "fitness"
  ],
  "accessType": "all",
  "sortBy": "popular",
  "maxItems": 10
}
```

#### 🧾 Output

The `results` output links to the Apify dataset. The dataset contains rows for the selected task when the source returns data. Optional fields appear only when the public source returns them.

**Community result fields**

| Field | Type | What it does |
|---|---|---|
| `resultType` | string | Identifies this as a `community` row. |
| `communityId` | string | Public identifier for the community. |
| `name` | string | Public community name. |
| `url` | string (URL) | Public URL for the community. |
| `description` | string | Public community description. |
| `category` | string | Public category assigned to the community. |
| `accessType` | string | Shows `free` or `paid` access when provided. |
| `pricing` | object | Public pricing details when shown. |
| `pricing.amount` | number | Public price amount. |
| `pricing.currency` | string | Currency used for the public price. |
| `pricing.interval` | string | Public billing interval. |
| `memberCount` | integer | Number of members shown by the public source. |
| `activityCount` | integer | Public count of community activity when shown. |
| `owner` | object | Public owner details. |
| `owner.name` | string | Public owner name. |
| `owner.username` | string | Public owner username. |
| `owner.profileUrl` | string (URL) | Public URL for the owner's profile. |
| `branding` | object | Public community branding details. |
| `branding.logoUrl` | string (URL) | Public logo URL. |
| `branding.coverImageUrl` | string (URL) | Public cover image URL. |
| `branding.primaryColor` | string | Public primary brand color. |
| `updatedAt` | string (date-time) | Time supplied by Skool for the last public update when available. |
| `discoveredFrom` | string | Keyword or public URL that first found the community in the run. |
| `discoveryRank` | integer | Community position in public discovery results when provided. |
| `visibleMembers` | array of objects | Members or contributors shown on the public community page. |
| `visibleMembers[].name` | string | Public name of a visible member or contributor. |
| `visibleMembers[].username` | string | Public username of a visible member or contributor. |
| `visibleMembers[].profileUrl` | string (URL) | Public URL for a visible member's profile. |
| `visibleMembers[].role` | string | Public role shown for a visible member or contributor. |

**Example community row**

This representative row is from the current beta run. The source did not provide every optional field, so only returned fields appear.

```json
{
  "resultType": "community",
  "communityId": "d13d6832bf6842f181719868bc3dac1e",
  "name": "Feel Look Be® Lifestyle Ready ",
  "url": "https://www.skool.com/feellookbeready",
  "discoveryRank": 2,
  "description": "Personalised health, peptides, nutrition, fitness, data driven decisions, backed by science built for life 🧬🩸🥼📈\n \n",
  "memberCount": 94,
  "updatedAt": "2026-08-27T22:17:41.122117Z",
  "branding": {
    "logoUrl": "https://assets.skool.com/f/d13d6832bf6842f181719868bc3dac1e/0136941886e44880b0f77fa34ec46712bd0ef4b6835f4f718b6b97d0925bebdc.jpg",
    "coverImageUrl": "https://assets.skool.com/f/d13d6832bf6842f181719868bc3dac1e/cf516b13ac064a4da7b827ff8405f132cb25fce1128c482cb882d81b517e7085-md.jpg",
    "primaryColor": "#956228"
  },
  "accessType": "paid",
  "pricing": {
    "amount": 1900,
    "currency": "usd",
    "interval": "month"
  },
  "discoveredFrom": "fitness"
}
```

**Health result fields**

| Field | Type | What it does |
|---|---|---|
| `resultType` | string | Identifies this as a `health` row. |
| `healthy` | boolean | Shows whether the Actor health check passed. |
| `version` | string | Actor version reported by the health check. |

**Example health row**

This row is from the current beta run:

```json
{
  "resultType": "health",
  "healthy": true,
  "version": "0.0"
}
```

#### 💳 Pricing

**Event pricing**

| Event | Price | What it covers |
|---|---:|---|
| Community profile | $0.003 | One public community profile returned successfully. |
| Visible member | $0.0045 | One member or contributor returned successfully from a public community page. |

Charges are tied to successfully returned matching data. The total depends on how many public profiles and visible members the run returns.

#### 🔌 Integrations

**Use the dataset**

Read the structured rows through the Apify dataset API and pass the JSON data to a workflow or application. The output keeps public source URLs with the data when Skool provides them.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### How do I get one community profile?

Set `target` to `getCommunityProfile` and enter a public community URL or identifier in `communityUrlsOrIds`.

##### What happens when several inputs find the same community?

The first eligible match is saved. Later matches for that same community are ignored, and `discoveredFrom` keeps the keyword or public URL from the first match.

##### Why is a field missing from a community row?

The public source did not provide that field for the community. The Actor keeps source values and does not invent missing data.

##### Are private Skool communities included?

No. The Actor reads publicly exposed community data only. It does not include private or account-gated content.

##### Can I get a full member list?

No. A community row can include members or contributors shown on its public page, but it does not provide hidden profiles or a full roster.

##### Can I filter discovery results?

Yes. For keyword and URL discovery, use `category`, choose `all`, `free`, or `paid` with `accessType`, and choose `popular` or `trending` with `sortBy`.

##### What does the health task check?

It returns a source-independent health value and the Actor version. It does not need a Skool community input.

##### Does the Actor change a community?

No. It reads public community data and does not create, edit, delete, like, pin, or moderate content or members.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~skool-api/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Skool.com Scraper - Communities, Members & Pricing](https://apify.com/logiover/skool-scraper) is useful for broader community discovery with member and pricing details.
- [Skool API — Posts, Members & Classroom](https://apify.com/cristiantala/skool-all-in-one-api) is useful for account-based posts, member, and classroom actions.
- [Skool Community Scraper](https://apify.com/parsebird/skool-community-scraper) is useful for a direct public community scrape.
- [Skool Communities & Courses Scraper](https://apify.com/crawlerbros/skool-scraper) is useful for community and course discovery.
- [Skool Groups Scraper — Discovery Search](https://apify.com/nogards95/skool-discovery-scraper) is useful for keyword searches over the public group directory.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `target` (type: `string`):

Choose one target for this run. Fields for other targets are ignored.

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

Enter one or more keywords or short phrases. The Actor finds matching public Skool communities.

## `discoveryUrls` (type: `array`):

Add one or more public Skool discovery or community page URLs. Discovery pages return listed communities. A community page returns that community profile.

## `communityUrlsOrIds` (type: `array`):

Enter one or more public Skool community URLs or identifiers to retrieve their profiles.

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

For Discover by keywords and Discover from public URLs, enter a category to limit discovery results. Leave it empty to include all categories. It does not filter a direct community page.

## `accessType` (type: `string`):

For Discover by keywords and Discover from public URLs, choose all, free, or paid communities. The default is all communities. It does not change a direct community page.

## `sortBy` (type: `string`):

For Discover by keywords and Discover from public URLs, choose popular or trending results. The default is popular. It does not change a direct community page.

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

For Discover by keywords and Discover from public URLs, optionally stop each search after this many matched communities. Leave it empty to return all available results until each source is exhausted. It does not limit a direct community profile.

## Actor input object example

```json
{
  "target": "discoverByKeywords",
  "keywords": [
    "fitness"
  ],
  "accessType": "all",
  "sortBy": "popular",
  "maxItems": 10
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset with public Skool community profiles, visible member details, or health results from this run.

# 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 = {
    "target": "discoverByKeywords",
    "keywords": [
        "fitness"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/skool-api").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 = {
    "target": "discoverByKeywords",
    "keywords": ["fitness"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/skool-api").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 '{
  "target": "discoverByKeywords",
  "keywords": [
    "fitness"
  ],
  "maxItems": 10
}' |
apify call maximedupre/skool-api --silent --output-dataset

```

## MCP server setup

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

```

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/YL2c1jbpr3mIEb78c/builds/BKOpcbgoXV3GI5wRJ/openapi.json
