LinkedIn Learning API: Course Data, Reviews & Syllabus avatar

LinkedIn Learning API: Course Data, Reviews & Syllabus

Pricing

from $0.41 / 1,000 full course records

Go to Apify Store
LinkedIn Learning API: Course Data, Reviews & Syllabus

LinkedIn Learning API: Course Data, Reviews & Syllabus

Course data API for LinkedIn Learning. Search by keyword, level, length or software and return full course records: rating, learner review text, the full syllabus with per-lesson descriptions, free-lesson flags, instructors, skills and certificates. No login or cookies. Pay per course, MCP ready.

Pricing

from $0.41 / 1,000 full course records

Rating

0.0

(0)

Developer

John

John

Maintained by Community

Actor stats

1

Bookmarked

4

Total users

3

Monthly active users

2 days ago

Last modified

Share

LinkedIn Learning API

Course data API for LinkedIn Learning. Build a LinkedIn Learning course catalog or course list programmatically: search by keyword, skill level, length or software, and pull the full record for any course: rating, written learner reviews, the complete syllabus with a description for every lesson, which lessons are free to watch, instructors with their profile links, skills taught, and certificate details. Everything comes from the pages LinkedIn already publishes to logged-out visitors, so no login, account, or cookie is ever involved.

What this actor returns: the LinkedIn Learning course catalog as structured data

  • Course records with real depth. Rating and rating count, learner numbers, difficulty level, language, release dates, skills taught, category path, and certificate information.
  • Written learner reviews. The review text itself, with each reviewer's name, job title, and LinkedIn profile link. Most course APIs return only a star average.
  • The full syllabus. Every section and lesson, each with its own title, written description, length, and a flag for whether it can be watched free without a subscription.
  • Instructors as structured people. Name, job title, profile link, and photo, ready to join against other LinkedIn data.
  • Search results with the filters LinkedIn actually uses. Sort order, skill level, content type, length bracket, and software covered, plus an approximate total match count for the query.
  • Lessons and learning paths too. A lesson URL returns that lesson, and a learning path returns the ordered list of courses inside it.

Use cases: course lists, learner reviews and learning paths

  • Build a skills taxonomy. Map which courses teach a given tool or skill, at what level, and how long they take, to plan an internal upskilling programme.
  • Benchmark a course catalogue. Compare your own training library against what LinkedIn Learning offers on the same topics, using ratings and learner counts as demand signals.
  • Find the free lessons. Surface every lesson that can be watched without a subscription, so you can share a genuinely accessible starting point with a team.
  • Track sentiment on a topic. Pull the written reviews across a set of courses to see what learners actually praise or complain about.
  • Feed a course recommender. Give an AI agent structured course records, syllabus included, so it can match a learning goal to specific lessons rather than whole courses.

Input parameters

ParameterTypeRequiredDefaultDescription
modeselectyessearchsearch to find courses by keyword, details to pull full records for URLs you already have.
querieslist of textsearch mode(prefilled python)Keywords to search. Each is searched separately. Up to 25 per run.
topicslist of textno[]LinkedIn Learning topic slugs or topic URLs to browse instead of, or alongside, keyword search. Up to 25 per run.
sortByselectnoRELEVANCERELEVANCE, POPULARITY, or RECENCY.
difficultyLevelselectnoANYBEGINNER, INTERMEDIATE, or ADVANCED.
entityTypeselectnoANYCOURSE, VIDEO, or LEARNING_PATH.
durationselectnoANYOne of six length brackets, from under 10 minutes to over 3 hours.
softwareNameslist of textno[]Keep only courses teaching these tools, using LinkedIn's labels (Python, Microsoft Excel, SQL, ChatGPT, Claude). Up to 10 per run.
maxItemsintegerno50Courses to return per query, up to 1000. See the note on the 50-result ceiling below.
expandWithFiltersbooleannofalseRe-run each query across LinkedIn's filter combinations to get past the 50-result ceiling.
enrichDetailsbooleannofalseOpen every search result and return its full record instead of the search row.
courseUrlslist of textdetails mode[]Course, lesson, or learning path URLs to collect in full. Up to 200 per run.
maxConcurrencyintegerno5How many course pages to read at once, 1 to 10. Applies to details mode and to enrichment.
requestTimeoutSecsintegerno40Per-request timeout, 10 to 120 seconds.

Example output

A search_result row:

