Udemy Course Scraper avatar

Udemy Course Scraper

Pricing

from $3.00 / 1,000 course scrapeds

Go to Apify Store
Udemy Course Scraper

Udemy Course Scraper

Scrape Udemy courses by keyword search or course URL — price, rating, reviews, enrollment, instructor, level, language. MCP/API-ready.

Pricing

from $3.00 / 1,000 course scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

a day ago

Last modified

Share

Udemy Course Scraper collects Udemy course data from either keyword searches or direct course URLs and returns one flat record per course. It accepts search queries such as a topic phrase, or full Udemy course landing-page URLs, and each returned record can include fields such as title, URL, headline, price, rating, review count, enrollment, lecture count, level, category, language, instructor details, and objectives. The outcome is a structured dataset that is ready for analysis, enrichment, or agent workflows through Apify and Apify MCP.

Best fit and connected workflows

This Actor fits workflows that start with a topic or a specific course page and end with structured course records.

Common routing patterns include:

  • Keyword research for a topic, followed by filtering on rating, reviews, level, or language.
  • Course URL enrichment, where a list of Udemy links becomes a detailed dataset.
  • Market scanning for course pricing, instructor positioning, and catalog coverage.
  • AI agent workflows through Apify MCP, where an agent needs compact course facts instead of browsing pages manually.

Focused standalone workflow

This Actor is designed as a focused standalone workflow.

Practical scenario

Maya is building a spreadsheet of Udemy courses for a Python learning page. She starts with the keyword python for beginners and leaves the course URL field empty. The Actor returns records with title, price, rating, numReviews, numSubscribers, level, language, and url. Maya uses those fields to compare course positioning and then opens the most relevant course URLs for a deeper review.

Input

Use keyword search, course URLs, or both.

FieldTypePurpose
searchQueriesarray of stringsKeyword searches against the Udemy catalog. One record is returned per matching course. Each query is paginated up to maxResults.
startUrlsarray of stringsFull Udemy course landing-page URLs for detailed scraping. Each URL returns one deep record.
maxResultsintegerMaximum number of courses returned per search query. Applies to search queries only.
languagestringFilters search results by Udemy course language ISO code such as en, es, or de. Applies to search queries only.
sortBystringSearch ordering: relevance, highest-rated, most-reviewed, or newest. Applies to search queries only.
proxyConfigurationobjectProxy settings. The default uses Apify Residential US.

Valid focused input example:

{
"searchQueries": [
"excel"
],
"startUrls": [
"https://www.udemy.com/course/the-complete-javascript-course/"
],
"maxResults": 25,
"language": "en",
"sortBy": "highest-rated"
}

Output

The Actor stores scraped course records in a dataset. The dataset item fields are defined by the live output contract.

FieldTypeMeaning
courseIdintegerUdemy numeric course ID
titlestringCourse title
urlstringCourse landing-page URL
headlinestringShort course headline
isPaidbooleanPaid or free course flag
pricestringListed price text
priceCurrencystringPrice currency code
numSubscribersintegerEnrolled students
ratingnumberAverage course rating
numReviewsintegerReview count
numPublishedLecturesintegerPublished lecture count
contentInfostringTotal content length
levelstringCourse level
categorystringUdemy category
subcategorystringUdemy subcategory
languagestringCourse language
lastUpdatedstringLast update date text
createdAtstringCreation date text
instructorNamestringLead instructor name
instructorJobTitlestringInstructor job title
instructorUrlstringInstructor page URL
imageUrlstringCourse image URL
objectivesarray of strings"What you'll learn" items
searchQuerystringSearch query that produced the record
_sourcestringSource indicator

Illustrative dataset record:

