Skillshare Scraper avatar

Skillshare Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Skillshare Scraper

Skillshare Scraper

Scrape Skillshare classes (skillshare.com). Search classes with level, length, rating, and language filters; browse category rows; fetch class details and reviews by SKU; list all categories.

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

10 days ago

Last modified

Share

Scrape Skillshare — the online learning platform at skillshare.com. Search classes by keyword with level, length, rating, language, and recency filters; browse category rows (featured / popular / trending / free); fetch full class details and student reviews by SKU; and enumerate the full category tree. HTTP-only via Skillshare's public GraphQL and JSON endpoints with browser-grade TLS impersonation. No auth, no proxy.

What this actor does

  • Four modes: search, byCategory, bySku, listCategories
  • Filters: level, class length, rating bucket, original language, publish window, skill tag, staff picks, top teachers
  • Sorting: relevance, most students, recently published
  • Class details: description, teacher profile, rating, review counts, related classes, top projects
  • Reviews: student reviews shown on each class page (optional)
  • Empty fields are omitted

Output per class (mode=search / byCategory)

  • sku — Skillshare class SKU (e.g. 637385311)
  • classId — GraphQL class ID
  • title, description, url
  • studentCount, durationInSeconds
  • level, sourceLanguage, publishTime, lastUpdatedTime
  • rating, reviewCount
  • teacherName, teacherId, teacherHeadline, teacherPictureUrl, isTopTeacher
  • defaultCoverUrl
  • badges[], aspects[]
  • sourceUrl
  • recordType, scrapedAt

Extra fields in class detail records (mode=bySku)

  • tags[] — category / skill slugs
  • projectCount, levelingRating
  • teacherUid, teacherFirstName
  • relatedClasses[]
  • topProjects[]
  • reviewLikeTags, ratingCounts, sampleReview

Review records (mode=bySku + includeReviews)

  • id, testimonial, rating, levelingRating
  • recommended, createdAt
  • reviewerName, reviewerUrl, reviewerAvatar
  • positiveTags[], sku

When a class resolves through the GraphQL fallback (see Limitations), review records carry id, levelingRating, reviewerName, reviewerUsername, reviewerUrl, and sku — Skillshare's GraphQL review sample omits the numeric rating, testimonial, and avatar fields. The REST path emits the full field set above when reachable.

Input

FieldTypeDefaultDescription
modestringsearchsearch / byCategory / bySku / listCategories
searchQuerystringdrawingClass keyword (mode=search)
categorystringCategory slug (mode=byCategory)
categoryRowstringfeaturedfeatured / popular / trending / free
skusarrayClass SKUs or URLs (mode=bySku)
includeReviewsboolfalseEmit reviews (mode=bySku)
maxReviewsPerClassint10Reviews cap per class (1–200)
levelstringallLevels / beginner / intermediate / advanced
classLengthstringshort / shorter / medium / long
classRatingstringfourStar / threeStar / twoStar / belowTwoStar
languagestringen / de / pt / es / fr
publishTimestringpastYear / past3Months / pastMonth / past2Weeks / pastWeek
tagstringSkill tag, e.g. Procreate
isStaffPickboolfalseStaff picks only
isTopTeacherboolfalseTop teachers only
onlyHighQualityClassesbooltrueHigh-quality pool only
sortBystringrelevancerelevance / studentCount / publishTime
minRatingnumberClient-side min rating (0–4)
containsKeywordstringClient-side title/description substring filter
maxItemsint50Hard cap (1–1000)

Example: beginner watercolor classes, 4 stars+

{
"mode": "search",
"searchQuery": "watercolor",
"level": "beginner",
"classRating": "fourStar",
"publishTime": "pastYear"
}
{
"mode": "byCategory",
"category": "art-illustration",
"categoryRow": "trending"
}

Example: full detail + reviews for a class

{
"mode": "bySku",
"skus": ["637385311"],
"includeReviews": true,
"maxReviewsPerClass": 20
}

Example: staff-pick classes by a top teacher

{
"mode": "search",
"searchQuery": "illustration",
"isStaffPick": true,
"isTopTeacher": true,
"sortBy": "studentCount"
}

Use cases

  • Course discovery — build class catalogs by keyword, level, and skill tag
  • Creator research — analyze top teachers, student counts, and ratings
  • Market intelligence — track new classes per category over time
  • Review mining — aggregate student feedback for popular classes
  • Recommendation systems — feed class metadata and ratings into recommenders

FAQ

Do I need a Skillshare account? No. All modes use Skillshare's public search and class endpoints that work for guests.

Is there a rate limit? Skillshare protects its pages with Cloudflare; the actor uses browser-grade TLS impersonation and polite delays, and retries 429/403 with exponential backoff. If Cloudflare ever challenges every request, run with the Apify proxy (useApifyProxy) enabled as a fallback.

Why does the class page URL return 403 to a script? Skillshare's Cloudflare setup challenges plain HTTP clients on the class-page HTML path, though the page opens normally in any browser and all data in this actor is served by API endpoints that work with browser-grade requests. Class cover images on static.skillshare.com are freely accessible.

What are SKUs? The numeric class IDs in URLs, e.g. 637385311 in https://www.skillshare.com/en/classes/.../637385311. Both bare SKUs and full URLs are accepted.

What do the level values mean? allLevels, beginner, intermediate, advanced — these map directly to Skillshare's search filters.

Why are some class records missing rating? Rating appears on classes that have reviews; new or unrated classes omit it. Empty fields are always omitted.

What are category rows? Skillshare's browse pages show curated rows per category: featured, popular, trending, and free.

How fresh is the data? Live — every run queries Skillshare's search API at that moment.

Is this affiliated with Skillshare? No, this is a third-party actor using the public website.

Limitations

  • bySku detail endpoint is network-dependent. Skillshare's class-detail REST endpoint (/classes/{sku}, /listings/{sku}) is Cloudflare-protected: plain datacenter IPs get a challenge page, while residential networks (and the actor's automatic RESIDENTIAL-proxy escalation) can read it. The actor tries all URL forms, retries with backoff, auto-escalates to the Apify proxy, and — if the REST path is blocked — falls back to the GraphQL classBySKU operation, which is not Cloudflare-challenged and works from cloud datacenter IPs. The GraphQL fallback returns the same class detail fields (title, level, description, student count, duration, cover, teacher, rating, review count) and the embedded review sample (id, rating, reviewer, testimonial when present). Only when both REST and GraphQL fail does the actor fail soft with a status message. The search, byCategory, and listCategories modes use the GraphQL API which is not affected and work everywhere.
  • Skillshare's own language filter only exposes en, de, pt, es, fr (the values their facets return); other languages are not filterable.
  • Category rows return the curated front-page subset (a few dozen classes), not the full category catalog — for full coverage use search with a keyword.
  • Reviews are limited to the sample embedded on each class page (typically up to 5); Skillshare's review-load-more endpoint is no longer serving review bodies, so full review archives are not available.