Udemy Scraper | $4 / 1k | All In One avatar
Udemy Scraper | $4 / 1k | All In One
Under maintenance

Pricing

$3.99 / 1,000 results

Go to Apify Store
Udemy Scraper | $4 / 1k | All In One

Udemy Scraper | $4 / 1k | All In One

Under maintenance

Scrape Udemy into clean, structured course, review and instructor data. $4 per 1,000 results. Capture titles, pricing and discounts, ratings, popularity, lecture counts, levels, languages, images, and profiles. Ideal for course market research, competitor analysis, and building targeted lead lists.

Pricing

$3.99 / 1,000 results

Rating

5.0

(1)

Developer

Fatih Tahta

Fatih Tahta

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Udemy Scraper | All In One

Slug: fatihtahta/udemy-scraper

Overview

Udemy Scraper collects structured course and instructor profile data from Udemy. It turns searches, categories, course pages, and instructor profiles into clean JSON you can use for analysis, enrichment, or pipelines. Runs are automated, consistent, and tuned for high reliability so you can focus on insights instead of maintenance.

Why Use This Actor

  • Market researchers and analysts: Track course supply, pricing, ratings, and engagement to benchmark trends over time.
  • Product and content teams: Discover gaps, validate ideas, and monitor competitive positioning by language, level, and topic.
  • Developers and data engineers: Populate catalogs, build directories, and feed downstream systems with ready-to-use, structured data.
  • Lead generation and outreach: Identify instructors, brands, and programs aligned with your audience in a single run.

Input Parameters

Provide any combination of URLs, queries, and filters. Leave optional fields empty to collect broader results.

ParameterTypeDescriptionDefault
startUrlsstring[]One or more Udemy search pages, category pages, course links, or instructor profile URLs to scrape directly.
queriesstring[]Search keywords that the actor converts into Udemy search URLs.
ratingstringMinimum star rating to include in results. Allowed values: 3.0, 3.5, 4.0, 4.5.
languagesstring[]Course languages to include (e.g., en, es, tr, pt, plus other supported codes).
levelsstring[]Instructional levels to include: all, beginner, intermediate, expert.
videoDurationstring[]Video length ranges to include: EXTRA_SHORT, SHORT, MEDIUM, LONG, EXTRA_LONG.
pricestring[]Choose paid, free, or both to control pricing in results.
certificationPrepOnlybooleanWhen true, include only certification prep courses.false
handsOnPracticestring[]Require specific practice features: quizzes, coding_exercises, practice_tests, roleplays.
limitintegerMaximum number of records to save across all inputs.50000
getCommentsbooleanWhen true, fetch reviews/comments for each discovered course.false
commentLimitintegerMaximum number of reviews to collect per course when review scraping is enabled.50000
proxyConfigurationobjectConnection settings. The Apify Residential proxy is preselected for reliability.Apify proxy with RESIDENTIAL group

Example Input

{
"queries": ["python for beginners", "microsoft office bundle"],
"startUrls": ["https://www.udemy.com/courses/search/?q=data+analytics"],
"rating": "4.0",
"levels": ["beginner", "intermediate"],
"languages": ["en", "es"],
"price": ["paid"],
"limit": 2000
}

Output

The actor writes results to an Apify dataset as a list of JSON records. Each item includes a stable record envelope plus a type-specific payload.

When getComments is enabled (with a positive commentLimit), the dataset also includes course_review records fetched from Udemy. Review collection applies the commentLimit to each course independently.

Record envelope (all items)

Every dataset item includes:

  • type (string, required): Record category. Currently: course or profile.
  • id (number, required): Udemy identifier for the entity.
  • url (string, required): Canonical link to the entity page.

Recommended idempotency key: type + ":" + id
Use this for deduplication and upserts in downstream pipelines.


Examples

Example: instructor profile (type = "profile")

