Udemy Course Catalog & Pricing Data Scraper avatar

Udemy Course Catalog & Pricing Data Scraper

Pricing

from $0.75 / 1,000 udemy course results

Go to Apify Store
Udemy Course Catalog & Pricing Data Scraper

Udemy Course Catalog & Pricing Data Scraper

Search public Udemy courses by keyword or phrase and return a deduplicated catalog with titles, ratings, prices, instructors, outcomes, badges, images and curriculum counts. Optionally filter free courses or enrich records with public course-page details.

Pricing

from $0.75 / 1,000 udemy course results

Rating

0.0

(0)

Developer

DataScraperES

DataScraperES

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

9 days ago

Last modified

Categories

Share

Search the public Udemy catalog by keyword or phrase and receive deduplicated course records with current public pricing. Add optional public course details, curriculum items, and text reviews when your workflow needs deeper enrichment.

What this Actor does

This Actor searches public Udemy courses for up to 10 keywords or phrases, follows pagination until the requested maximum is reached, and keeps one Dataset item per unique course. Each item includes the course title, public URL when available, headline, rating data, instructors, badges, image URLs, course counts, and the price returned for the current market context.

Optional enrichment adds public course page fields such as description, requirements, course metrics, and extended images. Separate switches add a bounded set of public curriculum items and recent text reviews. The default run stays compact and fast; enrichment is enabled only when requested.

Use cases

  • Build a current catalog of courses for a topic or market research project.
  • Compare public course ratings, instructors, badges, images, and prices.
  • Create a learning-content inventory with selected curriculum items.
  • Collect recent public review text for course evaluation or analysis.
  • Feed deduplicated course data into a spreadsheet, database, or analytics workflow.

How to use

  1. Open the Actor in Apify Console.
  2. Enter one or more keywords or phrases in Search terms.
  3. Set Maximum courses and enable the optional enrichment you need.
  4. Click Start and open the Dataset when the run finishes.

If the public catalog remains unavailable or the available collection time is reached, the run can finish with partial results. Saved courses remain available; a partial result does not mean the full requested catalog was collected.

For a small catalog with one course, use:

{
"searchTerms": ["python"],
"maxItems": 1,
"freeOnly": false,
"includeCourseDetails": false,
"includeCurriculum": false,
"maxCurriculumItems": 20,
"includeReviews": false,
"maxReviews": 20
}

Input

searchTerms is required and accepts 1–10 unique keywords or phrases. Each term can contain up to 200 characters. maxItems defaults to 100 and accepts 1–10,000 unique courses across all terms. Duplicate terms are removed after whitespace normalization, and duplicate courses are removed by courseId.

Set freeOnly to true for public courses marked as free. sortOrder accepts RELEVANCE, REVIEWS, RATING, or TIME. The language, level, rating, video-length, caption, and feature selectors are sent as catalog filters. Empty selector arrays leave that filter unused.

includeCourseDetails adds public course detail fields and is disabled by default. includeCurriculum adds up to maxCurriculumItems public curriculum items per course; the default is 40 and the allowed range is 1–100. includeReviews adds a bounded sample of recent text reviews and a summary, following available review pages up to maxReviews; the default is 20 and the allowed range is 1–100.

The complete input contract is:

{
"searchTerms": ["python", "data science"],
"maxItems": 100,
"freeOnly": false,
"sortOrder": "RELEVANCE",
"languages": ["EN"],
"levels": ["BEGINNER"],
"minRating": 4,
"videoLengths": ["MEDIUM"],
"closedCaptionLanguages": ["EN"],
"mustHaveClosedCaptions": false,
"mustHaveQuizzes": false,
"mustHaveCodingExercises": false,
"mustHavePracticeTests": false,
"mustHaveWorkspaces": false,
"mustHaveRoleplays": false,
"practiceTestCoursesOnly": false,
"certificationPrepOnly": false,
"includeCourseDetails": false,
"includeCurriculum": false,
"maxCurriculumItems": 40,
"includeReviews": false,
"maxReviews": 20
}

Output

The default Dataset contains one item per unique public course. This is the complete Dataset item from a successful run using the small input shown above:

