# Udemy Course Scraper - Cheap & Advanced  🔎🎓 (`scrapestorm/udemy-course-scraper-cheap-advanced`) Actor

Gather Udemy course search results 🎓📚, including free & paid courses, ratings ⭐, instructors 👨‍🏫, course duration ⏱️, lecture counts, badges 🏅, pricing, and more. Search millions of courses using one or multiple keywords, export structured datasets 📊 or integrate with your automation workflows

- **URL**: https://apify.com/scrapestorm/udemy-course-scraper-cheap-advanced.md
- **Developed by:** [Storm\_Scraper](https://apify.com/scrapestorm) (community)
- **Categories:** Real estate, Travel, Lead generation
- **Stats:** 13 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 4.31 out of 5 stars

## Pricing

$24.99/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

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

## 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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

### Udemy Course Search Scraper 🎓🔎📚

An advanced Apify Actor designed to scrape Udemy course search results in bulk using one or multiple keywords.

Perfect for educational market research, course intelligence, competitor monitoring, AI training datasets, EdTech analytics, keyword research, and trend tracking. 🚀📊

---

### 🔍 What This Actor Does

For your selected keywords, the Actor:

• Searches Udemy courses

• Collects structured course search results

• Extracts detailed course metadata

• Supports multiple keywords in a single run

• Supports multiple sorting options

✅ Bulk keyword search

✅ Rich course metadata

✅ Ratings & review statistics

✅ Instructor information

✅ Course duration & lecture count

✅ Clean structured output

✅ Ready for automation workflows

---

### 📊 Data Extracted

Below are the main fields extracted from each course:

| Field | Description |
|----------------------|--------------------------------|
| `id` | Course ID |
| `title` | Course title |
| `headline` | Course subtitle |
| `level` | Course level |
| `locale` | Course language |
| `is_free` | Free or paid course |
| `duration_seconds` | Total course duration |
| `lectures_count` | Number of lectures |
| `rating_average` | Average rating |
| `rating_count` | Total ratings |
| `updated_on` | Last update date |
| `instructors` | Instructor names |
| `image` | Course thumbnail |
| `url_course_landing` | Course landing page |
| `url_course_taking` | Learning page |
| `url_auto_enroll` | Auto enrollment URL |
| `badges` | Course badges |
| `keyword` | Search keyword |
| `sort` | Sorting method used |
| `tracking_id` | Udemy tracking ID |

All results are stored inside the Apify dataset and automatically organized into a structured overview table.

---

### 🛠 How to Use

1️⃣ Enter one or multiple search keywords

Example:

- Python
- Artificial Intelligence
- Data Science

2️⃣ Select the sorting method

Available options:

- Relevance
- Highest Rated
- Most Reviewed
- Newest

3️⃣ Choose the maximum number of courses per keyword

4️⃣ Run the Actor

5️⃣ Export the results as JSON, CSV, Excel, XML, or HTML

---

### 💸 Pricing

This scraper runs on a **monthly subscription model**.

You only pay for **successful runs**.

💳 **Price:** $24.49 / month

---

### Related Actors

(Add your existing PrimeScrape or ScrapeStorm related actors list here.)

---

### ⚙️ Input Configuration Example

#### Input Example

````

{
"keywords": \[
"Artificial Intelligence",
"Python",
"Data Science"
],
"sort": "highest-rated",
"maxitems\_per\_keyword": 50
}

```

#### Input Fields

| Field | Type | Description |
|----------|---------|--------------------------------------|
| `keywords` | array | List of search keywords |
| `sort` | string | Relevance, Highest Rated, Most Reviewed or Newest |
| `maxitems_per_keyword` | integer | Maximum courses collected per keyword |

---

### 📤 Output Example

```

{
"id": 567890,
"title": "Complete Python Bootcamp",
"headline": "Learn Python from beginner to advanced",
"level": "All Levels",
"locale": "en\_US",
"is\_free": false,
"duration\_seconds": 86400,
"lectures\_count": 250,
"rating\_average": 4.7,
"rating\_count": 185432,
"updated\_on": "2026-03-12",
"instructors": \[
"Jane Smith"
],
"image": "https://img-c.udemycdn.com/course/480x270/example.jpg",
"url\_course\_landing": "https://www.udemy.com/course/complete-python-bootcamp/",
"url\_course\_taking": "https://www.udemy.com/course/complete-python-bootcamp/learn/",
"url\_auto\_enroll": "https://www.udemy.com/course/complete-python-bootcamp/?couponCode=",
"badges": \[
"Bestseller"
],
"keyword": "Python",
"sort": "highest-rated",
"tracking\_id": "abc123xyz"
}

````

---

### 📊 Preconfigured Dataset View

🔹 Course Overview Table

Includes:

- Course ID
- Course Title
- Subtitle
- Level
- Language
- Free / Paid Status
- Rating
- Review Count
- Duration
- Lecture Count
- Instructor(s)
- Last Updated Date
- Course URL
- Thumbnail
- Badges
- Search Keyword
- Sorting Method

Perfect for educational market research, competitor analysis, AI datasets, and course discovery.

---

### 🌍 Why Use This Scraper?

📈 Educational Market Research

Analyze Udemy course trends across any topic.

🏆 Competitor Intelligence

Monitor competing instructors and course catalogs.

⭐ Rating & Popularity Analysis

Track ratings, reviews, and bestselling courses.

🤖 AI & Machine Learning Datasets

Build structured educational datasets.

🔍 Keyword Research

Discover the most relevant courses for any search query.

🔄 Automation Ready

Schedule recurring runs for continuous market monitoring.

---

### Disclaimer

This Actor is an independent and unofficial tool and is **not affiliated with, endorsed by, or sponsored by Udemy Inc.**

---

### 📫 Support & Contact

😊 Leave a **5-star rating ⭐⭐⭐⭐⭐** if you're satisfied.

🌪️ **PrimeScrape**

For questions, feature requests, or custom scraping solutions, contact us directly through **Apify**.

# Actor input Schema

## `keywords` (type: `array`):

List of keywords to search for on Udemy Courses. Each keyword is searched separately.
## `sort` (type: `string`):

How to sort the course search results on Udemy.
## `maxitems_per_keyword` (type: `integer`):

The maximum number of courses to fetch for EACH keyword provided.
## `proxy` (type: `object`):

Select the proxy configuration to use for the actor.

## Actor input object example

```json
{
  "keywords": [
    "java"
  ],
  "sort": "relevance",
  "maxitems_per_keyword": 60,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
````

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "keywords": [
        "java"
    ],
    "sort": "relevance",
    "maxitems_per_keyword": 60,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapestorm/udemy-course-scraper-cheap-advanced").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 = {
    "keywords": ["java"],
    "sort": "relevance",
    "maxitems_per_keyword": 60,
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapestorm/udemy-course-scraper-cheap-advanced").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 '{
  "keywords": [
    "java"
  ],
  "sort": "relevance",
  "maxitems_per_keyword": 60,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call scrapestorm/udemy-course-scraper-cheap-advanced --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Udemy Course Scraper - Cheap & Advanced  🔎🎓",
        "description": "Gather Udemy course search results 🎓📚, including free & paid courses, ratings ⭐, instructors 👨‍🏫, course duration ⏱️, lecture counts, badges 🏅, pricing, and more. Search millions of courses using one or multiple keywords, export structured datasets 📊 or integrate with your automation workflows",
        "version": "0.0",
        "x-build-id": "PbcJ90PRDEbZiseGU"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapestorm~udemy-course-scraper-cheap-advanced/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapestorm-udemy-course-scraper-cheap-advanced",
                "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/scrapestorm~udemy-course-scraper-cheap-advanced/runs": {
            "post": {
                "operationId": "runs-sync-scrapestorm-udemy-course-scraper-cheap-advanced",
                "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/scrapestorm~udemy-course-scraper-cheap-advanced/run-sync": {
            "post": {
                "operationId": "run-sync-scrapestorm-udemy-course-scraper-cheap-advanced",
                "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",
                "required": [
                    "keywords"
                ],
                "properties": {
                    "keywords": {
                        "title": "Search Keywords 🔍🎓",
                        "type": "array",
                        "description": "List of keywords to search for on Udemy Courses. Each keyword is searched separately.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "java"
                        ]
                    },
                    "sort": {
                        "title": "Sort order",
                        "enum": [
                            "relevance",
                            "highest-rated",
                            "most-reviewed",
                            "newest"
                        ],
                        "type": "string",
                        "description": "How to sort the course search results on Udemy.",
                        "default": "relevance"
                    },
                    "maxitems_per_keyword": {
                        "title": "Max courses per keyword",
                        "type": "integer",
                        "description": "The maximum number of courses to fetch for EACH keyword provided.",
                        "default": 60
                    },
                    "proxy": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Select the proxy configuration to use for the actor.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