{
"position": 1,
"title": "Python Essential Training",
"courseUrl": "https://www.linkedin.com/learning/python-essential-training-18764650",
"courseId": "18764650",
"entityType": "COURSE",
"instructors": [
{
"name": "Ryan Mitchell"
}
],
"durationText": "4h 23m",
"durationSeconds": 15780,
"thumbnailUrl": "https://media.licdn.com/dms/image/v2/D560DAQEruxcXLwzu_A/l...",
"viewersText": "646,624 viewers",
"releaseText": "Released Jan 25, 2023",
"resultType": "search_result",
"searchQuery": "python",
"searchType": "query",
"appliedFilters": {
"sortBy": "RELEVANCE"
},
"approximateTotalResults": 9816,
"fetchedAt": "2026-08-27T18:14:05.123456+00:00"
}

A course_detail row, trimmed to one syllabus section and one review for readability:

{
"sourceUrl": "https://www.linkedin.com/learning/python-essential-training-18764650",
"courseUrl": "https://www.linkedin.com/learning/python-essential-training-18764650",
"courseId": "18764650",
"title": "Python Essential Training",
"description": "Get a comprehensive overview of the Python programming language and gain enough command of Python 3 to create well-des...",
"difficultyLevel": "Beginner",
"provider": "LinkedIn Learning",
"instructors": [
{
"name": "Ryan Mitchell",
"jobTitle": "O'Reilly / Wiley Author | LinkedIn Learning Instructor | Principal Software Engineer @ GLG",
"profileUrl": "https://www.linkedin.com/in/remitchell",
"imageUrl": "https://media.licdn.com/dms/image/v2/C5603AQHi4kzL_mpFUQ/p..."
}
],
"skills": [
{
"name": "Python (Programming Language)",
"url": "https://www.linkedin.com/learning/topics/python"
}
],
"categoryPath": [
"All topics",
"Technology",
"Software Development",
"Programming Languages"
],
"dateCreated": "2023-01-25",
"datePublished": "2023-01-25",
"durationText": "PT4H23M9S",
"durationSeconds": 15789,
"enrollmentCount": 646624,
"ratingValue": 4.7,
"ratingCount": 17489,
"reviews": [
{
"rating": 5,
"body": "The videos featuring guest lecturers who appeared from time to time served as a break from the main code explanation videos, making for an enjoyable lecture.",
"authorName": "Takaaki Iwai",
"authorJobTitle": "Bose Corporation - Global Supply Chain Repair and Reman",
"authorProfileUrl": "https://jp.linkedin.com/in/takaaki-iwai-6a53959a",
"datePublished": "2026-08-21T05:38:27.264Z"
}
],
"language": "en",
"tableOfContents": [
{
"section": "Introduction",
"items": [
{
"title": "Getting started with Python",
"durationText": "50s",
"durationSeconds": 50,
"url": "https://www.linkedin.com/learning/python-essential-training-18764650/getting-started-with-python",
"isFree": true,
"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."
},
{
"title": "Who this course is for",
"durationText": "2m 55s",
"durationSeconds": 175,
"url": "https://www.linkedin.com/learning/python-essential-training-18764650/who-this-course-is-for-23812785",
"isFree": true,
"description": "This course is for anyone who wants to learn programming. Basic computer skills are required."
}
]
}
],
"lessonCount": 56,
"freeLessonCount": 10,
"hasCertificate": true,
"certificateName": "LinkedIn Learning Certificate of Completion",
"accessModel": "Subscription",
"thumbnailUrl": "https://media.licdn.com/dms/image/v2/D560DAQEruxcXLwzu_A/l...",
"parseSource": "jsonld",
"resultType": "course_detail",
"fetchedAt": "2026-08-27T18:14:05.123456+00:00"
}

Pricing

This actor is pay-per-result, so you pay for the rows you receive and nothing else.

EventRateWhen it is charged
Course found$0.10 per 1,000 coursesOnce per course returned by a search or topic page.
Full course record$0.50 per 1,000 recordsOnce per full course record, with reviews and syllabus. Replaces the search charge on enriched rows rather than adding to it.

So a search returning 500 courses costs about $0.05, and pulling the full record for 100 of them costs about $0.05 more. Discount tiers reduce these rates, and the rates shown on the actor's Store page are always current.

Nothing is charged for duplicate courses removed by de-duplication, for error rows, or for the popular-courses list LinkedIn substitutes when a query matches nothing.

How to get started

  1. Open the actor and pick a mode. Leave it on Search courses by keyword for a first run.
  2. Type one or more keywords into Search queries, for example python.
  3. Optionally narrow by level, length, content type, or software.
  4. Click Start, then read the results on the Output tab or pull them from the dataset API.

To get full records instead, switch Mode to Get full details for course URLs and paste LinkedIn Learning course links into Course URLs.

View on Apify Store

🔌 Use this API from Claude (MCP)

You can add this actor as a tool in Claude Code (free trial), Claude Cowork (free trial), or any other MCP client through the hosted Apify MCP server. Point your client at:

https://mcp.apify.com/?tools=actors,docs,johnvc/linkedin-learning-api

Here actors and docs are the standard tool categories and the third entry is this actor. Once connected, your agent can search the LinkedIn Learning catalogue and pull full course records on its own.

Setup walkthrough:

For more on connecting Apify actors to AI agents, see the Apify MCP documentation.

💸 Pay per run with crypto (x402)

The LinkedIn Learning API supports agentic payments via the x402 protocol. AI agents and MCP clients can pay for runs in USDC (on Base) with no Apify account or API token needed: point your agent at the Apify MCP server and it can discover, pay for, and run this Actor autonomously. Read the Apify x402 announcement for details.

💡 Example tasks

Ready-made configurations you can run or copy, each on its own page:

FAQ

How do you get a list of LinkedIn Learning courses?

Run this actor in search mode with a keyword, or point it at a topic page. LinkedIn's own Learning API is gated behind its Partner Program or a purchased site licence and needs admin OAuth keys, which is why the question keeps coming up. This actor reads the public guest catalogue instead, so it needs no credentials at all.

Can you download the LinkedIn Learning course catalogue?

There is no official export for it. You can build one here: run a set of keywords or topic pages, turn on Widen coverage past 50 results, and export the dataset as CSV, JSON or Excel. Bear in mind LinkedIn caps any single query at 50 results, so a broad catalogue is assembled from many queries rather than one.

Does LinkedIn Learning give certificates?

Yes, a certificate of completion, and every full course record here reports it: hasCertificate and certificateName. Note this is a certificate of completion rather than an accredited qualification.

Are LinkedIn Learning courses free, and how do I find the free ones?

Most need a subscription, but courses expose individual lessons as free previews. This actor flags them per lesson (isFree in the table of contents) and totals them as freeLessonCount, so you can sort a whole result set by how much is watchable without paying. No competitor returns this.

What is the difference between a learning path and a course?

A course is one multi-lesson unit; a learning path is a curated sequence of several courses. Both are supported: entityType tells them apart in search results, and passing a /learning/paths/... URL returns the path with its ordered member courses.

Does this need my LinkedIn login or cookies?

No. This actor only reads the pages LinkedIn publishes to logged-out visitors, and no request it sends carries a cookie. LinkedIn may try to set one, but the jar is emptied around every single request, including each hop of a redirect, so nothing is ever carried forward. There is no field to paste a session cookie into, and there never will be.

Why do I only get 50 results for a query?

That is LinkedIn's own limit: a guest search returns at most 50 courses for any one keyword and filter combination, and there is no next page to request. Two ways past it. Add more queries, since each is searched separately, or turn on Widen coverage past 50 results, which re-runs the query across LinkedIn's own filter combinations (sort order, content type, difficulty, length) and merges the unique courses out of them.

Why did a search return a no_results row instead of courses?

When LinkedIn cannot match a query it does not return an empty page. It returns a full page of popular courses under a "we couldn't find a match" heading. Those courses have nothing to do with your query, so this actor detects that page, returns a single no_results row explaining what happened, and does not charge you for any of it.

Is the total match count exact?

No, treat approximateTotalResults as a size signal. LinkedIn reports slightly different totals for the same query across page variants, so it is useful for gauging how big a topic is, not for arithmetic.

Can I pass a lesson URL or a learning path URL?

Yes. A lesson URL returns that lesson's own record, linked to its parent course so you can join the two. A learning path URL returns the path with its ordered list of member courses. A course URL returns the full course record.

A course URL returns "that page was not found". Why?

LinkedIn versions its course slugs, so an older link such as learning-python-2020 may now be learning-python-2021. Retired slugs usually redirect and are followed automatically, but a slug that no longer exists at all returns a not-found error row. Use the courseUrl value from a search result, which is always current.

How many pages does it fetch at once, and can a big run time out?

Search pages are fetched one at a time on purpose, to stay polite. Course pages are fetched in parallel, up to Parallel requests (default 5, max 10), in both details mode and enrichment. Before a run starts, the actor estimates how long the plan will take and compares it against the run timeout. If the plan does not fit, it says so and reduces the per-query maximum rather than dying at the deadline with partial data. A very large enriched run is the only realistic way to hit this: raise the run timeout, raise Parallel requests, or split the queries across runs.

No results came back at all. What should I check?

Check the spelling of any filter values you set, then try the query with the filters cleared. A very narrow combination, such as an advanced course under 10 minutes on a niche tool, can legitimately match nothing.


🌐 About Alpha OSINT

This Actor is part of Alpha OSINT, toolset of financial and operations data sources and APIs. For support or requests for this actor, please start a ticket directly on our support page.

Last Updated: 2026.09.01