Documentation Python quickstart Blog Free tools hello@quanticdata.ioLog in

Udemy Scraper API

A Udemy scraper API that searches Udemy for a keyword and returns one flat row per course: title, instructors, rating, review count, enrolled students, today’s price beside the list price, duration, lecture count, level, language, category and URL. Read from Udemy’s own JSON API on the TLS tier — never a browser render.

$0.001 per delivered course · $2 free every month · Failed runs never billed

POST /v1/scraper/collectors/udemy_courses/run
$ curl $QD/udemy_courses/run \
    -H "Authorization: Bearer $QD_API_KEY" \
    -d '{"keyword": "python", "max_results": 12}'
{ "status": "done", "count": 12,
  "results": [
    {
      "course_id": …,
      "title": "…",
      "url": "…",
      "headline": "…" } ],
  "cost": 0.012 }
# 12 courses × $0.001 · nothing delivered, nothing charged
Udemy Scraper API: keyword and country in, a residential exit in the middle, delivered rows with rank, course_id and title on the right, $0.001 per course.
You send keyword and country; the run goes out through a residential exit and comes back as courses with rank, course_id and title — 25 fields on every row — and you are billed $0.001 for each course actually delivered, nothing for a run that delivers none.
$0.001 / course2,000 courses on the free $2 every month
Semantic inputkeyword, country, max_results — no URL lists
Up to 36courses per run, pagination handled for you
No browserread over HTTP/TLS — cheaper and faster than rendering

Try it

Udemy course search, running now

Change the input and run it against the live collector — nothing to install, no sign-up.

Run it from your own code, on your own inputs

Same collector, same rows — $2 of free API credit every month, no card.

Get my free API key

What an Udemy scraper API does

Udemy’s search results page contains no courses on a plain fetch: its whole result area is one empty loader div whose arguments carry feature flags, and the topic pages are the same. The list API that would return a whole result page answers 403 to an anonymous client, and the discovery endpoint demands closed-enum parameters that live only in Udemy’s bundle. What remains open is the typeahead behind the search box — up to four matching courses plus related search phrases — and the per-course record, which is the only place every field lives together: rating, review count, subscribers, price and discount, duration, level, instructors.

So the collector reads those two. Because the typeahead returns at most four courses per phrase, beyond four results it widens the search using Udemy’s own related phrases and deduplicates by course id, and every row states the phrase that matched it. That shape is the source’s, not a preference, and the page says so rather than implying a full-text search that does not exist for anonymous clients.

Limits, in plain numbers

Everything that bounds one run of this collector. No hidden throttles.

Max per run

36 courses

Price

$0.001 / course

Per 1,000

$1.00

Failed runs

Free zero rows, zero charge

Free every month

$2 no card

Rate limit

60 req/min on the free tier

What one course looks like

Every delivered course carries these fields. Nullable means the source did not publish it — the field stays empty instead of being guessed.

FieldTypeWhat it holds
rankinteger1-based position in the delivered set.
course_idinteger · nullableUdemy's numeric course id — the stable de-duplication key.
titlestring · nullableCourse title.
urlstring · nullableCourse page URL.
headlinestring · nullableUdemy's one-line course subtitle.
instructorstring · nullableFirst listed instructor.
instructorsstring[]Every visible instructor, in Udemy's order.
ratingnumber · nullableAverage rating out of 5, to 2 decimals.
reviewsinteger · nullableNumber of ratings the average is based on.
studentsinteger · nullableEnrolled students (num_subscribers).
pricenumber · nullableWhat a buyer pays right now — the campaign price while a Udemy deal is running, otherwise the list price. 0 for a free course.
list_pricenumber · nullableUndiscounted sticker price.
currencystring · nullableISO currency of price/list_price (null on free courses, which state none).
is_freebooleanTrue when the course is free to enrol.
discount_percentinteger · nullablePercent off while a campaign is live; null when there is no discount.
durationstring · nullableTotal content length as Udemy words it, e.g. "57 total hours".
video_hoursnumber · nullableVideo runtime in hours. Measured from seconds of video, so it can read lower than duration, which also counts articles and resources.
lecturesinteger · nullableNumber of published lectures.
levelstring · nullableInstructional level, e.g. "All Levels", "Beginner Level".
languagestring · nullableCourse language, e.g. "English".
categorystring · nullablePrimary Udemy category, e.g. "Development".
subcategorystring · nullablePrimary Udemy subcategory, e.g. "Programming Languages".
published_atstring · nullableISO 8601 timestamp of first publication.
imagestring · nullableCourse thumbnail URL (240x135).
matched_phrasestringThe query that surfaced this course — your keyword, or one of Udemy's related search phrases when the result set was widened.

