NPM Package Scraper — Downloads, Maintainers, Deps & SBOM
Pricing
from $2.00 / 1,000 results
NPM Package Scraper — Downloads, Maintainers, Deps & SBOM
Export every NPM package by keyword, maintainer, scope or name. Get version, license, repo URL, maintainers, daily/weekly/monthly downloads, dependents, deprecation, full deps, version history. Official NPM registry + stats API. For devtool intel, SBOM and OSS outreach.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Logiover
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
NPM Package Scraper — Search, Downloads, Maintainers, Dependents, Versions & SBOM Data
Discover and export every NPM package matching a keyword, maintainer, scope or direct name. For each package: name, version, description, keywords, license, repository URL, homepage, npm URL, full maintainers list, weekly + monthly + yearly download counts, dependents count, deprecation status, runtime + dev + peer dependencies, file engines, exports map, and full version history with publish dates.
Built on the official open NPM Registry API + npmjs downloads stats API — no token, no proxy, no scraping.
Perfect for developer-tool competitive intelligence, dependency security & SBOM workflows, open-source maintainer outreach, sponsorship targeting, package marketplace seeding, and any 2026 JavaScript / Node.js ecosystem analytics.
🚀 What does this NPM scraper do?
Two complementary input modes — combine them or use one alone:
| Mode | When to use |
|---|---|
| Search Terms | Discover packages matching a keyword, scope, maintainer or keyword tag — paginated up to thousands of results per query |
| Package Names | You already know which packages — pass exact names (including scoped @org/pkg) |
For each package, the actor combines three sources in one record:
- Search snippet — search score, dependents count, basic downloads
- Registry full doc (
registry.npmjs.org/{pkg}) — full metadata, all versions, dist info, dependencies, maintainers - Downloads stats (
api.npmjs.org/downloads/*) — last-day / week / month / year point counts + optional daily history series
💡 Use cases
- Devtool competitive intel — find every JS package mentioning
react+chartand rank by weekly downloads - OSS sponsorship outreach — pull every popular package's maintainers + GitHub repository URL → CRM
- Dependency security / SBOM — feed package metadata + dependency tree into a vulnerability monitor
- Package marketplace seeding — discover every Apache-2.0 / MIT package in a niche above 10k downloads
- Maintainer talent intel — find every maintainer of
@apify/*packages for recruiting / partnership - Trend monitoring — track weekly download deltas with
fetchDownloadsHistoryto surface fast-growing packages - Migration analysis — pull every package using a deprecated dep and prioritize outreach
- AI training data — every package's README + description is high-quality NL data about JS APIs
- OSS health dashboards — combine deprecation status + last-publish-date + maintainer count → "is this package alive?"
⚙️ Input configuration
| Field | Type | Default | Description |
|---|---|---|---|
searchTerms | string[] | [] | NPM registry search queries (paginated 250/page). |
packageNames | string[] | [] | Direct package names (incl. @scope/name). |
maintainer | string | "" | Search-only filter: maintainer:<username>. |
scope | string | "" | Search-only filter: scope:<scope> (without @). |
keywords | string[] | [] | Search-only filter: keywords:<tag> for each entry. |
maxResultsPerSearch | integer | 100 | Hard cap per search term. |
fetchPackageDetails | boolean | true | Pull full registry doc per package — adds maintainers, dist-tags, repository, license, version history, dependencies, deprecation, file engines, exports. |
fetchDownloadsStats | boolean | true | Add last-day / week / month / year download counts via the npmjs stats API. |
fetchDownloadsHistory | boolean | false | Pull per-day downloads time series — adds downloadsHistory: [{day,downloads},…]. |
downloadsHistoryRange | string | "last-month" | Range for history (last-week / last-month / last-year or YYYY-MM-DD:YYYY-MM-DD). |
fetchReadme | boolean | false | Include the package's raw README markdown in each record (requires fetchPackageDetails). |
minMonthlyDownloads | integer | 0 | Client-side floor — drop packages below this monthly download count. |
includeDeprecated | boolean | true | Set to false to skip packages marked deprecated by maintainers. |
minVersionPublishDate | string | null | Drop packages whose latest version was published before this date (YYYY-MM-DD). |
📦 Output fields
| Field | Description | Example |
|---|---|---|
name | Package name | "apify" |
scope | @scope (if scoped) | "@apify" |
version | Latest published version | "3.7.2" |
description | Short description | "The scalable web crawling..." |
keywords | Author-supplied keywords | ["headless","chrome","puppeteer"] |
license | SPDX license ID | "Apache-2.0" |
homepage | Project homepage | "https://docs.apify.com/sdk/js" |
repositoryUrl | Source repository URL | "https://github.com/apify/apify-sdk-js" |
repositoryType | git, svn, etc. | "git" |
bugsUrl | Bug tracker URL | "https://github.com/.../issues" |
npmUrl | NPM page URL | "https://www.npmjs.com/package/apify" |
publishedAt | Latest version publish date | "2026-05-18T..." |
createdAt | Original creation date | "2017-11-...": |
lastModified | Last modification | "2026-05-18T..." |
maintainers | List of maintainer usernames | ["mtrunkat","jancurn"] |
maintainersCount | Count | 11 |
publisherUsername | Last publisher | "GitHub Actions" |
author | Author display | "Apify Technologies s.r.o." |
distTags | All dist-tags | {"latest":"3.7.2","beta":"3.8.0-beta.1"} |
versionCount | Total published versions | 1082 |
versionHistory | All versions + publish dates | [{version,publishedAt}, …] |
engines | Node/npm engine constraints | {"node":">=18"} |
exports | Package exports map | {...} |
main | Main entry point | "build/index.js" |
type | "module" / "commonjs" | "module" |
dependencies | Runtime deps | {...} |
devDependencies | Dev deps | {...} |
peerDependencies | Peer deps | {...} |
optionalDependencies | Optional deps | {...} |
dependencyCount | Runtime dep count | 12 |
deprecated | Deprecation message | null |
isDeprecated | Bool | false |
tarballUrl | Direct tarball | "https://registry.npmjs.org/.../apify-3.7.2.tgz" |
unpackedSize | Unpacked size in bytes | 1234567 |
fileCount | File count in tarball | 42 |
shasum | Tarball SHA-1 | "abc..." |
integrity | SRI integrity hash | "sha512-..." |
dailyDownloads | Last-day downloads | 1247 |
weeklyDownloads | Last-week downloads | 44630 |
monthlyDownloads | Last-month downloads | 153258 |
yearlyDownloads | Last-year downloads | 1900000 |
downloadsHistory | Per-day series (optional) | [{day:"2026-05-01",downloads:5200}, …] |
dependentsCount | Packages depending on this | 77 |
searchScore | NPM search relevance score | 1422.05 |
readme | Full README markdown (optional) | "# Apify SDK\n…" |
scrapedAt | UTC scrape timestamp | "2026-05-18T07:30:00Z" |
🧪 Example inputs
1. Top scraping packages with full stats
{"searchTerms": ["scraper", "crawler", "puppeteer"],"maxResultsPerSearch": 50,"fetchPackageDetails": true,"fetchDownloadsStats": true,"minMonthlyDownloads": 1000}
2. All packages in the @apify scope
{"searchTerms": ["scope:apify"],"scope": "apify","maxResultsPerSearch": 500}
3. Direct package list with downloads history
{"packageNames": ["react", "vue", "svelte", "solid-js", "preact", "lit"],"fetchPackageDetails": true,"fetchDownloadsStats": true,"fetchDownloadsHistory": true,"downloadsHistoryRange": "last-year"}
4. Fresh packages only (published in 2026)
{"searchTerms": ["typescript starter"],"maxResultsPerSearch": 200,"fetchPackageDetails": true,"minVersionPublishDate": "2026-01-01"}
5. Healthy + non-deprecated React UI libraries
{"searchTerms": ["react component library"],"keywords": ["react", "ui"],"maxResultsPerSearch": 200,"includeDeprecated": false,"minMonthlyDownloads": 10000}
6. SBOM-style: full dependency map for a list of packages
{"packageNames": ["next", "@types/react", "tailwindcss", "drizzle-orm"],"fetchPackageDetails": true,"fetchDownloadsStats": false,"fetchReadme": true}
7. OSS sponsorship outreach: maintainers of top scraping libs
{"searchTerms": ["scraper", "crawler"],"maxResultsPerSearch": 1000,"fetchPackageDetails": true,"fetchDownloadsStats": true,"minMonthlyDownloads": 5000,"includeDeprecated": false}
🧠 How it works
- Search →
GET https://registry.npmjs.org/-/v1/search?text=<query>&size=250&from=Npaginates 250 packages per page. - Per-package full doc →
GET https://registry.npmjs.org/<name>returns every published version + repository + maintainers + license + time map. - Downloads point stats →
GET https://api.npmjs.org/downloads/point/<range>/<name>for each oflast-day,last-week,last-month,last-year. - Downloads time series →
GET https://api.npmjs.org/downloads/range/<range>/<name>returns one entry per day. - Dedup — names are tracked across search terms and direct lists to avoid double-processing.
No authentication. NPM's registry + stats APIs are public by design.
🛑 Limits & notes
- NPM stats API rate limit: ~5 req/sec per IP under normal conditions. The actor uses sequential per-package enrichment with backoff retries.
dependentsCountin the search snippet is approximate; for exact dependents enumeration use thehttps://www.npmjs.com/browse/depended/{pkg}page (not yet supported — open a feature request).readmecan be large (some packages ship 50+ KB markdown). Disable for large runs unless needed.- Scoped private packages are not returned. Public scopes (
@types/*,@apify/*, etc.) are fully accessible. - Search relevance score is NPM's internal ranking — useful for ordering but not directly comparable across queries.
💰 Pricing
Monetized via pay-per-event on Apify — pay per package record saved. NPM registry + stats APIs are free.
❓ FAQ
Does this work for private NPM registries (GitHub Packages, JFrog)?
Not by default. The actor targets the public registry.npmjs.org. Open an issue to add an auth_token + custom registry URL feature.
Can I get exact lists of packages that depend on package X? Not yet — NPM no longer exposes a stable "dependents" API. The search snippet returns an approximate count. For full reverse-dependency enumeration consider GitHub code search.
Can I export to CSV / Excel? Yes — every Apify dataset can be exported in CSV, Excel, XML, JSONL, or RSS from the run page or via the API.
How is this different from npm-registry-fetch or pacote?
Those are Node libraries to call the same endpoints 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, dataset views.
Does it cover PyPI / RubyGems / Cargo / Maven? No — JavaScript NPM only. Each ecosystem can be added as a sibling actor.
Does it download tarballs?
No — only metadata. tarballUrl is provided for downstream fetching if needed.
🔗 Related actors
logiover/github-repository-scraper— combine NPMrepositoryUrlwith GitHub for stars + contributorslogiover/website-contact-scraper— enrichhomepageURLs with maintainer contact emails for outreachlogiover/sitemap-to-url-crawler— crawl each package's docs site for additional contentlogiover/devto-articles-scraper— track how often each package is discussed on Dev.to
🆘 Support
Need PyPI, RubyGems, Cargo or Maven equivalent? Open an issue on the actor's Apify page.
Changelog
- 2026-05-20 — Maintenance pass: reviewed the input schema and default values for a smooth one-click start, and rebuilt the Actor on the latest base image.
Last reviewed: 2026-05-20.