npm & PyPI Package Stats Scraper
Pricing
from $1.00 / 1,000 result (one package)s
npm & PyPI Package Stats Scraper
Get npm and PyPI package stats: latest version, license, weekly and monthly downloads, maintainers, last publish, repo. CSV or Sheets.
Pricing
from $1.00 / 1,000 result (one package)s
Rating
0.0
(0)
Developer
Mokksh Bhatt
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
npm & PyPI Package Stats Scraper — downloads, versions, license, maintainers and last publish for any package
Get the public facts of any npm or PyPI package in one row: latest version, license, weekly and monthly downloads, number of maintainers, number of versions, when it was created and last published, dependencies, the repository link, and whether it is deprecated. Give it package names or package links. Export to CSV, JSON, Excel or Google Sheets. It uses the registries' own open APIs, so the numbers are official and the actor is stable.
Who uses this: developers and engineering leads choosing libraries, security and open source teams auditing dependencies, developer-tools companies tracking adoption, investors and analysts measuring open source projects, developer relations teams comparing themselves with competitors, AI agents that need current package facts.
What you get per package
| Field | What it is |
|---|---|
ecosystem, name, url | npm or pypi, the package name, and its page |
description, keywords, author | What the package says about itself |
latestVersion, versionsCount | Newest version, and how many versions were ever published |
license | License name or SPDX expression |
homepage, repositoryUrl | Website, and the source repository as a clean https:// link |
weeklyDownloads, monthlyDownloads | Downloads in the last 7 and 30 days |
dailyDownloads | Downloads yesterday (PyPI only) |
maintainers, maintainersCount | Registry accounts that can publish (npm: maintainers, PyPI: owners) |
createdAt, lastPublishedAt | First publish, and the latest release |
dependencyCount | Direct dependencies of the latest version |
requires | Required runtime, for example node >= 18 or python >=3.10 |
deprecated, deprecatedMessage | true if the latest version is deprecated (npm) or yanked (PyPI), and the message |
vulnerabilitiesCount | Known vulnerabilities of the latest version (PyPI only) |
scrapedAt | When the row was collected |
Price
$0.01 per run + $1 per 1,000 packages. That is two pay-per-event charges: actor-start ($0.01) once per run and result ($0.001) per package. No compute fees on top. The free Apify plan ($5 per month credit) covers about 4,900 packages a month at no cost. A package that does not exist is not charged. A run where the registries do not answer is not charged.
How to use
- Open the Input tab and add packages, one per line. A plain name such as
reactis looked up on npm. Writepypi:requestsfor PyPI, or paste the package link. Scoped npm names like@types/nodework. - Choose Registry for plain names if you want plain names looked up on PyPI or on both.
- Click Start. When it is done, open the Output tab and export the table as CSV, JSON or Excel, or send it to Google Sheets with Apify's Google Sheets integration.
Input examples
Three npm packages and two Python packages:
{ "packages": ["react", "lodash", "@types/node", "pypi:requests", "pypi:numpy"] }
Package links work too:
{ "packages": ["https://www.npmjs.com/package/express", "https://pypi.org/project/flask/"] }
The same names on both registries, without download numbers, for a fast check of who owns a name:
{ "packages": ["pandas", "requests"], "ecosystem": "both", "includeDownloads": false }
Output example
{"ecosystem": "npm","name": "express","url": "https://www.npmjs.com/package/express","description": "Fast, unopinionated, minimalist web framework","latestVersion": "5.2.1","license": "MIT","homepage": "https://expressjs.com/","repositoryUrl": "https://github.com/expressjs/express","keywords": ["express", "framework", "sinatra", "web"],"author": "TJ Holowaychuk","maintainers": ["wesleytodd", "jonchurch", "ctcpip"],"maintainersCount": 5,"versionsCount": 289,"createdAt": "2010-12-29T19:38:25.450Z","lastPublishedAt": "2025-12-01T20:49:43.268Z","weeklyDownloads": 130322863,"monthlyDownloads": 457752996,"dailyDownloads": null,"deprecated": false,"deprecatedMessage": null,"dependencyCount": 28,"requires": "node >= 18","vulnerabilitiesCount": null,"scrapedAt": "2026-09-26T10:00:00.000Z"}
The lists of keywords and maintainers are shortened in this example.
Limits
- Download numbers come from
api.npmjs.org(npm) andpypistats.org(PyPI). They are public statistics that count downloads, including automated ones such as build systems, not unique people. - For PyPI,
maintainersare the owners the registry lists. Packages owned by an organization can show 0. vulnerabilitiesCountis available for PyPI only. For npm it is empty.pypistats.orglimits how fast it can be asked. The actor waits and tries again. If a number is still missing after that, the field is empty and the row is still saved.- A package that does not exist is named in the run log and skipped.
FAQ
Can I track adoption over time? Yes. Schedule the actor in Apify with the same packages and compare weeklyDownloads between runs.
Can I compare a package with its competitors? Yes. Put all of them in one run and sort the table by monthlyDownloads.
Can an AI agent use it? Yes. It works through Apify's API and MCP server. Give it a list of packages.
Something is wrong. What now? Open an issue on the Issues tab with the package and the input you used. Field requests are welcome.
Changelog
- 0.1 First release: npm and PyPI stats, downloads, maintainers, versions, repository, pay per event.