> **For coding agents and LLMs:** This is one Social Fetch marketing page (markdown export). For API orientation start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for auth and crawl rules use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for every operation use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt).

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/platforms/npm/packages-downloads>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/npm/packages-downloads.mdx>

---

# npm Bulk Downloads API

One request for up to 128 package names, in request order, with a per-name status so one bad name does not spoil the batch.

`GET /v1/npm/packages/downloads?names=express,react,lodash&period=last-week` returns `data.results`, one row per requested name in request order. Each row has `name`, `status`, `start`, `end`, `total` and `days`. `status` is `found` when npm has data for the name, `not_found` when the package does not exist on npm, and `unavailable` when that name's data was temporarily unavailable. `data.summary` counts `requested`, `found`, `notFound` and `unavailable`.

Names can be comma-separated or repeated, and duplicates are dropped. Scoped names are accepted and looked up one at a time, up to 20 per batch. Give `period`, or `from` and `to`, and add `granularity=daily` for day rows per name. The batch charges one credit per requested name, so a 20-name batch is 20 credits.

## Request

- **Endpoint:** `GET /v1/npm/packages/downloads`
- **Credits:** 1 credit per name
Up to 128 names per request
Max 128 credits
A name that is not found is still charged
Failed requests are free
- **Input:** by package names
- **Full reference:** [docs](https://www.socialfetch.dev/docs/api/v1/npm/packages/downloads/get)
- **Platform page:** [/platforms/npm](https://www.socialfetch.dev/platforms/npm)

## FAQ

### How many names can one batch take?

Up to 128 distinct names, and at most 20 of them scoped. Duplicates are removed before billing, so asking for the same name twice costs one credit. Longer lists are refused with HTTP 400; split them into several requests.

### How is an unavailable name different from not_found?

not_found means the package does not exist on npm. unavailable means that name's data was temporarily unavailable; a later request usually fills it. The batch still returns the other names.

### What do daily results look like in a batch?

With granularity=daily each result carries days, one row of day and downloads, and total is null. With the default total granularity each result carries total and days is null.

### What does a batch cost?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth. This batch charges 1 credit per requested name, including a name that is not found, up to 128 names and 128 credits per request. Duplicates count once.