{
"courseId": 123456,
"title": "Complete Python Bootcamp",
"url": "https://www.udemy.com/course/complete-python-bootcamp/",
"headline": "Learn Python from scratch",
"isPaid": true,
"price": "$19.99",
"priceCurrency": "USD",
"numSubscribers": 120000,
"rating": 4.6,
"numReviews": 34000,
"numPublishedLectures": 220,
"contentInfo": "42 total hours",
"level": "Beginner",
"category": "Development",
"subcategory": "Programming Languages",
"language": "en",
"lastUpdated": "2025",
"createdAt": "2019",
"instructorName": "Jane Instructor",
"instructorJobTitle": "Software Engineer",
"instructorUrl": "https://www.udemy.com/user/jane-instructor/",
"imageUrl": "https://img-c.udemycdn.com/course/750x422/123456.jpg",
"objectives": [
"Build Python scripts",
"Work with data structures"
],
"searchQuery": "python for beginners",
"_source": "search"
}

How it works

The Actor uses Apify Residential US by default. The live contract shows an impit Chrome-TLS approach, Udemy api-2.0 access, and a landing-page ld+json fallback for course-detail-by-URL. The contract also includes soft-fail validation, honest-fail anti-bot handling, cost-cap logging, and safe dataset writes.

Pricing

This Actor uses Pay per event pricing, plus standard Apify platform usage. The primary billed event is Course scraped, which is charged once for each returned course record, whether it comes from a search result or a course URL. There is also an Actor start event that applies once per run.

A simple example: if you run a search that returns fifty courses, the billing includes one run start event and fifty course-scraped events. For current rates and any platform usage details, check the live Pricing tab in Apify Console before you run the Actor.

Use with AI agents (MCP)

This Actor is available as an Apify Actor usable through Apify MCP. It is designed for agents that need structured Udemy course facts from a single tool call.

Tool description: scrape Udemy courses by keyword search or course URL and return one dataset record per course, including pricing, popularity, instructor, and taxonomy fields.

Exact Actor identity: khadinakbar/udemy-course-scraper

Example agent prompt:

Find Udemy courses for "excel" in English, sort by highest-rated, and return the top records with title, price, rating, reviews, students, level, language, and URL.

Output interpretation:

  • Search mode returns one record per matching course.
  • URL mode returns one deep record per supplied course URL.
  • The dataset contains the authoritative scraped items, and the courses output points to the default dataset items endpoint.
  • Use searchQuery to trace which keyword produced a record.
  • Use url and instructorUrl as provenance links for review and follow-up.
  • Pagination applies to keyword searches through maxResults.
  • Cost scales with the number of returned course records, so larger result sets produce more billed events.

Example: run via Apify API and read the dataset

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const input = {
searchQueries: ['python for beginners'],
maxResults: 10,
sortBy: 'highest-rated',
language: 'en',
};
const run = await client.actor('khadinakbar/udemy-course-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Best results and outcome guidance

Use keyword searches when you want market coverage, then narrow the result set with language and sortBy. Use direct course URLs when you already have a shortlist and want a deeper record for each course. Keep search terms specific to the topic you want to study, because each query is paginated independently up to maxResults. For agent workflows, pass only one task at a time so the returned dataset stays easy to interpret.

Design note

I found that the live dataset contract exposes a compact, flat record shape with both discovery fields, such as searchQuery, and detail fields, such as instructorUrl, which makes it straightforward to use the same Actor for catalog research and URL-based enrichment.

FAQ

When should I use searchQueries instead of startUrls?

Use searchQueries when you want Udemy catalog discovery from a topic phrase. Use startUrls when you already have the exact course landing pages and want detailed records for those pages.

Can I combine keyword search and course URLs in one run?

Yes. The input schema allows both. Search queries return paginated results, and course URLs return one deep record per URL.

How do I narrow results to one language?

Set language to an ISO code such as en, es, or de. That filter applies to keyword searches.

Which sort order should I use for discovery work?

highest-rated is useful when you want top-rated courses first. most-reviewed is useful when you want higher-volume results. newest surfaces recent courses. relevance follows the default Udemy search order.

What dataset fields are most useful for comparisons?

Common comparison fields are price, rating, numReviews, numSubscribers, level, language, and instructorName.

Responsible use

Use this Actor for research, analysis, enrichment, and other lawful workflows. Review the source site's terms and your own compliance requirements before storing or redistributing data.