{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Learning Courses Scraper",
    "description": "Extract LinkedIn Learning course data at scale: titles, instructors, durations, ratings, learner counts, difficulty levels and skills. Search by keyword with filters, get structured JSON/CSV in seconds. No login or cookies required.",
    "version": "0.0",
    "x-build-id": "swSyBBVpqYMfbFFzh"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/apt_marble~linkedin-learning-courses-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-apt_marble-linkedin-learning-courses-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/apt_marble~linkedin-learning-courses-scraper/runs": {
      "post": {
        "operationId": "runs-sync-apt_marble-linkedin-learning-courses-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/apt_marble~linkedin-learning-courses-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-apt_marble-linkedin-learning-courses-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "keywords"
        ],
        "properties": {
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "One or more topic, skill or tool searches (e.g. \"python\", \"project management\", \"excel\"). Each keyword gets its own result quota.",
            "default": [
              "python"
            ],
            "items": {
              "type": "string"
            }
          },
          "entityType": {
            "title": "Content type",
            "enum": [
              "COURSE",
              "LEARNING_PATH",
              "VIDEO"
            ],
            "type": "string",
            "description": "What kind of catalog entries to search for: full courses, curated learning paths, or individual videos.",
            "default": "COURSE"
          },
          "maxCoursesPerKeyword": {
            "title": "Maximum results per keyword",
            "minimum": 0,
            "type": "integer",
            "description": "How many unique results to collect for each keyword. A single guest results page tops out around 40-50 — switch on \"Expand coverage\" to surface more.",
            "default": 50
          },
          "enrichDetails": {
            "title": "Scrape full course details",
            "type": "boolean",
            "description": "Opens each course page to capture the description, instructors with their job titles, exact course length, rating and rating count, difficulty level, skills covered, learner count and release date. Turn off for a faster, lighter run with list-level data only.",
            "default": true
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "RELEVANCE",
              "POPULARITY",
              "RECENCY"
            ],
            "type": "string",
            "description": "How the catalog ranks the results.",
            "default": "POPULARITY"
          },
          "expandCoverage": {
            "title": "Expand coverage (re-run each keyword under every sort order)",
            "type": "boolean",
            "description": "The public course search has no pagination — every query returns a single page of up to ~50 results, no matter what. When enabled, each keyword is additionally re-run under the other two sort orders (relevance / popularity / recency) and the results are deduplicated, which is the honest way to surface more of the catalog for a keyword (typically 1.5-2x more unique results at up to 3x the search requests).",
            "default": false
          },
          "difficultyLevel": {
            "title": "Difficulty level",
            "type": "array",
            "description": "Restrict to one or more difficulty levels.",
            "items": {
              "type": "string",
              "enum": [
                "BEGINNER",
                "INTERMEDIATE",
                "ADVANCED"
              ],
              "enumTitles": [
                "Beginner",
                "Intermediate",
                "Advanced"
              ]
            },
            "default": []
          },
          "durations": {
            "title": "Course length",
            "type": "array",
            "description": "Restrict to one or more length brackets.",
            "items": {
              "type": "string",
              "enum": [
                "BETWEEN_0_TO_10_MIN",
                "BETWEEN_10_TO_30_MIN",
                "BETWEEN_30_TO_60_MIN",
                "BETWEEN_1_TO_2_HOURS",
                "BETWEEN_2_TO_3_HOURS",
                "MORE_THAN_3_HOURS"
              ],
              "enumTitles": [
                "Under 10 minutes",
                "10-30 minutes",
                "30-60 minutes",
                "1-2 hours",
                "2-3 hours",
                "Over 3 hours"
              ]
            },
            "default": []
          },
          "softwareNames": {
            "title": "Software / tools",
            "type": "array",
            "description": "Restrict to courses about specific software, e.g. \"Microsoft Excel\", \"Figma\", \"Python\". Use the exact names the linkedin.com/learning filter panel shows.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "proxyCountry": {
            "title": "IP country (advanced)",
            "type": "string",
            "description": "Two-letter country code for the request IP. Supported: us, gb (or uk), ca, au, de, fr, es, it, nl, ie, in, sg — any other code falls back to \"us\" with a warning in the log.",
            "default": "us"
          },
          "maxConcurrency": {
            "title": "Concurrency (advanced)",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "How many course pages to enrich in parallel (capped at 3 to stay polite).",
            "default": 3
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}