# Coursera Scraper (`solidcode/coursera-scraper`) Actor

\[💰 $1.0 / 1K] Extract courses, specializations, and professional certificates from Coursera — titles, partner institutions, ratings, enrollment counts, difficulty, duration, skills, languages, and pricing. Search by keyword or paste Coursera URLs.

- **URL**: https://apify.com/solidcode/coursera-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Coursera Scraper

Pull Coursera's learning catalog at scale — course titles, partner universities, star ratings, rating counts, difficulty levels, completion times, skill tags, languages, and price flags for courses, specializations, professional certificates, guided projects, projects, degrees, MasterTrack® certificates, graduate certificates, university certificates, and postgraduate diplomas. Built for edtech market researchers, L&D teams benchmarking catalogs, and affiliate marketers who need a clean, structured course dataset without clicking through Coursera's search one card at a time.

### Why This Scraper?

- **Ten product types in one run** — Courses, Specializations, Professional Certificates, Guided Projects, Projects, Degrees, MasterTrack® Certificates, Graduate Certificates, University Certificates, and Postgraduate Diplomas, each tagged so you can split them downstream.
- **Five server-side filters that reduce your bill** — product type, difficulty level, subject area, language, and free-only are applied by Coursera's own search before results are returned, so a narrow filter means fewer billed rows, not post-filtered waste.
- **Eleven subject areas, four difficulty levels** — slice the catalog by Data Science, Business, Computer Science, Health, and 7 more topics, then narrow to Beginner, Intermediate, Advanced, or Mixed.
- **66 course languages** — filter to English, Spanish, French, German, Chinese, Japanese, Arabic, Hindi, Vietnamese, Ukrainian, Swahili, and 55 more to build region-specific catalogs for nearly any market.
- **Star ratings with rating counts** — every product row carries `avgProductRating` and `numProductRatings`, so you can rank by quality and weight by review volume in one pass.
- **Skill tags and partner names on every row** — the exact skills Coursera lists for each product plus the university or company behind it (Google, Stanford, IBM, DeepLearning.AI, and the rest).
- **Coursera Plus, credit-eligibility, and free flags** — `isPartOfCourseraPlus`, `isCreditEligible`, and `isFree` booleans let you isolate subscription-included, degree-credit, or zero-cost products instantly.
- **Up to 50,000 products per run** — set a clean `maxResults` cap for predictable billing instead of an opaque page count, with smooth pagination and automatic deduplication across overlapping searches.
- **Search keywords or paste any Coursera URL** — feed plain keywords, a pre-filtered Coursera search link (its filters are inherited automatically), or an individual course URL.

### Use Cases

**EdTech Market Research**
- Map the full catalog of a subject area to size a market or spot gaps
- Track how many Professional Certificates exist per partner over time
- Compare difficulty-level distribution across competing topics
- Benchmark a topic's average rating and rating volume against adjacent fields

**Competitive Intelligence**
- Monitor a competitor university's or company's course lineup by partner name
- Detect new Specializations and Degrees as they appear in a subject
- Compare Coursera Plus coverage across categories
- Track which skills competitors attach to their flagship courses

**Content Curation & Affiliate Marketing**
- Build "best free courses in X" lists by combining the free-only filter with a subject
- Rank courses by rating and rating count for round-up articles
- Surface credit-eligible programs for degree-pathway content
- Pull image URLs and canonical links to populate course-directory pages

**Learning & Development Benchmarking**
- Assemble a shortlist of courses by skill tag for an internal upskilling track
- Filter to Beginner-level products in a target language for global teams
- Compare durations across Guided Projects vs. full Specializations
- Audit which in-demand skills are best covered on the platform

**Data Enrichment & Analytics**
- Enrich an internal course catalog with current ratings and partner data
- Feed structured course rows into a dashboard or recommendation engine
- Build skill-to-course mappings for a learning-pathway product
- Power alerting on new high-rated courses in a watched subject

### Getting Started

#### Basic Keyword Search

The simplest run — one topic, 100 products:

```json
{
    "searchQueries": ["data science"],
    "maxResults": 100
}
````

#### Filtered Search (Type + Level + Free)

Build a catalog of free beginner courses in a subject:

```json
{
    "searchQueries": ["python"],
    "productTypes": ["course"],
    "difficultyLevels": ["beginner"],
    "freeOnly": true,
    "maxResults": 200
}
```

#### From Coursera URLs

Paste a pre-filtered search page (its filters are inherited) or an individual product page:

```json
{
    "startUrls": [
        "https://www.coursera.org/search?query=machine%20learning&productDifficultyLevel=Advanced",
        "https://www.coursera.org/learn/machine-learning"
    ],
    "maxResults": 100
}
```

#### Full-Featured Example

Keywords plus every filter, scoped to professional certificates in business and data science, taught in English:

```json
{
    "searchQueries": ["project management", "data analytics"],
    "productTypes": ["professional_certificate", "specialization"],
    "difficultyLevels": ["beginner", "intermediate"],
    "subjects": ["business", "data_science"],
    "languages": ["en"],
    "freeOnly": false,
    "maxResults": 1000
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQueries` | string\[] | `["data science"]` | Keywords to search on Coursera, such as "machine learning", "project management", or "python". Each query is searched separately and produces its own set of results. |
| `startUrls` | string\[] | `[]` | One or more Coursera URLs. Accepts search result pages (e.g. `https://www.coursera.org/search?query=python`) and individual course or specialization pages. Filters baked into a search URL are honored as-is. |

#### Filters

These map to Coursera's own search filters, so they reduce results before you are billed. Leave a filter empty to apply no restriction.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `productTypes` | select\[] | `[]` (all) | Only include these kinds of learning products: Course, Specialization, Professional Certificate, Guided Project, Project, Degree, MasterTrack Certificate, Graduate Certificate, University Certificate, Postgraduate Diploma. |
| `difficultyLevels` | select\[] | `[]` (all) | Only include products at these difficulty levels: Beginner, Intermediate, Advanced, Mixed. |
| `subjects` | select\[] | `[]` (all) | Only include products in these top-level subject areas: Data Science, Business, Computer Science, Information Technology, Health, Math and Logic, Personal Development, Physical Science and Engineering, Social Sciences, Language Learning, Arts and Humanities. |
| `languages` | select\[] | `[]` (all) | Only include products taught in any of 66 languages: English, Spanish, Kazakh, French, Arabic, German, Portuguese, Indonesian, Chinese, Japanese, Russian, Korean, Italian, Hindi, Turkish, Ukrainian, Thai, Polish, Dutch, Greek, Swedish, Hungarian, Vietnamese, Pushto, Uzbek, Azerbaijani, Urdu, Bengali, Oriya, Malay, Haitian (Haitian Creole), Romanian, Persian, Khmer, Hebrew, Serbian, Catalan, Javanese, Afrikaans, Tamil, Czech, Croatian, Slovak, Finnish, Mongolian, Telugu, Lithuanian, Bulgarian, Danish, Estonian, Latvian, Nepali, Burmese, Malayalam, Albanian, Georgian, Marathi, Swahili, Amharic, Somali, Tagalog, Kannada, Kinyarwanda, Macedonian, Nyanja, Slovenian. |
| `freeOnly` | boolean | `false` | Only include products that are free to enroll. Leave off to include both free and paid products. |

#### Limits

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `100` | Hard cap on the total number of products collected across all searches and URLs. Set to `0` for no cap (an upper limit of 50,000 always applies). The collector stops requesting new pages once your number is reached but keeps the full final page. |

### Output

Each product is one flat row. Empty fields are removed for a clean dataset.

```json
{
    "id": "9T8nL9CqEeWxJBLfPnRpFA",
    "name": "Machine Learning",
    "slug": "machine-learning",
    "url": "https://www.coursera.org/learn/machine-learning",
    "productType": "COURSE",
    "partners": ["Stanford University", "DeepLearning.AI"],
    "avgProductRating": 4.9,
    "numProductRatings": 184250,
    "difficultyLevel": "BEGINNER",
    "duration": "1-3 months",
    "skills": ["Machine Learning", "Logistic Regression", "Python Programming"],
    "languages": ["English"],
    "isFree": false,
    "isCreditEligible": false,
    "isPartOfCourseraPlus": true,
    "imageUrl": "https://d3njjcbhbojbot.cloudfront.net/api/utilities/v1/imageproxy/example.png"
}
```

#### Core Fields

| Field | Type | Description |
|-------|------|-------------|
| `id` | string | Unique Coursera product identifier |
| `name` | string | Product title |
| `slug` | string | URL slug for the product |
| `url` | string | Canonical Coursera product URL |
| `productType` | string | COURSE, SPECIALIZATION, PROFESSIONAL\_CERTIFICATE, GUIDED\_PROJECT, PROJECT, DEGREE, MASTERTRACK, GRADUATE\_CERTIFICATE, UNIVERSITY\_CERTIFICATE, or POSTGRADUATE\_DIPLOMA |
| `partners` | string\[] | Partner universities or companies behind the product |
| `difficultyLevel` | string | BEGINNER, INTERMEDIATE, ADVANCED, or MIXED |
| `duration` | string | Estimated completion time (e.g. "1-3 months", "Less than 2 hours") |
| `skills` | string\[] | Skill tags Coursera associates with the product |
| `languages` | string\[] | Languages the product is taught in |
| `imageUrl` | string | Product cover image URL |

#### Ratings & Enrollment

| Field | Type | Description |
|-------|------|-------------|
| `avgProductRating` | number | Average star rating |
| `numProductRatings` | number | Number of ratings the average is based on |
| `numEnrollments` | number | Enrollment count when Coursera exposes it (often omitted on search cards) |

#### Flags

| Field | Type | Description |
|-------|------|-------------|
| `isFree` | boolean | Free to enroll |
| `isCreditEligible` | boolean | Eligible for academic credit |
| `isPartOfCourseraPlus` | boolean | Included in a Coursera Plus subscription |

### Tips for Best Results

- **Build a free-course catalog in one shot** — combine `freeOnly: true` with a single `subjects` facet to get a clean, ready-to-publish list of zero-cost products in a topic.
- **Inherit a pre-filtered search via `startUrls`** — set up exactly the filters you want on Coursera's website, copy the resulting search URL, and paste it; the actor reproduces the same filtered results without you re-entering every facet.
- **Filters cut your bill, not just your noise** — because product type, difficulty, subject, language, and free-only are applied by Coursera's search, narrowing them returns fewer rows, so you pay for fewer results.
- **Split big pulls across keywords or subjects** — Coursera's search returns up to roughly 10,000 results per query; for a fuller catalog, run several focused keywords or subjects rather than one broad term.
- **Rank by `numProductRatings`, not just `avgProductRating`** — a 5.0 average from 12 ratings is weaker than a 4.8 from 80,000; sort by rating count to surface battle-tested courses.
- **Combine keywords and URLs in a single run** — mix plain search keywords with pasted product URLs; overlapping products are automatically deduplicated so you never pay for the same course twice.
- **Start small to validate** — keep `maxResults` at 50–100 for your first run to confirm the fields match your needs, then scale up.

### Pricing

**$10.00 per 1,000 results** — undercuts the leading Coursera extractor while adding type, difficulty, subject, language, and free-only filters at no extra charge.

| Results | Estimated Cost |
|---------|----------------|
| 100 | $1.00 |
| 1,000 | $10.00 |
| 10,000 | $100.00 |
| 100,000 | $1,000.00 |

A "result" is any product row in the output dataset. **No compute charges — you only pay per result returned.**

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate market research, catalog analysis, content curation, and learning-and-development planning. Users are responsible for complying with applicable laws and Coursera's Terms of Service. Extract only publicly available catalog information, and do not use the data for spam, harassment, or any illegal purpose.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to search on Coursera, such as 'machine learning', 'project management', or 'python'. Each query is searched separately and produces its own set of results. Leave empty if you only want to use Coursera URLs below.

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

Paste one or more Coursera URLs. Accepts search result pages (e.g. https://www.coursera.org/search?query=python) and individual course or specialization pages (e.g. https://www.coursera.org/learn/machine-learning). Filters baked into a search URL are honored as-is.

## `productTypes` (type: `array`):

Only include these kinds of learning products. Leave empty to include every type.

## `difficultyLevels` (type: `array`):

Only include products at these difficulty levels.

## `subjects` (type: `array`):

Only include products in these top-level subject areas.

## `languages` (type: `array`):

Only include products taught in these languages.

## `freeOnly` (type: `boolean`):

Only include products that are free to enroll. Leave off to include both free and paid products.

## `maxResults` (type: `integer`):

Hard cap on the total number of products collected across all searches and URLs. Default 100 — increase for bigger runs, or set to 0 for no cap. An effective upper limit of 50,000 rows per run always applies to prevent runaway pagination. The scraper stops requesting new pages once your number is reached but keeps the full final page even if it slightly overshoots. To gather very large datasets, split a request across multiple keywords or subjects.

## Actor input object example

```json
{
  "searchQueries": [
    "data science"
  ],
  "startUrls": [],
  "productTypes": [],
  "difficultyLevels": [],
  "subjects": [],
  "languages": [],
  "freeOnly": false,
  "maxResults": 100
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of scraped Coursera products with key fields.

# 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 = {
    "searchQueries": [
        "data science"
    ],
    "startUrls": [],
    "productTypes": [],
    "difficultyLevels": [],
    "subjects": [],
    "languages": [],
    "freeOnly": false,
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/coursera-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 = {
    "searchQueries": ["data science"],
    "startUrls": [],
    "productTypes": [],
    "difficultyLevels": [],
    "subjects": [],
    "languages": [],
    "freeOnly": False,
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/coursera-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 '{
  "searchQueries": [
    "data science"
  ],
  "startUrls": [],
  "productTypes": [],
  "difficultyLevels": [],
  "subjects": [],
  "languages": [],
  "freeOnly": false,
  "maxResults": 100
}' |
apify call solidcode/coursera-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Coursera Scraper",
        "description": "[💰 $1.0 / 1K] Extract courses, specializations, and professional certificates from Coursera — titles, partner institutions, ratings, enrollment counts, difficulty, duration, skills, languages, and pricing. Search by keyword or paste Coursera URLs.",
        "version": "1.0",
        "x-build-id": "bsqo1NAIEjBEjMfpP"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~coursera-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-coursera-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/solidcode~coursera-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-coursera-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/solidcode~coursera-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-coursera-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",
                "properties": {
                    "searchQueries": {
                        "title": "Search Queries",
                        "type": "array",
                        "description": "Keywords to search on Coursera, such as 'machine learning', 'project management', or 'python'. Each query is searched separately and produces its own set of results. Leave empty if you only want to use Coursera URLs below.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Coursera URLs",
                        "type": "array",
                        "description": "Paste one or more Coursera URLs. Accepts search result pages (e.g. https://www.coursera.org/search?query=python) and individual course or specialization pages (e.g. https://www.coursera.org/learn/machine-learning). Filters baked into a search URL are honored as-is.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "productTypes": {
                        "title": "Product Types",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only include these kinds of learning products. Leave empty to include every type.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "course",
                                "specialization",
                                "professional_certificate",
                                "guided_project",
                                "project",
                                "degree",
                                "mastertrack",
                                "graduate_certificate",
                                "university_certificate",
                                "postgraduate_diploma"
                            ],
                            "enumTitles": [
                                "Course",
                                "Specialization",
                                "Professional Certificate",
                                "Guided Project",
                                "Project",
                                "Degree",
                                "MasterTrack Certificate",
                                "Graduate Certificate",
                                "University Certificate",
                                "Postgraduate Diploma"
                            ]
                        },
                        "default": []
                    },
                    "difficultyLevels": {
                        "title": "Difficulty Levels",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only include products at these difficulty levels.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "beginner",
                                "intermediate",
                                "advanced",
                                "mixed"
                            ],
                            "enumTitles": [
                                "Beginner",
                                "Intermediate",
                                "Advanced",
                                "Mixed"
                            ]
                        },
                        "default": []
                    },
                    "subjects": {
                        "title": "Subjects",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only include products in these top-level subject areas.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "data_science",
                                "business",
                                "computer_science",
                                "information_technology",
                                "health",
                                "math_and_logic",
                                "personal_development",
                                "physical_science_and_engineering",
                                "social_sciences",
                                "language_learning",
                                "arts_and_humanities"
                            ],
                            "enumTitles": [
                                "Data Science",
                                "Business",
                                "Computer Science",
                                "Information Technology",
                                "Health",
                                "Math and Logic",
                                "Personal Development",
                                "Physical Science and Engineering",
                                "Social Sciences",
                                "Language Learning",
                                "Arts and Humanities"
                            ]
                        },
                        "default": []
                    },
                    "languages": {
                        "title": "Languages",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only include products taught in these languages.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "en",
                                "es",
                                "kk",
                                "fr",
                                "ar",
                                "de",
                                "pt",
                                "id",
                                "zh",
                                "ja",
                                "ru",
                                "ko",
                                "it",
                                "hi",
                                "tr",
                                "uk",
                                "th",
                                "pl",
                                "nl",
                                "el",
                                "sv",
                                "hu",
                                "vi",
                                "ps",
                                "uz",
                                "az",
                                "ur",
                                "bn",
                                "or",
                                "ms",
                                "ht",
                                "ro",
                                "fa",
                                "km",
                                "he",
                                "sr",
                                "ca",
                                "jv",
                                "af",
                                "ta",
                                "cs",
                                "hr",
                                "sk",
                                "fi",
                                "mn",
                                "te",
                                "lt",
                                "bg",
                                "da",
                                "et",
                                "lv",
                                "ne",
                                "my",
                                "ml",
                                "sq",
                                "ka",
                                "mr",
                                "sw",
                                "am",
                                "so",
                                "tl",
                                "kn",
                                "rw",
                                "mk",
                                "ny",
                                "sl"
                            ],
                            "enumTitles": [
                                "English",
                                "Spanish",
                                "Kazakh",
                                "French",
                                "Arabic",
                                "German",
                                "Portuguese",
                                "Indonesian",
                                "Chinese",
                                "Japanese",
                                "Russian",
                                "Korean",
                                "Italian",
                                "Hindi",
                                "Turkish",
                                "Ukrainian",
                                "Thai",
                                "Polish",
                                "Dutch",
                                "Greek",
                                "Swedish",
                                "Hungarian",
                                "Vietnamese",
                                "Pushto",
                                "Uzbek",
                                "Azerbaijani",
                                "Urdu",
                                "Bengali",
                                "Oriya",
                                "Malay",
                                "Haitian (Haitian Creole)",
                                "Romanian",
                                "Persian",
                                "Khmer",
                                "Hebrew",
                                "Serbian",
                                "Catalan",
                                "Javanese",
                                "Afrikaans",
                                "Tamil",
                                "Czech",
                                "Croatian",
                                "Slovak",
                                "Finnish",
                                "Mongolian",
                                "Telugu",
                                "Lithuanian",
                                "Bulgarian",
                                "Danish",
                                "Estonian",
                                "Latvian",
                                "Nepali",
                                "Burmese",
                                "Malayalam",
                                "Albanian",
                                "Georgian",
                                "Marathi",
                                "Swahili",
                                "Amharic",
                                "Somali",
                                "Tagalog",
                                "Kannada",
                                "Kinyarwanda",
                                "Macedonian",
                                "Nyanja",
                                "Slovenian"
                            ]
                        },
                        "default": []
                    },
                    "freeOnly": {
                        "title": "Free Products Only",
                        "type": "boolean",
                        "description": "Only include products that are free to enroll. Leave off to include both free and paid products.",
                        "default": false
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Hard cap on the total number of products collected across all searches and URLs. Default 100 — increase for bigger runs, or set to 0 for no cap. An effective upper limit of 50,000 rows per run always applies to prevent runaway pagination. The scraper stops requesting new pages once your number is reached but keeps the full final page even if it slightly overshoots. To gather very large datasets, split a request across multiple keywords or subjects.",
                        "default": 100
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
