# Maven Courses & Instructors Scraper (`crawlerbros/maven-courses-scraper`) Actor

Scrape Maven (maven.com) cohort-based courses and instructor profiles. Search by keyword, browse by category, get full course details or instructor profiles with all courses.

- **URL**: https://apify.com/crawlerbros/maven-courses-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 7 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Maven Courses & Instructors Scraper

Scrape course listings, details, and instructor profiles from **Maven** (maven.com) — the leading cohort-based learning platform trusted by thousands of professionals. Extract course metadata, instructor bios, ratings, start dates, and more — without any account or API key.

### What This Actor Does

- **Search courses** by keyword across all Maven categories
- **Browse by category** — AI, Product, Engineering, Design, Marketing, and more
- **Fetch course details** from specific Maven course URLs
- **Get instructor profiles** with bio, avatar, and all their listed courses
- **Discover featured/trending** courses on Maven's homepage

### Input

| Field | Type | Description |
|-------|------|-------------|
| `mode` | Select | What to scrape: `search`, `byCategory`, `getCourse`, `getInstructor`, `featured` |
| `searchQuery` | Text | Keyword search query (mode=search) |
| `startUrls` | List | Maven course or instructor URLs (getCourse/getInstructor) |
| `category` | Select | Category filter: AI, Product, Engineering, Design, Marketing, Finance, Leadership, Data, Entrepreneurship, Founders |
| `isFree` | Boolean | Only return free courses |
| `minPrice` | Number | Minimum course price in USD |
| `maxPrice` | Number | Maximum course price in USD |
| `minRating` | Number | Minimum average rating (0–5) |
| `maxItems` | Number | Maximum records to return (default: 20) |

### Output — Course Record

| Field | Type | Description |
|-------|------|-------------|
| `courseId` | String | Maven internal course ID |
| `title` | String | Course title |
| `description` | String | Course description (detail mode) |
| `instructorName` | String | Instructor name(s) |
| `instructorBio` | String | Instructor bio / headline |
| `instructorUrl` | String | Instructor profile URL |
| `instructorImageUrl` | String | Instructor avatar URL |
| `startDate` | String | Next cohort start date (ISO) |
| `duration` | String | Course duration (e.g., "7 weeks") |
| `rating` | Number | Average rating (0–10 scale) |
| `reviewCount` | Integer | Number of ratings |
| `category` | String | Course category |
| `format` | String | full_course or workshop |
| `url` | String | Course page URL |
| `thumbnailUrl` | String | Course thumbnail image URL |
| `recordType` | String | Always "course" |
| `scrapedAt` | String | ISO timestamp |

### Output — Instructor Record

| Field | Type | Description |
|-------|------|-------------|
| `instructorId` | String | Maven school/instructor ID |
| `name` | String | Instructor display name |
| `bio` | String | Full instructor bio |
| `headline` | String | Short headline/tagline |
| `profileUrl` | String | Maven profile URL |
| `avatarUrl` | String | Profile photo URL |
| `linkedinUrl` | String | LinkedIn profile URL |
| `twitterHandle` | String | Twitter/X handle |
| `verified` | Boolean | Maven-verified instructor |
| `courses` | Array | List of their courses (title + url) |
| `recordType` | String | Always "instructor" |
| `scrapedAt` | String | ISO timestamp |

### Example Output

