npm Packages Search Scraper avatar

npm Packages Search Scraper

Pricing

from $0.07 / 1,000 package results

Go to Apify Store
npm Packages Search Scraper

npm Packages Search Scraper

Search npm packages and export registry metadata, popularity scores, maintainers, repository links, and download counts.

Pricing

from $0.07 / 1,000 package results

Rating

0.0

(0)

Developer

Hanna Nosova

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Search npm packages and export public registry metadata, popularity scores, maintainer usernames, repository links, and download-count snapshots. The Actor uses npm's public registry and downloads APIs, so it is fast, browserless, and suitable for scheduled monitoring.

Use it for software supply-chain research, developer ecosystem analysis, DevRel/content planning, dependency shortlist exports, and package popularity reports.

At a glance

  • Primary job: Turn npm search terms or known package names into structured package rows.
  • Input: A keyword query, direct package names, result limit, and optional download-count enrichment.
  • Output: One dataset row per npm package with metadata, links, scores, maintainers, downloads, and status.
  • Best for: Package discovery, dependency monitoring, supply-chain shortlist exports, and recurring data snapshots.

Common workflows

  • Find packages by topic: Search keywords such as react, eslint plugin, or date formatting and export ranked packages.
  • Monitor known dependencies: Fetch packages such as react, vite, and typescript on a schedule and compare download-count snapshots.
  • Build supply-chain shortlists: Export repository links, maintainer usernames, scores, and popularity metrics before manual review.
  • Automate reporting: Send Apify dataset exports to CSV, JSON, Excel, webhooks, API clients, or MCP-compatible AI agents.

Input recipes

  • Small smoke test: query: "react", maxItems: 10, includeDownloads: true.
  • Known-package monitoring: packageNames: ["react", "vite", "typescript"], includeDownloads: true.
  • Supply-chain shortlist: query: "eslint plugin", maxItems: 100, includeMaintainers: true, dedupe: true.

What data can you extract?

FieldDescription
packageNamenpm package name, including scope when present.
scopeScope such as @types, or null for unscoped packages.
versionLatest package version from npm.
description, keywords, licensePublic package metadata when available.
publisherUsername, maintainerUsernamesPublic npm usernames exposed by registry/search responses.
weeklyDownloads, monthlyDownloads, downloadsLastMonthDownload metrics from npm search/download APIs.
dependentsDependent count when returned by npm search.
scoreFinal, scorePopularity, scoreQuality, scoreMaintenance, searchScorenpm search ranking and score signals.
homepageUrl, repositoryUrl, bugsUrl, npmUrlUseful package links for review and enrichment.
updatedAt, fetchedAtSource update time when available and Actor fetch time.
status, source, errorMessageRow status and whether it came from search or direct package mode.

Input configuration

SettingJSON keyUse it forExample
Search queryqueryDiscover packages by keyword.react
Package namespackageNamesFetch known packages directly.["react", "@types/node"]
Maximum package rowsmaxItemsCap saved rows and control spend.50
Include download countsincludeDownloadsEnrich each package with npm downloads API counts.true
Download perioddownloadPeriodChoose last-day, last-week, or last-month.last-month
Include maintainersincludeMaintainersInclude public maintainer usernames.true
Deduplicate package namesdedupeAvoid duplicates across direct and search inputs.true

Example input

{
"query": "react",
"maxItems": 10,
"includeDownloads": true,
"downloadPeriod": "last-month",
"includeMaintainers": true,
"dedupe": true
}

Example output

{
"packageName": "react",
"scope": null,
"version": "19.1.0",
"description": "React is a JavaScript library for building user interfaces.",
"keywords": ["react"],
"license": null,
"publisherUsername": "fb",
"maintainerUsernames": ["fb", "react-bot"],
"weeklyDownloads": 143867154,
"monthlyDownloads": 617430030,
"downloadsLastMonth": 617430030,
"dependents": 213476,
"scoreFinal": 0.95,
"repositoryUrl": "https://github.com/facebook/react",
"npmUrl": "https://www.npmjs.com/package/react",
"status": "ok",
"source": "search"
}

Pricing

TierPackage result price
Free$0.00014087 per successful package row
Bronze$0.0001225 per successful package row
Silver$0.000095547 per successful package row
Gold$0.000073498 per successful package row
Platinum$0.000048998 per successful package row
Diamond$0.000034299 per successful package row

A run start event is $0.005 per run. Package result pricing is charged for successful npm package metadata rows saved to the dataset.

Tips for best results

  • Start small: Use maxItems: 10 until you confirm the fields match your workflow.
  • Use focused keywords: Specific terms such as eslint plugin produce more useful shortlists than broad words like plugin.
  • Mix modes carefully: Direct packageNames are processed first, then search fills the remaining maxItems.
  • Expect nullable fields: Some npm responses omit license, links, dependents, or score fields.

API usage

Node.js:

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("fetch_cat/npm-packages-search-scraper").call({
query: "react",
maxItems: 10,
includeDownloads: true
});
console.log(run.defaultDatasetId);

Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("fetch_cat/npm-packages-search-scraper").call(run_input={
"query": "react",
"maxItems": 10,
"includeDownloads": True,
})
print(run["defaultDatasetId"])

cURL:

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~npm-packages-search-scraper/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query":"react","maxItems":10,"includeDownloads":true}'

MCP and AI agents

Use this Actor from MCP-compatible tools through the official Apify MCP Server.

$claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/npm-packages-search-scraper"
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=fetch_cat/npm-packages-search-scraper"
}
}
}

Example prompt: "Run npm Packages Search Scraper for eslint plugin with 25 results and summarize high-popularity packages with repository links."

Limits and caveats

  • Public npm only: The Actor does not access private packages, account data, or tokens.
  • No tarball analysis: It does not download package tarballs or inspect source files.
  • Freshness: npm registry and download-count data can change after a run finishes.
  • Rate limits: Public APIs may throttle large or frequent runs; retry logic is bounded.

Legality and responsible use

Process only data that you are allowed to access. Follow npm's terms, Apify's terms, and applicable laws.

FAQ

Can I export results?

Yes. Apify datasets support JSON, CSV, Excel, XML, RSS, and API access.

Why are some fields empty?

Some packages do not expose every field publicly. The Actor leaves unavailable fields empty instead of guessing.

Does it support scoped packages?

Yes. Direct package inputs can include scoped names such as @types/node.

Support

Open an issue from the Actor page if a run fails or output looks wrong. Include the run ID or run URL, input JSON, expected output, actual output, and a reproducible public URL such as https://www.npmjs.com/package/react or the exact npm query.