Udemy Course Scraper avatar

Udemy Course Scraper

Pricing

from $1.49 / 1,000 results

Go to Apify Store
Udemy Course Scraper

Udemy Course Scraper

Scrape Udemy courses by course, category, topic, or search URL. Get price, discount, rating, reviews, students, instructors, curriculum counts, requirements, and objectives. Export as JSON, CSV, or Excel.

Pricing

from $1.49 / 1,000 results

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Security

Limited permissions

Share

Udemy Course Scraper

Scrape Udemy course data from course, category, subcategory, topic, and search URLs, with prices, discounts, ratings, students, instructors, and curriculum counts.

Turn Udemy's catalog into a clean dataset: paste any course or listing link, keep your Udemy filters, and see prices and sale discounts for the country you choose.

Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

Apify actor "parsebird/udemy-course-scraper" (Udemy Course Scraper) returns course data from Udemy. Call it with the apify-client package: client.actor("parsebird/udemy-course-scraper").call(run_input={"start_urls": [{"url": "https://www.udemy.com/topic/python/"}], "max_items_per_url": 100}). Provide at least one of: course_urls (array of {url}; https://www.udemy.com/course/python-3-do-zero-ao-avancado/), start_urls (array of {url}; category https://www.udemy.com/courses/development/, subcategory https://www.udemy.com/courses/development/web-development/, topic https://www.udemy.com/topic/python/, or search https://www.udemy.com/courses/search/?q=python, with Udemy filters kept). Optional: max_items_per_url (integer, default 60, 0 = everything up to 10,000 per URL), start_page (integer, default 1, 60 courses per page), price_country (two-letter code, default "US"), max_concurrency (integer, default 20, up to 30). Output, one row per course: id, title, url, price, price_detail, is_paid, instructors, visible_instructors, language, locale, category, subcategory, description, headline, created, published_time, last_update_date, num_subscribers, discount, discount_price, rating, avg_rating, num_reviews, rating_distribution, num_quizzes, num_lectures, num_curriculum_items, num_practice_tests, num_coding_exercises, features, image, primary_category, primary_subcategory, requirements_data, what_you_will_learn_data, labels, target_audiences, objectives, estimated_content_length, content_info, instructional_level, has_certificate, caption_languages, badges, price_country, source_url, scraped_at. Pay per event: apify-actor-start, result. API docs: https://apify.com/parsebird/udemy-course-scraper/api. Get a token: https://console.apify.com/settings/integrations

What is Udemy Course Scraper?

Udemy Course Scraper collects public course data from Udemy and returns it as a structured dataset. It works as a Udemy API alternative: paste a course link or a category, topic, or search link, press Start, and download the results.

Each row is one course, with its price, discount, rating, review count, student count, instructors, curriculum counts, requirements, and learning objectives.

What can Udemy Course Scraper do?

  • 🎓 Scrape single courses. Paste any number of course links.
  • 📚 Scrape categories, subcategories, and topics. Collect the courses Udemy lists under a link such as /courses/development/ or /topic/python/.
  • 🔎 Scrape search results. Paste a search link such as /courses/search/?q=python.
  • 🎯 Keep your Udemy filters. Language, level, price, rating, length, captions, and sort order in a pasted link are applied.
  • 🌍 Compare prices by country. Udemy sets currency, price, and sale discounts by visitor country. Choose one of 30 countries.
  • 🧹 Avoid duplicates. A course found through several links is saved and charged once per run.

On the Apify platform you can also schedule runs to track prices and ratings, call the Actor through the API, connect it to Make, Zapier, Google Sheets, and other integrations, and export in JSON, CSV, Excel, XML, or HTML.

What data can you extract from Udemy?

FieldDescription
id, title, headline, description, urlCourse identity and sales text (description is HTML)
price, price_detailCurrent price as displayed, and list price with amount and currency
discount, discount_priceSale details when a discount is active, including percent and campaign
is_paid, price_countryWhether the course is paid, and the country the prices are for
rating, avg_rating, num_reviews, rating_distributionRatings and the count for each star level
num_subscribersEnrolled students
instructors, visible_instructorsInstructor names, plus job titles, photos, and profile links
language, locale, caption_languagesCourse language and available captions
category, subcategory, primary_category, primary_subcategory, labelsWhere the course sits in Udemy's catalog
num_lectures, num_quizzes, num_curriculum_items, num_practice_tests, num_coding_exercisesCurriculum counts
estimated_content_length, content_length_video, content_infoCourse length in minutes and seconds, and as displayed
requirements_data, what_you_will_learn_data, objectives, target_audiencesRequirements, objectives, and intended students
instructional_level, has_certificate, badgesLevel, certificate, and badges such as Bestseller
created, published_time, last_update_dateCourse dates

How to scrape Udemy courses

  1. Open Udemy Course Scraper and go to the Input tab.
  2. Paste links in Course URLs or Category, topic, or search URLs. To use filters, apply them on Udemy first and copy the resulting link.
  3. Set Max courses per URL to control the run size and cost.
  4. Pick a Price country if you need prices outside the US.
  5. Press Start and wait for the run to finish.
  6. Download your courses in JSON, CSV, Excel, XML, or HTML from the Output tab.

Input parameters

Provide at least one URL in course_urls or start_urls.

ParameterTypeRequiredDefaultDescription
course_urlsarrayNo—Udemy course URLs
start_urlsarrayNo—Udemy category, subcategory, topic, or search URLs
max_items_per_urlintegerNo60Maximum courses saved from each listing URL. 0 means everything Udemy serves, up to 10,000 per URL
start_pageintegerNo1Results page to start from. Each page holds up to 60 courses
price_countrystringNoUSTwo-letter country code for prices, currency, and discounts
max_concurrencyintegerNo20Courses loaded at the same time, up to 30

Example input:

{
"course_urls": [
{ "url": "https://www.udemy.com/course/python-3-do-zero-ao-avancado/" }
],
"start_urls": [
{ "url": "https://www.udemy.com/courses/development/" },
{ "url": "https://www.udemy.com/topic/python/?lang=en&sort=newest" }
],
"max_items_per_url": 60,
"start_page": 1,
"price_country": "US"
}

Output example

Long fields are shortened here. Download results in JSON, CSV, Excel, XML, or HTML.

{
"id": 1565838,
"title": "The Complete Full-Stack Web Development Bootcamp",
"url": "https://www.udemy.com/course/the-complete-web-development-bootcamp/",
"price": "$124.99",
"price_detail": { "amount": 124.99, "currency": "USD", "price_string": "$124.99", "currency_symbol": "$" },
"is_paid": true,
"instructors": "Dr. Angela Yu",
"visible_instructors": [
{
"id": 31334738,
"title": "Dr. Angela Yu",
"name": "Dr. Angela",
"display_name": "Dr. Angela Yu",
"job_title": "Developer and Lead Instructor",
"image_100x100": "https://img-c.udemycdn.com/user/100x100/31334738_a13c_3.jpg",
"initials": "DY",
"url": "https://www.udemy.com/user/4b4368a3-b5c8-4529-aa65-2056ec31f37e/"
}
],
"language": "English",
"category": "Development",
"subcategory": "Web Development",
"headline": "Become a Full-Stack Web Developer with just ONE course...",
"created": "2018-02-22T12:02:33Z",
"last_update_date": "2025-11-24",
"num_subscribers": 1596112,
"discount": null,
"discount_price": null,
"rating": 4.670647,
"avg_rating": 4.6757493,
"num_reviews": 475892,
"num_lectures": 442,
"num_quizzes": 12,
"num_curriculum_items": 454,
"image": "https://img-c.udemycdn.com/course/750x422/1565838_e54e_18.jpg",
"requirements_data": ["No programming experience needed - I'll teach you everything you need to know"],
"what_you_will_learn_data": ["Build 16 web development projects for your portfolio, ready to apply for junior developer jobs."],
"labels": [
{ "id": 6368, "title": "JavaScript", "url": "https://www.udemy.com/topic/javascript/", "type": "topic", "display_name": "JavaScript" }
],
"estimated_content_length": 3714,
"content_info": "62 total hours",
"instructional_level": "All Levels",
"badges": ["Bestseller"],
"price_country": "US",
"source_url": "https://www.udemy.com/course/the-complete-web-development-bootcamp/",
"scraped_at": "2026-11-07T00:00:00+00:00"
}

Use cases

  • Market research: see which topics, levels, and languages draw the most students and reviews.
  • Price tracking: schedule runs to follow prices and sale discounts, in one country or several.
  • Competitor analysis: compare your courses with others on ratings, length, curriculum, and positioning.
  • Course planning: study objectives, requirements, and target audiences of top courses in your topic.
  • Learning platforms and directories: keep your own course catalog up to date.

How to use the Udemy API alternative in Python and JavaScript

Python, using the Apify API client for Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("parsebird/udemy-course-scraper").call(run_input={
"start_urls": [{"url": "https://www.udemy.com/topic/python/"}],
"max_items_per_url": 100,
})
for course in client.dataset(run["defaultDatasetId"]).iterate_items():
print(course["title"], course["price"], course["rating"], course["num_subscribers"])

JavaScript, using the Apify API client for JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('parsebird/udemy-course-scraper').call({
start_urls: [{ url: 'https://www.udemy.com/topic/python/' }],
max_items_per_url: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((course) => console.log(course.title, course.price, course.rating, course.num_subscribers));

How much does it cost to scrape Udemy?

This Actor uses pay-per-event pricing. Compute and proxy costs are included in the event prices, and your Apify plan sets your discount tier.

EventWhat it coversFreeBronzeSilverGold
apify-actor-startOnce per run, per GB of memory (minimum one; one at the default 256 MB)$0.005$0.005$0.005$0.005
resultEach course saved$2.99 / 1,000$2.49 / 1,000$1.99 / 1,000$1.49 / 1,000

On the Free tier, a run of 1,000 courses costs $2.995: the $0.005 start fee plus $2.99 for the courses. Courses that fail to load, are not public, or were already saved in the run are not charged. Choosing a price country costs nothing extra. Use Maximum cost per run to cap your spending: the Actor stops when the limit is reached.

How does Udemy Course Scraper work?

  1. It reads each link you paste and works out whether it is a course, category, subcategory, topic, or search.
  2. For listings, it goes through the results page by page, applying any filters from the link, until it reaches your limit or the end.
  3. It loads each course's public details and saves them as one row.
  4. If you chose a price country other than the US, it adds that country's prices.

FAQ

How many courses can I get from one URL? Udemy serves at most 10,000 courses per listing, in 167 pages of up to 60. To reach more, use several subcategories, topics, or filtered links. Courses found through more than one link are saved once.

How long does a run take? In our tests on the Apify platform, the default 60 courses took under 20 seconds, 2,000 courses from one category took about 5 minutes at the highest concurrency, and all of the Python topic took about 18 minutes at concurrency 10. That topic returned 3,763 courses against the 3,783 Udemy reported, because Udemy's reported total can differ slightly from the courses its pages serve.

Does Max courses per URL apply to course links? No. It applies to each category, subcategory, topic, and search link. Every course link you paste is scraped.

Why is discount empty for some courses? Udemy runs sales by country and time, so a course can be discounted in one country and at full price in another. In our tests, the same course showed a discount from India and full price from the US, Brazil, and Germany. discount and discount_price are empty when no sale is active for the chosen country.

Does the Actor apply coupon codes from URLs? No. A couponCode in a course link is ignored, and the returned price is the public one for the chosen country.

Why are price_detail and discount empty for a course? Free courses have no price. Those rows show "price": "Free" and "is_paid": false.

Why is a course missing from my results? Some courses appear in listings but are not open to the public, such as Udemy Business content. Those are skipped without a charge, and the run log reports how many.

Can I get lecture titles or course reviews? Not at this time. The Actor returns curriculum counts, the rating distribution, and review counts. Tell us in the Issues tab if you need more.

Do I need to set up a proxy? No. The Actor manages its own proxies, and that cost is included in the event prices.

Can I schedule recurring runs? Yes. Use Apify Schedules to run daily, weekly, or at any interval, then send results to your tools through integrations or the API.

Something is not working. What should I do? Open a ticket in the Issues tab with your run link, and we will look into it.

Other Actors you may like

This Actor collects only information that Udemy publishes on public course pages. It does not log in or access private data or course videos. Results can include personal data such as instructor names and photos, which laws such as the GDPR and CCPA protect. You are responsible for having a lawful basis for your use, respecting Udemy's terms, and following the rules that apply to you. If you are unsure, consult a lawyer. You can read more in Apify's post on the legality of web scraping.