```json
{
  "courseId": "11252",
  "title": "AI Product Management Certification by Product Faculty",
  "description": "#1 Rated AI Certificate. Acquire the skills needed to confidently build AI products",
  "instructorName": "Rohan Varma & Henry Shi",
  "instructorBio": "Product Leader, Codex at OpenAI",
  "startDate": "2026-06-22T22:00:00Z",
  "duration": "7 weeks",
  "rating": 9.5,
  "reviewCount": 1272,
  "category": "Product",
  "format": "full_course",
  "url": "https://maven.com/product-faculty/ai-product-management-certification",
  "thumbnailUrl": "https://d2426xcxuh3ht5.cloudfront.net/hero.png",
  "recordType": "course",
  "scrapedAt": "2026-05-17T07:00:00+00:00"
}
````

### Modes

#### `search` — Search by keyword

Searches course titles across all Maven categories.

```json
{"mode": "search", "searchQuery": "product management", "maxItems": 20}
```

#### `byCategory` — Browse a category

Returns all courses in a specific category.

```json
{"mode": "byCategory", "category": "AI", "maxItems": 50}
```

#### `getCourse` — Fetch specific course(s)

Fetches full details for specific course URLs.

```json
{
  "mode": "getCourse",
  "startUrls": ["https://maven.com/product-faculty/ai-product-management-certification"]
}
```

#### `getInstructor` — Instructor profile

Returns instructor profile and their courses.

```json
{
  "mode": "getInstructor",
  "startUrls": ["https://maven.com/wes-kao/maven-course-accelerator"]
}
```

#### `featured` — Featured courses

Returns trending courses from Maven's homepage.

```json
{"mode": "featured", "maxItems": 30}
```

### FAQ

**Does this require a Maven account?**
No. All course listings and details scraped are publicly accessible without login.

**Why don't course records always have a price?**
Maven does not display pricing on listing pages. Pricing information is shown on the checkout page after user interaction and is not available in the public HTML.

**How fresh is the data?**
Each run fetches live data from Maven. Course details (start dates, instructor info) reflect what is currently on the site.

**How many courses can I scrape?**
Set `maxItems` up to 5000. Maven has hundreds of active courses across all categories.

**Can I search multiple categories?**
Use `mode=search` with a keyword, which searches across all categories. Or use multiple `byCategory` runs.

**Does it handle multiple instructors per course?**
Yes. `instructorName` joins all instructor names with " & " and `instructorNames` provides the full list.

**What is the rating scale?**
Maven ratings use a raw sum/count model. The actor computes `rating = sumRatings / numRatings` which can exceed 5.0 depending on Maven's internal weighting. A value around 9–10 typically indicates an excellent course.

### Limitations

- Pricing data is not available on public listing or detail pages
- Courses requiring login to view are not scraped
- The scraper respects Maven's rate limits with built-in delays
- Build IDs change with Maven deployments; the actor auto-detects the current build ID on each run

# Actor input Schema

## `mode` (type: `string`):

What to scrape.

## `searchQuery` (type: `string`):

Keyword(s) to search for courses (mode=search).

## `startUrls` (type: `array`):

Maven course or instructor profile URLs (modes: getCourse, getInstructor). Example: https://maven.com/product-faculty/ai-product-management-certification

## `category` (type: `string`):

Filter results to a specific category. Required for mode=byCategory.

## `isFree` (type: `boolean`):

When enabled, only return free courses.

## `minPrice` (type: `integer`):

Minimum course price in USD.

## `maxPrice` (type: `integer`):

Maximum course price in USD.

## `minRating` (type: `number`):

Minimum average rating (0–5).

## `maxItems` (type: `integer`):

Maximum number of records to return.

## Actor input object example

```json
{
  "mode": "search",
  "searchQuery": "startup",
  "startUrls": [],
  "category": "",
  "isFree": false,
  "maxItems": 20
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset containing all scraped Maven course and instructor records.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "search",
    "searchQuery": "startup",
    "startUrls": [],
    "category": "",
    "isFree": false,
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/maven-courses-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "search",
    "searchQuery": "startup",
    "startUrls": [],
    "category": "",
    "isFree": False,
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/maven-courses-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "search",
  "searchQuery": "startup",
  "startUrls": [],
  "category": "",
  "isFree": false,
  "maxItems": 20
}' |
apify call crawlerbros/maven-courses-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=crawlerbros/maven-courses-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Maven Courses & Instructors Scraper",
        "description": "Scrape Maven (maven.com) cohort-based courses and instructor profiles. Search by keyword, browse by category, get full course details or instructor profiles with all courses.",
        "version": "1.0",
        "x-build-id": "cDHM4RV8fwcTntJ6Q"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~maven-courses-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-maven-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/crawlerbros~maven-courses-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-maven-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/crawlerbros~maven-courses-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-maven-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": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "search",
                            "byCategory",
                            "getCourse",
                            "getInstructor",
                            "featured"
                        ],
                        "type": "string",
                        "description": "What to scrape.",
                        "default": "search"
                    },
                    "searchQuery": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Keyword(s) to search for courses (mode=search).",
                        "default": "startup"
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Maven course or instructor profile URLs (modes: getCourse, getInstructor). Example: https://maven.com/product-faculty/ai-product-management-certification",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "category": {
                        "title": "Category filter",
                        "enum": [
                            "",
                            "AI",
                            "Product",
                            "Engineering",
                            "Design",
                            "Marketing",
                            "Leadership",
                            "Entrepreneurship",
                            "Founders"
                        ],
                        "type": "string",
                        "description": "Filter results to a specific category. Required for mode=byCategory.",
                        "default": ""
                    },
                    "isFree": {
                        "title": "Free courses only",
                        "type": "boolean",
                        "description": "When enabled, only return free courses.",
                        "default": false
                    },
                    "minPrice": {
                        "title": "Min price (USD)",
                        "minimum": 0,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Minimum course price in USD."
                    },
                    "maxPrice": {
                        "title": "Max price (USD)",
                        "minimum": 0,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Maximum course price in USD."
                    },
                    "minRating": {
                        "title": "Min rating",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "number",
                        "description": "Minimum average rating (0–5)."
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum number of records to return.",
                        "default": 20
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