{
"type": "profile",
"id": 254593,
"url": "https://www.udemy.com/user/simonsezit/",
"name": "Simon Sez IT",
"title": "1,000,000+ Udemy Learners in 190+ Countries",
"description": "<p>Since 2008, individuals, small businesses, and Fortune 500 companies with thousands of employees have benefited from the easy and hands-on software training offered by Simon Sez IT. With over 12,000 video tutorials on a range of software programs, Simon Sez IT ensures stress-free eLearning and enhanced employee productivity - no matter whether you are implementing new software or a technological upgrade for your workplace. With over 1 million Udemy students in over 190 countries, Simon Sez IT is the preferred online learning choice for individuals and businesses everywhere.&nbsp; </p>",
"image": "https://img-c.udemycdn.com/user/200_H/254593_efe3_6.jpg",
"social_links": {
"twitter": "https://twitter.com/simonsezit",
"facebook": "https://www.facebook.com/SimonSezIT",
"linkedin": "https://linkedin.com//company/simon-sez-it",
"youtube": "https://www.youtube.com/simonsezittraining",
"instagram": "",
"tiktok": "",
"personal_website": "https://www.simonsezit.com/"
},
"num_courses": 409,
"num_students": 1018377,
"num_reviews": 216554,
"num_org_students": 0,
"has_only_private_courses": false,
"has_published_courses_in_mx": true,
"organization_courses_only": false,
"is_mobile": false,
"send_message": false,
"new_instructor_profile": true
}

Example: course (type = "course")

{
"type": "course",
"id": 2743630,
"url": "https://www.udemy.com/course/microsoft-office-excel-word-access-powerpoint/",
"title": "Ultimate Microsoft Office; Excel, Word, PowerPoint & Access",
"headline": "Learn basic to advanced Microsoft Office skills in this 9-course bundle for Office 365 or Office 2019",
"brand": "Simon Sez IT",
"is_paid": true,
"price": 79.99,
"currency": "USD",
"price_detail": {
"amount": 79.99,
"currency": "USD",
"price_string": "$79.99",
"currency_symbol": "$"
},
"discount": {
"price_serve_tracking_id": "yfhjkrepQMqycrd3bYA5tg",
"price": {
"amount": 12.99,
"currency": "USD",
"price_string": "$12.99",
"currency_symbol": "$"
},
"list_price": {
"amount": 79.99,
"currency": "USD",
"price_string": "$79.99",
"currency_symbol": "$"
},
"saving_price": {
"amount": 67,
"currency": "USD",
"price_string": "$67.00",
"currency_symbol": "$"
},
"has_discount_saving": true,
"discount_percent": 84,
"discount_percent_for_display": 84,
"buyable": { "id": 2743630, "type": "course" },
"campaign": {
"code": "CM251223G1",
"start_time": "2025-12-23T08:00:00Z",
"end_time": "2025-12-23T19:00:00Z",
"campaign_type": "deal",
"is_public": true,
"is_instructor_created": false,
"uses_remaining": null,
"maximum_uses": null,
"show_code": true
},
"code": "CM251223G1",
"is_public": true
},
"price_serve_tracking_id": "yfhjkrepQMqycrd3bYA5tg",
"rating_average": 4.5139256,
"rating_count": 16388,
"avg_rating": 4.4932203,
"num_published_lectures": 634,
"content_info": "70.5 total hours",
"instructional_level_simple": "All Levels",
"caption_languages": [
"English [CC]",
"French [Auto]",
"German [Auto]",
"Korean [Auto]",
"Spanish [Auto]"
],
"caption_locales": [
{ "locale": "de_DE", "title": "Deutsch", "english_title": "German" },
{ "locale": "en_US", "title": "English (US)", "english_title": "English (US)" },
{ "locale": "es_ES", "title": "Español (España)", "english_title": "Spanish (Spain)" },
{ "locale": "fr_FR", "title": "Français (France)", "english_title": "French (France)" },
{ "locale": "ko_KR", "title": "한국어", "english_title": "Korean" }
],
"is_in_user_subscription": false,
"is_wishlisted": false,
"buyable_object_type": "course",
"tracking_id": "Lm0Y7UHwQJuDOIPIiRH1nw",
"learn_url": "https://www.udemy.com/course/microsoft-office-excel-word-access-powerpoint/learn/",
"published_title": "microsoft-office-excel-word-access-powerpoint",
"locale": {
"locale": "en_US",
"title": "English (US)",
"english_title": "English (US)",
"simple_english_title": "English"
},
"is_practice_test_course": false,
"is_recently_published": false,
"is_coding_exercises_badge_eligible": false,
"badges": [
{
"id": "40c6f51bf67d4bffbc6b878229dc32d6",
"text": "Bestseller",
"family": "bestseller",
"context_info": {
"category": {
"id": 292,
"title": "Office Productivity",
"url": "/courses/office-productivity/",
"tracking_object_type": "cat"
},
"subcategory": null,
"label": {
"id": 6736,
"display_name": "Microsoft Office 365",
"title": "Microsoft Office 365",
"topic_channel_url": "/topic/microsoft-office-365/",
"url": "/topic/microsoft-office-365/",
"tracking_object_type": "cl"
}
}
}
],
"images": {
"image_100x100": "https://img-c.udemycdn.com/course/100x100/2743630_037a_4.jpg",
"image_125_H": "https://img-c.udemycdn.com/course/125_H/2743630_037a_4.jpg",
"image_240x135": "https://img-c.udemycdn.com/course/240x135/2743630_037a_4.jpg",
"image_480x270": "https://img-c.udemycdn.com/course/480x270/2743630_037a_4.jpg"
},
"instructors": [{ "name": "Simon Sez IT" }]
}

