npm packages - search, metadata, downloads (public registry)
Pricing
from $5.00 / 1,000 records
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
Maintained by CommunityActor 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
| Publisher | npm, Inc. (GitHub) - the public npm registry |
| API | https://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 reads | Search 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 cadence | Live 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) |
| Terms | npm'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 caveats | Search 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
| Field | Type | Meaning |
|---|---|---|
query | string | Registry search text with optional qualifiers (keywords:cli, author:sindresorhus, scope:types, not:deprecated) |
package_names | array of strings | Exact names, e.g. express, @types/node |
max_records | integer | Default 100, at most 5,000 |
include_downloads | boolean | Default true - last-week download counts |
request_interval_ms | integer | Default 500 (floor 200) |
contact_email | string | Sent 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)
| Event | Price |
|---|---|
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.