LinkedIn Learning Courses Scraper
Pricing
from $0.01 / 1,000 courses
LinkedIn Learning Courses Scraper
Collect public LinkedIn Learning courses, lessons, and learning paths. Get titles, skills, instructors, ratings, and available reviews and syllabus data to compare courses and plan training.
Pricing
from $0.01 / 1,000 courses
Rating
0.0
(0)
Developer
Maxime Dupré
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a month ago
Last modified
Categories
Share
🎓 Find LinkedIn Learning courses for your training plan
LinkedIn Learning Courses Scraper helps training teams, course researchers, and developers collect public course, lesson, and learning-path data. Get titles, skills, instructors, ratings, and available reviews and syllabus details in one dataset to compare training options and plan what to learn.
- Compare ratings and skills with the Best LinkedIn Learning Courses example.
- Explore AI training with the LinkedIn Learning AI example.
- Read public completion details with the LinkedIn Learning Certificate example.
- Review course options using the LinkedIn Courses with Certificates example.
- Build a training list with the LinkedIn Learning Courses with Certificates example.
📚 Course, lesson, and learning-path data
Courses can include descriptions, levels, skills, category paths, instructors, dates, ratings, learner counts, written reviews, and a public syllabus. Syllabus lessons can include preview and subscription flags. Courses can also include certificate details and learning-path links.
Lesson rows include public lesson details and a parent-course link. Learning-path rows include public path details and their member courses in source order. Optional details appear only when the source provides them. Empty arrays may appear for reviews, syllabus sections, or path members.
The Actor saves the first eligible match for each source item at once and continues discovery. Later matches for the same item are ignored. discoveryInput shows only the first keyword, topic, or listing URL that led to the saved row.
▶️ Search the catalog or submit content links
- Choose Courses, Lessons, or Learning paths as the result type.
- Choose Keywords, Topics, Listing URLs, or Content URLs and fill in its fields. Only fields for that choice are used.
- For discovery, set any level, length, software, release-date, and sort options you need. All submitted search terms share these filters.
- Set Maximum results or leave it empty to return all available results until the source is exhausted.
- Start the run and open the dataset through Output.
Content URLs collect each submitted page directly. You can mix course, lesson, and learning-path URLs in a batch of up to 200. Each page returns its own content type, and discovery filters do not apply.
⚙️ Input
Input fields
| Field | Type | What it does |
|---|---|---|
resultType | string | Required. Choose courses, lessons, or learningPaths for discovery. Content URLs return the type of each submitted page. |
findBy | string | Choose keywords, topics, listingUrls, or contentUrls. Only fields for that choice are used. Defaults to keywords. |
keywords | array of strings | Search terms. All terms use the same discovery filters. |
topics | array of strings | Topic slugs or public topic URLs, such as python or https://www.linkedin.com/learning/topics/python. |
listingUrls | array of URL objects | Public LinkedIn Learning search or all-courses URLs. Put each link in a url field. |
contentUrls | array of URL objects | Up to 200 public course, lesson, or learning-path URLs. Put each link in a url field. Types can be mixed; discovery filters do not apply. |
levels | array of strings | Keep beginner, intermediate, or advanced discovery matches. Leave empty for all levels. |
duration | string | Discovery length filter: all, under10Minutes, 10To30Minutes, 30To60Minutes, 1To2Hours, 2To3Hours, or over3Hours. Defaults to all. |
software | string | Software name to use as a discovery filter, such as Excel. Leave empty for any tool. |
sort | string | Source order for discovery: relevance, popularity, or newest. Defaults to relevance. |
releasedWithin | string | Discovery release-date filter: any, month, or year. Defaults to any. |
maxItems | integer | Stop after this many results across the run. Minimum 1, with no fixed upper bound. Leave empty to return all available results until the source is exhausted. |
The level, length, software, sort, and release-date filters apply to Keywords, Topics, and Listing URLs.
Example input
This is the public input from the successful default-input run on the current beta build:
{"resultType": "courses","findBy": "keywords","keywords": ["Python"],"duration": "all","sort": "relevance","releasedWithin": "any","maxItems": 10}
🧾 Output
The results output is a string link to the collected data in the default Apify dataset. Each row is a course, lesson, or learning path. contentType, id, title, and url are required in all three shapes. Other fields appear when available. Source dates and length values stay in the form supplied by LinkedIn Learning.
Course fields
| Field | Type | What it does |
|---|---|---|
contentType | string | The kind of public content in this row. |
id | string | Source content ID for joining records and checking the source. |
title | string | Content title. |
url | string | Canonical public content page link. |
description | string | Public content description. |
duration | string | Content length as shown by the source. |
language | string | Content language listed by the source. |
publishedAt | string | Source publication date. |
imageUrl | string | Content cover image link. |
instructors | array of objects | Public instructors for this content. |
instructors[].name | string | Instructor name. |
instructors[].professionalTitle | string | Public job title or headline. |
instructors[].profileUrl | string | Public instructor profile link. |
instructors[].photoUrl | string | Instructor photo link. |
discoveryInput | string | The first submitted keyword, topic, or listing URL that led to this saved row. |
approximateMatchCount | integer | Approximate total matches reported by the source for that discovery input. |
level | string | Course level listed by the source. |
skills | array of strings | Skills taught by the course. |
categories | array of string arrays | Course category paths listed by the source. |
learnerCount | integer | Learner count reported by the source. |
viewerCount | integer | Viewer count reported by the source. |
likedByCount | integer | Liked-by count reported by the source. |
averageRating | number | Average course rating reported by the source. |
ratingCount | integer | Number of ratings reported by the source. |
reviews | array of objects | Public written learner reviews. This may be empty. |
reviews[].text | string | Review text. |
reviews[].rating | number | Rating given by the reviewer. |
reviews[].authorName | string | Reviewer name. |
reviews[].authorTitle | string | Public reviewer job title or headline. |
reviews[].authorProfileUrl | string | Public reviewer profile link. |
reviews[].publishedAt | string | Review date as shown by the source. |
syllabus | array of objects | Course sections in source order. This may be empty. |
syllabus[].title | string | Section title. |
syllabus[].lessons | array of objects | Lessons in source order. |
syllabus[].lessons[].title | string | Lesson title. |
syllabus[].lessons[].description | string | Public lesson description. |
syllabus[].lessons[].duration | string | Lesson length as shown by the source. |
syllabus[].lessons[].url | string | Public lesson page link. |
syllabus[].lessons[].isFreePreview | boolean | Whether the source offers this lesson as a free preview. |
syllabus[].lessons[].requiresSubscription | boolean | Whether the source says a subscription is needed for this lesson. |
certificates | array of objects | Public completion-certificate details. |
certificates[].name | string | Certificate name. |
certificates[].description | string | Public certificate details. |
certificates[].url | string | Public certificate information link. |
createdAt | string | Course creation date reported by the source. |
lessonCount | integer | Total lessons reported by the source. This may include lessons absent from the public syllabus. |
freePreviewCount | integer | Total free-preview lessons reported by the source. This may include lessons absent from the public syllabus. |
accessModel | string | Course access model listed by the source, such as subscription access. |
learningPaths | array of objects | Learning paths that the source lists for this course. This may be empty. |
learningPaths[].title | string | Learning path title. |
learningPaths[].url | string | Public learning path page link. |
Example course row
This genuine Python course row is shortened. The JSON string "..." marks omitted reviews and syllabus sections. All other values are kept as returned. These examples come from successful runs on the current beta build.
{"contentType": "course","id": "python-essential-training-18764650","title": "Python Essential Training","url": "https://www.linkedin.com/learning/python-essential-training-18764650","duration": "PT4H23M9S","imageUrl": "https://media.licdn.com/dms/image/v2/D560DAQEruxcXLwzu_A/learning-public-crop_675_1200/B56Z1oT93iKkAY-/0/1775571558434?e=2147483647&v=beta&t=J1obbigq6mj2wpN2b9Fu7Zyt6mkPdO5-NlYw1yByIOU","viewerCount": 654387,"publishedAt": "2023-01-25","discoveryInput": "Python","approximateMatchCount": 398,"description": "Get a comprehensive overview of the Python programming language and gain enough command of Python 3 to create well-designed scripts and maintain existing projects.","language": "en","instructors": [{"name": "Ryan Mitchell","professionalTitle": "O'Reilly / Wiley Author | LinkedIn Learning Instructor | Principal Software Engineer @ GLG","profileUrl": "https://www.linkedin.com/in/remitchell","photoUrl": "https://media.licdn.com/dms/image/v2/C5603AQHi4kzL_mpFUQ/profile-displayphoto-shrink_400_400/profile-displayphoto-shrink_400_400/0/1649094417238?e=2147483647&v=beta&t=oRk6DnpL3tJsl4O21gRLOriJuGSt40sVxDFa5Zxuwtk"}],"createdAt": "2023-01-25","lessonCount": 56,"freePreviewCount": 10,"accessModel": "Subscription","learningPaths": [{"title": "OpenEDG Python Institute: Programming with Python Professional Certificate","url": "https://www.linkedin.com/learning/paths/openedg-python-institute-programming-with-python-professional-certificate"}],"level": "Beginner","skills": ["Python (Programming Language)"],"categories": [["All topics","Technology","Software Development","Programming Languages"]],"likedByCount": 18748,"learnerCount": 654387,"averageRating": 4.7,"ratingCount": 17613,"reviews": [{"text": "its good experince","rating": 5,"authorName": "Muskan Kumari","authorTitle": "Student at Accurate Institute of Management, Greater Noida. India","authorProfileUrl": "https://in.linkedin.com/in/muskan-kumari-aa8243435","publishedAt": "2026-10-01T09:10:23.335Z"},"..."],"syllabus": [{"title": "Introduction","lessons": [{"title": "Getting started with Python","description": "Meet the instructor and preview key topics in this course, including data types, control flow, classes, object-oriented programming, and modules. This video shows a practical, crash-course approach to Python fundamentals and how to start coding confidently.","duration": "PT50S","url": "https://www.linkedin.com/learning/python-essential-training-18764650/getting-started-with-python","isFreePreview": true,"requiresSubscription": false},{"title": "Who this course is for","description": "This course is for anyone who wants to learn programming. Basic computer skills are required.","duration": "PT2M55S","url": "https://www.linkedin.com/learning/python-essential-training-18764650/who-this-course-is-for-23812785","isFreePreview": true,"requiresSubscription": false},{"title": "Resources for this course","description": "In this video, learn about the resources needed for this course so you can follow along.","duration": "PT1M15S","url": "https://www.linkedin.com/learning/python-essential-training-18764650/resources-for-this-course","isFreePreview": true,"requiresSubscription": false}]},"..."],"certificates": [{"name": "LinkedIn Learning Certificate of Completion","description": "Share what you’ve learned, and be a standout professional in your desired industry with a certificate showcasing your knowledge gained from the course.","url": "https://www.linkedin.com/help/learning/answer/a598944/learning-certificates-of-completion-faqs"}]}
Lesson fields
| Field | Type | What it does |
|---|---|---|
contentType | string | The kind of public content in this row. |
id | string | Source content ID for joining records and checking the source. |
title | string | Content title. |
url | string | Canonical public content page link. |
description | string | Public content description. |
duration | string | Content length as shown by the source. |
language | string | Content language listed by the source. |
publishedAt | string | Source publication date. |
imageUrl | string | Content cover image link. |
instructors | array of objects | Public instructors for this content. |
instructors[].name | string | Instructor name. |
instructors[].professionalTitle | string | Public job title or headline. |
instructors[].profileUrl | string | Public instructor profile link. |
instructors[].photoUrl | string | Instructor photo link. |
discoveryInput | string | The first submitted keyword, topic, or listing URL that led to this saved row. |
approximateMatchCount | integer | Approximate total matches reported by the source for that discovery input. |
parentCourseUrl | string | Public page link for the parent course. |
isFreePreview | boolean | Whether the source offers this lesson as a free preview. |
requiresSubscription | boolean | Whether the source says a subscription is needed for this lesson. |
Example lesson row
This genuine lesson row is shown in full. These examples come from successful runs on the current beta build.
{"contentType": "lesson","id": "python-essential-training-18764650/getting-started-with-python","title": "Getting started with Python - Python Essential Training","url": "https://www.linkedin.com/learning/python-essential-training-18764650/getting-started-with-python","description": "Get a comprehensive overview of the Python programming language and gain enough command of Python 3 to create well-designed scripts and maintain existing projects.","duration": "PT50S","language": "en","publishedAt": "2023-01-25","imageUrl": "https://media.licdn.com/dms/image/v2/D560DAQEruxcXLwzu_A/learning-public-crop_675_1200/B56Z1oT93iKkAY-/0/1775571558434?e=2147483647&v=beta&t=J1obbigq6mj2wpN2b9Fu7Zyt6mkPdO5-NlYw1yByIOU","instructors": [{"name": "Ryan Mitchell","professionalTitle": "O'Reilly / Wiley Author | LinkedIn Learning Instructor | Principal Software Engineer @ GLG","profileUrl": "https://www.linkedin.com/in/remitchell","photoUrl": "https://media.licdn.com/dms/image/v2/C5603AQHi4kzL_mpFUQ/profile-displayphoto-shrink_400_400/profile-displayphoto-shrink_400_400/0/1649094417238?e=2147483647&v=beta&t=oRk6DnpL3tJsl4O21gRLOriJuGSt40sVxDFa5Zxuwtk"}],"parentCourseUrl": "https://www.linkedin.com/learning/python-essential-training-18764650","isFreePreview": true,"requiresSubscription": false}
Learning path fields
| Field | Type | What it does |
|---|---|---|
contentType | string | The kind of public content in this row. |
id | string | Source content ID for joining records and checking the source. |
title | string | Content title. |
url | string | Canonical public content page link. |
description | string | Public content description. |
duration | string | Content length as shown by the source. |
language | string | Content language listed by the source. |
imageUrl | string | Content cover image link. |
instructors | array of objects | Public instructors for this content. |
instructors[].name | string | Instructor name. |
instructors[].professionalTitle | string | Public job title or headline. |
instructors[].profileUrl | string | Public instructor profile link. |
instructors[].photoUrl | string | Instructor photo link. |
discoveryInput | string | The first submitted keyword, topic, or listing URL that led to this saved row. |
approximateMatchCount | integer | Approximate total matches reported by the source for that discovery input. |
courses | array of objects | Member courses in source order. This may be empty. |
courses[].id | string | Source course ID for joining course records. |
courses[].title | string | Course title. |
courses[].url | string | Canonical course page link. |
courses[].description | string | Public course description. |
courses[].duration | string | Course length as shown by the source. |
Example learning path row
This genuine learning-path row is shown in full. These examples come from successful runs on the current beta build.
{"contentType": "learningPath","id": "paths/getting-started-with-python","title": "Getting Started with Python","url": "https://www.linkedin.com/learning/paths/getting-started-with-python","duration": "18 hours of content","imageUrl": "https://media.licdn.com/dms/image/v2/C560DAQETr8p-RgTxVA/learning-public-crop_240_432/learning-public-crop_240_432/0/1600977664338?e=2147483647&v=beta&t=ZFD2wVJ20S54eJW3MggosdQvUVsfWD0qao2F8Rz2wUs","discoveryInput": "Python","approximateMatchCount": 38,"description": "Note: This learning path will be updated on November 2, 2026. To earn your certificate of completion without interruption, complete the path before that date. If you can't, additional courses may be required.Python is one of the most in-demand programming languages. Whether you're a new programmer looking to switch careers or an experienced coder looking to expand your fit within a challenging job market, this path will provide you with the foundational skills for coding in Python.","language": "en","instructors": [{"name": "Joe Marini","professionalTitle": "Investor ᠅ 2x Exit Founder ᠅ Developer Relations & Partner Ecosystem Advocate ᠅ Technology Instructor with 10M Learners","profileUrl": "https://www.linkedin.com/in/joemarini","photoUrl": "https://media.licdn.com/dms/image/v2/C4E03AQHDjlOZBQoY7g/profile-displayphoto-shrink_400_400/profile-displayphoto-shrink_400_400/0/1598399759707?e=2147483647&v=beta&t=v2tesTP21YOxWM3ntWCJc7nSiBGdYkqY1Sbtozd51is"},{"name": "Ryan Mitchell","professionalTitle": "O'Reilly / Wiley Author | LinkedIn Learning Instructor | Principal Software Engineer @ GLG","profileUrl": "https://www.linkedin.com/in/remitchell","photoUrl": "https://media.licdn.com/dms/image/v2/C5603AQHi4kzL_mpFUQ/profile-displayphoto-shrink_400_400/profile-displayphoto-shrink_400_400/0/1649094417238?e=2147483647&v=beta&t=oRk6DnpL3tJsl4O21gRLOriJuGSt40sVxDFa5Zxuwtk"},{"name": "Kathryn Hodge","professionalTitle": "Software Engineer","profileUrl": "https://www.linkedin.com/in/blondiebytes","photoUrl": "https://media.licdn.com/dms/image/v2/D4D03AQGrIVVnCrSZlw/profile-displayphoto-shrink_400_400/B4DZfIjjwAH4Ak-/0/1751416454501?e=2147483647&v=beta&t=-wzLqZTL7-CXA2ctGrU3162WBIMhVVs_SSP46EMF9ag"},{"name": "Barron Stone","professionalTitle": "Director of Product Marketing at Defense Unicorns","profileUrl": "https://www.linkedin.com/in/barronstone"},{"name": "Jonathan Fernandes","professionalTitle": "AI/ML Engineer Building & Shipping Production-ready GenAI & Large Language Model Solutions Since Before ChatGPT.","profileUrl": "https://uk.linkedin.com/in/jonathanafernandes","photoUrl": "https://media.licdn.com/dms/image/v2/D4E03AQGFheTNCt6p-w/profile-displayphoto-shrink_400_400/profile-displayphoto-shrink_400_400/0/1695575572394?e=2147483647&v=beta&t=0vDF338QvW1O2V3f1QpanosAbyEQHYSvrGPvZfx_yDw"}],"courses": [{"id": "learning-python-25309312","title": "Learning Python","url": "https://www.linkedin.com/learning/learning-python-25309312","description": "This course gives you everything you need to start programming in Python, from building your first program up through working with files, data and the internet.","duration": "3h 41m"},{"id": "python-essential-training-18764650","title": "Python Essential Training","url": "https://www.linkedin.com/learning/python-essential-training-18764650","description": "Get a comprehensive overview of the Python programming language and gain enough command of Python 3 to create well-designed scripts and maintain existing projects.","duration": "4h 23m"},{"id": "python-object-oriented-programming-22888296","title": "Python Object-Oriented Programming","url": "https://www.linkedin.com/learning/python-object-oriented-programming-22888296","description": "Learn how to use the object-oriented features of Python, including magic methods and data classes, to write more efficient and effective code.","duration": "1h 56m"},{"id": "learning-the-python-3-standard-library","title": "Learning the Python 3 Standard Library","url": "https://www.linkedin.com/learning/learning-the-python-3-standard-library","description": "Explore the Python 3 standard library. Learn how to take advantage of its built-in modules to calculate statistics, format dates and times, get content from the internet, and more.","duration": "2h 16m"},{"id": "programming-foundations-data-structures-25191158","title": "Programming Foundations: Data Structures","url": "https://www.linkedin.com/learning/programming-foundations-data-structures-25191158","description": "Learn how to effectively use and implement key data structures through hands-on exercises and real-world examples in Python.","duration": "2h 46m"},{"id": "level-up-python","title": "Level Up: Python","url": "https://www.linkedin.com/learning/level-up-python","description": "Want to test your Python skills? These concise, self-contained challenges let you stretch your brain and test your talents.","duration": "57m"},{"id": "8-things-you-must-know-in-python","title": "8 Things You Must Know in Python","url": "https://www.linkedin.com/learning/8-things-you-must-know-in-python","description": "Learn eight things you should know to move beyond the basics of Python coding.","duration": "50m"},{"id": "python-practice-real-world-coding-challenges","title": "Python Practice: Real-World Coding Challenges","url": "https://www.linkedin.com/learning/python-practice-real-world-coding-challenges","description": "Get practice using Python by completing the challenges in this project-based course.","duration": "46m"}]}
💳 Pricing
This Actor uses pay-per-event pricing. Check the pricing panel for current prices and tiers.
| Event | What it covers |
|---|---|
| Course | One public course saved with its available details. Nested syllabus lessons have no extra charge. |
| Lesson | One public lesson saved on its own with its available details. |
| Learning path | One public learning path saved with its available details. Nested member courses have no extra charge. |
Duplicates, failures, and empty results are not charged. A lesson inside a course syllabus is not charged as a separate lesson. A course inside a learning path is not charged as a separate course.
🔌 Integrations
Open the dataset after a run, export its data, or read the structured rows through the Apify dataset API. Use the source links and IDs to connect course data to your own training reports or applications.
❓ FAQ
Can I mix courses, lessons, and learning paths in one run?
Yes, with Content URLs. Each submitted page returns its own type. For Keywords, Topics, or Listing URLs, choose one result type for the run.
Why is a field missing or a syllabus section empty?
Only public details exposed by the source are returned. Reviews, syllabus lessons, certificate details, and other optional fields may be missing or empty. Lesson and free-preview counts may include lessons absent from the public syllabus.
What happens when two search terms find the same course?
The first eligible match is saved at once. Later matches are ignored. The saved row is not updated to collect later search terms. When present, discoveryInput keeps only the first match.
Do filters apply to a course URL?
No. Discovery filters apply to Keywords, Topics, and Listing URLs. Content URLs collect the submitted pages directly.
What does an empty Maximum results field do?
It returns all available results until the source is exhausted. This does not promise complete global catalog coverage. A limit applies across the whole run, rather than separately to each keyword or URL.
Is the match count exact?
No. approximateMatchCount is the source's estimate for the discovery input. It is not the number of rows saved by the run.
Can I use this to find LinkedIn Learning free courses?
The Actor returns public access details, not a guarantee that a whole course is free. Use isFreePreview, requiresSubscription, freePreviewCount, and accessModel when returned to review the source's access rules. Free previews do not mean a full course or its certificate is free.
Does it issue a LinkedIn Learning certificate?
No. It reads publicly listed certificate information. It does not complete courses, issue certificates, or read a learner's completion history.
Can it download videos or transcripts?
No. It collects public catalog metadata. Video playback, downloads, transcripts, and exercise files are outside its scope.
Do I need a LinkedIn account?
No. The Actor collects public catalog metadata without requiring a LinkedIn account. It does not collect private recommendations or account-only data.
📝 Changelog
v0.0 (03-10-2026)
- Initial release.
🆘 Support
For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡
🔗 Related Actors
- LinkedIn Profile Scraper No Cookie collects public professional profiles to research instructors from returned profile links.
- Skool API finds public learning communities and their visible profile and access details for research alongside course catalogs.
- LinkedIn Learning API: Course Data, Reviews & Syllabus offers another course-data option for review and syllabus research.
- LinkedIn Learning Courses Scraper offers another public course-catalog option for instructor and skill research.
- LinkedIn Learning Courses Scraper - Course Discovery & Details offers another keyword-based course search for training comparisons.
Made with ❤️ by Maxime Dupré