Outschool Class Scraper avatar

Outschool Class Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Outschool Class Scraper

Outschool Class Scraper

Scrape Outschool's live-online and self-paced class catalog for kids and teens. Search by keyword, subject, and format; get pricing, ratings, age/grade ranges, teacher profiles, and schedules. Enrich individual class URLs with full syllabi, learning goals, and teacher bios.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

Scrape Outschool's catalog of live-online and self-paced classes for kids and teens. Search by keyword, subject, and format; get pricing, ratings, age/grade ranges, teacher profiles, and upcoming schedules. Enrich individual class URLs with full syllabi, learning goals, and teacher bios.

What this actor does

  • Two modes: search (keyword/subject/format search with rich filters) and byUrls (fetch full details for specific class URLs)
  • Filters: class type (Academic Curriculum / Tutoring / Electives & Enrichment), subjects, format (live/self-paced), age range, price range, minimum rating, exclude ongoing clubs, only-available
  • Sorting: price, rating, or newest
  • Rich detail enrichment: full class description, teacher bio/credentials, learning goals, prerequisites, materials, and a lesson-by-lesson syllabus
  • No login, no cookies, no paid proxy — public class-catalog data only, via the same GraphQL endpoints Outschool's own site explicitly allow-lists for crawlers in robots.txt
  • Empty fields are omitted — every record only contains fields that have real data

Output per class

  • title — class title
  • sourceUrl — canonical outschool.com/classes/... URL
  • classSlug — Outschool's class slug ID
  • summary / quickSummary — class description
  • subject — top-level subject (e.g. Coding & Tech, Math)
  • classFormatLive online or Self-Paced
  • ageMin / ageMax, gradeLevelMin / gradeLevelMax
  • durationMinutes, durationWeeks, weeklyMeetings, meetingCount (mode=byUrls)
  • priceCents / priceDollars
  • rating, reviewCount
  • sizeMin / sizeMax — class size range
  • isClub, isSelfPaced, isFlexSchedule, isOneTime, isAvailable, canEnroll
  • imageUrl, videoUrl, videoThumbnailUrl
  • teacherName, teacherUrl, teacherRating, teacherReviewCount, teacherPhotoUrl
  • nextSectionStart / nextSectionEnd, spotsRemaining (mode=search)
  • sectionCount, openSectionCount, upcomingSectionCount — total / open / upcoming class sections (mode=search)
  • lessonCount, syllabus[] (mode=byUrls: title, description, lessonNumber, weekNumber)
  • learningGoals[], prerequisites, materials, classExperience, whyMe (mode=byUrls)
  • teacherAbout, teacherHeadline, teacherCredentials[], teacherCityState, teacherClassCount (mode=byUrls)
  • publishedAt, isPublished, isSoldOut (mode=byUrls)
  • recordType: "class", scrapedAt

Input

FieldTypeDefaultDescription
modestringsearchsearch / byUrls
searchQuerystringcodingFree-text query. Leave empty to browse by subject/format only.
classTypeselectCourse (Academic Curriculum) / Tutoring / Enrichment or Club (Electives & Enrichment). Leave empty for all types.
subjectsarrayCoding & Tech / English / Math / Life Skills / Science & Nature / Games & Hobbies / World Languages / Social Studies / Arts / Music / Health & Wellness / Test Prep
formatsarrayLive online / Self-Paced
onlyAvailablebooleantrueSkip sold-out / non-enrollable classes
minAge / maxAgeintAge range overlap filter (3-18)
minPriceDollars / maxPriceDollarsnumberPrice range filter (USD)
minRatingnumberDrop classes rated below this (0-5)
excludeClubsbooleanfalseSkip open-ended clubs, only structured classes
sortByselectrelevancerelevance / priceAsc / priceDesc / ratingDesc / newest
classUrlsarrayClass URLs to fetch (mode=byUrls)
maxItemsint30Hard cap on emitted records (1–500)

Example: affordable self-paced coding classes for ages 10-14

{
"mode": "search",
"searchQuery": "",
"subjects": ["Coding & Tech"],
"formats": ["Self-Paced"],
"minAge": 10,
"maxAge": 14,
"maxPriceDollars": 100,
"sortBy": "priceAsc",
"maxItems": 50
}

Example: highest-rated live math classes

{
"mode": "search",
"searchQuery": "math",
"formats": ["Live online"],
"minRating": 4.5,
"sortBy": "ratingDesc"
}

Example: enrich specific class URLs with full syllabus

{
"mode": "byUrls",
"classUrls": [
"https://outschool.com/classes/all-about-python-coding-level-1-Y3R381hD"
]
}

Use cases

  • Homeschool curriculum planning — build a shortlist of classes filtered by age, subject, and budget
  • Edtech competitive analysis — track Outschool's catalog breadth and pricing by subject
  • Teacher/instructor research — pull ratings, credentials, and class history for specific educators
  • Content gap analysis — compare subject/format coverage against your own platform
  • Price benchmarking — analyze pricing distribution across subjects and formats

FAQ

Do I need an Outschool account? No. This actor only reads publicly available class-catalog data through the same GraphQL endpoints Outschool's own class-search page and class-detail pages call — no login, cookies, or paid proxy required.

Why do some classes lack a rating? Newly-listed classes haven't accumulated reviews yet. Use minRating to filter these out if needed.

What's the difference between search and byUrls? search returns catalog-level fields (price, rating, schedule) across many classes at once. byUrls fetches each class's own detail page for richer content — full syllabus, learning goals, prerequisites, and teacher bio — at the cost of one request per class.

How is priceDollars calculated? Outschool prices classes in cents; priceDollars is priceCents / 100.

What does classType filter? Outschool's own top-level browse tabs: Course = Academic Curriculum (structured, sequential courses), Tutoring = 1-on-1 or small-group tutoring, Enrichment or Club = Electives & Enrichment (hobby classes, ongoing clubs/groups). Leave empty to search across all types.

What counts as a "club"? Outschool's open-ended, ongoing group activities (not fixed-length classes). Set excludeClubs: true to only get structured, scheduled classes.

How fresh is the data? Real-time — every run queries Outschool's live class-search index.

How does sortBy (price/rating/newest) work? The actor scans a deeper pool of results (beyond just maxItems) before sorting and truncating, so the top results by price/rating/recency are accurate over a representative slice of the catalog rather than only the first page of relevance-ranked matches.

Limitations

Outschool's robots.txt also allow-lists three GraphQL operations this actor does not currently call (ListingsByActivityUids, ListByFirstListedAt, CategoryPagesByPage) — their exact query documents are not derivable without a live browser session (the GraphQL endpoint uses byte-exact query allow-listing and returns opaque errors for unregistered queries). The search mode with sortBy: "newest" and a deep scan, plus subjects/formats filters, closely approximates what those endpoints would offer.