Skillshare Scraper
Pricing
from $3.00 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
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 IDtitle,description,urlstudentCount,durationInSecondslevel,sourceLanguage,publishTime,lastUpdatedTimerating,reviewCountteacherName,teacherId,teacherHeadline,teacherPictureUrl,isTopTeacherdefaultCoverUrlbadges[],aspects[]sourceUrlrecordType,scrapedAt
Extra fields in class detail records (mode=bySku)
tags[]— category / skill slugsprojectCount,levelingRatingteacherUid,teacherFirstNamerelatedClasses[]topProjects[]reviewLikeTags,ratingCounts,sampleReview
Review records (mode=bySku + includeReviews)
id,testimonial,rating,levelingRatingrecommended,createdAtreviewerName,reviewerUrl,reviewerAvatarpositiveTags[],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
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | search | search / byCategory / bySku / listCategories |
searchQuery | string | drawing | Class keyword (mode=search) |
category | string | – | Category slug (mode=byCategory) |
categoryRow | string | featured | featured / popular / trending / free |
skus | array | – | Class SKUs or URLs (mode=bySku) |
includeReviews | bool | false | Emit reviews (mode=bySku) |
maxReviewsPerClass | int | 10 | Reviews cap per class (1–200) |
level | string | – | allLevels / beginner / intermediate / advanced |
classLength | string | – | short / shorter / medium / long |
classRating | string | – | fourStar / threeStar / twoStar / belowTwoStar |
language | string | – | en / de / pt / es / fr |
publishTime | string | – | pastYear / past3Months / pastMonth / past2Weeks / pastWeek |
tag | string | – | Skill tag, e.g. Procreate |
isStaffPick | bool | false | Staff picks only |
isTopTeacher | bool | false | Top teachers only |
onlyHighQualityClasses | bool | true | High-quality pool only |
sortBy | string | relevance | relevance / studentCount / publishTime |
minRating | number | – | Client-side min rating (0–4) |
containsKeyword | string | – | Client-side title/description substring filter |
maxItems | int | 50 | Hard cap (1–1000) |
Example: beginner watercolor classes, 4 stars+
{"mode": "search","searchQuery": "watercolor","level": "beginner","classRating": "fourStar","publishTime": "pastYear"}
Example: trending classes in a category
{"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
bySkudetail 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 GraphQLclassBySKUoperation, 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. Thesearch,byCategory, andlistCategoriesmodes 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
searchwith 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.
