Systems Software · npm
npm Public Registry API
Datadory delivers npm public registry api data covering the world's largest JavaScript package registry: roughly 4.3 million package documents with full version manifests, maintainers, licenses and dependency maps, plus daily download counts from January 2015 and scored search results. Delivered daily, weekly, or hourly.
API, files, or your warehouse. Daily, weekly, or hourly.
- Where it covers
- Global - the whole JavaScript and Node.js ecosystem in one namespace, with no geographic partition; download counts are worldwide aggregates
- How far back
- Current registry state plus full publication timestamps reaching back to the registry's 2010 inception; download counts run daily from 2015-01-10 through yesterday
- How fine
- Per package, per version, per maintainer; downloads resolve per package per day, with per-version breakdowns over the trailing seven days
What is the npm Public Registry API?
Every JavaScript project in the world starts by resolving against this one database. The npm Public Registry is the authoritative store of JavaScript and Node.js packages, and at the August 2026 cataloging pass it held roughly 4.3 million package documents, each a typed record rather than a web page: every published version with its own manifest, dependency maps, engines and integrity hashes; distribution tags marking the channel installers resolve; maintainers, license declarations, repository links; and publication timestamps that reach back to the registry's 2010 inception. npm Public Registry API is that corpus as a delivered feed - 28 documented fields spanning the metadata, download-count and search surfaces.
Two properties make it pipeline material rather than a lookup tab. First, popularity is measured, not asserted: download counters run per package per day from 2015-01-10 onward, so adoption claims become arithmetic - express alone recorded 109,311,848 downloads in the week ending 19 August 2026. Second, the structure survives contact with scale: the same twenty-eight fields describe a two-maintainer utility and a framework half the internet installs, which is why joins behave. Get a sample of this dataset and real rows arrive before anything recurring.
What does a sample row look like?
Three surfaces, one capture - transposed for reading:
# weekly download point count - express
package : express
downloads : 109311848 # 2026-08-13 .. 2026-08-19
# search hit - express, scored
version : 5.1.0
description : Fast, unopinionated, minimalist web framework
quality : 1.0 | popularity : 1.0 | maintenance : 1.0
keywords : express, framework, sinatra, rest, restful, router, app, microservices
# one version manifest - express 4.19.2
dependencies : accepts ~1.3.8, body-parser 1.20.2, debug 2.6.9
engines.node : >= 0.10.0
fileCount : 73 unpackedSize: 217566Read what the trio proves. The download line is a weekly total for one package - a number that turns 'everyone uses Express' into a figure you can chart, diff and cite. The search block is the registry grading its own homework: express scores a perfect 1.0 on quality, popularity and maintenance simultaneously, and the keyword list shows how packages classify themselves. And the version manifest carries the supply-chain facts - exact dependency pins like accepts ~1.3.8, a node engine floor, seventy-three files unpacking to about 212 KB - that let you screen a candidate without installing it. Three captured records from the August 2026 verification pass - the weekly download total for express, its scored search hit, and one version manifest flattened for reading. Values are quoted exactly as observed (the weekly figure covers 13-19 August 2026); your sample re-cuts all three surfaces to the packages you name. Request your sample and all three surfaces arrive shaped to your package list.
What fields does the dataset include?
Twenty-eight documented fields span the three surfaces the registry serves: twenty-one describe each package and its versions - identity, lifecycle stamps, maintainership, licensing, dependency maps, integrity hashes and sizes - while the remaining seven carry the measurement layer of download totals, window dates, search results and scoring detail. Definitions were verified against live responses during the August 2026 cataloging pass, which is why this record scores 10 out of 10 on our field-documentation rubric against a catalog average of 7.81 across 1,744 datasets.
Additional fields on request: the abbreviated install-metadata view that strips documents down to what installers need, per-version breakdowns of download counts beyond the trailing week, bulk multi-package count pulls at up to 128 names per query, the change-feed sequence position used to keep a synchronized copy current, and derived columns such as maintainer normalization, category rollups and download percentile bands. Name the packages and windows when you request a sample and the extract arrives carrying exactly those columns.
What does coverage look like across geography, time and granularity?
Geography - global by construction. One namespace holds the entire JavaScript ecosystem regardless of where its maintainers sit, and download counts aggregate worldwide installs. Geography arrives implicitly through maintainer names and repository links rather than as a partition; anything geographic worth building is derived downstream.
Temporal - two clocks worth telling apart. Metadata is current registry state with publication timestamps per version, so the decade-and-a-half arc of the ecosystem reconstructs straight from the records - packages from the 2010-era registry still resolve. Download counts run on their own clock: daily values from 2015-01-10 through yesterday, with per-version breakdowns limited to the trailing week.
Granularity - per package, per version and per maintainer in the metadata; per package per day in the counts. Of the ~4.3 million documents, roughly 2.5-3 million carry download records at all - the rest have never been installed, which is itself a signal. Roll-ups to keyword, category or maintainer level are group-bys, not integration projects.
Against the wider catalog - average quality score 7.81 across 1,744 datasets - this slice holds 10/10, carried by fully exampled field documentation verified against live responses.
How is the data delivered?
API, files, or your warehouse. Daily, weekly, or hourly.
The registry is enormous and unevenly interesting, which makes shaping the first decision: whole-ecosystem copies suit teams running supply-chain screens or market maps in SQL; single-package and category extracts suit products that surface a library's health mid-workflow; download series suit analysts charting adoption. Deliveries key on package name and version, so consecutive pulls diff cleanly into release-churn and adoption timelines instead of re-downloading history, and the dictionary above travels unchanged across all three channels.
Who uses this data, and for what?
- Dependency due diligence and supply-chain screening - screen candidate libraries on maintainer records, publish recency, license declarations and integrity hashes before anything enters a lockfile.
- Adoption and market-share analytics - daily download series turn 'which framework is winning' into an arithmetic question, cohortable by month and segmentable by keyword.
- Competitive intelligence on developer ecosystems - watch rivals' packages across deliveries; version churn and download acceleration tend to move ahead of press releases.
- License-compliance sweeps - SPDX identifiers on every package make copyleft exposure a filter over rows rather than a manual audit.
- Ecosystem mapping and model training - keywords, categories and dependency edges give ranking and recommendation systems a labeled corpus measured in millions.
See the market sizing playbook and competitor tracking use cases for the workflows this feeds.
Which personas get the most value?
Developers and data-product builders hold this dataset at the top tier - registry-backed dashboards, update watchers and install-time policy gates all read off one documented schema (developers builders use cases). Data scientists and ML engineers get a corpus large enough to train on with labels already attached: licenses, scores and dependency edges (data scientists use cases). Competitive-intel and product teams read rivals' publishing cadence as a leading indicator (competitive intel product teams use cases). Investors and quants track download trajectories as bottom-up evidence of developer mindshare (investors quants use cases), and journalists and academics cite measured adoption curves rather than anecdotes.
What should I know before requesting a sample?
Three things worth settling upfront. First, scale versus focus: the full corpus is millions of documents, so decide whether the sample answers a whole-ecosystem question or resolves a named package list - both work, but they shape differently. Second, the measurement layer has edges: download counts begin on 2015-01-10 and stop at yesterday, roughly a quarter of packages carry no download record at all because they were never installed, and per-version breakdowns reach only the trailing seven days. Third, absence is informative here - an unpublished or never-installed package looks like a zero, not an error, so pipelines should treat missing counts as a state rather than a fault. Name your packages, keywords and windows when you request and the sample comes back pre-cut.
How does it compare within its slice?
Within Systems Software this record owns JavaScript at registry depth. crates.io - Rust Package Registry API runs the same job for Rust - around 320,000 crates with billions of cumulative downloads - and PyPI - Python Package Index API and Stats covers Python with 877,215 projects; both are the natural companions for cross-language adoption studies. deps.dev - Open Source Insights API reads npm alongside six other registries and adds pre-resolved graphs, advisories and Scorecard health, but normalizes away some registry-native detail - the head-to-head comparison sets out the trade. Libraries.io Open Source Packages spans 32 package managers breadth-first with a frozen graph. When the question is end-of-life windows rather than packages, endoflife.date Product Lifecycle Catalog covers products, not libraries - the npm-side comparison draws that boundary precisely.
Which notes pair with this dataset?
Notes that travel with this dataset:
- Systems software data hub - the pooled industry view, from package registries to OS share and developer surveys.
- vs deps.dev - raw registry depth against cross-ecosystem resolution, the slice's sharpest contrast.
- Persona pages - what developers, quants and data scientists each do with registry-scale records.
Field dictionary
Every field below is documented against real records. The full dictionary ships with the sample.
| field | type | definition | example |
|---|---|---|---|
name | string | Package name as published to the registry - the join key every delivery keys on. Unscoped names read plain; scoped names carry their @org/ prefix. | express |
description | text | Package description from the latest published manifest, written by the maintainer. | Fast, unopinionated, minimalist web framework |
dist-tags | text | Map of distribution tags to version strings; latest is the tag installers resolve by default, and next/beta tags expose pre-release channels. | {"latest": "5.1.0"} |
versions | text | Map of version number to the full manifest for each published release - the complete release history of the package in one document. | 5.1.0, 4.19.2, ... |
time | text | Publication timestamp per version plus created and modified dates for the package - the field that turns deliveries into release-velocity timelines. | "4.19.2": "2024-04-24T..." |
maintainers | text | List of user accounts holding publish rights, with username and email - the accountability layer of the supply chain. | [{"username": "dougwilson"}] |
author | text | Author object from the manifest: name plus optional email and URL. | {"name": "TJ Holowaychuk"} |
license | string | SPDX license identifier or license object declared by the package - the compliance screen. | MIT |
keywords | text | Search keywords attached to the package; the registry's native segmentation vocabulary. | ["express", "framework", "rest"] |
homepage | string | Project homepage URL as declared in the manifest. | <project homepage url> |
repository | text | Source repository type and URL linking the published artifact back to its code. | {"type": "git"} |
bugs | text | Issue tracker URL and/or email where defects get reported. | {"url": "<issue tracker url>"} |
dependencies | text | Runtime dependency map of package name to semver range, carried per version document - the edges of the ecosystem's dependency graph. | {"accepts": "~1.3.8"} |
devDependencies | text | Development-only dependency map per version document; separates what consumers inherit from what contributors need. | {"mocha": "^10.0.0"} |
engines | text | Supported runtime versions per version document - typically node and npm semver ranges, the compatibility gate for upgrade planning. | {"node": ">= 0.10.0"} |
dist.tarball | string | Download location of the version's gzipped tarball. | .../-/express-4.19.2.tgz |
dist.shasum | string | SHA-1 integrity hash of the published tarball. | ac689844127... |
dist.integrity | string | Subresource-integrity string (SHA-512) of the tarball - the stronger pin for supply-chain verification. | sha512-... |
dist.unpackedSize | integer | Size in bytes of the package contents when unpacked. | 217566 |
dist.fileCount | integer | Number of files inside the published tarball - a crude but useful bloat detector. | 73 |
readme | text | Package README content included in the full metadata document - usage prose riding beside the structured fields. | # Express... |
downloads | integer | Download count for the requested period, aggregated worldwide across registry installs. | 109311848 |
start | date | Inclusive start date of the download-count window. | 2026-08-13 |
end | date | Inclusive end date of the download-count window; daily series run to yesterday. | 2026-08-19 |
objects | text | Search result array; each entry holds the package summary, its download and dependent counts, flags, relevance score and last update. | [{"package": {...}, "score": {...}}] |
score | text | Search scoring detail: final score with quality, popularity and maintenance components beneath it. | {"detail": {"quality": 1.0, "popularity": 1.0, "maintenance": 1.0}} |
dependents | integer | Count of packages that depend on this one - the structural-popularity counter that separates infrastructure from fashion. | 26900 |
searchScore | number | Text-match relevance score from search results, distinct from the quality/popularity/maintenance components. | 100000.06 |
Additional fields on request | - | Abbreviated install-metadata views, per-version download breakdowns beyond the trailing week, multi-package count pulls up to 128 names per query, change-feed sequence positions for incremental sync, and derived columns such as normalized maintainers, category rollups and download percentile bands. | - |
What teams do with it
- Dependency due diligence and supply-chain screening Screen candidates on maintainer records, publish recency, license declarations and integrity hashes before anything enters a lockfile.
- Adoption and market-share analytics Daily download series turn framework debates into arithmetic, cohortable by month and segmentable by keyword.
- Competitive intelligence on developer ecosystems Track rivals' packages across deliveries; version churn and download acceleration move ahead of announcements.
- License-compliance sweeps SPDX identifiers on every package make copyleft exposure a filter over rows rather than a manual audit.
- Ecosystem mapping and model training Keywords, categories and dependency edges give ranking systems a labeled corpus measured in millions.
Questions buyers ask
How many packages does the data cover?
Roughly 4.3 million package documents were counted at the August 2026 cataloging pass, of which about 2.5-3 million carry download records. Totals quoted at delivery reflect the pull you receive rather than a frozen brochure number, because the registry moves continuously.
How far back does the counting history reach?
Daily download counts run from 2015-01-10 through yesterday, keyed per package per day; per-version breakdowns cover only the trailing seven days. Package metadata reaches further still - publication timestamps survive back to the registry's 2010 inception, so ecosystem history predates the counting window.
What is inside a package record?
The full packument per package: every published version with its own dependencies, dev-dependencies, engine requirements, integrity hashes and file counts; distribution tags such as latest; maintainers with publish rights; the license declaration; keywords, homepage, repository and issue-tracker links; and created and modified dates for the package as a whole.
What can I segment the registry by?
Keywords and categories are the native cuts, and search results fold in download counts, dependent counts and quality/popularity/maintenance scores - express scores 1.0 on all three. Maintainer-level grouping and dependency-graph walks build off the same base table once delivered.
Is the schema stable enough for production pipelines?
Yes. Twenty-eight fields are documented once and appear identically on every package record, definitions verified against live responses during cataloging. Pipelines written against the dictionary run unchanged whether they process ten packages or the whole corpus, and extended structures ship under the same column shapes when specified.
Why do some packages carry no usage figures?
Because they were never installed - roughly a quarter to a third of registered packages carry no download records at all. Absence is a state, not a fault: unpublished experiments and abandoned scaffolding look like zeros, and treating them as errors is the most common pipeline mistake this corpus punishes.
Can a sample be cut to my slice of the ecosystem?
Yes. Name the packages, scoped organizations, keywords or download windows you care about and the sample arrives shaped like your actual workload with all columns intact. Recurring deliveries land keyed on package name and version, so consecutive passes diff cleanly into adoption and churn timelines.
Notes on this record
- Measured, not asserted Download counters ride on the rows themselves, so 'widely used' becomes a sortable number - express's 109,311,848 weekly installs are a fact, not a vibe.
- History rides on the records Publication timestamps reach back to the registry's 2010 inception and download counts to January 2015, so longitudinal analysis reconstructs from deliveries instead of external archives.
- Absence is a signal Roughly 2.5-3 million of ~4.3 million packages carry download records; the never-installed remainder is a filterable state, not missing data to impute away.
- Supply-chain facts included Integrity hashes, exact dependency pins, engine floors and maintainer rosters ride beside every version, which is what turns a candidate-library list into a due-diligence file.
- Scored 10/10, top of the rubric Field definitions fully exampled and verified against live responses - a perfect score against the 7.81 catalog mean across 1,744 datasets.
See the rows before you pay anything.
Name this dataset and we send real records from it — scoped to the fields you asked for.