Skip to content

Instantly share code, notes, and snippets.

@hmseeb
Last active January 30, 2026 23:11
Show Gist options
  • Select an option

  • Save hmseeb/232750fb81651f8d7cae48650139b851 to your computer and use it in GitHub Desktop.

Select an option

Save hmseeb/232750fb81651f8d7cae48650139b851 to your computer and use it in GitHub Desktop.
Skool Scraper API Documentation

Skool Scraper API Documentation

Base URL: https://skool-scraper-production-c8a8.up.railway.app

Overview

A REST API for scraping member data from Skool communities. Jobs run asynchronously - you create a job, poll for status, then retrieve results when complete.

Admin-only data: When scraping as a community admin, you get access to additional fields like email, role, LTV, and survey answers.


Endpoints

Health Check

GET /health

Check if the API is running.

Response: 200 OK

{
  "status": "ok",
  "timestamp": "2026-01-30T22:26:14.776Z"
}

Create Scraping Job

POST /jobs

Start a new community member scraping job.

Request Headers:

Content-Type: application/json

Request Body:

Field Type Required Description
communityUrl string Yes Full Skool community URL (e.g., https://www.skool.com/community-name)
cookies string or array Yes Authentication cookies (see Cookie Formats below)

Cookie Formats:

The API accepts cookies in two formats:

Format 1: Cookie Header String (Recommended)

{
  "communityUrl": "https://www.skool.com/your-community",
  "cookies": "auth_token=eyJhbGci...; client_id=70d1b674..."
}

Format 2: Cookie Editor Array (Browser Extension Export)

{
  "communityUrl": "https://www.skool.com/your-community",
  "cookies": [
    { "name": "auth_token", "value": "eyJhbGci...", "domain": ".skool.com" },
    { "name": "client_id", "value": "70d1b674...", "domain": ".skool.com" }
  ]
}

Example Request:

curl -X POST https://skool-scraper-production-c8a8.up.railway.app/jobs \
  -H "Content-Type: application/json" \
  -d '{
    "communityUrl": "https://www.skool.com/your-community",
    "cookies": "auth_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
  }'

Response: 202 Accepted

{
  "jobId": "2ce1caa0-91e0-435c-801c-bd23e6bdf881",
  "status": "pending",
  "statusUrl": "/jobs/2ce1caa0-91e0-435c-801c-bd23e6bdf881"
}

Get Job Status

GET /jobs/:id

Check the status of a scraping job.

Response: 200 OK

{
  "jobId": "2ce1caa0-91e0-435c-801c-bd23e6bdf881",
  "status": "complete",
  "createdAt": "2026-01-30T22:26:38.565Z",
  "startedAt": "2026-01-30T22:26:38.566Z",
  "completedAt": "2026-01-30T22:51:47.618Z",
  "hasResults": true
}

Job Status Values:

Status Description
pending Job created, waiting to start
running Job is actively scraping
complete Job finished successfully
failed Job failed (may have partial results)

Get Job Results

GET /jobs/:id/results

Retrieve the scraped member data.

Response: 200 OK

{
  "members": [
    {
      "name": "John Doe",
      "username": "john-doe-1234",
      "profileUrl": "https://www.skool.com/@john-doe-1234?g=community",
      "avatarUrl": "https://assets.skool.com/...",
      "memberSince": "2024-01-15T00:00:00.000Z",
      "bio": "Community member bio text",
      "location": "New York, USA",
      "level": 5,
      "socialLinks": {
        "twitter": "https://twitter.com/johndoe",
        "linkedin": "https://linkedin.com/in/johndoe"
      },
      "email": "john@example.com",
      "role": "group-member",
      "points": 1250,
      "invitedBy": {
        "userId": "abc123",
        "name": "Jane Smith",
        "username": "jane-smith-5678"
      },
      "surveyAnswers": [
        { "question": "What's your email?", "answer": "john@example.com" },
        { "question": "What do you need help with?", "answer": "Growing my business" }
      ]
    }
  ],
  "totalCount": 447,
  "scrapedAt": "2026-01-30T22:51:47.618Z",
  "partial": false
}

Member Object Fields:

Field Type Description Admin Only
name string Display name No
username string Skool username No
profileUrl string Full profile URL No
avatarUrl string? Profile image URL No
memberSince string? ISO date when joined No
bio string? Member bio/description No
location string? Location if provided No
level number? Community level (1-9) No
socialLinks object? Social media links No
email string? Member's email address Yes
role string? Role: group-owner, group-admin, group-moderator, group-member Yes
points number? Engagement points Yes
ltv number? Lifetime value in cents Yes
invitedBy object? Who invited the member Yes
surveyAnswers array? Answers to join survey Yes

Note: Admin-only fields are only populated when scraping as a community admin/owner.


Usage Flow

# 1. Create job
JOB_RESPONSE=$(curl -s -X POST https://skool-scraper-production-c8a8.up.railway.app/jobs \
  -H "Content-Type: application/json" \
  -d '{"communityUrl":"https://www.skool.com/your-community","cookies":"auth_token=..."}')

JOB_ID=$(echo $JOB_RESPONSE | grep -o '"jobId":"[^"]*"' | cut -d'"' -f4)

# 2. Poll status (wait for complete)
curl -s https://skool-scraper-production-c8a8.up.railway.app/jobs/$JOB_ID

# 3. Get results when complete
curl -s https://skool-scraper-production-c8a8.up.railway.app/jobs/$JOB_ID/results

Getting Cookies

Method 1: Cookie Header String

  1. Log into Skool in your browser
  2. Open Developer Tools (F12) → Network tab
  3. Navigate to your community
  4. Find any request to skool.com
  5. Copy the Cookie header value

Method 2: Cookie Editor Extension

  1. Install "Cookie Editor" browser extension
  2. Log into Skool
  3. Click the extension → Export as JSON
  4. Pass the entire array directly to the API

Required Cookie: auth_token (the JWT session token)


Admin vs Non-Admin Access

Access Level Members Visible Admin Fields
Admin/Owner ALL members (with pagination) ✓ email, role, points, ltv, invitedBy, surveyAnswers
Non-Admin ~30 members only ✗ None

Notes

  • Jobs are stored in-memory and will be lost on server restart
  • Large communities may take several minutes to scrape
  • Typical scrape time: ~10-15 seconds for communities under 500 members
  • Failed jobs may still have partial results
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment