# Udemy Course Reviews Scraper ⭐ (`shahidirfan/udemy-course-reviews-scraper`) Actor

Extract reviews from any Udemy course with ratings, review titles, comments, reviewer names, dates, helpful votes, and more. Perfect for market research, competitor analysis, sentiment analysis, and AI training datasets. Fast, reliable, and export-ready.

- **URL**: https://apify.com/shahidirfan/udemy-course-reviews-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** AI, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

### What does Udemy Course Reviews Scraper do?

Udemy Course Reviews Scraper collects structured review data from public Udemy course pages. Add a Udemy course URL, course slug, or numeric course ID, choose how many reviews you want, and the Actor returns ratings, written review text, reviewer names when available, timestamps, and course metadata.

Use it to build review datasets for course research, competitor tracking, sentiment analysis, instructor monitoring, learning-market analysis, and AI or RAG workflows that need fresh course feedback.

***

### Why use Udemy Course Reviews Scraper?

- **Course review research** - Collect learner feedback from a specific Udemy course without manual copy-paste.
- **Clean output** - Empty and unavailable values are omitted from dataset items, keeping exports easier to analyze.
- **Pagination support** - Request multiple review pages while controlling result limits and run size.
- **Flexible course input** - Use a full Udemy URL, a course slug such as `python3-fundamentals`, or a numeric course ID in the course URL field.
- **Automation-ready data** - Export to JSON, CSV, Excel, XML, Google Sheets, webhooks, or your own API workflow.

***

### What data can you extract from Udemy?

| Field | Description |
|-------|-------------|
| `review_id` | Unique Udemy review ID |
| `review_rating` | Numeric rating left by the learner |
| `review_content` | Written review text when available |
| `review_created` | Review creation timestamp |
| `review_modified` | Review modification timestamp |
| `review_user_modified` | Timestamp for the user's latest review edit |
| `reviewer_title` | Reviewer title published by Udemy |
| `reviewer_name` | Reviewer first name when available |
| `reviewer_display_name` | Public reviewer display name |
| `course_id` | Numeric Udemy course ID |
| `course_title` | Course title |
| `course_url` | Direct Udemy course URL |
| `course_headline` | Course headline or subtitle |
| `course_rating` | Course average rating |
| `course_num_reviews` | Total review count shown by Udemy |
| `course_num_subscribers` | Total student count shown by Udemy |
| `instructor_names` | Visible instructor names |
| `source` | Source platform name |
| `scraped_at` | Timestamp for when the record was collected |

***

### How to use Udemy Course Reviews Scraper

1. Open the Actor on Apify.
2. Paste a Udemy course URL, course slug, or numeric course ID into `courseUrl`.
3. Set `results_wanted` and `max_pages`.
4. Choose whether to collect only written reviews.
5. Run the Actor and download the dataset.

***

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `courseUrl` | String | No | `https://www.udemy.com/course/python3-fundamentals/` | Udemy course URL, course slug, or numeric course ID |
| `results_wanted` | Integer | No | `20` | Maximum number of reviews to save |
| `max_pages` | Integer | No | `5` | Maximum review pages to request |
| `include_text_only` | Boolean | No | `true` | Collect only reviews that include written text |
| `ordering` | String | No | `highest_ranked` | Review order: `highest_ranked` or `recent` |
| `proxyConfiguration` | Object | No | `{ "useApifyProxy": false }` | Optional proxy settings for cloud runs |

***

### Usage Examples

#### Course URL

Collect 20 written reviews from a Udemy course URL:

```json
{
  "courseUrl": "https://www.udemy.com/course/python3-fundamentals/",
  "results_wanted": 20,
  "max_pages": 5,
  "include_text_only": true,
  "ordering": "highest_ranked"
}
```

#### Course Slug

Use a Udemy course slug when you do not want to paste the full URL:

```json
{
  "courseUrl": "python3-fundamentals",
  "results_wanted": 50,
  "max_pages": 5
}
```

#### Recent Ratings

Collect the most recent ratings, including records that may not include written text:

```json
{
  "courseUrl": "5007558",
  "results_wanted": 100,
  "max_pages": 10,
  "include_text_only": false,
  "ordering": "recent"
}
```

***

### Sample Output

```json
{
  "review_id": 241002491,
  "review_rating": 5,
  "review_content": "Exceptional .... only regret is I came across this course very late.",
  "review_created": "2026-07-09T20:31:29-07:00",
  "review_modified": "2026-07-10T16:20:40-07:00",
  "reviewer_display_name": "Jamrodh Singh",
  "course_id": 5007558,
  "course_title": "Python 3: Fundamentals",
  "course_url": "https://www.udemy.com/course/python3-fundamentals/",
  "course_rating": 4.7094297,
  "course_num_reviews": 4163,
  "course_num_subscribers": 29943,
  "instructor_names": ["Dr. Fred Baptiste"],
  "source": "Udemy",
  "scraped_at": "2026-08-04T09:22:19.554Z"
}
```

***

### Tips for Best Results

- Use complete public Udemy course URLs when possible.
- Start with `results_wanted` set to `20` for a quick test run.
- Increase `results_wanted` for larger exports, and keep `max_pages` aligned with the number of reviews you need.
- Use `include_text_only` when you need written feedback for sentiment analysis or topic modeling.
- Use `recent` ordering for monitoring new learner feedback over time.

***

### Integrations

- **Google Sheets** - Send Udemy review data to a spreadsheet.
- **Webhooks** - Trigger follow-up workflows after each run.
- **Make or Zapier** - Connect reviews to no-code automations.
- **API access** - Retrieve datasets from your own applications.
- **CSV and Excel exports** - Download review datasets for analysis.

***

### Frequently Asked Questions

#### Can I scrape reviews from any Udemy course?

Yes. Use a public Udemy course URL, course slug, or numeric course ID. Private or unavailable courses may not return data.

#### Can I collect only written reviews?

Yes. Keep `include_text_only` enabled to collect reviews that include text. Disable it when rating-only records are useful for your analysis.

#### Why are some reviewer fields missing?

Some reviews do not publish every reviewer field. The Actor omits empty values instead of saving nulls.

#### Can I run this Actor on a schedule?

Yes. Apify schedules can run the Actor hourly, daily, weekly, or at another interval for review monitoring.

#### Can I export Udemy reviews to CSV or Excel?

Yes. Apify datasets can be exported to CSV, Excel, JSON, XML, RSS, and other supported formats.

#### Is it legal to scrape Udemy reviews?

Scraping public web data can be legal, but you are responsible for complying with applicable laws, Udemy's terms, privacy rules, and your intended use of the data.

***

### Related Actors

- [Coursera Scraper](https://apify.com/shahidirfan/coursera-scraper)
- [EdX Course Scraper](https://apify.com/shahidirfan/edx-course-scraper)
- [Skillshare Courses Scraper](https://apify.com/shahidirfan/skillshare-courses-scraper)

***

### Support

For issues, feature requests, or custom Actor work, use the Issues tab on the Actor page or contact the developer through Apify.

***

### Legal Notice

This Actor is designed for legitimate collection of publicly available course review data. Do not use it to collect private information, bypass access controls, spam Udemy, or violate applicable terms or laws.

# Actor input Schema

## `courseUrl` (type: `string`):

Udemy course URL, course slug, or numeric course ID.

## `results_wanted` (type: `integer`):

Maximum number of reviews to save.

## `max_pages` (type: `integer`):

Maximum number of review pages to request.

## `include_text_only` (type: `boolean`):

When enabled, only reviews with written text are collected.

## `ordering` (type: `string`):

Choose how Udemy reviews are ordered.

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

Use Apify Proxy for cloud runs if your environment is rate limited.

## Actor input object example

```json
{
  "courseUrl": "https://www.udemy.com/course/python3-fundamentals/",
  "results_wanted": 20,
  "max_pages": 5,
  "include_text_only": true,
  "ordering": "highest_ranked",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "courseUrl": "https://www.udemy.com/course/python3-fundamentals/",
    "results_wanted": 20,
    "max_pages": 5,
    "ordering": "highest_ranked"
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/udemy-course-reviews-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 = {
    "courseUrl": "https://www.udemy.com/course/python3-fundamentals/",
    "results_wanted": 20,
    "max_pages": 5,
    "ordering": "highest_ranked",
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/udemy-course-reviews-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "courseUrl": "https://www.udemy.com/course/python3-fundamentals/",
  "results_wanted": 20,
  "max_pages": 5,
  "ordering": "highest_ranked"
}' |
apify call shahidirfan/udemy-course-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,shahidirfan/udemy-course-reviews-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Q9bJCabLN4WxVWRRt/builds/Xa5MRYLFZUrbLKKIZ/openapi.json
