Coursera Courses Scraper avatar

Coursera Courses Scraper

Pricing

Pay per event

Go to Apify Store
Coursera Courses Scraper

Coursera Courses Scraper

Search Coursera and export every course, specialization, and professional certificate result into clean dataset rows — partner university, star rating, review count, difficulty, duration, skills gained, and access tags. Devil Scrapes handles the fetching so your dataset stays clean.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Categories

Share


🎯 What this scrapes

Point it at any Coursera search term — python, machine learning, product management — and it walks the public search results page, page by page, pulling every course, Specialization, Professional Certificate, and degree program that comes back. Each result becomes one dataset row with the partner university or company, star rating, review count, difficulty level, time commitment, the skills Coursera lists under "Skills you'll gain," and the access badges Coursera itself shows (Free trial, Build toward a degree, Job ready). We read Coursera's own server-rendered result cards rather than a JSON API that can be pulled out from under us without notice.

🔥 What we handle for you

  • 🛡️ Browser fingerprint rotationcurl-cffi impersonates real Chrome / Firefox / Safari TLS handshakes so Coursera sees a browser, not Python.
  • 🌐 Apify Proxy on every request — fresh session and exit IP whenever a fetch fails, no manual retry wiring required on your end.
  • 🔁 Retries with exponential backoff on 408 / 429 / 5xx — up to 5 attempts per page.
  • 🧱 Per-query fault isolation — one query that fails to fetch never sinks the others; the run finishes and tells you exactly which term came up short.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, stable de-duplication across pages, JSON / CSV / Excel export straight from the Apify Console.
  • 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.

💡 Use cases

  • Corporate L&D catalog research — build a comparison sheet of every Coursera course/Specialization on a topic before recommending a learning path.
  • Course-creator competitive research — see how competing courses in your niche are rated, priced (Free trial vs paid), and positioned before you launch your own.
  • EdTech market research — track which partner universities and companies dominate a subject area, and how ratings/review volume shift over time.
  • Curriculum sourcing — feed a clean, structured export into an internal tool that recommends courses by skill gap.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Enter one or more search queries and how many results you want per query.
  3. Click Start. Output streams into the run's dataset as pages are fetched.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
queriesarrayyes['python']Search terms to run against Coursera's public search, e.g. python or machine learning.
maxResultsPerQueryintegerno24Stop paging a query once this many results have been emitted (1-120). Coursera's search page carries 12 results per page.
proxyConfigurationobjectno{'useApifyProxy': True}Apify Proxy configuration. Coursera's search page served cleanly on datacenter exits during recon — no residential group required.

Example input

{
"queries": ["python", "data science"],
"maxResultsPerQuery": 20,
"proxyConfiguration": {
"useApifyProxy": true
}
}

📤 Output

Every row is one search result.

FieldTypeNotes
querystringThe search term that surfaced this result.
titlestringCourse, Specialization, or Professional Certificate title.
urlstringAbsolute Coursera URL for this result's detail page.
partnerstringOffering university or company, e.g. 'IBM'. Null if Coursera omits it.
product_typestringCOURSE, SPECIALIZATION, PROFESSIONAL_CERTIFICATE, DEGREE, or OTHER.
difficulty_levelstringe.g. 'Beginner', 'Intermediate'. Null when Coursera doesn't show one.
durationstringe.g. '3 - 6 Months'. Null when Coursera doesn't show one.
ratingnumberAverage star rating (0-5) at scrape time. Null when there's no rating yet.
rating_countintegerNumber of reviews behind the rating — the closest public popularity signal Coursera exposes; not a verified enrollment count.
skillsarraySkills Coursera lists under "Skills you'll gain."
access_tagsarrayCoursera's own badges, e.g. Free trial, Build toward a degree, Job ready — the closest public price-tier / positioning signal on the search page.
object_idstringCoursera's internal search-result object ID, when present.

Example output

{
"query": "python",
"title": "Python for Everybody",
"url": "https://www.coursera.org/specializations/python",
"partner": "University of Michigan",
"product_type": "SPECIALIZATION",
"difficulty_level": "Beginner",
"duration": "3 - 6 Months",
"rating": 4.8,
"rating_count": 281000,
"skills": ["Database Design", "Data Processing", "Web Scraping", "SQL"],
"access_tags": ["Free trial", "Build toward a degree"],
"object_id": "s12n~F-h1g0w7EeWeOApO_l5R1w"
}

💰 Pricing

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.20One-off warm-up charge per run
result-scraped$0.005Charged once per course/specialization/certificate row written

Example: 1 000 results at the rates above ≈ $5.20. No subscription, no minimum, no card to start — Apify gives every new account free credit.

🚧 Limitations

Public search results only — no login, no enrolled-learner data, no course-content scraping. rating_count reflects Coursera's own review count, not a verified enrollment figure — we don't fabricate an enrollment number Coursera doesn't publish. Coursera's search treats unmatched or gibberish queries as an opportunity to show generic recommendations rather than a true empty state, so an unusual query still returns rows — that's Coursera's own behavior, not a bug in this Actor.

❓ FAQ

Why don't you report a "no matches" state?

Coursera's own search never returns a hard zero — even a nonsense query gets back a page of recommended courses. We pass through exactly what Coursera serves rather than inventing a "no results" signal it doesn't have.

Is rating_count the same as enrollment count?

No. Coursera's search cards expose a star rating and the review count behind it — we report that number honestly as rating_count rather than relabeling it "enrollments," which Coursera does not publish on this page.

Does this tell me the price of a course?

Coursera's search page doesn't show a dollar price — most content is bundled under a Coursera Plus subscription or a "Free trial" window. We surface the access_tags badges Coursera itself displays (Free trial, Build toward a degree, Job ready) as the closest public price-tier signal.

What happens if one query fails?

That query is skipped and reported in the run's final status message; every other query in the same run still completes.

Can I get results for a specific university, like only Google or IBM courses?

Not directly — filter the partner field in the output. Coursera's search UI supports partner filters, but they're applied client-side after the initial page load, not via a documented URL parameter we could pass through.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.