Coursera Courses Scraper - Online Course Data
Pricing
from $2.00 / 1,000 results
Coursera Courses Scraper - Online Course Data
Extract public Coursera catalog-card titles, URLs, providers and visible metadata. Preserve redirects; course descriptions stay null when absent.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Ben
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Coursera catalog cards: course names, providers and source metadata
Export course, specialization and professional-certificate cards from Coursera's public catalog pages. Each HTML-card record contains its title, catalog URL, provider and visible rating/level/duration label when those appear. The Actor uses ordinary HTTP reads and does not enter enrolled course content.
The saved data-science search URL currently redirects to a browse category. That matters: the result is a snapshot of cards displayed on the final page, not independently verified search results for every parameter in the original query.
Description and card metadata are separate fields
The public data-science browse page shows Google Data Analytics with provider Google and the label “★ 4.8 (182K) · Beginner · Professional Certificate · 6 months.” Those words describe the card's rating, level and format; they are not a course description.
The corrected HTML parser returns description: null when the card supplies no standalone description. It places the single visible metadata label in card_metadata and the provider name in company. The earlier export concatenated provider initials, title, accessibility text, rating labels and promotional badges into description. Consumers should stop treating that older text as a course summary.
The metadata string remains source text. The Actor does not turn an abbreviated review count into an exact integer, infer an enrollment price from a Free trial badge, or convert “6 months” into a guaranteed completion time. Values can change between observations.
Search redirects and catalog scope
The tested input https://www.coursera.org/courses?query=data%20science resolves to https://www.coursera.org/browse/data-science. Both URLs appear in each exported row. A filter in the requested URL may not survive a source redirect; inspect source_url before describing an export as a filtered search.
Only item cards in the initial HTTP response are accepted. Links in surrounding FAQs or promotional prose do not become course records merely because they point to a /learn/ URL. The parser does not automatically scroll, render JavaScript, follow pagination or fetch full individual course pages.
A smaller export can therefore reflect the number of supported cards delivered in the response, even when the interactive browser displays more content after loading. Increasing maxResults cannot expose cards that were not present in the fetched document.
Use the results to prepare a catalog shortlist or inspect provider coverage. They do not establish accreditation, job-placement outcomes, current enrollment availability or access to paid learning material. Check the linked course page before making a training purchase or recommendation.
Try the public example
Open the existing three-record Task. It contains the accepted source URL, selected input fields and the overview dataset view. Review the saved input and charge cap before starting a run. The Task is a convenient bounded example; publication does not establish the source's long-term reliability.
{"searchUrls": ["https://www.coursera.org/courses?query=data%20science"],"maxResults": 3}
searchUrls is a list of public page URLs. maxResults caps output per input URL, not across the whole run. Two URLs with a limit of three can therefore save up to six records. The Actor deduplicates item URLs within a fetched page, but does not suppress duplicates across separate input pages or remember earlier runs.
Dated output example
This record comes from an ordinary public-page read on September 11, 2026. It illustrates the current parser output; the source can change its ordering or content after that observation.
{"source": "coursera-courses-scraper","kind": "courses","index": 1,"title": "Google Data Analytics","url": "https://www.coursera.org/professional-certificates/google-data-analytics","description": null,"company": "Google","card_metadata": "★ 4.8 (182K) · Beginner · Professional Certificate · 6 months","input_url": "https://www.coursera.org/courses?query=data%20science","source_url": "https://www.coursera.org/browse/data-science"}
title and url identify the displayed item. description contains that item's short source text when available. source names this Actor, and kind gives its broad record category. index is the one-based extraction order for that page. input_url and source_url preserve redirect provenance.
Structured source objects, when accepted, can additionally expose company and raw. Those optional fields are not guaranteed on every HTML card. The typed Output page documents field shapes; it does not promise that an upstream publisher fills every field.
Billing and export
The existing Free-tier price is $0.0025 per saved record, plus $0.00005 per start event. Paid-plan discounts remain listed in the Pricing tab. Start-event quantity depends on selected memory; use the small saved Task when evaluating a sample. At 512 MB, three result events and one start event equal $0.00755 in Actor fees. Check your account's applicable platform charges separately.
The result limit is a collection cap, not a dollar budget. Set an appropriate maximum total charge in the run options as well. A repeated run can bill for the same records again because this Actor does not maintain cross-run state. Owner verification usage is separate from customer revenue.
Download the default dataset as JSON, JSONL, CSV or Excel through Apify. JSON preserves nulls and optional nested objects more clearly than a flat spreadsheet. Retain the source URLs in either format so a reader can check an ambiguous record.
Failures and recurring use
An unavailable source page now fails the run visibly. If earlier pages produced valid records, those records remain in the dataset and the final error reports the failed-page count. Treat a failed multi-page run as partial data; do not replace a complete prior snapshot with it automatically.
A successfully fetched page with no supported item cards can still produce an empty result. That does not prove an empty directory: the site may have changed layout or delivered a different page. Inspect the log, final source URL and a small source sample before deciding what happened.
To automate collection, save your chosen URLs in an Apify Task, then use a Schedule or the existing Make, Zapier or n8n integration. Custom clients can start /v2/acts/benthepythondev~coursera-courses-scraper/runs, wait for the returned run ID to finish and read its default dataset. Store the API token on the server, never in public page code.
Keep collection and notification decisions separate. Save the observation time in your destination and compare records by source URL before alerting. The Actor does not email anyone, create schedules or verify product claims on your behalf.
For another course catalog, compare edX Courses, whose rendered search has a different collection contract. Its fields and coverage should not be assumed equivalent to this HTTP catalog snapshot.
Use public data within the source's access and reuse rules. For support, include the run ID, a small redacted input and a link showing the expected field. Avoid posting tokens or private account data. If the result was useful, an honest Store review helps other users assess it.