Inputs

The whole request. Anything you leave out falls back to the default shown in the catalog.

InputTypeRequiredWhat it does
keywordstringyesWhat to search Udemy for — a topic, technology or skill.
countrystringnoISO 3166-1 alpha-2 code for the proxy exit — sets the pricing currency (default us).
max_resultsintegernoHow many courses to deliver at most (1–36). You pay only for delivered courses.

Pricing

Udemy Scraper API pricing

$0.001 per delivered course. A run that delivers nothing costs nothing: blocked pages, challenges and retries are on us, and the $2 monthly allowance covers about 2,000 courses before you spend anything.

$0.001per delivered course$1 per 1,000 delivered courses
2,000 courseson the free allowance$2 every month, no card
Zero rowszero chargeblocks, captchas and retries are on us
−30%on volume tiersthe catalog returns your key's price

Pay as you go

$0/mo
  • $2 free credit / month
  • 60 requests / min
  • List unit prices

Starter

$19/mo
  • $15 free credit / month
  • 300 requests / min
  • 10% off unit prices

Scale

$299/mo
  • $250 free credit / month
  • 1,200 requests / min
  • 30% off unit prices

Same wallet, same key and same $2 monthly allowance as every other Data API. Prices are launch pricing read live from the billing config — GET /v1/scraper/collectors returns the price your key actually pays.

Integration

One POST, typed rows

Base URL https://api.quanticdata.io/v1, Bearer auth, the same key as every other Data API. Endpoint: POST /v1/scraper/collectors/udemy_courses/run.

curl -X POST https://api.quanticdata.io/v1/scraper/collectors/udemy_courses/run \
  -H "Authorization: Bearer $QD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"keyword":"python","max_results":12}'

What people build with the Udemy scraper API

Three shapes of work this endpoint was designed around.

Course pricing research

Today’s price next to the list price and the discount, per course, re-run to track Udemy’s constant sales.

Instructor and demand mapping

Students enrolled, rating and review count for the courses a keyword surfaces, with instructors named.

Content planning

Duration, lecture count and level for what already exists on a topic before producing your own.

Udemy Scraper API versus rolling your own

The differences that actually cost time when you build this in-house.

DIY scraperThis collector
Search pageEmpty without a browserUdemy’s typeahead plus the per-course record
FieldsWhatever a card showsRating, reviews, students, price and list price, duration, level, language
BreadthFour results and stopWidened through Udemy’s related phrases, deduplicated by id
TransparencyUnknown why a course appearedmatched_phrase on every row

What people search for

Live autocomplete demand around Udemy course search, pulled with our own Keyword ideas collector.

Udemy Scraper API: the POST to /v1/scraper/collectors/udemy_courses/run with keyword and country on the left, and the JSON envelope on the right with 12 courses and usage.cost_usd $0.012.
The same call you would paste into a terminal: a Bearer key, keyword and country in the body, and back the envelope every QuanticData endpoint returns — type, message, payload — where count is how many courses arrived and usage.cost_usd is $0.012, which is 12 × $0.001. A run that delivers nothing costs nothing. The key is good for 60 req/min on the free tier.

Sources and standards

The platform documentation and standards this collector is built against — check any claim on this page against the primary source:

FAQ

Questions we get about the Udemy scraper API.

Something else? Ask us →

Why is max_results 36?

Each search phrase yields at most four courses from the typeahead, and the run widens across Udemy’s related phrases to reach more. Beyond a few dozen the phrases drift from your keyword, so the cap keeps rows relevant.

Does it show the discounted price?

Both: price is what a buyer pays today and list_price is the undiscounted figure, with discount_percent and is_free derived from Udemy’s own fields.

Is this Udemy’s official API?

It is Udemy’s own public JSON endpoints, read anonymously — the typeahead and the course record. The affiliate API requires an account and is not used.

Why does a row say which phrase matched it?

Because the run may have reached that course through a related phrase rather than your exact keyword, and you should be able to see that rather than trust it.

Is there a free Udemy scraper API?

Every account gets $2 of credit every month with no card, which is about 2,000 delivered courses on this endpoint at $0.001 each. It renews monthly, and a run that delivers nothing is never billed — so a failed or blocked attempt does not eat the allowance.

How much does one run cost?

Multiply the rows you actually receive by $0.001. A run capped at 36 courses — the maximum for this collector — costs $0.036 if every row comes back, and less when the source has fewer. Volume tiers take up to 30% off, and GET /v1/scraper/collectors returns the price your key actually pays.

Run the Udemy scraper API now

$2 of free credit every month, no card. Your key returns its own prices from GET /v1/scraper/collectors.

Get my free API key