Field reference

Profile fields (type = "profile")

  • name (string, required): Display name.
  • title (string, optional): Headline shown on the profile.
  • description (string, optional): HTML-formatted bio/description.
  • image (string, optional): Profile image URL.
  • social_links (object, optional): Social links (may be empty strings if not provided).
    • twitter, facebook, linkedin, youtube, instagram, tiktok, personal_website (string)
  • num_courses (number, optional): Total published courses (when available).
  • num_students (number, optional): Total learners.
  • num_reviews (number, optional): Total reviews across courses.
  • num_org_students (number, optional): Organization learners (if present).
  • has_only_private_courses (boolean, optional)
  • has_published_courses_in_mx (boolean, optional)
  • organization_courses_only (boolean, optional)
  • is_mobile (boolean, optional)
  • send_message (boolean, optional)
  • new_instructor_profile (boolean, optional)

Course fields (type = "course")

  • title (string, required): Course name.
  • headline (string, optional): Short description.
  • brand (string, optional): Brand/publisher if present.
  • is_paid (boolean, optional): Whether the course is paid at time of extraction.
  • price / currency (number/string, optional): Convenience fields for current list price.
  • price_detail (object, optional): Price object as displayed by Udemy.
    • amount, currency, price_string, currency_symbol
  • discount (object, optional): Present when a discounted offer is available.
    • price, list_price, saving_price (object)
    • discount_percent (number)
    • campaign (object, optional): Includes start/end times when provided.
  • rating_average / rating_count / avg_rating (number, optional)
  • num_published_lectures (number, optional)
  • content_info (string, optional): Duration text (as displayed).
  • instructional_level_simple (string, optional): Level (e.g., All Levels, Beginner).
  • caption_languages (array[string], optional)
  • caption_locales (array[object], optional): Locale metadata when available.
  • badges (array[object], optional): Course badges (e.g., Bestseller).
  • images (object, optional): Thumbnail URLs (multiple sizes).
  • instructors (array[object], optional): Instructor list (at least name when available).

Review fields (type = "course_review")

  • course_id (number, required): Udemy course ID the review belongs to.
  • course_url / course_title (string, optional): Helpful context for the review’s source course.
  • id (number, required): Review ID.
  • rating (number, optional): Star rating given by the reviewer.
  • content / content_html (string, optional): Review body as plain text / HTML.
  • created / created_formatted_with_time_since (string, optional): Raw and formatted timestamps.
  • user (object, optional): Reviewer metadata such as public_display_name, initials, image_50x50, and tracking_id.
  • response (object, optional): Instructor response with content_html, created, and nested user metadata.

Data guarantees & handling

  • Best-effort extraction: Records may include only the fields available at run time (geo, login state, experiments, and availability can affect output).
  • Optional fields: Many fields are optional by nature. Always null-check in downstream code.
  • Deduplication: If the same entity is discovered via multiple inputs, dedupe using type + ":" + id.

Notes & Limitations

  • Use responsibly and respect Udemy’s terms of service.
  • Avoid excessive frequency that could disrupt normal site usage.
  • Always review collected data for compliance with your organization’s data policies.

Support

Questions or custom needs? Open an issue on the Issues tab of the actor page in Apify Console with (the input you used, the run ID, a short description of the expected vs actual output.). And it will be resolved around the clock.

Happy Scraping,

  • Fatih