# NPM Package Scraper – Download Stats, Deps, Versions (`logiover/npm-package-intelligence-scraper`) Actor

Scrape NPM package download stats, dependencies and versions. NPM API alternative and registry data export to CSV/JSON. No token, no login.

- **URL**: https://apify.com/logiover/npm-package-intelligence-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Package Scraper — Download Stats, Dependencies & Versions (No Token)

![NPM Package Intelligence Scraper — Registry & Download Stats Extractor](https://img.shields.io/badge/npm-Package%20Scraper-CB3837?logo=npm\&logoColor=white)

![Apify Actor](https://img.shields.io/badge/Apify-Actor-00A67E?logo=apify\&logoColor=white) ![No API key](https://img.shields.io/badge/No%20API%20key-required-2ea44f) ![No token](https://img.shields.io/badge/No%20token%20or%20login-required-2ea44f) ![Pay per result](https://img.shields.io/badge/Pricing-Pay%20per%20result-1C7ED6) ![Developer tools](https://img.shields.io/badge/Category-Developer%20Data-8B5CF6) ![Export](https://img.shields.io/badge/Export-JSON%20%7C%20CSV%20%7C%20Excel-F59E0B)

Discover and export **NPM packages** by keyword, name, maintainer or scope, and enrich each one with full registry metadata and **download stats** — straight from the official public NPM Registry API and the npmjs downloads API. For every package you get **version, license, repository URL, maintainers, daily / weekly / monthly / yearly downloads, dependents count, full dependency tree, deprecation status and complete version history** in clean structured JSON. **No token, no proxy, no scraping tricks, no login.**

> ### 🏆 Why this NPM Package Scraper?
>
> **40+ fields per package** · **thousands of packages per run** · official registry + downloads API (no reverse-engineering) · pagination guardrails (250/page) · optional per-day download history · export to JSON / CSV / Excel. The unofficial **NPM registry API alternative** for devtool competitive intelligence, SBOM / dependency security, package-health dashboards and OSS maintainer outreach.

***

### ✨ What this Actor does / Key features

- 🔎 **Flexible discovery** — find packages by free-text search terms, or fetch an exact list of package names including scoped `@org/pkg`.
- 🎯 **Search-only filters** — narrow noisy queries by `maintainer`, `scope` and `keywords` before enrichment.
- 📦 **Full registry metadata** — name, scope, description, keywords, license (SPDX), homepage, repository, maintainers, dist-tags, engines and exports map.
- 📊 **Download stats** — last-day, weekly, monthly and yearly download counts pulled from the official npmjs downloads API.
- 📈 **Per-day history** — optional downloads time series for trend analytics over any preset or custom date range.
- 🕰️ **Complete version history** — every published version with its publish date, plus `versionCount` and `distTags`.
- 🌳 **Dependency intelligence** — `dependencies`, `devDependencies`, `peerDependencies`, `optionalDependencies`, `dependencyCount` and an approximate `dependentsCount`.
- 🧹 **Client-side filters** — drop packages below a monthly-downloads floor, skip deprecated packages, or keep only recently published ("fresh") packages.
- 🔓 **Zero-auth engine** — reads only the public registry and stats endpoints; no token, no proxy, no login — fast and resilient.

### 🚀 Quick start (3 steps)

1. **Configure** — add one or more **Search Terms** (e.g. `scraper`, `react component library`) and/or exact **Package Names** (including scoped `@org/pkg`). Keep **Fetch Details** and **Fetch Downloads Stats** on for the richest records.
2. **Run** — click **Start**. The Actor paginates search results, enriches each package concurrently, and streams rows into your dataset.
3. **Get your data** — open the **Output** tab and export to **JSON, CSV, Excel, JSONL or XML**, or pull it via the Apify API.

### 📥 Input

Give the Actor at least one `searchTerms` value **or** one `packageNames` value. Everything else is optional.

#### Example — top scraping packages with full stats

```json
{
  "searchTerms": ["scraper", "crawler", "puppeteer"],
  "maxResultsPerSearch": 50,
  "fetchPackageDetails": true,
  "fetchDownloadsStats": true,
  "minMonthlyDownloads": 1000
}
```

#### Example — direct package list with daily download history

```json
{
  "packageNames": ["react", "vue", "svelte", "solid-js", "preact", "lit"],
  "fetchDownloadsStats": true,
  "fetchDownloadsHistory": true,
  "downloadsHistoryRange": "last-year"
}
```

#### Example — every fresh MIT package in a scope (OSS outreach)

```json
{
  "searchTerms": ["typescript"],
  "scope": "apify",
  "maxResultsPerSearch": 250,
  "fetchPackageDetails": true,
  "includeDeprecated": false,
  "minVersionPublishDate": "2026-01-01"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `searchTerms` | array | NPM registry search queries; each term auto-paginates 250/page. Leave empty if you supply package names. |
| `packageNames` | array | Direct package names to fetch, including scoped `@org/name`. Faster and more predictable than search. |
| `maintainer` | string | Search-only filter — restrict results to a maintainer/author username. |
| `scope` | string | Search-only filter — restrict to a scope (org), without the leading `@`. |
| `keywords` | array | Search-only `keywords:<tag>` filters to narrow noisy queries. |
| `maxResultsPerSearch` | integer | Hard cap per search term (1–10000). Default `25`. |
| `fetchPackageDetails` | boolean | Pull the full registry doc: maintainers, versions, deps, license, repository. Default `true`. |
| `fetchDownloadsStats` | boolean | Add last-day / week / month / year download counts. Default `true`. |
| `fetchDownloadsHistory` | boolean | Add a per-day downloads time series. Default `false`. |
| `downloadsHistoryRange` | string | Range for history — preset (`last-week`/`last-month`/`last-year`) or `YYYY-MM-DD:YYYY-MM-DD`. Default `last-month`. |
| `fetchReadme` | boolean | Include the raw README markdown per package (requires `fetchPackageDetails`). Default `false`. |
| `minMonthlyDownloads` | integer | Drop packages below this monthly-downloads floor (requires stats). Default `0`. |
| `includeDeprecated` | boolean | Set `false` to skip deprecated packages. Default `true`. |
| `minVersionPublishDate` | string | Keep only packages whose latest version was published on/after this ISO date. |

> **Search vs. direct names:** use `searchTerms` for discovery ("show me every package about X") and `packageNames` when you already know exactly which packages you want. You can combine both in one run — names are deduplicated across all search terms and direct lists.

### 📤 Output

One row per package — **40+ fields**, exportable to JSON, CSV, Excel or XML. Here is a trimmed sample record:

```json
{
  "name": "puppeteer",
  "scope": null,
  "version": "22.15.0",
  "description": "A high-level API to control headless Chrome over the DevTools Protocol",
  "keywords": ["puppeteer", "chrome", "headless", "automation"],
  "license": "Apache-2.0",
  "homepage": "https://pptr.dev",
  "repositoryUrl": "https://github.com/puppeteer/puppeteer",
  "npmUrl": "https://www.npmjs.com/package/puppeteer",
  "publishedAt": "2026-06-28T10:12:04.000Z",
  "maintainers": ["google-wombot", "jrandolf"],
  "maintainersCount": 2,
  "distTags": { "latest": "22.15.0" },
  "versionCount": 312,
  "dependencies": { "@puppeteer/browsers": "2.3.0", "devtools-protocol": "0.0.1312386" },
  "dependencyCount": 3,
  "deprecated": null,
  "isDeprecated": false,
  "dailyDownloads": 412339,
  "weeklyDownloads": 2871004,
  "monthlyDownloads": 12483110,
  "yearlyDownloads": 138902441,
  "dependentsCount": 9421,
  "searchScore": 0.98,
  "scrapedAt": "2026-07-06T12:00:00.000Z"
}
```

<details>
<summary><b>📋 Full field reference (click to expand)</b></summary>

| Field | Description |
|-------|-------------|
| `name` / `scope` / `version` | Package name, scope (org) and latest version |
| `description` / `keywords` | Package description and keyword tags |
| `license` | SPDX license ID |
| `homepage` / `repositoryUrl` / `repositoryType` / `bugsUrl` / `npmUrl` | Project links |
| `publishedAt` / `createdAt` / `lastModified` | Latest publish, first publish and last-modified timestamps |
| `maintainers` / `maintainersCount` / `publisherUsername` / `author` | Ownership and publisher data |
| `distTags` / `versionCount` / `versionHistory` | Dist-tags, total versions, all versions + publish dates |
| `engines` / `exports` / `main` / `type` | Runtime engines, exports map, entry point, module type |
| `dependencies` / `devDependencies` / `peerDependencies` / `optionalDependencies` / `dependencyCount` | Full dependency breakdown |
| `deprecated` / `isDeprecated` | Deprecation message and flag |
| `tarballUrl` / `unpackedSize` / `fileCount` / `shasum` / `integrity` | Tarball metadata (metadata only — tarballs are not downloaded) |
| `dailyDownloads` / `weeklyDownloads` / `monthlyDownloads` / `yearlyDownloads` | Point download stats |
| `downloadsHistory` | Optional per-day downloads time series |
| `dependentsCount` / `searchScore` | Approximate reverse-dependency count and NPM search relevance score |
| `readme` | Optional raw README markdown (when `fetchReadme` is on) |
| `scrapedAt` | Scrape timestamp (ISO 8601) |

</details>

### 💡 Use cases

- **Devtool competitive intelligence** — find every package matching a keyword and rank by weekly downloads.
- **Dependency security & SBOM** — feed package metadata and dependency trees into a vulnerability or SBOM workflow.
- **OSS maintainer outreach** — pull popular packages' maintainers and repository URLs for sponsorship or partnership.
- **Trend monitoring** — track download deltas with the history series to surface fast-growing packages.
- **Package-health dashboards** — combine deprecation status, last-publish date and maintainer count to answer "is this package alive?".
- **Marketplace / registry seeding** — discover every MIT / Apache-2.0 package in a niche above a download floor.
- **Maintainer talent intel** — find every maintainer of a given scope for recruiting or partnerships.

### 👥 Who uses it

Developer-tooling & DevRel teams · application security & SBOM engineers · OSS program offices and sponsors · VC and market analysts tracking dev ecosystems · data teams building package-health dashboards · founders seeding package marketplaces.

### 💰 Pricing

This Actor runs on a simple **pay-per-result** model — you pay for the packages you extract, with no separate Apify platform fees to calculate. Try it on the **free tier** first, then scale up. See the **Pricing** tab on this page for the current rate.

### ❓ Frequently Asked Questions

**Does this NPM scraper need a token or login?**
No. It reads only the public `registry.npmjs.org` and `api.npmjs.org` endpoints, so there is no npm token, proxy or login required — only an Apify account.

**Is scraping NPM registry data legal?**
The NPM registry and downloads APIs are public and meant to be queried. This Actor collects only that publicly available package metadata. You are responsible for using the output in line with npm's terms and applicable laws.

**Do I need an API key or a proxy?**
No. The registry and stats APIs are open and unauthenticated, so no API key and no proxy are needed.

**How many packages can I scrape per run?**
Thousands. Search terms auto-paginate 250 per page up to `maxResultsPerSearch`, and packages are enriched concurrently, so a broad keyword pull or a large direct list finishes cleanly.

**Can I get the exact list of packages that depend on package X?**
Not directly — NPM no longer exposes a stable dependents API, so the search snippet returns an approximate `dependentsCount`. For full reverse-dependency enumeration, use GitHub code search.

**Does it cover private registries or PyPI / RubyGems / Cargo?**
No. It targets the public `registry.npmjs.org` for JavaScript / Node.js packages only. Each other ecosystem would be a separate actor.

**How is this different from `npm-registry-fetch` or `pacote`?**
Those are Node libraries you call from your own code. This Actor adds cross-source merging, pagination guardrails, normalized output, optional download history, deprecation / staleness filtering and Apify-native scheduling, webhooks and dataset views.

**Does it download tarballs?**
No — only metadata. `tarballUrl` is provided so you can fetch tarballs downstream if needed.

#### Is this an NPM API alternative for download stats?

Yes. It wraps the official NPM registry and npmjs downloads APIs into a no-code, paginated workflow, so you get a structured NPM download stats dataset without writing your own API client.

#### How do I export NPM package data to CSV or JSON?

Run a search or package list, then export the dataset to CSV, JSON, JSONL or Excel from the run page or the Apify API — a ready-made npm registry data export with downloads and dependency fields.

#### Can I scrape npm package versions and dependencies without login?

Yes. No token, no proxy and no login are required. The Actor reads the public registry, so you can extract version history, dependencies and devDependencies for any public package.

#### How do I find the most-downloaded npm packages for a keyword?

Add the keyword to `searchTerms` and set a `minMonthlyDownloads` floor; the scraper returns matching packages enriched with weekly and monthly download counts to rank by popularity.

### 🔗 More research & intelligence scrapers by logiover

Building a full developer- or market-intelligence dataset? Pair the NPM Package Scraper with the rest of the research & intel suite:

| Focus | Actor |
|---|---|
| 🐙 GitHub | [GitHub Repository Scraper](https://apify.com/logiover/github-repository-scraper) · [GitHub Activity Stream](https://apify.com/logiover/github-activity-stream) |
| 🛡️ Security | [CVE Security Advisory Monitor](https://apify.com/logiover/cve-security-advisory-monitor) |
| 🤗 AI models | [Hugging Face Hub Intelligence Scraper](https://apify.com/logiover/huggingface-hub-intelligence-scraper) |
| 📄 Research | [arXiv Paper Scraper](https://apify.com/logiover/arxiv-paper-scraper) · [Semantic Scholar Research Scraper](https://apify.com/logiover/semantic-scholar-research-scraper) |
| 📚 Docs | [Docs Knowledge Base Scraper](https://apify.com/logiover/docs-knowledge-base-scraper) |
| 📰 News | [Google News Scraper](https://apify.com/logiover/google-news-scraper) · [News Intelligence Scraper](https://apify.com/logiover/news-intelligence-scraper) |
| 🏢 Company | [Company Deep Research Scraper](https://apify.com/logiover/company-deep-research-scraper) |
| 🔬 Deep research | [AI Deep Research](https://apify.com/logiover/ai-deep-research) · [AI Web Extract](https://apify.com/logiover/ai-web-extract) |

👉 Browse all **[logiover scrapers on Apify Store](https://apify.com/logiover)** — 180+ actors across real estate, jobs, crypto, social media & B2B data.

### ⏰ Scheduling & integration

Schedule this Actor on Apify to track npm download trends and package health daily or weekly. Export results to JSON, CSV or Excel, sync to Google Sheets, or push to your database, BI tools and webhooks through the Apify API. Connect it to **Make, n8n or Zapier** to build automated dependency-monitoring and devtool-intelligence pipelines.

### ⭐ Support & feedback

Found a bug or need an extra field? Open an issue on the **Issues** tab — response is usually fast. If this Actor saves you time, a **★★★★★ review** on the Store page genuinely helps and is hugely appreciated. 🙏

### ⚖️ Legal

This Actor extracts only publicly available package metadata from the open NPM Registry and npmjs downloads APIs, and is intended for legitimate research, analytics and developer-tooling use. You are responsible for complying with npm's terms of service and any applicable local laws. Uses the public NPM Registry and npmjs downloads APIs — not affiliated with npm, Inc.

***

### 📝 Changelog

#### 2026-07-06

- ✨ README overhaul: richer output sample, ready-to-run example scenarios, full field reference, research & intel suite cross-links, and clearer quick-start.

#### 2026-07-01

- Maintenance pass: re-verified end-to-end on live data and confirmed successful runs within the 5-minute quality window on the default input.
- Sharpened Store metadata (SEO title & description) and expanded the FAQ with high-intent, long-tail questions for easier discovery in Google and Apify Store search.
- Added ready-to-run example tasks that cover common real-world use cases.

#### 2026-06-15

- Reliability pass: re-verified end-to-end on live data with real-world inputs. Routine maintenance build.

#### 2026-06-07

- Docs: added coverage for NPM API alternative use, exporting npm package data to CSV/JSON, and scraping versions and dependencies without login.

# Actor input Schema

## `searchTerms` (type: `array`):

Free-text search queries against the NPM registry (`https://registry.npmjs.org/-/v1/search`). Each term paginates 250 results per page. Examples: \['scraper', 'crawler'], \['react component library'], \['stripe webhook']. Leave empty if you supply package names directly.

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

Direct NPM package names to fetch. Includes scoped packages: `@apify/scraper-tools`, `react`, `next`, `@types/node`. Faster and more predictable than search.

## `maintainer` (type: `string`):

Restrict search results to packages maintained by a specific username. The NPM search syntax appends `author:<name>` or `maintainer:<name>` to the query.

## `scope` (type: `string`):

Restrict search to a specific scope (org). Pass without the leading `@`. Examples: 'apify', 'sentry', 'storybook'.

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

Add `keywords:<tag>` filters to each search query. Useful to narrow noisy queries. Examples: \['typescript'], \['react', 'hooks'].

## `maxResultsPerSearch` (type: `integer`):

Hard cap per search term. NPM search returns up to 250 per page; the actor auto-paginates. Raise it for bigger pulls — packages are enriched concurrently.

## `fetchPackageDetails` (type: `boolean`):

When enabled, the actor calls `https://registry.npmjs.org/{pkg}` for each package to retrieve full metadata: maintainers list, dist-tags, repository URL, homepage, license, engines, exports map, deprecation status, README content, and per-version publish times.

## `fetchDownloadsStats` (type: `boolean`):

When enabled, the actor calls `https://api.npmjs.org/downloads/point/{period}/{pkg}` for each package and adds last-day, last-week, last-month and last-year download counts.

## `fetchDownloadsHistory` (type: `boolean`):

When enabled (and `downloadsHistoryRange` is set), fetches the daily downloads time series from `https://api.npmjs.org/downloads/range/{range}/{pkg}`. Adds one record array per package with date + downloads pairs. Useful for trend analytics.

## `downloadsHistoryRange` (type: `string`):

Range for `fetchDownloadsHistory`. Either preset (`last-week`, `last-month`, `last-year`) or explicit (`2026-01-01:2026-05-18`).

## `fetchReadme` (type: `boolean`):

When enabled (requires `fetchPackageDetails`), the package's full README markdown content is included in the output record.

## `minMonthlyDownloads` (type: `integer`):

Drop packages with fewer monthly downloads than this. Useful to filter out abandoned / experimental packages. Requires `fetchDownloadsStats`.

## `includeDeprecated` (type: `boolean`):

When `false`, skips packages marked as deprecated by their maintainer.

## `minVersionPublishDate` (type: `string`):

Only keep packages whose latest version was published on or after this date. Useful for surfacing 'fresh' packages. Requires `fetchPackageDetails`.

## `proxyConfiguration` (type: `object`):

Proxy for the public npm registry & stats API requests. Defaults to Apify Proxy (automatic pool). The Actor also falls back to a direct connection on the final retry, so it works without proxy too.

## Actor input object example

```json
{
  "searchTerms": [
    "scraper"
  ],
  "packageNames": [],
  "maintainer": "",
  "scope": "",
  "keywords": [],
  "maxResultsPerSearch": 25,
  "fetchPackageDetails": true,
  "fetchDownloadsStats": true,
  "fetchDownloadsHistory": false,
  "downloadsHistoryRange": "last-month",
  "fetchReadme": false,
  "minMonthlyDownloads": 0,
  "includeDeprecated": true,
  "minVersionPublishDate": null,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All packages extracted by this run. Open the Dataset tab to browse, filter, and export as CSV, JSON, or Excel.

# 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 = {
    "searchTerms": [
        "scraper"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/npm-package-intelligence-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 = {
    "searchTerms": ["scraper"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/npm-package-intelligence-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 '{
  "searchTerms": [
    "scraper"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call logiover/npm-package-intelligence-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/J4rbKQNKXpzC2nupJ/builds/0l7jLABrmxa1ULdSE/openapi.json
