npm packages - search, metadata, downloads (public registry) avatar

npm packages - search, metadata, downloads (public registry)

Pricing

from $5.00 / 1,000 records

Go to Apify Store
npm packages - search, metadata, downloads (public registry)

npm packages - search, metadata, downloads (public registry)

npm registry scraper on the public API: one row per package - name, latest version, description, keywords, license, author, maintainers, repository, homepage, dependency count, last publish date, weekly downloads, npm URL. Search by keyword or give package names (scoped too). $5 per 1,000 rows.

Pricing

from $5.00 / 1,000 records

Rating

0.0

(0)

Developer

RetrainMap Data

RetrainMap Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Returns: one row per npm package: name, latest version, description, keywords, license, author, publisher, maintainers, repository, homepage, dependency counts (runtime / dev / peer) and list, engines, publish dates, weekly downloads, npm URL. Input: { "query": "keywords:cli not:deprecated", "max_records": 100 } or { "package_names": ["express", "@types/node", "lodash"] }. Price: $5.00 per 1,000 rows ($0.005 per package row) plus $0.10 per run. Pay per event; no subscription.

One row per package from the public npm registry (https://registry.npmjs.org, no key): search by keyword with the registry's own search endpoint and qualifiers (author:, maintainer:, keywords:, scope:, not:deprecated, is:unstable), or give exact package names, scoped ones included. Each row merges the search record, the latest version's manifest (dependencies, repository, homepage, license, engines, size) and the last-week download count from api.npmjs.org - normalised, one flat row per package.

The prefilled input (keywords:cli not:deprecated, 100 rows, downloads on) succeeds within 5 minutes and returns rows - Apify auto-tests it daily.

Data source and status

Publishernpm, Inc. (GitHub) - the public npm registry
APIhttps://registry.npmjs.org/-/v1/search (search), https://registry.npmjs.org/{name} and /{name}/latest (metadata), https://api.npmjs.org/downloads/point/last-week/{names} (downloads) - public, no key (documentation: https://github.com/npm/registry/blob/main/docs/REGISTRY-API.md and .../download-counts.md)
What this Actor readsSearch pages of up to 250 (from paging), one small /latest manifest per search hit, the full document for packages given by name, downloads 128 unscoped names per request; at most one request per 500 ms by default
Refresh cadenceLive on every run; fetched_at on each row is the fetch time. Download counts are npm's last-week point count (the period is in weekly_downloads_period)
Termsnpm's Open Source Terms (https://docs.npmjs.com/policies/open-source-terms) and the registry's public-API documentation apply; the registry asks bulk consumers to identify themselves - this Actor sends a product-token User-Agent and a From: contact. Package metadata is published by its authors under their own licenses (license column)
Known caveatsSearch order and search_score are the registry's own; a query can page through a few thousand results at most (the registry returns empty pages beyond that). weekly_downloads is null when the downloads API has no data (very new or unpublished packages). last_publish_date for search hits is the search record's date; for named packages it is the latest version's publish time from the full document. Package names that do not exist are listed in the run summary, not guessed

Honesty note: the rows are the registry's own fields merged and flattened - repository URLs are normalised to https:// form, description is cut at 3,000 characters, and nothing is inferred, summarised or classified by this Actor; a run stops with an error rather than guess when the registry's shape changes.

Identification: the requests carry a product-token User-Agent and the operator's contact address in the standard From: header (RFC 9110 §10.1.2).

Input

FieldTypeMeaning
querystringRegistry search text with optional qualifiers (keywords:cli, author:sindresorhus, scope:types, not:deprecated)
package_namesarray of stringsExact names, e.g. express, @types/node
max_recordsintegerDefault 100, at most 5,000
include_downloadsbooleanDefault true - last-week download counts
request_interval_msintegerDefault 500 (floor 200)
contact_emailstringSent in the From: header

Example - the 200 most relevant React component packages that are not deprecated:

{ "query": "react component not:deprecated", "max_records": 200 }

Output (dataset row)

name, version, description (<= 3,000 chars), keywords, license, author, publisher, maintainers, repository, homepage, bugs, dependencies_count, dev_dependencies_count, peer_dependencies_count, dependencies (names), engines_node, types (ships type definitions), unpacked_size_bytes, file_count, deprecated (message or null), dist_tags (named packages only), versions_count (named packages only), created (named packages only), last_publish_date, weekly_downloads, weekly_downloads_period, search_score, url, matched_by (search / name), fetched_at, source.

A run summary (filters, the registry's own match total, names not found, requests, whether the pay-per-event budget stopped the run) is stored as RUN_SUMMARY in the run's key-value store.

Pricing (pay per event)

EventPrice
run-start - once per run$0.10
record - per row written$0.005

The prefilled pull (<= 100 rows) costs at most $0.60; 1,000 packages cost $5.10. Rows stop when your run's maximum charge is reached; the run summary says so.

Operator

Steelyard Ventures LLC (RetrainMap) - info@steelyardclinical.com. Not affiliated with npm, Inc. or GitHub. The Actor writes only to its own dataset and key-value store; it stores no credentials and sends nothing else.