Skool Group Scraper With Owner Contact Leads avatar

Skool Group Scraper With Owner Contact Leads

Pricing

Pay per usage

Go to Apify Store
Skool Group Scraper With Owner Contact Leads

Skool Group Scraper With Owner Contact Leads

🎓 Skool Group Scraper extracts public data from Skool communities—members, posts, topics, reactions & links—into clean CSV/JSON. 🔎 Perfect for community research, outreach, competitive analysis & content strategy. ⚡ Fast, reliable, API-ready.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Scrapier

Scrapier

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

Skool Group Scraper — Owner Emails, Phones, and Monetization Data

Skool Group Scraper With Owner Contact Leads turns any Skool discovery page into a table of contactable community owners. Point it at a discovery URL and every community that appears there comes back as one row — profile, pricing, member count — enriched with the owner's social links, monetization badge, last-online time, and a best-effort parsed email and phone number. Every response is structured JSON, ready to load into a CRM, score with an LLM, or feed a cold-outreach pipeline. As Skool's creator economy keeps expanding, that owner list is the fastest way to find who actually runs a community, not just who posts in it.

What is Skool Group Scraper With Owner Contact Leads?

It is an Apify Actor that queries Skool's public discovery directory and turns every community it finds into a full community-plus-owner record. Unlike a member scraper, it does not enumerate a community's rank-and-file members — it resolves exactly one lead per community: the owner. That owner record is where this Actor differs from every other Skool scraper on the Store — it appends a dedicated owner contact-lead block (email, phone, socials, monetization badge, last-online, and a hasOwnerContact flag) on top of the standard community profile. No Skool account, login, or cookies are required; the Actor reads only what a logged-out visitor can see.

Real capability, one bullet per input control:

  • 📇 Discovery harvesting — feed one or more Skool discovery URLs (urls) and every community listed there becomes a row
  • 📊 Per-link lead capmaxItems caps how many owners are pulled from each discovery link (1–50,000)
  • 📧 Best-effort contact parsingextractOwnerContact scans the owner's bio, website, and community description for an email and phone number
  • 🏅 Monetization + last-seen signalincludeOwnerStatus attaches the owner's Skool monetization badge and a readable last-online timestamp
  • Contactable-only filteringrequireOwnerContact drops any community whose owner has no reachable channel, and those dropped rows are never saved or charged
  • 🔒 Optional proxy controlproxyConfiguration lets you force Apify Proxy from the first request instead of the Actor's automatic connection fallback

What data can you get with Skool Group Scraper With Owner Contact Leads?

Every row blends five field groups: the community's public profile, its pricing and membership terms, its activity counters, the owner's profile, and — the differentiator — the owner's contact-lead block.

Result typeExtracted fieldsPrimary use case
Community profileid, name, displayName, description, color, initials, logoUrl, logoBigUrl, coverSmallUrl, faviconUrl, customLinksIdentify and de-duplicate communities
Pricing & membershipmonthlyPrice, monthlyCurrency, annualPrice, annualCurrency, membership, plan, landingPageAccessType, privacyQualify leads by price point and access model
Community activitytotalMembers, totalOnlineMembers, totalAdmins, totalPosts, totalRules, numCourses, numModules, audioChatVisible, calendarVisible, classroomVisible, mapVisibleSize and engagement scoring
Owner profileownerId, ownerName, ownerFirstName, ownerLastName, ownerBio, ownerLocation, ownerDiscTop, ownerActivityStatus, ownerMyersBriggs, ownerOnline, ownerLastOffline, ownerPictureProfile, ownerPictureBubble, ownerCreatedAt, ownerUpdatedAtPersonalize outreach
Owner contact leadsownerEmail, ownerPhone, ownerSocials (instagram, youtube, facebook, twitter, linkedin, website), ownerMrrStatus, ownerLastOnline, hasOwnerContactBuild a cold-outreach or CRM lead list
Landing page & supportlandingPageDescription, landingPageAttachments, supportEmailRead the sales pitch a prospect sees before joining

🧲 Owner contact leads

