Quick reference (TL;DR for agents)
- What this enables: Any n8n workflow can read AND write to Skool — posts, comments, members, classroom, files, Auto DM.
- Method: n8n
HTTP Requestnode → POST JSON to Apify-hosted Skool actor → Skool internal API.- Auth flow:
auth:loginonce, storecookiesin n8n Credentials, reuse for ~3.5 days.- Latency: ~2s per call (cookies cached) / ~10s (email+password each call).
- Cost: Apify pay-per-event (~$1.50/mo for typical communities) + your n8n hosting.
- n8n template: Auto-Approve Skool Members with GPT-4o AI Screening — published, ready to import.
Why connect Skool to n8n?
Skool has no official API and the existing “Skool by Skool” Zapier/n8n connector only triggers on a few events (new member, new post) — it doesn’t write. You can’t approve members, post content, publish courses, or update Auto DM from it.
The Apify-hosted Skool All-in-One API actor wraps the entire Skool admin surface (posts, comments, members, classroom, files, groups) in a single HTTP endpoint. From n8n you call it with one HTTP Request node.
What you can automate from n8n
| n8n flow | Skool action | Recipe |
|---|---|---|
| Schedule trigger → LLM screen → approve/reject | members:pending → members:approve |
Auto-approve members |
| Cron → posts with 0 replies → AI draft → Telegram approval → publish | posts:filter → posts:createComment |
Reply unanswered |
| Listmonk/ConvertKit campaign sent → mirror to community feed | posts:create |
Newsletter to Skool |
| Webhook (Stripe / new signup) → set personalized Auto DM | groups:setAutoDM |
Auto DM new members |
| Markdown files in Git → full course in Skool classroom | classroom:createCourse + classroom:setBody |
Publish course from markdown |
| Schedule → batch refresh course covers via R2/S3 URLs | files:uploadImage + classroom:updateCourse |
Batch update covers |
Architecture
n8n Apify Skool
─── ───── ─────
[Cron / Webhook trigger]
│
▼
[HTTP Request node ─────POST JSON────→ run-sync-get-dataset-items ──→ api.skool.com]
{ action, cookies, ... } (cookies + WAF + buildId
│ handled by actor)
◄────────────── { success: true, data: ... } ◄────────────────┘
Every Skool operation = one HTTP POST. No SDK to install in n8n. No node to develop. Idempotent retries are safe.
Setup — 5 minutes
1. Get your Apify API token
Sign up at apify.com (free tier covers most personal use). Token from console.apify.com/account/integrations.
2. Store the token in n8n Credentials
n8n → Credentials → New → Header Auth:
- Name:
Apify Token - Header name:
Authorization - Header value: (leave empty — token goes in the URL query string)
(Alternatively, use n8n’s HTTP Query Auth and put the token in the URL.)
3. Bootstrap your Skool cookies (one-time, valid ~3.5 days)
In n8n, create a one-off workflow with a single HTTP Request node:
- Method:
POST - URL:
https://api.apify.com/v2/acts/cristiantala~skool-all-in-one-api/run-sync-get-dataset-items?token=&build=latest&timeout=90 - Body: JSON
{
"action": "auth:login",
"email": "admin@yourcommunity.com",
"password": "your-skool-password",
"groupSlug": "your-community-slug"
}
Execute once. Copy the cookies field from the response. Save it as a new n8n Credential called Skool Cookies. Plan to rotate it every ~3.5 days (or branch on WAF_EXPIRED error and call auth:login automatically — see Production gotchas).
4. Make your first write — post a community update
Create a new workflow with one HTTP Request node:
- Method:
POST - URL:
https://api.apify.com/v2/acts/cristiantala~skool-all-in-one-api/run-sync-get-dataset-items?token=&build=latest&timeout=90 - Body: JSON
{
"action": "posts:create",
"cookies": "",
"groupSlug": "your-community",
"params": {
"title": "Workflow shipped today",
"content": "Just shipped the auto-approval workflow. It now screens applicants with GPT-4o before approving. Saved me 30 minutes today.",
"labelId": null
}
}
Done. The new post appears in your community feed within 1-2 seconds.
Example: the n8n auto-approve template
I published this workflow as an official n8n template — clone it directly into your n8n.
Flow:
- Webhook receives Skool’s “new applicant” notification (or schedule polls
members:pendingevery 5 min if you don’t have a Skool webhook) - Function extracts applicant LinkedIn + answers from the apply form
- OpenAI/Claude/Anthropic node screens against your criteria (returns
approve | reject | review) - Switch branches on the LLM verdict
- HTTP Request to
members:approveormembers:reject - Telegram / Slack notifies you with the verdict + member info
Cost: ~$0.02 per applicant in LLM + ~$0.01 per Skool call. For 30 applicants/week: ~$5/mo.
Production gotchas
x402-payment-requiredon every call: Not a payment issue. It’s a stalenotice:UNDER_MAINTENANCEflag Apify sets via internal heuristic when an actor has high error rates briefly. Open the actor page once in Apify console to reset, or use theunbreak.shrecovery flow described in error handling.WAF_EXPIREDerror: Your cookies have aged past the WAF token rotation window (~3.5 days). Branch your workflow: on this error → callauth:login→ update theSkool Cookiescredential → retry. n8n’s “Continue on fail” + error workflow pattern handles this cleanly.parentId == postIdfor nested replies returns silent failure: For comment replies inside a thread,rootId == postId(always) andparentId == commentId(the comment you reply to). Confusing them publishes the reply at top level instead of nested.- Rate limit ~25 writes/min: Skool’s hard limit. The actor queues internally — don’t add your own retry loop. If your n8n workflow generates more than 25 writes/min, batch them with a wait or use
members:batchApprovewhich Skool handles server-side. - n8n HTTP node timeout: Default is 60s. The actor’s
run-syncendpoint waits up to 90s in the URL (&timeout=90). Set the n8n node timeout to ≥120s to leave room for the Apify queue.
Full workflow JSON — minimal “post on schedule”
Click to expand
```json { "name": "Skool — daily community update", "nodes": [ { "parameters": { "rule": {"interval": [{"field": "hours", "hoursInterval": 24}]} }, "id": "1", "name": "Daily 9am", "type": "n8n-nodes-base.scheduleTrigger", "typeVersion": 1.1, "position": [200, 300] }, { "parameters": { "method": "POST", "url": "=https://api.apify.com/v2/acts/cristiantala~skool-all-in-one-api/run-sync-get-dataset-items?token=&build=latest&timeout=90", "sendBody": true, "specifyBody": "json", "jsonBody": "={\n \"action\": \"posts:create\",\n \"cookies\": \"\",\n \"groupSlug\": \"your-community\",\n \"params\": {\n \"title\": \"Daily standup — \",\n \"content\": \"What are you shipping today? Drop it in this thread.\"\n }\n}", "options": {"timeout": 120000} }, "id": "2", "name": "Post to Skool", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [500, 300] } ], "connections": { "Daily 9am": {"main": [[{"node": "Post to Skool", "type": "main", "index": 0}]]} } } ```Related integrations
- Skool + Make.com
- Skool + Zapier
- Skool + Claude (AI agent)
- Skool + MCP server
- Skool + Python
- All integrations →
Start automating Skool from n8n today
→ Open the Skool All-in-One API actor on Apify
- Pay-per-event (~$1.50/mo for typical community automation)
- Read AND write — full API surface
- One n8n
HTTP Requestnode per action - Battle-tested in production
No Skool community yet? Launch one in 10 minutes — 14-day free trial. Need an n8n instance? Get started free — the workflow tool we use throughout these recipes.