# npm Registry Scraper (`solidcode/npm-registry-scraper`) Actor

\[💰 $2.5 / 1K] Search the public npm registry or look up exact packages, and extract package metadata, version history, maintainers, repository and homepage links, dependencies, and download statistics (day/week/month).

- **URL**: https://apify.com/solidcode/npm-registry-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, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 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.
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

## npm Registry Scraper

Pull structured package data from the public npm registry at scale — names, versions, maintainers, repository links, license, dependencies, and day / week / month download counts for every package you search or name directly. Search by free-text query (with npm's own qualifiers) or fetch exact packages including scoped `@org/name`, and get back a clean, consistent dataset every time. Built for developers auditing dependencies, security and supply-chain teams vetting packages, and market-research and data teams who need a reliable npm dataset without stitching together the registry's scattered endpoints themselves.

### Why This Scraper?

- **31-field flat schema, every key always present** — one tidy row per package with explicit `null` when a value is missing, so your CSV, Sheets, and database columns never shift between runs.
- **Two modes, no technical toggle** — type a query to search, or paste exact package names to look them up directly. Scoped packages like `@types/node` and `@angular/core` are fully supported; the mode is inferred for you.
- **npm search qualifiers built in** — use `author:sindresorhus`, `keywords:cli`, or `is:unstable` right inside the search box to pull a maintainer's whole portfolio or a single keyword's ecosystem.
- **Day, week, and month download counts together** — all three windows on every row, not a single period you have to choose up front.
- **Dependencies, devDependencies AND peerDependencies** — the latest manifest's full runtime, dev, and peer dependency lists, something most npm scrapers skip entirely.
- **Full version history with first-publish dates** — the complete time-ordered list of every published version plus the package's original `createdAt` timestamp, on demand.
- **SPDX license and weekly-download filtering** — keep only packages under licenses you allow (`MIT`, `Apache-2.0`, `ISC`) and above a weekly-downloads floor, so abandoned packages drop out before they reach your dataset.
- **Multi-keyword search, deduped** — pass several keyword tags and get a single merged, duplicate-free result set ranked by relevance or re-sorted by most downloaded.
- **Up to 10,000 packages per run** — fetch a fixed count or set `0` to walk an entire search to completion under a built-in safety cap.

### Use Cases

**Dependency Auditing**
- Snapshot the exact versions, licenses, and maintainers behind every package in a project's tree
- Compare runtime, dev, and peer dependencies across candidate libraries before adopting one
- Track first-publish and last-modified dates to spot stale or recently revived packages
- Build an internal allowlist of packages that meet your license and download thresholds

**Supply-Chain Security**
- Vet new dependencies by maintainer, publisher, and version cadence before they reach production
- Filter out low-traffic packages below a weekly-downloads floor that are easier targets for takeover
- Pull the full version history to review release frequency and sudden ownership changes
- Cross-reference repository, homepage, and issue-tracker URLs to confirm a package's provenance

**Market & Ecosystem Research**
- Map an entire ecosystem with `keywords:` qualifiers — every CLI, testing, or TypeScript package
- Rank a topic's packages by weekly downloads to find the real leaders versus the long tail
- Monitor adoption trends by re-running searches and comparing download counts over time
- Profile a framework's surrounding tooling by license, maintainer, and dependency footprint

**Developer Relations & Lead Generation**
- Pull a single maintainer's entire published portfolio with the `author:` qualifier
- Build contact lists of package maintainers (name and email) for outreach and partnerships
- Identify the most-downloaded packages in your category to find integration and sponsorship targets
- Track which authors dominate a keyword to focus community and DevRel efforts

**Dataset Building**
- Generate clean, consistent package datasets for dashboards, internal tools, and ML pipelines
- Export every field as JSON, CSV, or Excel with stable columns that never drift between runs
- Enrich an existing package list by looking up exact names in bulk, scoped names included
- Feed npm metadata into analytics warehouses with predictable one-row-per-package billing

### Getting Started

#### Simple search

```json
{
  "searchQuery": "react"
}
````

#### Filtered search

```json
{
  "searchQuery": "http client",
  "licenses": ["MIT"],
  "minDownloadsLastWeek": 100000,
  "sortBy": "downloads",
  "maxResults": 100
}
```

#### Exact lookup with full detail

```json
{
  "packageNames": ["lodash", "express", "@types/node", "@angular/core"],
  "includeVersions": true,
  "includeDependencies": true
}
```

### Input Reference

#### What to Fetch

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQuery` | string | `"react"` | Free-text search across names, descriptions, and keywords. Supports npm qualifiers like `keywords:cli`, `author:sindresorhus`, and `is:unstable`. Leave empty if you only want exact package lookups. |
| `packageNames` | array | `[]` | Fetch specific packages directly, including scoped names like `@types/node`. When provided, the search query and search filters are ignored. |

#### Filters (search mode only)

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `keywords` | array | `[]` | Keep only packages tagged with at least one of these npm keywords. Multiple keywords are merged and deduplicated. |
| `licenses` | array | `[]` | Keep only packages published under at least one of these SPDX license identifiers (`MIT`, `Apache-2.0`, `ISC`). |
| `minDownloadsLastWeek` | integer | `null` | Keep only packages with at least this many downloads in the last week — a quick way to drop abandoned or rarely used packages. |
| `sortBy` | string | `"Best match"` | `Best match` keeps npm's own relevance ranking; `Most downloaded` re-orders the packages you fetch with the highest weekly downloads first. |

#### What to Include

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includeVersions` | boolean | `false` | Add the complete, time-ordered list of every published version with release dates, plus the package's first-publish date. |
| `includeMaintainers` | boolean | `true` | Add the maintainer list (name and email) to each package. |
| `includeDownloads` | boolean | `true` | Add download counts for the last day, last week, and last month. |
| `includeDependencies` | boolean | `false` | Add the latest version's runtime, dev, and peer dependency lists. |

#### Results

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `50` | The most packages to return for a search. Set to `0` to fetch every match, with a safety cap of 10,000. Ignored when fetching exact package names. |

### Output

Every package is returned as one flat row. Below is a representative result (download statistics, versions, and dependencies shown with all optional toggles on).

```json
{
  "name": "express",
  "latestVersion": "4.21.2",
  "distTags": { "latest": "4.21.2", "next": "5.0.0" },
  "description": "Fast, unopinionated, minimalist web framework",
  "keywords": ["express", "framework", "web", "rest", "router"],
  "license": "MIT",
  "author": { "name": "TJ Holowaychuk", "email": "tj@vision-media.ca", "url": null },
  "publisher": "wesleytodd",
  "maintainers": [{ "name": "wesleytodd", "email": "wes@example.com" }],
  "homepageUrl": "http://expressjs.com/",
  "repositoryUrl": "https://github.com/expressjs/express",
  "bugsUrl": "https://github.com/expressjs/express/issues",
  "npmUrl": "https://www.npmjs.com/package/express",
  "createdAt": "2010-12-29T19:38:25.450Z",
  "modifiedAt": "2024-12-09T17:21:04.012Z",
  "versionCount": 281,
  "versions": [{ "version": "4.21.2", "publishedAt": "2024-12-09T17:21:03.000Z" }],
  "dependencies": { "accepts": "~1.3.8", "body-parser": "1.20.3" },
  "devDependencies": { "mocha": "10.7.3", "supertest": "6.3.0" },
  "peerDependencies": {},
  "downloadsLastDay": 4218903,
  "downloadsLastWeek": 28734512,
  "downloadsLastMonth": 121908447,
  "scoreFinal": 0.91,
  "scoreQuality": 0.95,
  "scorePopularity": 0.99,
  "scoreMaintenance": 0.78,
  "searchScore": 100023.45,
  "dependentsCount": 84213,
  "recordType": "package",
  "scrapedAt": "2026-06-13T10:42:00.000Z"
}
```

#### Core Fields

| Field | Type | Description |
|-------|------|-------------|
| `name` | string | Package name, including scope (e.g. `@types/node`). |
| `latestVersion` | string | Version published under the `latest` dist-tag. |
| `distTags` | object | All distribution tags mapped to their version (`latest`, `next`, `beta`). |
| `description` | string | Short package description. |
| `keywords` | array | Keyword tags declared by the package. |
| `license` | string | SPDX license identifier. |
| `recordType` | string | Always `"package"`. |
| `scrapedAt` | string | ISO 8601 timestamp of when the row was collected. |

#### Links

| Field | Type | Description |
|-------|------|-------------|
| `homepageUrl` | string | Package homepage. |
| `repositoryUrl` | string | Source repository URL, normalized to a browsable link. |
| `bugsUrl` | string | Issue tracker URL. |
| `npmUrl` | string | Canonical npm page for the package. |

#### People

| Field | Type | Description |
|-------|------|-------------|
| `author` | object | Declared author `{ name, email, url }`. |
| `publisher` | string | Username that published the indexed version. |
| `maintainers` | array | List of maintainers `{ name, email }` (when maintainers are included). |

#### Timestamps & Versions

| Field | Type | Description |
|-------|------|-------------|
| `createdAt` | string | First-publish timestamp of the package (when versions are included). |
| `modifiedAt` | string | Last-modified timestamp (when versions are included). |
| `versionCount` | integer | Total number of published versions. |
| `versions` | array | Time-ordered `{ version, publishedAt }` list (when versions are included). |

#### Downloads & Scores

| Field | Type | Description |
|-------|------|-------------|
| `downloadsLastDay` | integer | Downloads in the last day (when downloads are included). |
| `downloadsLastWeek` | integer | Downloads in the last week. |
| `downloadsLastMonth` | integer | Downloads in the last month. |
| `scoreFinal` | number | npm blended search score (search mode). |
| `scoreQuality` | number | Quality sub-score. |
| `scorePopularity` | number | Popularity sub-score. |
| `scoreMaintenance` | number | Maintenance sub-score. |
| `searchScore` | number | npm search relevance score (search mode). |
| `dependentsCount` | integer | Number of packages that depend on this one, when reported. |

#### Dependencies

| Field | Type | Description |
|-------|------|-------------|
| `dependencies` | object | Runtime dependencies of the latest version (when dependencies are included). |
| `devDependencies` | object | Development dependencies of the latest version. |
| `peerDependencies` | object | Peer dependencies of the latest version. |

### Tips for Best Results

- Use the `author:` qualifier in the search box to pull a maintainer's entire published portfolio in one run — for example `author:sindresorhus`.
- List scoped packages exactly as `@scope/name` in **Exact package names** — `@babel/core`, `@types/node`, `@angular/core` — and the search box is ignored for those runs.
- Turn on **Include full version history** only when you need release timelines or the first-publish date; it pulls each package's full document and adds the most weight to a run.
- Set a **Minimum weekly downloads** floor (try 10,000 or 100,000) to cut abandoned packages out of broad searches before they reach your dataset.
- Very high download thresholds or a rare license scan many packages to find enough matches, so a run can take a few minutes; pair them with a specific search query (rather than a broad one) to keep runs fast.
- Choose **Most downloaded** sorting to surface the real leaders in a category; it re-orders the packages you fetch by weekly downloads.
- Combine multiple **Keyword tags** to map a whole ecosystem at once — results are merged and de-duplicated automatically.
- Set **Maximum packages** to `0` to walk an entire search to completion, bounded by the 10,000-package safety cap.

### Pricing

**From $2.50 per 1,000 results** — undercuts comparable npm registry actors while returning a richer, fully consistent schema. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.30 | $0.28 | $0.27 | $0.25 |
| 1,000 | $3.00 | $2.80 | $2.65 | $2.50 |
| 10,000 | $30.00 | $28.00 | $26.50 | $25.00 |
| 100,000 | $300.00 | $280.00 | $265.00 | $250.00 |

One result is one package row in your dataset. No compute or time-based charges — you pay per result, plus a small fixed per-run start fee.

### 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 collects publicly available information from the npm registry. Use it responsibly and in compliance with npm's terms of service and all applicable laws. Maintainer names and emails are published openly by package authors as part of the registry; handle any personal data in line with applicable privacy regulations such as GDPR and CCPA, and only for legitimate purposes. You are responsible for how you use the data you collect. </content> </invoke>

# Actor input Schema

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

Free-text search across npm packages — matched against names, descriptions, and keywords. Example: 'react', 'csv parser', or 'date library'. Advanced users can use npm search qualifiers like 'keywords:cli', 'author:sindresorhus', or 'is:unstable'. Leave empty if you only want to look up exact packages by name below.

## `packageNames` (type: `array`):

Fetch specific packages directly instead of searching. Enter exact npm package names, including scoped packages like '@types/node' or '@angular/core'. When provided, the search query and search filters above are ignored.

## `keywords` (type: `array`):

Only include packages tagged with at least one of these npm keywords. Example: 'cli', 'typescript', 'testing'. Leave empty to ignore. Applies to search mode only.

## `licenses` (type: `array`):

Only include packages published under at least one of these licenses. Enter SPDX license identifiers like 'MIT', 'Apache-2.0', or 'ISC'. Leave empty to include any license. A rare license combined with a broad search may take a little longer, since few packages match — pair it with a specific search term to keep runs fast.

## `minDownloadsLastWeek` (type: `integer`):

Only include packages with at least this many downloads in the last week. Useful for filtering out abandoned or rarely used packages. Leave empty for no minimum. A very high minimum combined with a broad search may take a little longer, since few packages match — pair it with a specific search term to keep runs fast.

## `sortBy` (type: `string`):

How to order search results. 'Best match' keeps npm's own search relevance ranking (the default). 'Most downloaded' re-orders the results you fetch with the highest weekly download counts first.

## `includeVersions` (type: `boolean`):

Add the complete, time-ordered list of every published version (with release dates) to each package. This can make a single package's output much larger — popular packages have hundreds of versions.

## `includeMaintainers` (type: `boolean`):

Add the list of package maintainers (name and email) to each result.

## `includeDownloads` (type: `boolean`):

Add download counts (last day, last week, and last month) to each package.

## `includeDependencies` (type: `boolean`):

Add the latest version's dependency lists (runtime, dev, and peer dependencies) to each package.

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

The most packages to return for a search. Set to 0 to fetch every match — a safety cap of 10,000 is then applied so very broad searches don't run indefinitely. Ignored when fetching exact package names.

## Actor input object example

```json
{
  "searchQuery": "react",
  "packageNames": [],
  "keywords": [],
  "licenses": [],
  "sortBy": "relevance",
  "includeVersions": false,
  "includeMaintainers": true,
  "includeDownloads": true,
  "includeDependencies": false,
  "maxResults": 50
}
```

# Actor output Schema

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

Table of scraped packages 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 = {
    "searchQuery": "react",
    "packageNames": [],
    "keywords": [],
    "licenses": [],
    "sortBy": "relevance",
    "includeVersions": false,
    "includeMaintainers": true,
    "includeDownloads": true,
    "includeDependencies": false,
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/npm-registry-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 = {
    "searchQuery": "react",
    "packageNames": [],
    "keywords": [],
    "licenses": [],
    "sortBy": "relevance",
    "includeVersions": False,
    "includeMaintainers": True,
    "includeDownloads": True,
    "includeDependencies": False,
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/npm-registry-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 '{
  "searchQuery": "react",
  "packageNames": [],
  "keywords": [],
  "licenses": [],
  "sortBy": "relevance",
  "includeVersions": false,
  "includeMaintainers": true,
  "includeDownloads": true,
  "includeDependencies": false,
  "maxResults": 50
}' |
apify call solidcode/npm-registry-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "npm Registry Scraper",
        "description": "[💰 $2.5 / 1K] Search the public npm registry or look up exact packages, and extract package metadata, version history, maintainers, repository and homepage links, dependencies, and download statistics (day/week/month).",
        "version": "1.0",
        "x-build-id": "p8POaobsMf54J17v1"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~npm-registry-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-npm-registry-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~npm-registry-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-npm-registry-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~npm-registry-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-npm-registry-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": {
                    "searchQuery": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Free-text search across npm packages — matched against names, descriptions, and keywords. Example: 'react', 'csv parser', or 'date library'. Advanced users can use npm search qualifiers like 'keywords:cli', 'author:sindresorhus', or 'is:unstable'. Leave empty if you only want to look up exact packages by name below."
                    },
                    "packageNames": {
                        "title": "Exact package names",
                        "type": "array",
                        "description": "Fetch specific packages directly instead of searching. Enter exact npm package names, including scoped packages like '@types/node' or '@angular/core'. When provided, the search query and search filters above are ignored.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "keywords": {
                        "title": "Keyword tags",
                        "type": "array",
                        "description": "Only include packages tagged with at least one of these npm keywords. Example: 'cli', 'typescript', 'testing'. Leave empty to ignore. Applies to search mode only.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "licenses": {
                        "title": "Licenses",
                        "type": "array",
                        "description": "Only include packages published under at least one of these licenses. Enter SPDX license identifiers like 'MIT', 'Apache-2.0', or 'ISC'. Leave empty to include any license. A rare license combined with a broad search may take a little longer, since few packages match — pair it with a specific search term to keep runs fast.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "minDownloadsLastWeek": {
                        "title": "Minimum weekly downloads",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include packages with at least this many downloads in the last week. Useful for filtering out abandoned or rarely used packages. Leave empty for no minimum. A very high minimum combined with a broad search may take a little longer, since few packages match — pair it with a specific search term to keep runs fast."
                    },
                    "sortBy": {
                        "title": "Sort results by",
                        "enum": [
                            "relevance",
                            "downloads"
                        ],
                        "type": "string",
                        "description": "How to order search results. 'Best match' keeps npm's own search relevance ranking (the default). 'Most downloaded' re-orders the results you fetch with the highest weekly download counts first."
                    },
                    "includeVersions": {
                        "title": "Include full version history",
                        "type": "boolean",
                        "description": "Add the complete, time-ordered list of every published version (with release dates) to each package. This can make a single package's output much larger — popular packages have hundreds of versions.",
                        "default": false
                    },
                    "includeMaintainers": {
                        "title": "Include maintainers",
                        "type": "boolean",
                        "description": "Add the list of package maintainers (name and email) to each result.",
                        "default": true
                    },
                    "includeDownloads": {
                        "title": "Include download statistics",
                        "type": "boolean",
                        "description": "Add download counts (last day, last week, and last month) to each package.",
                        "default": true
                    },
                    "includeDependencies": {
                        "title": "Include dependencies",
                        "type": "boolean",
                        "description": "Add the latest version's dependency lists (runtime, dev, and peer dependencies) to each package.",
                        "default": false
                    },
                    "maxResults": {
                        "title": "Maximum packages",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "The most packages to return for a search. Set to 0 to fetch every match — a safety cap of 10,000 is then applied so very broad searches don't run indefinitely. Ignored when fetching exact package names.",
                        "default": 50
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