This is the block that makes the Actor a lead generator instead of a directory dump. ownerSocials is always attempted and normalizes the six flat social fields Skool exposes on an owner profile into one nested object. ownerMrrStatus and ownerLastOnline come straight from Skool's own owner metadata — the badge (e.g. liftoff, clover, crown) and a human-readable ISO 8601 timestamp converted from the raw nanosecond ownerLastOffline value. ownerEmail and ownerPhone are a best-effort regex parse over the owner's bio, personal website field, and community description — Skool's own API never returns an owner email, so these two fields are derived text extractions, not authoritative account data, and coverage is low (under 60%, since most Skool creators publish neither). hasOwnerContact is true the moment any one of email, phone, or a social link resolves to a value, which is what requireOwnerContact filters on:

{
"ownerSocials": { "instagram": "https://instagram.com/example", "youtube": null, "facebook": null, "twitter": null, "linkedin": null, "website": "https://example.com" },
"ownerMrrStatus": "clover",
"ownerLastOnline": "2026-07-24T09:41:02Z",
"ownerEmail": "hello@example.com",
"ownerPhone": null,
"hasOwnerContact": true
}

Community and pricing profile

The base profile fields cover what a community charges and how big it is: monthlyPrice/annualPrice (parsed from Skool's raw price blob and normalized out of minor currency units), membership and plan (access model), and the activity counters (totalMembers, totalPosts, numCourses, and so on). Use this block to rank owner leads by community size or monetization tier before you ever look at contact fields — a crown-badge owner running a 5,000-member paid community is a very different lead than a free community with 12 members.

Why not build this yourself?

Skool does not publish a public API for its discovery directory or group listings. The only interfaces are the authenticated web app and the internal Next.js data routes (/_next/data/<buildId>/discovery.json) the site itself uses to paginate — undocumented, versioned by a build ID that changes on every Skool deploy, and reachable only after the page has rendered its __NEXT_DATA__ payload. Building this in-house means reverse-engineering that payload, tracking the build ID, and maintaining a connection-fallback ladder (direct → datacenter proxy → residential proxy, with up to three retries and a fresh session ID on each) to survive anti-bot escalation — all before writing a single line of owner-contact parsing.

Skool is also a single-page app with continuous background network traffic, so a naive scraper that waits for the page to go network-idle will time out on almost every run. This Actor waits specifically for the script#__NEXT_DATA__ element to attach to the DOM instead, which is present as soon as the server-rendered payload lands — a detail that only shows up once you've watched a generic headless-browser scraper fail against this exact site. This Actor keeps that maintenance internal and exposes a stable input/output contract instead.

What is the difference between a Skool member scraper and an owner-lead scraper?

A member scraper enumerates every person inside a community you already belong to; an owner-lead scraper enumerates the one person who runs each community you find in search. As observed on the memo23/skool-members-scraper listing (checked 2026-07-26), member-level scraping "require[s] users... to log in using cookie-based authentication, and you need to be a member or part of the group that you want to scrape" — you export session cookies from a logged-in browser and hand them to the Actor. Skool Group Scraper With Owner Contact Leads takes the opposite approach: it never touches a member list and never requires a Skool session. It reads only the public discovery route and each community's public /about page, and returns exactly one enriched row per community — the owner. If you need every member's profile inside groups you belong to, a member scraper is the right tool; if you need a list of who to contact about a community, this Actor returns that directly without a login step.

How to scrape Skool with Skool Group Scraper With Owner Contact Leads?

  1. Open the Actor's page in Apify Console and start a new run (or use the Apify API / apify_client).
  2. Paste one or more Skool discovery URLs into urls — one per line (e.g. https://www.skool.com/discovery).
  3. Set maxItems for the lead cap per link, and toggle extractOwnerContact, includeOwnerStatus, and requireOwnerContact for the exact lead shape you want.
  4. Start the run.
  5. Open the Output tab to browse results, or export as JSON, CSV, or Excel.

Example input:

{
"urls": ["https://www.skool.com/discovery?q=marketing"],
"maxItems": 25,
"extractOwnerContact": true,
"includeOwnerStatus": true,
"requireOwnerContact": true,
"proxyConfiguration": { "useApifyProxy": false }
}

urls accepts a full list of discovery links — different search queries, different Skool categories — and the Actor works through them in order, up to maxItems communities per link. Communities are de-duplicated by their Skool group id across the whole run, so a community that surfaces under two overlapping discovery links is only enriched, saved, and charged once. Within a single discovery link, owner-page enrichment (the /about fetch for each community) runs with an internal concurrency of 3 — this is fixed in the Actor's code, not a configurable input, so total run time scales roughly linearly with the number of communities across all your urls.

⬇️ Input

ParameterRequiredTypeDefault / constraintsDescription
urlsYesarray (string list)prefill: ["https://www.skool.com/discovery"]One Skool discovery URL per line. Every community found here is enriched into an owner lead.
maxItemsNointegerdefault 10; min 1; max 50000Maximum owners to pull from each discovery link. Start small to sample, raise it for a full harvest.
extractOwnerContactNobooleandefault trueScan the owner's bio, website, and community description for an email address and a phone number. Coverage is low (under 60%) — most Skool creators publish neither. Off leaves both null.
includeOwnerStatusNobooleandefault trueAttach the owner's Skool monetization badge (ownerMrrStatus, e.g. liftoff/clover/crown) and a readable last-online timestamp (ownerLastOnline).
requireOwnerContactNobooleandefault falseKeep only communities whose owner has at least one reachable channel (email, phone, or a social link). Filtered-out rows are neither saved nor charged.
proxyConfigurationNoobject (proxy editor)prefill: { "useApifyProxy": false }Enable to route through Apify Proxy from the first request. Off runs the Actor's automatic direct → datacenter → residential fallback.

No Skool login, cookie, or API key is required for any parameter — none of the inputs above are credentials.

Common pitfall: urls must point to a Skool discovery route (e.g. https://www.skool.com/discovery or a filtered discovery URL like ?q=marketing), not a single group's page or a /-/members URL — extraction depends on the discovery route's embedded group list, and a non-discovery URL will fail to enrich. Also remember that requireOwnerContact silently reduces your row count below maxItems: filtered communities are dropped before they are saved, so they never appear in the dataset and are never billed.

⬆️ Output

Each row is typed, normalized JSON with a consistent schema across runs, pushed to the Actor's default Apify dataset under the row_result pay-per-event charge. Communities filtered out by requireOwnerContact are excluded from the dataset entirely and are not charged. From the dataset, export to JSON, CSV, or Excel directly from Apify Console or the API. The dataset's default view surfaces 11 columns for quick scanning (displayName, name, ownerName, ownerEmail, ownerPhone, ownerInstagram, ownerMrrStatus, ownerLastOnline, hasOwnerContact, totalMembers, ownerLocation) — every row actually carries all fields documented in the table above and below.

Scraped results

[
{
"id": "5bf05ef84e524567abab979b06b5cfb9",
"name": "brandcollab-latino-5292",
"displayName": "BrandCollab Latino",
"description": "TikTok Shop en español. Aprende a vender y crear contenido viral.",
"landingPageDescription": "BrandCollab Latino — the #1 community for TikTok Shop affiliate creators.",
"supportEmail": null,
"monthlyPrice": 39,
"monthlyCurrency": "usd",
"annualPrice": null,
"annualCurrency": null,
"color": "#F4CBC4",
"initials": "BL",
"privacy": 1,
"membership": 1,
"plan": null,
"landingPageAccessType": 1,
"affiliatePercent": 0,
"pluginAutoDmEnabled": 0,
"pluginMinChatLevelEnabled": 0,
"surveyEnabled": 0,
"surveyQuestions": [],
"surveyUpdatedAt": null,
"logoUrl": "https://assets.skool.com/f/5bf05ef8.../logo.png",
"logoBigUrl": "https://assets.skool.com/f/5bf05ef8.../logo-big.jpg",
"coverSmallUrl": "https://assets.skool.com/f/5bf05ef8.../cover-sm.jpg",
"faviconUrl": "https://assets.skool.com/f/5bf05ef8.../favicon.png",
"customLinks": [],
"totalMembers": 548,
"totalOnlineMembers": 1,
"totalAdmins": 7,
"totalPosts": 8952,
"totalRules": 0,
"numCourses": 16,
"numModules": 236,
"audioChatVisible": false,
"calendarVisible": true,
"classroomVisible": true,
"mapVisible": true,
"landingPageAttachments": [
{ "id": "915493...", "type": 2, "imageFileId": null, "imageOriginalUrl": null, "imageSmallUrl": null, "imageBigUrl": null, "videoId": null, "videoUrl": "https://www.loom.com/share/f47a5939...", "videoThumbnailUrl": "https://cdn.loom.com/sessions/thumbnails/f47a5939....gif" }
],
"ownerId": "58d5ff2786ba4883b39251cd22701d1b",
"ownerName": "mel-moreira-6656",
"ownerFirstName": "Mel",
"ownerLastName": "Moreira",
"ownerBio": "I am passionate about following what makes me happy.",
"ownerLocation": "USA",
"ownerDiscTop": null,
"ownerActivityStatus": null,
"ownerMyersBriggs": null,
"ownerOnline": 1,
"ownerLastOffline": "1764200517573641700",
"ownerPictureProfile": "https://assets.skool.com/f/58d5ff27.../profile.jpg",
"ownerPictureBubble": "https://assets.skool.com/f/58d5ff27.../bubble.jpg",
"ownerInstagram": null,
"ownerYoutube": null,
"ownerFacebook": null,
"ownerTwitter": null,
"ownerLinkedin": null,
"ownerWebsite": "https://brandcollablatino.com/",
"ownerCreatedAt": "2022-05-25T02:10:03.534129Z",
"ownerUpdatedAt": "2025-11-27T00:31:39.759122Z",
"createdAt": "2024-09-10T22:04:42.873505Z",
"updatedAt": "2025-12-14T20:57:33.89616Z",
"createdBy": "58d5ff2786ba4883b39251cd22701d1b",
"ownerEmail": null,
"ownerPhone": null,
"ownerSocials": { "instagram": null, "youtube": null, "facebook": null, "twitter": null, "linkedin": null, "website": "https://brandcollablatino.com/" },
"ownerMrrStatus": "liftoff",
"ownerLastOnline": "2025-11-27T00:15:17Z",
"hasOwnerContact": true
},
{
"id": "a1c92e0f7b3d4e21a8f60c9e5b7d4a11",
"name": "shopify-scaling-lab",
"displayName": "Shopify Scaling Lab",
"description": "Weekly teardown calls for 6-7 figure Shopify brand owners.",
"landingPageDescription": null,
"supportEmail": "support@shopifyscalinglab.com",
"monthlyPrice": 149,
"monthlyCurrency": "usd",
"annualPrice": 1490,
"annualCurrency": "usd",
"color": "#2E86DE",
"initials": "SS",
"privacy": 1,
"membership": 1,
"plan": null,
"landingPageAccessType": 1,
"affiliatePercent": 0,
"pluginAutoDmEnabled": 0,
"pluginMinChatLevelEnabled": 0,
"surveyEnabled": 0,
"surveyQuestions": [],
"surveyUpdatedAt": null,
"logoUrl": "https://assets.skool.com/f/a1c92e0f.../logo.png",
"logoBigUrl": "https://assets.skool.com/f/a1c92e0f.../logo-big.jpg",
"coverSmallUrl": "https://assets.skool.com/f/a1c92e0f.../cover-sm.jpg",
"faviconUrl": "https://assets.skool.com/f/a1c92e0f.../favicon.png",
"customLinks": [],
"totalMembers": 2114,
"totalOnlineMembers": 9,
"totalAdmins": 3,
"totalPosts": 4021,
"totalRules": 5,
"numCourses": 4,
"numModules": 31,
"audioChatVisible": true,
"calendarVisible": true,
"classroomVisible": true,
"mapVisible": false,
"landingPageAttachments": [],
"ownerId": "b2d84f1e9c6a4783a2e5d0f8c1b3a9e2",
"ownerName": "jonas-becker",
"ownerFirstName": "Jonas",
"ownerLastName": "Becker",
"ownerBio": "Ecom operator turned coach. DM me at jonas@shopifyscalinglab.com",
"ownerLocation": "Berlin, Germany",
"ownerDiscTop": null,
"ownerActivityStatus": null,
"ownerMyersBriggs": null,
"ownerOnline": 0,
"ownerLastOffline": "1753420800000000000",
"ownerPictureProfile": "https://assets.skool.com/f/b2d84f1e.../profile.jpg",
"ownerPictureBubble": "https://assets.skool.com/f/b2d84f1e.../bubble.jpg",
"ownerInstagram": "https://instagram.com/jonasbecker",
"ownerYoutube": null,
"ownerFacebook": null,
"ownerTwitter": null,
"ownerLinkedin": "https://linkedin.com/in/jonasbecker",
"ownerWebsite": "https://shopifyscalinglab.com",
"ownerCreatedAt": "2023-01-14T11:02:00.000000Z",
"ownerUpdatedAt": "2026-06-30T08:12:44.000000Z",
"createdAt": "2023-02-01T09:00:00.000000Z",
"updatedAt": "2026-07-20T17:45:12.000000Z",
"createdBy": "b2d84f1e9c6a4783a2e5d0f8c1b3a9e2",
"ownerEmail": "jonas@shopifyscalinglab.com",
"ownerPhone": null,
"ownerSocials": { "instagram": "https://instagram.com/jonasbecker", "youtube": null, "facebook": null, "twitter": null, "linkedin": "https://linkedin.com/in/jonasbecker", "website": "https://shopifyscalinglab.com" },
"ownerMrrStatus": "crown",
"ownerLastOnline": "2025-07-25T00:00:00Z",
"hasOwnerContact": true
},
{
"id": "c7e41a0d3f2b4e88b1a9d6c5e2f0a7b3",
"name": "no-code-builders-club",
"displayName": "No-Code Builders Club",
"description": "Free community for people learning Bubble, Webflow, and Airtable.",
"landingPageDescription": null,
"supportEmail": null,
"monthlyPrice": null,
"monthlyCurrency": null,
"annualPrice": null,
"annualCurrency": null,
"color": "#7ED957",
"initials": "NC",
"privacy": 0,
"membership": 0,
"plan": null,
"landingPageAccessType": 0,
"affiliatePercent": 0,
"pluginAutoDmEnabled": 0,
"pluginMinChatLevelEnabled": 0,
"surveyEnabled": 0,
"surveyQuestions": [],
"surveyUpdatedAt": null,
"logoUrl": "https://assets.skool.com/f/c7e41a0d.../logo.png",
"logoBigUrl": null,
"coverSmallUrl": "https://assets.skool.com/f/c7e41a0d.../cover-sm.jpg",
"faviconUrl": null,
"customLinks": [],
"totalMembers": 312,
"totalOnlineMembers": null,
"totalAdmins": null,
"totalPosts": null,
"totalRules": null,
"numCourses": null,
"numModules": null,
"audioChatVisible": null,
"calendarVisible": null,
"classroomVisible": null,
"mapVisible": null,
"landingPageAttachments": [],
"ownerId": null,
"ownerName": null,
"ownerFirstName": null,
"ownerLastName": null,
"ownerBio": null,
"ownerLocation": null,
"ownerDiscTop": null,
"ownerActivityStatus": null,
"ownerMyersBriggs": null,
"ownerOnline": null,
"ownerLastOffline": null,
"ownerPictureProfile": null,
"ownerPictureBubble": null,
"ownerInstagram": null,
"ownerYoutube": null,
"ownerFacebook": null,
"ownerTwitter": null,
"ownerLinkedin": null,
"ownerWebsite": null,
"ownerCreatedAt": null,
"ownerUpdatedAt": null,
"createdAt": "2024-11-02T14:20:00.000000Z",
"updatedAt": "2024-11-02T14:20:00.000000Z",
"createdBy": null,
"ownerEmail": null,
"ownerPhone": null,
"ownerSocials": { "instagram": null, "youtube": null, "facebook": null, "twitter": null, "linkedin": null, "website": null },
"ownerMrrStatus": null,
"ownerLastOnline": null,
"hasOwnerContact": false
}
]

The third row above shows what a community looks like when its /about page fails to enrich after both attempts (network error, block, or an unusually slow render): enrich_one_record retries the /about fetch once, and if both attempts fail, the row is still saved — with the community's discovery-page fields intact but every owner field left at its initial null, and hasOwnerContact correctly resolving to false. It is not dropped, so a requireOwnerContact: true run would exclude it, but a default run keeps it in the dataset as a genuinely unenriched — not fabricated — record.

⚠️ Fields that never populate: affiliatePercent, pluginAutoDmEnabled, pluginMinChatLevelEnabled, surveyEnabled, surveyQuestions, surveyUpdatedAt, and customLinks are written by the Actor's own code as constants (0, 0, 0, 0, [], null, []) and are never overwritten from Skool's page data — treat them as reserved/always-empty rather than a live signal, unlike every other field in the table above.

How can I use the data extracted with Skool Group Scraper With Owner Contact Leads?

  • 📈 Growth and partnership marketers: filter to hasOwnerContact: true and a target ownerMrrStatus tier, then run cold outreach to community owners about tools, affiliate deals, or sponsorships.
  • 🤖 AI engineers and LLM developers: feed the JSON straight into an agent as grounding context — a lead-qualification agent can reason over ownerBio, totalMembers, and ownerMrrStatus without any additional scraping step.
  • 📊 Market researchers: track niche saturation and monetization tiers across a category by aggregating monthlyPrice, totalMembers, and ownerMrrStatus across a discovery search.
  • 🎯 Sales and BD teams: qualify leads before outreach by community size (totalMembers) and monetization badge (ownerMrrStatus) instead of cold-emailing every owner found.

How do you monitor owner contact leads over time?

Monitoring here means re-running the same discovery URL(s) on a schedule and diffing the new dataset against the previous one. Between runs, three things typically change: new communities enter the discovery feed for your search terms, an owner who previously had no contact channel now has one (hasOwnerContact flips from false to true), or an owner crosses into a new monetization tier (ownerMrrStatus changes, e.g. liftoffclover). The fields worth diffing between two runs are id (to detect new communities), hasOwnerContact, ownerMrrStatus, ownerLastOnline, and totalMembers.

A practical loop: schedule a recurring run of your discovery URL(s) with Apify Schedules → export each run's dataset by id → compare the new run's rows against the previous run's export → flag any row where id is new, or where hasOwnerContact or ownerMrrStatus changed. This Actor does not persist run state internally or maintain its own cross-run deduplication store, so the diff itself has to happen outside the Actor — in your own script, spreadsheet, or pipeline that stores the previous export.

Integrate Skool Group Scraper With Owner Contact Leads and automate your workflow

Skool Group Scraper With Owner Contact Leads works with any language or tool that can send an HTTP request through the Apify API.

REST API with Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("<YOUR_USERNAME>/skool-group-scraper-with-owner-contact-leads").call(
run_input={
"urls": ["https://www.skool.com/discovery?q=fitness"],
"maxItems": 25,
"requireOwnerContact": True,
}
)
for lead in client.dataset(run["defaultDatasetId"]).iterate_items():
print(lead["displayName"], lead["ownerEmail"], lead["ownerMrrStatus"])

Scheduled monitoring and delivery

Set up an Apify Schedule to re-run the same discovery URLs on a cron interval, then pull each run's results with the API or an Apify webhook that fires on ACTOR.RUN.SUCCEEDED. There is no built-in incremental or "new leads only" mode in this Actor — every scheduled run returns the full set of communities up to maxItems, so deduplication against prior runs happens in your own downstream pipeline, as described above.

Yes — scraping publicly accessible, logged-out web pages is generally legal. Skool Group Scraper With Owner Contact Leads reads only what any visitor can see without signing in: the discovery directory and each community's public /about page. In hiQ Labs, Inc. v. LinkedIn Corp., 938 F.3d 985 (9th Cir. 2019), the Ninth Circuit held that scraping data a website makes available to the public, without bypassing a login, does not violate the U.S. Computer Fraud and Abuse Act. Because owner names, bios, locations, and best-effort-parsed emails and phone numbers are personal data of identifiable individuals, GDPR (for EU residents) and CCPA (for California residents) framing applies to how you store, process, and reuse this data — public availability does not exempt you from those obligations. Consult your legal team before bulk-storing or reselling this data for commercial use.

❓ Frequently asked questions

Does Skool Group Scraper With Owner Contact Leads require a Skool login or cookies?

No. The Actor runs fully logged out — it never asks for a Skool session, cookie, or API key, and none of its input parameters are credentials.

What Skool URLs can I put into urls?

Discovery URLs only — for example https://www.skool.com/discovery or a filtered discovery URL such as https://www.skool.com/discovery?q=marketing. Individual group pages or /-/members URLs are not supported, because extraction depends on the discovery route's embedded __NEXT_DATA__ group list.

Up to maxItems (default 10, minimum 1, maximum 50000). The Actor paginates Skool's internal discovery data endpoint until it either hits that cap or Skool stops returning new communities for that search.

How does Skool Group Scraper With Owner Contact Leads handle Skool's anti-bot measures?

It runs a connection-fallback ladder: direct connection first, then a datacenter proxy, then up to three residential-proxy attempts with a fresh session ID between retries, plus a randomized 1–2 second delay before each page load. Turning on proxyConfiguration skips the ladder and routes through Apify Proxy from the first request instead.

Does it extract owner contact leads (email, phone, socials)?

Yes. ownerSocials (Instagram, YouTube, Facebook, Twitter, LinkedIn, website) is always attempted from the owner's public profile. ownerEmail and ownerPhone are best-effort regex extractions over the owner's bio, website, and community description, gated by extractOwnerContact; they are null whenever the owner never published one in that text, which is the majority case.

Why might ownerEmail and ownerPhone come back null?

Because they are parsed from free text the owner chose to publish, not pulled from an authoritative field — Skool's own API never exposes an owner email. Coverage is under 60%. ownerSocials and ownerMrrStatus have far higher coverage and are usually the more reliable contact signal.

How do I keep only contactable owners?

Turn on requireOwnerContact. Any community whose owner has no email, phone, or social link is dropped before it's saved — those rows are not written to the dataset and are not charged under row_result.

How do I monitor new communities or owners over time?

Schedule a recurring run of the same discovery URL(s) with Apify Schedules, then diff each run's dataset against the previous one by id, hasOwnerContact, and ownerMrrStatus. The Actor itself does not track state between runs.

Does it work with Claude, ChatGPT, and AI agent frameworks?

Yes, as an HTTP endpoint — any agent framework that can call the Apify API can trigger a run and read back the dataset with apify_client or a plain REST call. There is no dedicated MCP server documented for this Actor.

How does Skool Group Scraper With Owner Contact Leads compare to other Skool scrapers?

As observed on their listings (checked 2026-07-26), memo23/skool-members-scraper requires cookie-based login and group membership for member-level scraping and offers an optional "Include Contacts from Website" toggle on member profiles; this Actor needs no login at all and is scoped specifically to community owners, with a dedicated contactable-only filter (requireOwnerContact) that skips billing on filtered rows. Generic owner-lead extractors on other platforms — for example avinashchby/restaurant-owner-leads (Google Maps restaurants) and webcrawlerr/dubai-property-crawler (Dubai listings) — apply the same "resolve an owner's contact from a public listing" idea to different platforms entirely, not Skool.

Can I filter or sort results by price, member count, or monetization badge in the input?

No — there is no input parameter for that. The Actor returns every community up to maxItems in the order Skool's discovery feed serves them, with the fields (monthlyPrice, totalMembers, ownerMrrStatus, and so on) attached to each row. Filtering or sorting by those values happens after export, in your own spreadsheet, database, or downstream script — the one built-in row-level filter is requireOwnerContact, and it only checks for the presence of a contact channel, not its value.

Can I use it without managing proxies or platform credentials?

Yes. No Skool account, cookie, or API key is required, and proxy handling is automatic by default — the Actor runs its own direct → datacenter → residential fallback unless you explicitly turn on proxyConfiguration to force Apify Proxy.

💬 Your feedback

Found a bug or a field that doesn't match what Skool actually shows? Let us know via the Issues tab on this Actor's page in Apify Console — that's the fastest way to report a break or request a new field, and it helps keep this Actor maintained.