npm & PyPI Package Stats Scraper avatar

npm & PyPI Package Stats Scraper

Pricing

from $1.00 / 1,000 result (one package)s

Go to Apify Store
npm & PyPI Package Stats Scraper

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

Mokksh Bhatt

Maintained by Community

Actor 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

FieldWhat it is
ecosystem, name, urlnpm or pypi, the package name, and its page
description, keywords, authorWhat the package says about itself
latestVersion, versionsCountNewest version, and how many versions were ever published
licenseLicense name or SPDX expression
homepage, repositoryUrlWebsite, and the source repository as a clean https:// link
weeklyDownloads, monthlyDownloadsDownloads in the last 7 and 30 days
dailyDownloadsDownloads yesterday (PyPI only)
maintainers, maintainersCountRegistry accounts that can publish (npm: maintainers, PyPI: owners)
createdAt, lastPublishedAtFirst publish, and the latest release
dependencyCountDirect dependencies of the latest version
requiresRequired runtime, for example node >= 18 or python >=3.10
deprecated, deprecatedMessagetrue if the latest version is deprecated (npm) or yanked (PyPI), and the message
vulnerabilitiesCountKnown vulnerabilities of the latest version (PyPI only)
scrapedAtWhen 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

  1. Open the Input tab and add packages, one per line. A plain name such as react is looked up on npm. Write pypi:requests for PyPI, or paste the package link. Scoped npm names like @types/node work.
  2. Choose Registry for plain names if you want plain names looked up on PyPI or on both.
  3. 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) and pypistats.org (PyPI). They are public statistics that count downloads, including automated ones such as build systems, not unique people.
  • For PyPI, maintainers are the owners the registry lists. Packages owned by an organization can show 0.
  • vulnerabilitiesCount is available for PyPI only. For npm it is empty.
  • pypistats.org limits 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.