Skool Automation System
Project Location
/mnt/c/Users/Lenovo/Desktop/skool-automation/
Architecture (8 modules)
proxy_manager.py — Residential IP pool with rotation and health checking
browser_manager.py — Playwright + stealth + unique fingerprint per profile
skool_account.py — Skool signup automation (verified against live site)
community_manager.py — Community creation, pricing tiers, settings
content_seeder.py — Post content, reply, like, 14-day seeding calendar
profile_store.py — SQLite persistence for profiles and seeding state
mail_tm.py — Mail.tm disposable email API (blocked by Skool, use only for testing)
orchestrator.py — Master controller: create_full_community() does everything
CLI
cd /mnt/c/Users/Lenovo/Desktop/skool-automation
source venv/bin/activate
export PLAYWRIGHT_BROWSERS_PATH=./browsers
python run.py status
python run.py proxies proxies.txt
python run.py create "Community Name" --niche health --email you@gmail.com --email-password "app_pass"
python run.py batch communities.json
python run.py seed profile_id https://skool.com/community-name
Critical Live-Tested Findings (May 29, 2026)
Browser Interaction
- ALL overlay-blocked elements need
force=True — Skool's React modals use <h2> and <span> overlays that intercept pointer events. CTA buttons, code inputs, and other elements in modals ALL require click(force=True).
- Keyboard Tab+Enter for form submission — Mouse clicks on the submit button silently fail due to a
<span>Sign Up</span> overlay inside the button. Tab to button, press Enter. This triggers React's synthetic events correctly.
- Keyboard Tab works for verification code entry too — Tab to code input, type code, Tab to verify button, Enter.
Selectors (verified live)
- Signup form:
#first_name, #last_name, #email, #password
- CTA (landing page):
button:has-text('Create your community') — click with force=True
- Submit:
button[type='submit'] — navigate via keyboard Tab, press Enter
- Code input:
input[type='text'] (the one without id/name — Skool's code input has no id)
- "Log in with a code":
text="Log in with a code" — appears after entering email on login page
Verification
- 4-digit codes (NOT 6-digit) — subject format:
"5152 is your Skool verification code"
- Gmail IMAP: poll inbox for most recent email with subject matching
r'(\d{4,6}) is your Skool'
- App passwords with spaces work (e.g.,
'tasb zvbo sjdi rxrp') — do NOT strip spaces
Email Strategy
- Disposable domains silently rejected — mail.tm, guerrilla mail, all blocked
- Gmail +alias trick works —
user+skool1@gmail.com creates unique Skool accounts, all to same inbox
- Rate limit: ~5-6 signup attempts per IP before challenge page. Use VPN/proxy rotation.
- For existing accounts: use the "Log in with a code" passwordless flow
Account State
- Unverified accounts get cleaned up — if verification code isn't entered quickly, the pending account is deleted
- Cookie persistence works —
storage_state saves logged-in sessions for reuse
Community Creation
- Skool requires a paid plan — Hobby $9/month or Pro
- After clicking "Create your community" while logged in, you're redirected to
/signup?v=pricing
- Must select a plan before community setup form appears
What's Needed Before Production Use
- Real Gmail with App Password — App passwords with spaces work fine. Gmail
+alias trick (user+skool1@gmail.com) creates unique accounts sharing one inbox.
- VPN or residential proxies — IPs rate-limited after ~5 signup attempts. Rotate IPs between launches.
- Skool paid plan — $9/month Hobby plan required before creating communities.
- Cookie persistence — Save
storage_state after first login to reuse sessions.
Pitfalls
- NEVER strip spaces from Gmail App Passwords — they're part of the credential
- NEVER use normal clicks on overlay-blocked elements — always
force=True
- NEVER use disposable email domains — Skool silently rejects them
- ALWAYS use keyboard Tab+Enter for React form submissions
- After ~5 signup attempts from one IP, Skool serves a blank challenge page. Switch IP.
Form Flow (Verified)
New Signup
page.goto('https://www.skool.com/signup') — landing page
- Click CTA:
p.locator("button:has-text('Create your community')").first.click(force=True) — opens modal
- Fill via keyboard:
#first_name → Tab → #last_name → Tab → #email → Tab → #password
- Tab to submit button, press Enter
- Wait for "We sent you a code" — poll Gmail IMAP for
r'(\d{4,6}) is your Skool' in subject
- Tab to code input (first text input without id), type code, Tab to Verify, Enter
Existing Account Login
page.goto('https://www.skool.com/login')
- Fill email in
input[type='email']
- Click
text="Log in with a code" (appears after email entry)
- Poll Gmail for code, enter via keyboard Tab+Enter
- Save cookies:
page.context.storage_state(path='cookies.json')
Community Creation (requires paid plan)
- While logged in, go to signup page, click "Create your community"
- Redirected to
/signup?v=pricing — select Hobby ($9/mo) or Pro
- Click "TRY FOR FREE" → community setup form appears
Configuration
Pre-configured communities.json has 5 niches: insurance, health, debt, offshore, credentials.
Each has pricing tiers, persona names, and descriptions ready.
User's domain expertise: nootropics, research chemicals, cognitive enhancement, neurochemistry.
When recommending which community to start first, prioritize Research Collective — it aligns
with the user's actual knowledge and the persona writes itself. Insurance/Debt are solid
businesses but the user has no edge there.
Strategy Docs (on Desktop)
- skool-empire-strategy.md — Macro strategy
- skool-greymarket-niches.md — 5 greymarket niches
- skool-greymarket-niches-v2.md — 5 more + portfolio theory
- skool-operational-playbook.md — Full implementation guide
- skool-communities-playbook.html — Complete copy-paste playbook: bios, posts, funnels, pricing for 5 communities (open in browser, Ctrl+P to PDF)
Content Production Standards (UPDATED — June 3, 2026)
The user rejected AI-looking content and infographics. Every article and visual must pass these gates.
Voice Toolkit (from Substack style analysis)
Model writing on high-tier Substack authors — this is what justifies $149-997/mo pricing:
- Scott Alexander (Astral Codex Ten): Footnotes with real citations + jokes, self-deprecation, mechanism obsession, varied paragraph length, "I'm not a doctor but here's the data" energy
- Dwarkesh Patel: Chain-of-reasoning structure, short paragraphs, Socratic self-questioning, "but notice that..." pivots, personal intellectual journey as narrative spine
- SemiAnalysis: Lead with verdicts, proprietary data creates authority, competitive framing, swagger, specific numbers
- Balaji: Concept coinage, name-the-pattern, historical analogy
Anti-AI Patterns (MANDATORY before publication)
Run EVERY article through the humanizer skill's 29-pattern check. The most common offenders in this genre:
- Identical section structure per marker/topic (reads like a template)
- Signposting ("Here are the 12 markers" → just start)
- Rule-of-three lists ("silently destroying your cognition, your cardiovascular, your metabolic")
- Generic positive conclusions ("stop guessing, start measuring" → specific)
- Consistent paragraph length (must vary wildly — one-sentence gut punches mixed with dense blocks)
- Missing footnotes (premium paid content should have 4-8+ footnotes with real citations)
Information Density
- Every paragraph must earn its place with specific numbers, mechanisms, or citations
- No filler sentences. No "in today's world." No hedging.
- Footnotes must cite real papers with DOIs or PMIDs — never invented references
- Each marker/section must have a DIFFERENT entry point: personal story, mechanism explanation, data reveal, contrarian take, or problem statement — never the same shape twice
Visual Content — THREE TIERS ONLY (no AI slop)
- Scientific charts (PREFERRED): matplotlib from actual data arrays. Forest plots, bar charts, timelines, error bars. 200 DPI. Dark theme. Proper axis labels. Data annotations. Zero hallucination risk — the numbers in code ARE the numbers in the article.
- Rendered infographics: HTML/CSS + Chart.js → Playwright screenshot to PNG. Use only when interactive charts add value. Dark blueprint theme, JetBrains Mono + Inter fonts.
- Research figures: Download from open-access papers (PubMed Central, arXiv). Must have verified DOI/PMID. Must be properly attributed. Never use AI-generated figures.
NEVER DO (user explicitly rejected):
- Mermaid diagrams — toy-level, not premium
- AI-generated images — hallucinated data, looks cheap
- Stock-photo-style infographics — no scientific credibility
- "Designed" infographics without data provenance
Quality Audit Framework
Before ANY article or playbook ships, run the rubric in references/content-quality-standards.md:
- Accuracy: numbers, citations, claims, units, mechanisms, contradictions, disclaimers
- Coherence: narrative arc, section flow, voice consistency, audience fit, CTA
- Visuals: data accuracy, readability, density, professional quality, source attribution
Research Citations
- Search PubMed (NCBI Entrez API) and Semantic Scholar for every factual claim
- Only cite papers with verified DOIs or PMIDs
- Open-access papers preferred (figures can be reused with attribution)
- Save all paper references to the vault for audit trail
- See
references/research-workflow.md for the full search → verify → cite pipeline
Reference Files (in this skill)
references/signup-flow.md — Complete signup recipe with failure modes, code patterns, login flow
references/ubuntu-playwright-fix.md — coreBundle.js patch for Ubuntu 26.04
references/communities-playbook.md — Quick reference for the 5 ready-to-launch communities
references/content-quality-standards.md — Full audit rubric: accuracy, coherence, visual, anti-AI checks
references/research-workflow.md — How to find, verify, and cite real papers with DOIs (PubMed, Semantic Scholar, arXiv)
scripts/signup.py — Ready-to-run signup template (edit EMAIL + APP_PASS, then execute)
1---2name: skool-automation3description: Skool Automation System4---5# Skool Automation System67## Project Location8`/mnt/c/Users/Lenovo/Desktop/skool-automation/`910## Architecture (8 modules)11- `proxy_manager.py` — Residential IP pool with rotation and health checking12- `browser_manager.py` — Playwright + stealth + unique fingerprint per profile13- `skool_account.py` — Skool signup automation (verified against live site)14- `community_manager.py` — Community creation, pricing tiers, settings15- `content_seeder.py` — Post content, reply, like, 14-day seeding calendar16- `profile_store.py` — SQLite persistence for profiles and seeding state17- `mail_tm.py` — Mail.tm disposable email API (blocked by Skool, use only for testing)18- `orchestrator.py` — Master controller: `create_full_community()` does everything1920## CLI21```bash22cd /mnt/c/Users/Lenovo/Desktop/skool-automation23source venv/bin/activate24export PLAYWRIGHT_BROWSERS_PATH=./browsers2526python run.py status27python run.py proxies proxies.txt28python run.py create "Community Name" --niche health --email you@gmail.com --email-password "app_pass"29python run.py batch communities.json30python run.py seed profile_id https://skool.com/community-name31```3233## Critical Live-Tested Findings (May 29, 2026)3435### Browser Interaction361. **ALL overlay-blocked elements need `force=True`** — Skool's React modals use `<h2>` and `<span>` overlays that intercept pointer events. CTA buttons, code inputs, and other elements in modals ALL require `click(force=True)`.372. **Keyboard Tab+Enter for form submission** — Mouse clicks on the submit button silently fail due to a `<span>Sign Up</span>` overlay inside the button. Tab to button, press Enter. This triggers React's synthetic events correctly.383. **Keyboard Tab works for verification code entry too** — Tab to code input, type code, Tab to verify button, Enter.3940### Selectors (verified live)41- Signup form: `#first_name`, `#last_name`, `#email`, `#password`42- CTA (landing page): `button:has-text('Create your community')` — click with `force=True`43- Submit: `button[type='submit']` — navigate via keyboard Tab, press Enter44- Code input: `input[type='text']` (the one without id/name — Skool's code input has no id)45- "Log in with a code": `text="Log in with a code"` — appears after entering email on login page4647### Verification48- **4-digit codes** (NOT 6-digit) — subject format: `"5152 is your Skool verification code"`49- Gmail IMAP: poll inbox for most recent email with subject matching `r'(\d{4,6}) is your Skool'`50- App passwords with spaces work (e.g., `'tasb zvbo sjdi rxrp'`) — do NOT strip spaces5152### Email Strategy53- **Disposable domains silently rejected** — mail.tm, guerrilla mail, all blocked54- **Gmail +alias trick works** — `user+skool1@gmail.com` creates unique Skool accounts, all to same inbox55- **Rate limit**: ~5-6 signup attempts per IP before challenge page. Use VPN/proxy rotation.56- For existing accounts: use the "Log in with a code" passwordless flow5758### Account State59- **Unverified accounts get cleaned up** — if verification code isn't entered quickly, the pending account is deleted60- **Cookie persistence works** — `storage_state` saves logged-in sessions for reuse6162### Community Creation63- **Skool requires a paid plan** — Hobby $9/month or Pro64- After clicking "Create your community" while logged in, you're redirected to `/signup?v=pricing`65- Must select a plan before community setup form appears6667## What's Needed Before Production Use681. **Real Gmail with App Password** — App passwords with spaces work fine. Gmail `+alias` trick (`user+skool1@gmail.com`) creates unique accounts sharing one inbox.692. **VPN or residential proxies** — IPs rate-limited after ~5 signup attempts. Rotate IPs between launches.703. **Skool paid plan** — $9/month Hobby plan required before creating communities.714. **Cookie persistence** — Save `storage_state` after first login to reuse sessions.7273## Pitfalls74- NEVER strip spaces from Gmail App Passwords — they're part of the credential75- NEVER use normal clicks on overlay-blocked elements — always `force=True`76- NEVER use disposable email domains — Skool silently rejects them77- ALWAYS use keyboard Tab+Enter for React form submissions78- After ~5 signup attempts from one IP, Skool serves a blank challenge page. Switch IP.7980## Form Flow (Verified)8182### New Signup831. `page.goto('https://www.skool.com/signup')` — landing page842. Click CTA: `p.locator("button:has-text('Create your community')").first.click(force=True)` — opens modal853. Fill via keyboard: `#first_name` → Tab → `#last_name` → Tab → `#email` → Tab → `#password`864. Tab to submit button, press Enter875. Wait for "We sent you a code" — poll Gmail IMAP for `r'(\d{4,6}) is your Skool'` in subject886. Tab to code input (first text input without id), type code, Tab to Verify, Enter8990### Existing Account Login911. `page.goto('https://www.skool.com/login')`922. Fill email in `input[type='email']`933. Click `text="Log in with a code"` (appears after email entry)944. Poll Gmail for code, enter via keyboard Tab+Enter955. Save cookies: `page.context.storage_state(path='cookies.json')`9697### Community Creation (requires paid plan)981. While logged in, go to signup page, click "Create your community"992. Redirected to `/signup?v=pricing` — select Hobby ($9/mo) or Pro1003. Click "TRY FOR FREE" → community setup form appears101102## Configuration103Pre-configured communities.json has 5 niches: insurance, health, debt, offshore, credentials.104Each has pricing tiers, persona names, and descriptions ready.105106**User's domain expertise**: nootropics, research chemicals, cognitive enhancement, neurochemistry.107When recommending which community to start first, prioritize Research Collective — it aligns108with the user's actual knowledge and the persona writes itself. Insurance/Debt are solid109businesses but the user has no edge there.110111## Strategy Docs (on Desktop)112- skool-empire-strategy.md — Macro strategy113- skool-greymarket-niches.md — 5 greymarket niches114- skool-greymarket-niches-v2.md — 5 more + portfolio theory115- skool-operational-playbook.md — Full implementation guide116- skool-communities-playbook.html — Complete copy-paste playbook: bios, posts, funnels, pricing for 5 communities (open in browser, Ctrl+P to PDF)117118## Content Production Standards (UPDATED — June 3, 2026)119120The user rejected AI-looking content and infographics. Every article and visual must pass these gates.121122### Voice Toolkit (from Substack style analysis)123Model writing on high-tier Substack authors — this is what justifies $149-997/mo pricing:124- **Scott Alexander (Astral Codex Ten):** Footnotes with real citations + jokes, self-deprecation, mechanism obsession, varied paragraph length, "I'm not a doctor but here's the data" energy125- **Dwarkesh Patel:** Chain-of-reasoning structure, short paragraphs, Socratic self-questioning, "but notice that..." pivots, personal intellectual journey as narrative spine126- **SemiAnalysis:** Lead with verdicts, proprietary data creates authority, competitive framing, swagger, specific numbers127- **Balaji:** Concept coinage, name-the-pattern, historical analogy128129### Anti-AI Patterns (MANDATORY before publication)130Run EVERY article through the humanizer skill's 29-pattern check. The most common offenders in this genre:131- Identical section structure per marker/topic (reads like a template)132- Signposting ("Here are the 12 markers" → just start)133- Rule-of-three lists ("silently destroying your cognition, your cardiovascular, your metabolic")134- Generic positive conclusions ("stop guessing, start measuring" → specific)135- Consistent paragraph length (must vary wildly — one-sentence gut punches mixed with dense blocks)136- Missing footnotes (premium paid content should have 4-8+ footnotes with real citations)137138### Information Density139- Every paragraph must earn its place with specific numbers, mechanisms, or citations140- No filler sentences. No "in today's world." No hedging.141- Footnotes must cite real papers with DOIs or PMIDs — never invented references142- Each marker/section must have a DIFFERENT entry point: personal story, mechanism explanation, data reveal, contrarian take, or problem statement — never the same shape twice143144### Visual Content — THREE TIERS ONLY (no AI slop)1451. **Scientific charts (PREFERRED):** matplotlib from actual data arrays. Forest plots, bar charts, timelines, error bars. 200 DPI. Dark theme. Proper axis labels. Data annotations. Zero hallucination risk — the numbers in code ARE the numbers in the article.1462. **Rendered infographics:** HTML/CSS + Chart.js → Playwright screenshot to PNG. Use only when interactive charts add value. Dark blueprint theme, JetBrains Mono + Inter fonts.1473. **Research figures:** Download from open-access papers (PubMed Central, arXiv). Must have verified DOI/PMID. Must be properly attributed. Never use AI-generated figures.148149### NEVER DO (user explicitly rejected):150- Mermaid diagrams — toy-level, not premium151- AI-generated images — hallucinated data, looks cheap152- Stock-photo-style infographics — no scientific credibility153- "Designed" infographics without data provenance154155### Quality Audit Framework156Before ANY article or playbook ships, run the rubric in `references/content-quality-standards.md`:157- Accuracy: numbers, citations, claims, units, mechanisms, contradictions, disclaimers158- Coherence: narrative arc, section flow, voice consistency, audience fit, CTA159- Visuals: data accuracy, readability, density, professional quality, source attribution160161### Research Citations162- Search PubMed (NCBI Entrez API) and Semantic Scholar for every factual claim163- Only cite papers with verified DOIs or PMIDs164- Open-access papers preferred (figures can be reused with attribution)165- Save all paper references to the vault for audit trail166- See `references/research-workflow.md` for the full search → verify → cite pipeline167168## Reference Files (in this skill)169- `references/signup-flow.md` — Complete signup recipe with failure modes, code patterns, login flow170- `references/ubuntu-playwright-fix.md` — coreBundle.js patch for Ubuntu 26.04171- `references/communities-playbook.md` — Quick reference for the 5 ready-to-launch communities172- `references/content-quality-standards.md` — Full audit rubric: accuracy, coherence, visual, anti-AI checks173- `references/research-workflow.md` — How to find, verify, and cite real papers with DOIs (PubMed, Semantic Scholar, arXiv)174- `scripts/signup.py` — Ready-to-run signup template (edit EMAIL + APP_PASS, then execute)