{
"recordType": "course",
"sourceSearchUrl": "https://www.udemy.com/courses/search/?src=ukw&q=python",
"page": 0,
"courseId": "2776760",
"title": "100 Days of Code™: The Complete Python Pro Bootcamp",
"headline": "Master Python by building 100 projects in 100 days. Learn data science, automation, build websites, games and apps!",
"url": "https://www.udemy.com/course/100-days-of-code/",
"isFree": null,
"isPracticeTestCourse": null,
"locale": null,
"level": null,
"ratingAverage": 4.671464920043945,
"ratingCount": 436938,
"durationSeconds": null,
"lectureCount": 604,
"practiceTestQuestionsCount": null,
"instructors": [
{
"id": "31334738",
"name": "Dr. Angela Yu, Developer and Lead Instructor"
}
],
"learningOutcomes": [],
"badges": [
{
"__typename": "BestSellerSubcategoryBadge",
"name": "Bestseller"
},
{
"__typename": "BestSellerCategoryTopicBadge",
"name": "Bestseller"
},
{
"__typename": "BestSellerSubcategoryTopicBadge",
"name": "Bestseller"
}
],
"images": {
"px480x270": "https://img-c.udemycdn.com/course/480x270/2776760_f176_10.jpg",
"px50x50": "https://img-c.udemycdn.com/course/50x50/2776760_f176_10.jpg",
"image_750x422": "https://img-c.udemycdn.com/course/750x422/2776760_f176_10.jpg",
"image_480x270": "https://img-c.udemycdn.com/course/480x270/2776760_f176_10.jpg",
"image_240x135": "https://img-c.udemycdn.com/course/240x135/2776760_f176_10.jpg"
},
"updatedOn": "2026-09-15",
"price": {
"amount": 2000,
"currency": "JPY",
"priceString": "¥2,000",
"listAmount": 27800,
"discountAmount": 2000
},
"scrapedAt": "2026-09-29T11:49:10.715546+00:00",
"detailStatus": null,
"curriculumItems": [],
"reviews": []
}

When includeCourseDetails is enabled, the item can also contain description, requirements, apkCourseMetrics, and extended detail fields. When curriculum or reviews are enabled, the item can contain curriculumCount, curriculumItems, reviewSummary, and reviews. Missing public values remain null or an empty array.

Each run also writes RUN_STATS to the default Key-Value Store. It reports requested and delivered counts, search pages, price batches, detail and optional enrichment counts, duplicate courses skipped, completion status, and the stage where a partial collection stopped. Early failures are recorded as failed; coursesEmitted is null when the saved total could not be verified.

Pricing

The Actor uses pay-per-event pricing. One course-result event is charged for each unique public course successfully written to the default Dataset. The active tiered prices are:

Apify plan tierPrice per course resultEquivalent per 1,000 course results
Free$0.001$1.00
Bronze$0.0009$0.90
Silver$0.0008$0.80
Gold$0.00075$0.75
Platinum$0.00075$0.75
Diamond$0.00075$0.75

The 1,000-course values are comparison equivalents; billing remains per delivered course. Each unique course actually saved is billable, including courses saved in partial output. Unavailable optional fields, failed requests, duplicate courses, and RUN_STATS do not create additional charges. Apify spending limits are checked before another billable result is delivered.

ActorBest for
Keyword Research & SERP DataFinding and grouping search terms before using them to build a Udemy course catalog.

Limits and data quality

  • A run accepts at most 10 search terms and 10,000 unique courses.
  • The public catalog can change between runs. Prices, ratings, counts, availability, and search order depend on the current market context.
  • Price values can use a local currency and should be interpreted together with currency and priceString.
  • Optional curriculum and review enrichment increases the number of requests and run time. Use the per-course limits to keep a run bounded.
  • If the source is temporarily unavailable or restricts a request, already delivered rows remain in the Dataset and RUN_STATS.collectionStatus becomes partial. Inspect failureStage before treating the Dataset as complete.
  • When optional details are unavailable, the base course row can still be delivered. With course details enabled, detailStatus identifies whether the enrichment was available.

Frequently asked questions

Can I search several topics in one run?

Yes. Add up to 10 terms to searchTerms. Results are deduplicated by courseId across all terms.

Can I retrieve only free courses?

Yes. Set freeOnly to true. The Actor applies the public free-course filter for the search.

How do I get the curriculum and reviews?

Set includeCurriculum and/or includeReviews to true, then choose maxCurriculumItems and maxReviews. Both are bounded per course.

Why is a field empty?

Udemy does not expose every public field for every course or market. The Actor preserves unavailable values as null or empty arrays instead of estimating them.

What does a partial run mean?

It means the Actor delivered the rows it could collect and recorded the incomplete stage in RUN_STATS. Review that record before using the Dataset as a complete catalog.

Responsible use

Use this Actor for lawful work with publicly available course information. You are responsible for respecting Udemy's terms, applicable privacy and data-protection rules, intellectual-property rights, and any restrictions that apply to your intended use. Do not use it to access private accounts, enrolled content, or protected lesson material.

Support

Open the Actor's Issues tab with the run ID, exact input, and a concise description of the expected versus actual result. Do not include credentials or private account data in a support request.

For Python, JavaScript, and cURL integration examples, see the public integration repository.