# Skillshare Scraper | All In One (`fatihtahta/skillshare-scraper`) Actor

Scrape Skillshare into clean class and instructor data. Pull titles, ratings, student counts, duration, level, language, topics, popularity ratings and full teacher profiles. Great for course research, catalog building, trend tracking and instructor outreach

- **URL**: https://apify.com/fatihtahta/skillshare-scraper.md
- **Developed by:** [Fatih Tahta](https://apify.com/fatihtahta) (community)
- **Categories:** Automation, Lead generation, Videos
- **Stats:** 5 total users, 2 monthly users, 93.3% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.99 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Skillshare Scraper | All In One
**Slug:** `fatihtahta/skillshare-scraper`

### Overview
Skillshare Scraper collects structured data about classes and instructors, including titles, URLs, ratings, language, duration, and teacher details. It turns search pages, category pages, and class URLs into consistent JSON records ready for analysis or enrichment. [Skillshare](https://www.skillshare.com) is a leading online learning platform where creators publish classes across design, business, photography, and more—making this data valuable for research and catalog building. Runs are automated and repeatable, saving time versus manual collection.

### Why Use This Actor
- **Market research & analytics:** Measure catalog depth, ratings, and topic coverage across segments.
- **Product & content teams:** Identify gaps, validate curriculum ideas, and track skill trends.
- **Developers & data engineering:** Feed structured datasets into ETL pipelines and internal tools.
- **Lead gen & enrichment:** Build instructor lists with profile metadata for outreach or partnerships.
- **Monitoring & competitive tracking:** Watch category growth and changes over time.

### Input Parameters
Provide any combination of URLs, queries, and filters…

| Parameter | Type | Description | Default |
| --- | --- | --- | --- |
| `startUrls` | `string[]` | Skillshare URLs to collect directly. Mix search results, category pages, and individual class pages. | – |
| `queries` | `string[]` | Search keywords to discover relevant classes on Skillshare. | – |
| `difficultyLevel` | `string[]` | Filter by difficulty level. Allowed values: `Beginner`, `Intermediate`, `Advanced`, `Mixed`. | – |
| `rating` | `string` | Minimum rating filter. Allowed values: `All ratings`, `3 stars and up`, `4 stars and up`, `5 stars`. | `All ratings` |
| `publishDate` | `string` | Limit to recently published classes. Allowed values: `Last Week`, `Last Month`, `Last 2 months`, `Last Year`, or empty for no filter. | `\"\"` |
| `language` | `string[]` | Course language filter. Allowed values: `Deutsch`, `English`, `Español`, `Français`, `Português`. | – |
| `duration` | `string[]` | Filter by class duration range. Allowed values: `Under 30 mins`, `30 mins to 1 hour`, `1 to 2 hours`, `Over 2 hours`. | – |
| `software` | `string[]` | Filter by featured software tools. Allowed values: `Procreate`, `Adobe Photoshop`, `Adobe Illustrator`, `Blender`, `Adobe After Effects`, `ChatGPT`, `Canva`, `Adobe Premiere Pro`, `Adobe Lightroom`, `Affinity Designer`, `Microsoft Excel`, `Ableton Live`, `Cinema 4D`, `DaVinci Resolve`, `Unreal Engine`, `Microsoft PowerPoint`, `Adobe InDesign`, `Figma`, `Autodesk Maya`, `Adobe Fresco`, `iMovie`, `Midjourney`, `Final Cut Pro`, `Adobe Substance 3D Painter`, `Affinity Photo`, `FL Studio`, `Notion`, `Logic Pro`, `Unity`, `ZBrush`, `Adobe Camera Raw`, `Procreate Dreams`, `SketchUp`, `Adobe XD`, `Adobe Animate`, `Krita`, `Manga Studio`, `Nomad Sculpt`, `Autodesk 3ds Max`, `Adobe Firefly`, `Inkscape`, `Trello`, `Snapseed`, `V-Ray`, `Autodesk Fusion 360`, `Rhinoceros 3D`, `SolidWorks`, `Adobe Acrobat`, `AutoCAD`, `OneNote`, `Grasshopper`, `Stop Motion Studio`, `MediBang Pro`, `Marvelous Designer`, `Adobe Express`, `Affinity Publisher`, `Dragonframe`, `F.lux`, `KeyShot`, `HoneyBook`, `iFontMaker`. | – |
| `material` | `string[]` | Filter by materials used. Allowed values: `Watercolor Paint`, `Watercolor Paper`, `iPad`, `Computer`, `Acrylic Paint`, `Paint Brush`, `Graphite Pencil`, `Gouache Paint`, `Water Container`, `Sketch Paper`, `Water`, `Colored Pencil`, `Paint Palette`, `Eraser`, `Oil Paint`, `Fine Liner Pens`, `iPhone`, `Drawing Tablet`, `Mechanical Pencil`, `Ballpoint Pen`, `Scissors`, `Brush Pen`, `Water Brush`, `Smartphone`, `Masking Tape`, `Yarn`, `Fabric`, `Stylus`, `Ruler`, `Clay`, `Card Stock Paper`, `Oil Pastel`, `Bristol Paper`, `Watercolor Pencil`, `India Ink`, `Canvas Board`, `Washi Tape`, `Charcoal`, `Masking Fluid`, `Water-Based Ink`, `DSLR Camera`, `Android`, `Paint Pen`, `Gel Pens`, `Permanent Marker`, `Soft Pastel`, `Palette Knife`, `Wire`, `Glue Stick`, `Alcohol Ink`, `Sewing Machine`, `Polymer Clay`, `Crayons`, `Pencil Sharpener`, `Cardboard`, `Sewing Thread`, `Mirrorless Camera`, `Dip Pen`, `Felt-Tipped Pens`, `Printer`, `Tracing Paper`, `Leather`, `Resin`, `Pastel Pencil`, `Tapered Crochet Hooks`, `Felt`, `Sewing Needle`, `Painter's Tape`, `Embroidery Needle`, `Cutting Mat`, `Embroidery Floss`, `Adhesive`, `Cricut`, `Gelli Plate`, `Beads`, `X-Acto Knife`, `Calligraphy Pen`, `Inline Crochet Hooks`, `Scanner`, `Tape Measure`, `Wire Cutters`, `Cotton Fabric`, `Film Camera`, `Acrylic Sheet`, `Needle Nose Pliers`, `Round Nose Pliers`, `Gold Leaf`, `Solder`, `Varnish`, `Chain Nose Jewelry Pliers`, `Sandpaper`, `Bone Folder`, `Nylon Jaw Pliers`, `Card Blanks`, `Gesso`, `String`, `Buttons`, `Lace`, `Zipper`, `Flat Nose Pliers`. | – |
| `original` | `boolean` | Only include Skillshare Originals. | – |
| `staffPick` | `boolean` | Only include Staff Pick classes. | – |
| `topTeacher` | `boolean` | Only include classes taught by Top Teachers. | – |
| `limit` | `integer` | Maximum classes to save per query. Minimum: `10`. | `50000` |
| `proxyConfiguration` | `object` | Connection settings for reliability on larger runs. | Apify proxy with `RESIDENTIAL` group |

### Example Input
```json
{
  "queries": ["illustration", "watercolor"],
  "startUrls": ["https://www.skillshare.com/en/search?query=illustration"],
  "difficultyLevel": ["Beginner"],
  "rating": "4 stars and up",
  "language": ["English"],
  "limit": 1000
}
````

### Output

#### 6.1 Output destination

The actor writes results to an Apify dataset as JSON records.

#### 6.2 Record envelope (all items)

Every record includes:

- **type** *(string, required)*
- **id** *(number, required)*
- **url** *(string, required)*

**Recommended idempotency key:** `type + ":" + id`\
Use this for deduplication and upserts when the same entity appears across inputs.

#### 6.3 Examples

Example: course (`type = "course"`)

```json
{
  "type": "course",
  "id": 658287,
  "recordType": "course",
  "profileId": "eyJ0eXBlIjoiVGVhY2hlciIsImlkIjoiMzU3NTc3In0=",
  "teacherId": "eyJ0eXBlIjoiVGVhY2hlciIsImlkIjoiMzU3NTc3In0=",
  "url": "https://www.skillshare.com/en/classes/the-sketchbook-fillers-club-four-powerful-guidelines-for-stunning-spreads/1519167504",
  "title": "The Sketchbook Fillers' Club: Four Powerful Guidelines for Stunning Spreads",
  "source": {
    "url": "https://www.skillshare.com/en/search?query=illustration",
    "seed": {
      "type": "url",
      "value": "https://www.skillshare.com/en/search?query=illustration"
    }
  },
  "sku": "1519167504",
  "language": "en-US",
  "level": "ALL_LEVELS",
  "duration_seconds": 6130,
  "published_at": "2025-04-21T11:05:11+00:00",
  "updated_at": "2025-04-30T14:24:35+00:00",
  "students": {
    "count": 5752
  },
  "rating": {
    "average": 4.9,
    "count": 59
  },
  "cover": {
    "url": "https://static.skillshare.com/uploads/video/thumbnails/fe558bd84fbe87b20cab2f4cf54ed37c/original"
  },
  "teacher": {
    "id": "eyJ0eXBlIjoiVGVhY2hlciIsImlkIjoiMzU3NTc3In0=",
    "name": "Dylan Mierzwinski",
    "headline": "Illustrator & Lover of Flowers",
    "is_top_teacher": true,
    "username": "7330753",
    "vanity_username": "bydylanm",
    "avatar_small_url": "https://static.skillshare.com/uploads/users/7330753/user-image-small.png?28211058"
  },
  "description": {
    "html": "<p>Learn how to fill your sketchbook with expressive illustrations using gouache, markers, colored pencils, and more—no matter your skill level. This beginner-friendly class includes 7 start-to-finish demos and 4 gentle but powerful guidelines to help you build confidence and find joy in the sketchbook process.</p>\n<p><img src=\"https://static.skillshare.com/uploads/discussion/tmp/7a974d2d.jpg\" class=\"zoomable rounded-image-wrapper\" alt=\"7a974d2d.jpg\"></p>\n<p>Would you like to be a member of <em>The Sketchbook Fillers' Club</em>? Membership benefits include:</p>\n<ul>\n<li>a hobby you can enjoy wherever</li>\n<li>sketchbooks full of personal, expressive, and colorful work that wows yourself and others</li>\n<li>endless growth of creative skills</li>\n<li>an annual party where everyone brings a dish to pass and we share art supplies (okay I made this one up but doesn't that sound fun??)</li>\n</ul>\n<p>Keeping a sketchbook is for ALL PEOPLE, but most people think it's only for the talented and disciplined. In this course professional illustrator Dylan Mierzwinski breaks down her years of vibrant sketchbook work into four gentle but powerful guidelines, and seven start-to-finish demonstrations to help get you on your way to filling your own sketchbook in an easy, personal, and repeatable way. Materials include gouache, colored pencil, marker, paint pens, and more, but Dylan encourages students to start where they are with what they have.</p>\n<p><img src=\"https://static.skillshare.com/uploads/discussion/tmp/66cf3d25.png\" class=\"zoomable rounded-image-wrapper\" alt=\"66cf3d25.png\"></p>\n<p><strong>Lesson Breakdown:</strong></p>\n<ul>\n<li><strong>Class Project + Resources:</strong> an overview of the class project objective and provided resources</li>\n<li><strong>Materials:</strong> an overview of the materials I use in the class, and basic supplies needed to follow along</li>\n<li><strong>The Four Sketchbook Fillers' Club Guidelines:</strong> the heart of the class and the key to my sketchbook success</li>\n<li><strong>Ugly Work:</strong> a quick note about this essential element that can feel a little shameful</li>\n<li><strong>Demo 1</strong>: Dylan uses Posca paint markers to make a color swatch chart</li>\n<li><strong>Demo 2:</strong> Dylan uses Tombow Dual Brush markers to fill a page of layered marker studies</li>\n<li><strong>Demo 3:</strong> Dylan uses Tombow Dual Brush markers and Caran d'Ache Luminance colored pencils to create a colorful quilt</li>\n<li><strong>Demo 4:</strong> Dylan uses Tombow Dual Brush markers and Caran d'Ache Luminance colored pencils to create a spread of expressive flowers</li>\n<li><strong>Demo 5 part one:</strong> Dylan uses a Pentel brush pen and Caran d'Ache colored pencils to capture her inspiration using her \"visual note taking\" method, and then uses those notes to sketch a spread of custom badges, banners, and pennants</li>\n<li><strong>Demo 5 part two:</strong> Dylan uses Holbein gouache to paint her spread of badges, banners, and pennants</li>\n<li><strong>Demo 6:</strong> Dylan uses Holbein gouache and Posca paint markers to encourage herself and others to 'love thy neighbor'</li>\n<li><strong>Demo 7:</strong> Dylan uses Tombow Dual Brush markers, Caran d'Ache colored pencils, and a Pentel brush pen to draw her \"favorite corner\"</li>\n<li><strong>Quick Review: </strong>highlights from the course</li>\n<li><strong>Thank you:</strong> and ways to keep in touch</li>\n</ul>",
    "text": "Learn how to fill your sketchbook with expressive illustrations using gouache, markers, colored pencils, and more—no matter your skill level. This beginner-friendly class includes 7 start-to-finish demos and 4 gentle but powerful guidelines to help you build confidence and find joy in the sketchbook process. Would you like to be a member of The Sketchbook Fillers' Club ? Membership benefits include: a hobby you can enjoy wherever sketchbooks full of personal, expressive, and colorful work that wows yourself and others endless growth of creative skills an annual party where everyone brings a dish to pass and we share art supplies (okay I made this one up but doesn't that sound fun??) Keeping a sketchbook is for ALL PEOPLE, but most people think it's only for the talented and disciplined. In this course professional illustrator Dylan Mierzwinski breaks down her years of vibrant sketchbook work into four gentle but powerful guidelines, and seven start-to-finish demonstrations to help get you on your way to filling your own sketchbook in an easy, personal, and repeatable way. Materials include gouache, colored pencil, marker, paint pens, and more, but Dylan encourages students to start where they are with what they have. Lesson Breakdown: Class Project + Resources: an overview of the class project objective and provided resources Materials: an overview of the materials I use in the class, and basic supplies needed to follow along The Four Sketchbook Fillers' Club Guidelines: the heart of the class and the key to my sketchbook success Ugly Work: a quick note about this essential element that can feel a little shameful Demo 1 : Dylan uses Posca paint markers to make a color swatch chart Demo 2: Dylan uses Tombow Dual Brush markers to fill a page of layered marker studies Demo 3: Dylan uses Tombow Dual Brush markers and Caran d'Ache Luminance colored pencils to create a colorful quilt Demo 4: Dylan uses Tombow Dual Brush markers and Caran d'Ache Luminance colored pencils to create a spread of expressive flowers Demo 5 part one: Dylan uses a Pentel brush pen and Caran d'Ache colored pencils to capture her inspiration using her \"visual note taking\" method, and then uses those notes to sketch a spread of custom badges, banners, and pennants Demo 5 part two: Dylan uses Holbein gouache to paint her spread of badges, banners, and pennants Demo 6: Dylan uses Holbein gouache and Posca paint markers to encourage herself and others to 'love thy neighbor' Demo 7: Dylan uses Tombow Dual Brush markers, Caran d'Ache colored pencils, and a Pentel brush pen to draw her \"favorite corner\" Quick Review: highlights from the course Thank you: and ways to keep in touch"
  },
  "topics": [
    {
      "name": "Brush Pen",
      "type": "MATERIALS",
      "level": null
    },
    {
      "name": "Colored Pencil",
      "type": "MATERIALS",
      "level": null
    },
    {
      "name": "Gouache Paint",
      "type": "MATERIALS",
      "level": null
    },
    {
      "name": "Mechanical Pencil",
      "type": "MATERIALS",
      "level": null
    },
    {
      "name": "Water-Based Ink",
      "type": "MATERIALS",
      "level": null
    },
    {
      "name": "Art & Illustration",
      "type": "CATEGORY",
      "level": 1
    },
    {
      "name": "Drawing & Inking",
      "type": "CATEGORY",
      "level": 2
    },
    {
      "name": "Drawing Techniques & Fundamentals",
      "type": "CATEGORY",
      "level": 3
    },
    {
      "name": "Gouache",
      "type": "CATEGORY",
      "level": 3
    },
    {
      "name": "Painting",
      "type": "CATEGORY",
      "level": 2
    },
    {
      "name": "Sketchbooks & Sketching",
      "type": "CATEGORY",
      "level": 3
    }
  ],
  "badges": [
    "STAFF_PICK"
  ],
  "raw": {
    "introLesson": {
      "id": "eyJ0eXBlIjoiQ2xhc3NMZXNzb24iLCJpZCI6IjUyNDU2MjgifQ==",
      "__typename": "ClassLesson"
    }
  }
}
```

Example: instructor profile (`type = "profile"`)

```json
{
  "recordType": "profile",
  "profileId": "1234567",
  "teacherId": "1234567",
  "id": "1234567",
  "name": "Sample Instructor",
  "firstName": "Sample",
  "lastName": "Instructor",
  "username": "sample-user",
  "vanityUsername": "sample-instructor",
  "headline": "Creative Instructor",
  "bio": {
    "html": "<p><strong>Hi there!</strong> I teach practical design workflows, creative strategy, and hands-on projects.</p>",
    "text": "Hi there! I teach practical design workflows, creative strategy, and hands-on projects."
  },
  "avatarUrl": "https://static.skillshare.com/uploads/users/sample/user-image-large.jpg",
  "profileUrl": "https://www.skillshare.com/en/user/sample-instructor",
  "personalSiteUrl": "",
  "followersCount": 1200,
  "followingCount": 10,
  "isTopTeacher": false,
  "isTeacher": true,
  "isPremiumMember": false,
  "isPublishedTeacher": true,
  "socialLinks": [
    {
      "url": "https://example.com"
    },
    {
      "type": "instagram",
      "url": "https://www.instagram.com/sample"
    },
    {
      "type": "youtube",
      "url": "https://www.youtube.com/@sample"
    }
  ],
  "socialAccounts": {
    "instagram": "https://www.instagram.com/sample",
    "youtube": "https://www.youtube.com/@sample"
  },
  "source": {
    "url": "https://www.skillshare.com/en/user/sample-instructor",
    "seed": {
      "type": "url",
      "value": "https://www.skillshare.com/en/user/sample-instructor"
    }
  }
}
```

Example: discussion (`type = "discussion"`)

```json
{
  "recordType": "discussion",
  "profileId": "1234567",
  "teacherId": "1234567",
  "id": "987654",
  "url": "https://www.skillshare.com/en/userProfile/discussionShow?discussionId=987654&username=sample-user",
  "title": "Design updates worth noting",
  "source": {
    "url": "https://www.skillshare.com/en/user/sample-instructor",
    "seed": {
      "type": "url",
      "value": "https://www.skillshare.com/en/user/sample-instructor"
    }
  },
  "description": {
    "html": "<p>Quick roundup of recent design updates and how they affect workflow.</p>",
    "text": "Quick roundup of recent design updates and how they affect workflow."
  },
  "author": {
    "fullName": "Sample Instructor",
    "image": "https://static.skillshare.com/uploads/users/sample/user-image-small.jpg",
    "username": "sample-user",
    "url": "https://www.skillshare.com/en/user/sample-instructor",
    "headline": "Creative Instructor"
  },
  "stats": {
    "likes": 3,
    "followers": 1,
    "comments": 2
  },
  "timestamps": {
    "created_at": 1764296061,
    "updated_at": 1764296061
  },
  "commentable": {
    "type": "Discussion",
    "id": "987654"
  },
  "comments": [
    {
      "id": "200001",
      "timestamp": 1764314655,
      "comment": {
        "html": "<p>Thanks for the update! Looking forward to trying these changes.</p>",
        "text": "Thanks for the update! Looking forward to trying these changes."
      },
      "numReplies": 0,
      "type": "Comment",
      "commentableId": "200001",
      "commentableType": "Comment",
      "originId": "987654",
      "numLikes": 1,
      "parentCommentId": null,
      "isReply": false
    },
    {
      "id": "200002",
      "timestamp": 1764377659,
      "comment": {
        "html": "<p>This is helpful context. Any recommendations for getting started?</p>",
        "text": "This is helpful context. Any recommendations for getting started?"
      },
      "numReplies": 0,
      "type": "Comment",
      "commentableId": "200002",
      "commentableType": "Comment",
      "originId": "987654",
      "numLikes": 1,
      "parentCommentId": null,
      "isReply": false
    }
  ],
  "userVote": null,
  "userFollow": null
}
```

### Field reference

#### Course fields (`type = "course"`)

- **type** *(string, required)*: Record category.
- **id** *(number, required)*: Stable numeric identifier.
- **url** *(string, required)*: Canonical course URL.
- **recordType** *(string, optional)*: Record category (may mirror `type`).
- **profileId** *(string, optional)*: Related profile identifier when available.
- **teacherId** *(string, optional)*: Related teacher identifier when available.
- **id** *(string, required)*: Course identifier.
- **url** *(string, required)*: Canonical course URL.
- **title** *(string, required)*: Course title.
- **source.url** *(string, optional)*: Source page URL.
- **source.seed.type** *(string, optional)*: Seed type (for example, `url`).
- **source.seed.value** *(string, optional)*: Seed value.
- **sku** *(string, optional)*: Public class SKU when available.
- **language** *(string, optional)*: Locale or language code.
- **level** *(string, optional)*: Difficulty level.
- **duration\_seconds** *(number, optional)*: Total duration in seconds.
- **published\_at** *(string, optional)*: ISO timestamp of publish date.
- **updated\_at** *(string, optional)*: ISO timestamp of last update.
- **students.count** *(number, optional)*: Total enrolled students.
- **rating.average** *(number, optional)*: Average rating.
- **rating.count** *(number, optional)*: Rating count.
- **cover.url** *(string, optional)*: Cover image URL.
- **teacher.id** *(string, optional)*: Instructor identifier.
- **teacher.name** *(string, optional)*: Instructor display name.
- **teacher.headline** *(string, optional)*: Instructor headline.
- **teacher.is\_top\_teacher** *(boolean, optional)*: Top Teacher flag.
- **teacher.username** *(string, optional)*: Instructor username.
- **teacher.vanity\_username** *(string, optional)*: Vanity username.
- **teacher.avatar\_small\_url** *(string, optional)*: Instructor avatar URL.
- **description.html** *(string, optional)*: HTML description.
- **description.text** *(string, optional)*: Plain-text description.
- **topics** *(array, optional)*: Topic list.
- **topics\[].name** *(string, optional)*: Topic name.
- **topics\[].type** *(string, optional)*: Topic type.
- **topics\[].level** *(number, optional)*: Topic hierarchy level.
- **badges** *(array, optional)*: Badge list.
- **raw** *(object, optional)*: Unstructured raw payload when present.
- **raw.introLesson.id** *(string, optional)*: Related lesson identifier.
- **raw.introLesson.\_\_typename** *(string, optional)*: Related entity type.

#### Profile fields (`type = "profile"`)

- **recordType** *(string, required)*: Record category (always `profile`).
- **profileId** *(string, required)*: Instructor profile identifier.
- **teacherId** *(string, optional)*: Related teacher identifier when available.
- **id** *(string, required)*: Profile identifier (usually matches `profileId`).
- **name** *(string, optional)*: Full name.
- **firstName** *(string, optional)*: First name.
- **lastName** *(string, optional)*: Last name.
- **username** *(string, optional)*: Skillshare username.
- **vanityUsername** *(string, optional)*: Vanity username.
- **headline** *(string, optional)*: Profile headline.
- **bio.html** *(string, optional)*: HTML bio.
- **bio.text** *(string, optional)*: Plain-text bio.
- **avatarUrl** *(string, optional)*: Avatar image URL.
- **profileUrl** *(string, optional)*: Public profile URL.
- **personalSiteUrl** *(string, optional)*: Linked personal website.
- **followersCount** *(number, optional)*: Follower count.
- **followingCount** *(number, optional)*: Following count.
- **isTopTeacher** *(boolean, optional)*: Top Teacher flag.
- **isTeacher** *(boolean, optional)*: Teacher flag.
- **isPremiumMember** *(boolean, optional)*: Premium member flag.
- **isPublishedTeacher** *(boolean, optional)*: Published teacher flag.
- **socialLinks** *(array, optional)*: Social links.
- **socialLinks\[].type** *(string, optional)*: Social link type when known.
- **socialLinks\[].url** *(string, optional)*: Social link URL.
- **socialAccounts** *(object, optional)*: Structured social account URLs by type.
- **source.url** *(string, optional)*: Source page URL.
- **source.seed.type** *(string, optional)*: Seed type (for example, `url`).
- **source.seed.value** *(string, optional)*: Seed value.

#### Discussion fields (`type = "discussion"`)

- **recordType** *(string, required)*: Record category (always `discussion`).
- **profileId** *(string, required)*: Related profile identifier.
- **teacherId** *(string, optional)*: Related teacher identifier when available.
- **id** *(string, required)*: Discussion identifier.
- **url** *(string, required)*: Canonical discussion URL.
- **title** *(string, optional)*: Discussion title.
- **source.url** *(string, optional)*: Source page URL.
- **source.seed.type** *(string, optional)*: Seed type (for example, `url`).
- **source.seed.value** *(string, optional)*: Seed value.
- **description.html** *(string, optional)*: HTML description.
- **description.text** *(string, optional)*: Plain-text description.
- **author.fullName** *(string, optional)*: Author full name.
- **author.image** *(string, optional)*: Author avatar URL.
- **author.username** *(string, optional)*: Author username.
- **author.url** *(string, optional)*: Author profile URL.
- **author.headline** *(string, optional)*: Author headline.
- **stats.likes** *(number, optional)*: Like count.
- **stats.followers** *(number, optional)*: Follower count.
- **stats.comments** *(number, optional)*: Comment count.
- **timestamps.created\_at** *(number, optional)*: Created timestamp (epoch seconds).
- **timestamps.updated\_at** *(number, optional)*: Updated timestamp (epoch seconds).
- **commentable.type** *(string, optional)*: Commentable entity type.
- **commentable.id** *(string, optional)*: Commentable entity id.
- **comments** *(array, optional)*: Comments list.
- **comments\[].id** *(string, optional)*: Comment identifier.
- **comments\[].timestamp** *(number, optional)*: Comment timestamp (epoch seconds).
- **comments\[].comment.html** *(string, optional)*: Comment HTML.
- **comments\[].comment.text** *(string, optional)*: Comment text.
- **comments\[].numReplies** *(number, optional)*: Reply count.
- **comments\[].type** *(string, optional)*: Comment record type.
- **comments\[].commentableId** *(string, optional)*: Commentable id.
- **comments\[].commentableType** *(string, optional)*: Commentable type.
- **comments\[].originId** *(string, optional)*: Discussion origin id.
- **comments\[].numLikes** *(number, optional)*: Comment likes.
- **comments\[].parentCommentId** *(string, optional)*: Parent comment id.
- **comments\[].isReply** *(boolean, optional)*: Reply flag.
- **userVote** *(object, optional)*: Current user vote metadata when available.
- **userFollow** *(object, optional)*: Current user follow metadata when available.

### Data guarantees & handling

- **Best-effort extraction:** fields may vary by region/session/availability/UI experiments.
- **Optional fields:** null-check in downstream code.
- **Deduplication:** recommend `type + ":" + id`.

### Notes & Limitations

- Respect Skillshare’s terms of service and applicable laws.
- Avoid excessive request frequency or rapid repeated runs.
- Pricing or availability fields, when present, can vary by region, time, or session.
- Validate data for compliance with your organization’s policies.

### Support

For help, open an issue on the actor page in Apify Console. Include the input used (redacted as needed), the run ID, expected vs. actual behavior, and a small output sample if helpful.

# Actor input Schema

## `startUrls` (type: `array`):

Paste one or more Skillshare URLs to scrape directly. You can mix search results, category pages, and individual class pages in the same run. Use this when you already have specific URLs and want precise control.

## `queries` (type: `array`):

Enter one or more keywords to search on Skillshare (for example, a topic, skill, style, or tool). Use this if you don’t have URLs yet — the actor will find matching classes and save them to your dataset.

## `difficultyLevel` (type: `array`):

Choose one or more difficulty levels to narrow the class results.

## `rating` (type: `string`):

Set a minimum class rating. Choose “Any rating” to skip this filter.

## `publishDate` (type: `string`):

Limit results to classes published within a recent time window.

## `language` (type: `array`):

Choose one or more languages for the class audio or subtitles.

## `duration` (type: `array`):

Choose one or more duration ranges to narrow the results.

## `software` (type: `array`):

Choose one or more software tools featured in the class.

## `material` (type: `array`):

Choose one or more materials commonly used in the class.

## `original` (type: `boolean`):

Only include Skillshare Originals.

## `staffPick` (type: `boolean`):

Only include Staff Pick classes.

## `topTeacher` (type: `boolean`):

Only include classes taught by Top Teachers.

## `limit` (type: `integer`):

Stop the run after this many classes have been saved for each query. Use a smaller number for quick sampling and testing, or increase it for deeper coverage.

## `proxyConfiguration` (type: `object`):

Optional connection settings that can improve reliability on larger runs or during busy periods. The default configuration works well for most users — adjust only if you need extra stability.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.skillshare.com/en/search/classes?query=Visual+Metaphors+for+Editorial+Illustration"
  ],
  "rating": "All ratings",
  "publishDate": "",
  "limit": 50000,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        "https://www.skillshare.com/en/search/classes?query=Visual+Metaphors+for+Editorial+Illustration"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fatihtahta/skillshare-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "startUrls": ["https://www.skillshare.com/en/search/classes?query=Visual+Metaphors+for+Editorial+Illustration"] }

# Run the Actor and wait for it to finish
run = client.actor("fatihtahta/skillshare-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.skillshare.com/en/search/classes?query=Visual+Metaphors+for+Editorial+Illustration"
  ]
}' |
apify call fatihtahta/skillshare-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fatihtahta/skillshare-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Skillshare Scraper | All In One",
        "description": "Scrape Skillshare into clean class and instructor data. Pull titles, ratings, student counts, duration, level, language, topics, popularity ratings and full teacher profiles. Great for course research, catalog building, trend tracking and instructor outreach",
        "version": "1.0",
        "x-build-id": "gHztK3QSfWkmvgIsE"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fatihtahta~skillshare-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fatihtahta-skillshare-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/fatihtahta~skillshare-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fatihtahta-skillshare-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/fatihtahta~skillshare-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fatihtahta-skillshare-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrls": {
                        "title": "Start URLs (Search results, category pages, and classes)",
                        "type": "array",
                        "description": "Paste one or more Skillshare URLs to scrape directly. You can mix search results, category pages, and individual class pages in the same run. Use this when you already have specific URLs and want precise control.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "queries": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "Enter one or more keywords to search on Skillshare (for example, a topic, skill, style, or tool). Use this if you don’t have URLs yet — the actor will find matching classes and save them to your dataset.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "difficultyLevel": {
                        "title": "👷 Filter by Difficulty levels",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Choose one or more difficulty levels to narrow the class results.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Beginner",
                                "Intermediate",
                                "Advanced",
                                "Mixed"
                            ],
                            "enumTitles": [
                                "🌱 Beginner — Just starting",
                                "🚀 Intermediate — Some experience",
                                "🏆 Advanced — Deep dive",
                                "🎛️ Mixed — All levels (seperate field, not a combination of other fields)"
                            ]
                        }
                    },
                    "rating": {
                        "title": "⭐ Filter by Minimum rating",
                        "enum": [
                            "All ratings",
                            "3 stars and up",
                            "4 stars and up",
                            "5 stars"
                        ],
                        "type": "string",
                        "description": "Set a minimum class rating. Choose “Any rating” to skip this filter.",
                        "default": "All ratings"
                    },
                    "publishDate": {
                        "title": "📅 Filter by Published date",
                        "enum": [
                            "",
                            "Last Week",
                            "Last Month",
                            "Last 2 months",
                            "Last Year"
                        ],
                        "type": "string",
                        "description": "Limit results to classes published within a recent time window.",
                        "default": ""
                    },
                    "language": {
                        "title": "🌍 Filter by Course Language",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Choose one or more languages for the class audio or subtitles.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Deutsch",
                                "English",
                                "Español",
                                "Français",
                                "Português"
                            ],
                            "enumTitles": [
                                "🇩🇪 German — Deutsch",
                                "🇺🇸 English — English",
                                "🇪🇸 Spanish — Español",
                                "🇫🇷 French — Français",
                                "🇵🇹 Portuguese — Português"
                            ]
                        }
                    },
                    "duration": {
                        "title": "⏱️ Filter by Class duration",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Choose one or more duration ranges to narrow the results.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Under 30 mins",
                                "30 mins to 1 hour",
                                "1 to 2 hours",
                                "Over 2 hours"
                            ],
                            "enumTitles": [
                                "⏱️ Under 30 min — Quick",
                                "⏱️ 30–60 min — Short",
                                "⏱️ 1–2 hours — Medium",
                                "⏱️ 2+ hours — Long"
                            ]
                        }
                    },
                    "software": {
                        "title": "🧰 Filter by Software",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Choose one or more software tools featured in the class.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Procreate",
                                "Adobe Photoshop",
                                "Adobe Illustrator",
                                "Blender",
                                "Adobe After Effects",
                                "ChatGPT",
                                "Canva",
                                "Adobe Premiere Pro",
                                "Adobe Lightroom",
                                "Affinity Designer",
                                "Microsoft Excel",
                                "Ableton Live",
                                "Cinema 4D",
                                "DaVinci Resolve",
                                "Unreal Engine",
                                "Microsoft PowerPoint",
                                "Adobe InDesign",
                                "Figma",
                                "Autodesk Maya",
                                "Adobe Fresco",
                                "iMovie",
                                "Midjourney",
                                "Final Cut Pro",
                                "Adobe Substance 3D Painter",
                                "Affinity Photo",
                                "FL Studio",
                                "Notion",
                                "Logic Pro",
                                "Unity",
                                "ZBrush",
                                "Adobe Camera Raw",
                                "Procreate Dreams",
                                "SketchUp",
                                "Adobe XD",
                                "Adobe Animate",
                                "Krita",
                                "Manga Studio",
                                "Nomad Sculpt",
                                "Autodesk 3ds Max",
                                "Adobe Firefly",
                                "Inkscape",
                                "Trello",
                                "Snapseed",
                                "V-Ray",
                                "Autodesk Fusion 360",
                                "Rhinoceros 3D",
                                "SolidWorks",
                                "Adobe Acrobat",
                                "AutoCAD",
                                "OneNote",
                                "Grasshopper",
                                "Stop Motion Studio",
                                "MediBang Pro",
                                "Marvelous Designer",
                                "Adobe Express",
                                "Affinity Publisher",
                                "Dragonframe",
                                "F.lux",
                                "KeyShot",
                                "HoneyBook",
                                "iFontMaker"
                            ],
                            "enumTitles": [
                                "✍️ Procreate — Digital sketchbook",
                                "🖼️ Adobe Photoshop — Photo editing",
                                "🧩 Adobe Illustrator — Vector design",
                                "🧊 Blender — 3D modeling",
                                "🎞️ Adobe After Effects — Motion graphics",
                                "🤖 ChatGPT — AI assistant",
                                "🎨 Canva — Quick design",
                                "🎬 Adobe Premiere Pro — Video editing",
                                "📷 Adobe Lightroom — Photo workflow",
                                "🧩 Affinity Designer — Vector design",
                                "📊 Microsoft Excel — Spreadsheets",
                                "🎛️ Ableton Live — Music production",
                                "🎥 Cinema 4D — 3D animation",
                                "🎚️ DaVinci Resolve — Color grading",
                                "🕹️ Unreal Engine — Real-time 3D",
                                "📽️ Microsoft PowerPoint — Presentations",
                                "📄 Adobe InDesign — Page layout",
                                "🧩 Figma — UI design",
                                "🐉 Autodesk Maya — 3D animation",
                                "🖌️ Adobe Fresco — Digital painting",
                                "🎬 iMovie — Video editing",
                                "✨ Midjourney — AI images",
                                "🎬 Final Cut Pro — Video editing",
                                "🧪 Adobe Substance 3D Painter — 3D texturing",
                                "🖼️ Affinity Photo — Photo editing",
                                "🎹 FL Studio — Music production",
                                "🗂️ Notion — Notes & docs",
                                "🎚️ Logic Pro — Music production",
                                "🎮 Unity — Game engine",
                                "🗿 ZBrush — Digital sculpting",
                                "📸 Adobe Camera Raw — RAW processing",
                                "🌙 Procreate Dreams — Animation",
                                "🏠 SketchUp — 3D modeling",
                                "🧩 Adobe XD — UX design",
                                "🪄 Adobe Animate — 2D animation",
                                "🎨 Krita — Digital painting",
                                "📚 Manga Studio — Comic art",
                                "🗿 Nomad Sculpt — 3D sculpting",
                                "🏗️ Autodesk 3ds Max — 3D modeling",
                                "🔥 Adobe Firefly — AI design",
                                "🧩 Inkscape — Vector design",
                                "🗒️ Trello — Project boards",
                                "📱 Snapseed — Mobile photo edit",
                                "💡 V-Ray — 3D rendering",
                                "🛠️ Autodesk Fusion 360 — CAD modeling",
                                "🦏 Rhinoceros 3D — NURBS modeling",
                                "🧰 SolidWorks — CAD engineering",
                                "📄 Adobe Acrobat — PDF tools",
                                "📐 AutoCAD — CAD drafting",
                                "📝 OneNote — Note taking",
                                "🧠 Grasshopper — Parametric design",
                                "🎬 Stop Motion Studio — Stop motion",
                                "🖊️ MediBang Pro — Digital art",
                                "🧵 Marvelous Designer — 3D apparel",
                                "⚡ Adobe Express — Quick design",
                                "📘 Affinity Publisher — Page layout",
                                "🐲 Dragonframe — Stop motion",
                                "🌙 F.lux — Screen warmth",
                                "🔆 KeyShot — Product rendering",
                                "📒 HoneyBook — Client management",
                                "🔤 iFontMaker — Font creation"
                            ]
                        }
                    },
                    "material": {
                        "title": "🧵 Filter by Materials used",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Choose one or more materials commonly used in the class.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Watercolor Paint",
                                "Watercolor Paper",
                                "iPad",
                                "Computer",
                                "Acrylic Paint",
                                "Paint Brush",
                                "Graphite Pencil",
                                "Gouache Paint",
                                "Water Container",
                                "Sketch Paper",
                                "Water",
                                "Colored Pencil",
                                "Paint Palette",
                                "Eraser",
                                "Oil Paint",
                                "Fine Liner Pens",
                                "iPhone",
                                "Drawing Tablet",
                                "Mechanical Pencil",
                                "Ballpoint Pen",
                                "Scissors",
                                "Brush Pen",
                                "Water Brush",
                                "Smartphone",
                                "Masking Tape",
                                "Yarn",
                                "Fabric",
                                "Stylus",
                                "Ruler",
                                "Clay",
                                "Card Stock Paper",
                                "Oil Pastel",
                                "Bristol Paper",
                                "Watercolor Pencil",
                                "India Ink",
                                "Canvas Board",
                                "Washi Tape",
                                "Charcoal",
                                "Masking Fluid",
                                "Water-Based Ink",
                                "DSLR Camera",
                                "Android",
                                "Paint Pen",
                                "Gel Pens",
                                "Permanent Marker",
                                "Soft Pastel",
                                "Palette Knife",
                                "Wire",
                                "Glue Stick",
                                "Alcohol Ink",
                                "Sewing Machine",
                                "Polymer Clay",
                                "Crayons",
                                "Pencil Sharpener",
                                "Cardboard",
                                "Sewing Thread",
                                "Mirrorless Camera",
                                "Dip Pen",
                                "Felt-Tipped Pens",
                                "Printer",
                                "Tracing Paper",
                                "Leather",
                                "Resin",
                                "Pastel Pencil",
                                "Tapered Crochet Hooks",
                                "Felt",
                                "Sewing Needle",
                                "Painter's Tape",
                                "Embroidery Needle",
                                "Cutting Mat",
                                "Embroidery Floss",
                                "Adhesive",
                                "Cricut",
                                "Gelli Plate",
                                "Beads",
                                "X-Acto Knife",
                                "Calligraphy Pen",
                                "Inline Crochet Hooks",
                                "Scanner",
                                "Tape Measure",
                                "Wire Cutters",
                                "Cotton Fabric",
                                "Film Camera",
                                "Acrylic Sheet",
                                "Needle Nose Pliers",
                                "Round Nose Pliers",
                                "Gold Leaf",
                                "Solder",
                                "Varnish",
                                "Chain Nose Jewelry Pliers",
                                "Sandpaper",
                                "Bone Folder",
                                "Nylon Jaw Pliers",
                                "Card Blanks",
                                "Gesso",
                                "String",
                                "Buttons",
                                "Lace",
                                "Zipper",
                                "Flat Nose Pliers"
                            ],
                            "enumTitles": [
                                "🎨 Watercolor Paint — Transparent washes",
                                "🧻 Watercolor Paper — Cold press",
                                "📱 iPad — Digital drawing",
                                "💻 Computer — Digital work",
                                "🎨 Acrylic Paint — Fast drying",
                                "🖌️ Paint Brush — Brush strokes",
                                "✏️ Graphite Pencil — Sketching",
                                "🎨 Gouache Paint — Opaque paint",
                                "🪣 Water Container — Rinse cup",
                                "🧻 Sketch Paper — Practice sheets",
                                "💧 Water — Mixing medium",
                                "🖍️ Colored Pencil — Layered color",
                                "🎨 Paint Palette — Mixing colors",
                                "🧽 Eraser — Corrections",
                                "🎨 Oil Paint — Rich color",
                                "🖊️ Fine Liner Pens — Precise lines",
                                "📱 iPhone — Mobile capture",
                                "🧾 Drawing Tablet — Pen input",
                                "✏️ Mechanical Pencil — Consistent lines",
                                "🖊️ Ballpoint Pen — Everyday ink",
                                "✂️ Scissors — Cutting",
                                "🖌️ Brush Pen — Flexible strokes",
                                "💧 Water Brush — Built-in water",
                                "📱 Smartphone — Mobile work",
                                "🧻 Masking Tape — Clean edges",
                                "🧶 Yarn — Fiber work",
                                "🧵 Fabric — Textile base",
                                "🖊️ Stylus — Digital pen",
                                "📏 Ruler — Straight lines",
                                "🧱 Clay — Sculpting",
                                "🗂️ Card Stock Paper — Thick paper",
                                "🖍️ Oil Pastel — Creamy sticks",
                                "🧻 Bristol Paper — Smooth sheet",
                                "🖍️ Watercolor Pencil — Water-activated",
                                "🖤 India Ink — Deep black",
                                "🖼️ Canvas Board — Rigid canvas",
                                "🎏 Washi Tape — Decorative tape",
                                "🖤 Charcoal — Soft shading",
                                "🧪 Masking Fluid — Preserve whites",
                                "💧 Water-Based Ink — Easy cleanup",
                                "📷 DSLR Camera — Pro photos",
                                "🤖 Android — Mobile device",
                                "🖊️ Paint Pen — Opaque ink",
                                "🖊️ Gel Pens — Smooth color",
                                "🖊️ Permanent Marker — Bold lines",
                                "🖍️ Soft Pastel — Blendable",
                                "🔪 Palette Knife — Texture",
                                "🧷 Wire — Armatures",
                                "🧴 Glue Stick — Paper adhesive",
                                "🍶 Alcohol Ink — Vibrant flows",
                                "🧵 Sewing Machine — Stitching",
                                "🧱 Polymer Clay — Bakeable",
                                "🖍️ Crayons — Wax sticks",
                                "🔪 Pencil Sharpener — Sharp points",
                                "📦 Cardboard — Structural",
                                "🧵 Sewing Thread — Stitching",
                                "📷 Mirrorless Camera — Compact pro",
                                "🪶 Dip Pen — Calligraphy",
                                "🖊️ Felt-Tipped Pens — Marker tips",
                                "🖨️ Printer — Printouts",
                                "📄 Tracing Paper — See-through",
                                "🧵 Leather — Durable hide",
                                "🧪 Resin — Casting",
                                "🖍️ Pastel Pencil — Chalk texture",
                                "🧶 Tapered Crochet Hooks — Crochet",
                                "🧵 Felt — Soft fabric",
                                "🪡 Sewing Needle — Hand stitching",
                                "🧻 Painter's Tape — Clean edges",
                                "🪡 Embroidery Needle — Stitch details",
                                "🟩 Cutting Mat — Protect surface",
                                "🧵 Embroidery Floss — Stitch color",
                                "🧴 Adhesive — Bonding",
                                "✂️ Cricut — Cutting machine",
                                "🟪 Gelli Plate — Gel printing",
                                "📿 Beads — Jewelry",
                                "🔪 X-Acto Knife — Precision cutting",
                                "🖋️ Calligraphy Pen — Lettering",
                                "🧶 Inline Crochet Hooks — Crochet",
                                "📠 Scanner — Digitize",
                                "📏 Tape Measure — Measuring",
                                "✂️ Wire Cutters — Cut wire",
                                "🧵 Cotton Fabric — Natural fiber",
                                "🎞️ Film Camera — Analog photos",
                                "🧊 Acrylic Sheet — Clear plastic",
                                "🧰 Needle Nose Pliers — Tight spaces",
                                "🧰 Round Nose Pliers — Loops",
                                "✨ Gold Leaf — Gilding",
                                "🧲 Solder — Metal join",
                                "🧴 Varnish — Protective coat",
                                "🧰 Chain Nose Jewelry Pliers — Jewelry work",
                                "🪵 Sandpaper — Smoothing",
                                "🦴 Bone Folder — Paper creasing",
                                "🧰 Nylon Jaw Pliers — Delicate grip",
                                "🗂️ Card Blanks — Greeting cards",
                                "🪵 Gesso — Primer coat",
                                "🧵 String — Tying",
                                "🔘 Buttons — Fasteners",
                                "🧵 Lace — Trim",
                                "🤐 Zipper — Fastener",
                                "🧰 Flat Nose Pliers — Flat grip"
                            ]
                        }
                    },
                    "original": {
                        "title": "🏷️ Only include Original classes",
                        "type": "boolean",
                        "description": "Only include Skillshare Originals."
                    },
                    "staffPick": {
                        "title": "🏷️ Only include Staff picks",
                        "type": "boolean",
                        "description": "Only include Staff Pick classes."
                    },
                    "topTeacher": {
                        "title": "🏷️ Only include Top Teacher classes only",
                        "type": "boolean",
                        "description": "Only include classes taught by Top Teachers."
                    },
                    "limit": {
                        "title": "Maximum classes to save (per query)",
                        "minimum": 10,
                        "type": "integer",
                        "description": "Stop the run after this many classes have been saved for each query. Use a smaller number for quick sampling and testing, or increase it for deeper coverage.",
                        "default": 50000
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration (recommended)",
                        "type": "object",
                        "description": "Optional connection settings that can improve reliability on larger runs or during busy periods. The default configuration works well for most users — adjust only if you need extra stability.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
