---
type: "firecrawl-provider"
description: "npm, PyPI, crates.io and Maven Central package metadata: latest version, license, links, version history, weekly and monthly downloads and dependent counts."
use_when: "What a package is, its latest version and licence, how often it is downloaded and who depends on it, on npm, PyPI, crates.io and Maven Central."
categories: "Developer"
capabilities: 4
credits_per_call: 1
---
# Package registries on Firecrawl Alexandria

npm, PyPI, crates.io and Maven Central package metadata: latest version, license, links, version history, weekly and monthly downloads and dependent counts.

- Categories: Developer
- Category index: [Developer category](https://firecrawl.dev/alexandria/agents/categories/developer)
- Provider key: `package-registry-metadata-download-stats`
- Access: Firecrawl credits
- Cost: 1 credit per call

## More

- [Human guide](https://firecrawl.dev/app/alexandria/package-registry-metadata-download-stats)
- [OpenAPI spec](https://firecrawl.dev/alexandria/agents/providers/package-registry-metadata-download-stats/openapi.json)

## Capabilities

- [Package record](https://firecrawl.dev/alexandria/agents/providers/package-registry-metadata-download-stats/packages/package): One package's current record: latest version and publish time, description, license, homepage/repository/issues links, keywords, version count, a download summary (npm and PyPI last week/month; crates.io last week/month/90 days/total; Maven Central publishes none) and a dependent count.
- [Daily downloads](https://firecrawl.dev/alexandria/agents/providers/package-registry-metadata-download-stats/packages/downloads): Daily download counts for one npm, PyPI or crates.io package as a series with 1/7/30-day sums; last-week, last-month or last-year (capped by what the source keeps). Maven Central has no download statistics.
- [Version history](https://firecrawl.dev/alexandria/agents/providers/package-registry-metadata-download-stats/packages/versions): A package's version history from deps.dev, newest first, with publish time, default flag and deprecation; paged with offset and limit. All four registries.
- [Dependents](https://firecrawl.dev/alexandria/agents/providers/package-registry-metadata-download-stats/packages/dependents): How many packages depend on one version of a package (deps.dev total/direct/indirect; the default version unless one is named). For crates also crates.io's package-wide reverse-dependency count and a named sample.

## 1. Choose this provider when

What a package is, its latest version and licence, how often it is downloaded and who depends on it, on npm, PyPI, crates.io and Maven Central.

## 2. Minimal request

Call `POST https://api.firecrawl.dev/v2/scrape` with `{ alexandria: { provider, capability, options } }`. For a batch, send `{ alexandria: [...] }` with up to 10 calls.

```json
{
  "provider": "package-registry-metadata-download-stats",
  "capability": "packages/package",
  "options": {
    "registry": "npm",
    "name": "<name>"
  }
}
```

## 3. Add provider options

Use only the options needed for the task:

- `registry` (string, required): Which registry the name belongs to: npm (registry.npmjs.org), pypi (pypi.org), crates (crates.io) or maven (Maven Central). Example: `npm`
- `name` (string, required): Package name as the registry knows it: npm `express` or `@types/node`; PyPI `requests` (any PEP 503 spelling); crate `serde`; Maven `groupId:artifactId` such as `com.google.guava:guava`. Example: `<name>`

## 4. Request through your preferred interface

### JavaScript

```javascript
const result = await firecrawl.scrape({
  alexandria: {
    provider: "package-registry-metadata-download-stats",
    capability: "packages/package",
    options: {
      registry: "npm",
      name: "<name>",
    },
  },
});
```

### Python

```python
result = firecrawl.scrape_alexandria({
  "provider": "package-registry-metadata-download-stats",
  "capability": "packages/package",
  "options": {
    "registry": "npm",
    "name": "<name>"
  }
})
```

### cURL

```sh
curl https://api.firecrawl.dev/v2/scrape \
  -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "alexandria": {
    "provider": "package-registry-metadata-download-stats",
    "capability": "packages/package",
    "options": {
      "registry": "npm",
      "name": "<name>"
    }
  }
}'
```

### CLI

```sh
firecrawl scrape 'package-registry-metadata-download-stats/packages/package' \
  --options '{"registry":"npm","name":"<name>"}'
```


### MCP

Call the FCX MCP retrieve tool with this object:

```json
{
  "provider": "package-registry-metadata-download-stats",
  "capability": "packages/package",
  "options": {
    "registry": "npm",
    "name": "<name>"
  }
}
```

Ask for only the returned fields needed by the task.

## 5. Full request shape

```json
{
  "provider": "package-registry-metadata-download-stats",
  "capability": "packages/package",
  "options": {
    "registry": "npm",
    "name": "<name>"
  }
}
```

## 6. Response data

The response includes `success`, `provider`, `capability`, `creditsCost` and `data`. This example shows the provider payload in `data`:

```json
{
  "registry": "<registry>",
  "name": "<name>",
  "display_name": "<display_name>",
  "description": "<description>",
  "latest_version": "<latest_version>",
  "latest_published_at": "<latest_published_at>",
  "license": "<license>",
  "licenses": [],
  "homepage": "<homepage>",
  "repository": "<repository>",
  "documentation": "<documentation>",
  "issues": "<issues>",
  "keywords": [],
  "version_count": 0,
  "created_at": "<created_at>",
  "updated_at": "<updated_at>",
  "deprecated": false,
  "yanked": false,
  "downloads": {},
  "dependents": {},
  "sources": [],
  "registry_url": "<registry_url>",
  "source_url": "<source_url>",
  "warnings": [],
  "observed_at_ms": 0
}
```

## API reference-derived contract

The following capability contract is generated from the same normalized Alexandria API reference exposed in the API spec.

### Package record

- Capability: `packages/package`
- Description: One package's current record: latest version and publish time, description, license, homepage/repository/issues links, keywords, version count, a download summary (npm and PyPI last week/month; crates.io last week/month/90 days/total; Maven Central publishes none) and a dependent count.
- Instructions: One package's current record: latest version and publish time, description, license, homepage/repository/issues links, keywords, version count, a download summary (npm and PyPI last week/month; crates.io last week/month/90 days/total; Maven Central publishes none) and a dependent count.
- Cost: 1 credit per call
- Capability file: [Package record](https://firecrawl.dev/alexandria/agents/providers/package-registry-metadata-download-stats/packages/package)

Accepted options:
- `registry` (string, required): Which registry the name belongs to: npm (registry.npmjs.org), pypi (pypi.org), crates (crates.io) or maven (Maven Central). Example: `npm`
- `name` (string, required): Package name as the registry knows it: npm `express` or `@types/node`; PyPI `requests` (any PEP 503 spelling); crate `serde`; Maven `groupId:artifactId` such as `com.google.guava:guava`. Example: `<name>`

Response schema example:
```json
{
  "registry": "<registry>",
  "name": "<name>",
  "display_name": "<display_name>",
  "description": "<description>",
  "latest_version": "<latest_version>",
  "latest_published_at": "<latest_published_at>",
  "license": "<license>",
  "licenses": [],
  "homepage": "<homepage>",
  "repository": "<repository>",
  "documentation": "<documentation>",
  "issues": "<issues>",
  "keywords": [],
  "version_count": 0,
  "created_at": "<created_at>",
  "updated_at": "<updated_at>",
  "deprecated": false,
  "yanked": false,
  "downloads": {},
  "dependents": {},
  "sources": [],
  "registry_url": "<registry_url>",
  "source_url": "<source_url>",
  "warnings": [],
  "observed_at_ms": 0
}
```

### Daily downloads

- Capability: `packages/downloads`
- Description: Daily download counts for one npm, PyPI or crates.io package as a series with 1/7/30-day sums; last-week, last-month or last-year (capped by what the source keeps). Maven Central has no download statistics.
- Instructions: Daily download counts for one npm, PyPI or crates.io package as a series with 1/7/30-day sums; last-week, last-month or last-year (capped by what the source keeps). Maven Central has no download statistics.
- Cost: 1 credit per call
- Capability file: [Daily downloads](https://firecrawl.dev/alexandria/agents/providers/package-registry-metadata-download-stats/packages/downloads)

Accepted options:
- `registry` (string, required): npm, pypi or crates. Maven Central publishes no download statistics, so maven is refused here. Example: `npm`
- `name` (string, required): Package name as the registry knows it: npm `express` or `@types/node`; PyPI `requests` (any PEP 503 spelling); crate `serde`; Maven `groupId:artifactId` such as `com.google.guava:guava`. Example: `<name>`
- `period` (string): How many trailing days to return: last-week (7), last-month (30) or last-year (365, capped by what the source keeps: pypistats ~180 days, crates.io 90). Example: `last-month`

Response schema example:
```json
{
  "series": [
    {
      "date": "<date>",
      "downloads": 0
    }
  ]
}
```

### Version history

- Capability: `packages/versions`
- Description: A package's version history from deps.dev, newest first, with publish time, default flag and deprecation; paged with offset and limit. All four registries.
- Instructions: A package's version history from deps.dev, newest first, with publish time, default flag and deprecation; paged with offset and limit. All four registries.
- Cost: 1 credit per call
- Capability file: [Version history](https://firecrawl.dev/alexandria/agents/providers/package-registry-metadata-download-stats/packages/versions)

Accepted options:
- `registry` (string, required): Which registry the name belongs to: npm (registry.npmjs.org), pypi (pypi.org), crates (crates.io) or maven (Maven Central). Example: `npm`
- `name` (string, required): Package name as the registry knows it: npm `express` or `@types/node`; PyPI `requests` (any PEP 503 spelling); crate `serde`; Maven `groupId:artifactId` such as `com.google.guava:guava`. Example: `<name>`
- `offset` (number): Versions to skip, newest first. Page by passing the previous response's next_offset. Example: `0`
- `limit` (number): Versions per page, 1 to 200. Example: `50`

Response schema example:
```json
{
  "versions": [
    {
      "version": "<version>",
      "published_at": "<published_at>",
      "is_default": false,
      "is_deprecated": false,
      "deprecated_reason": "<deprecated_reason>"
    }
  ]
}
```

### Dependents

- Capability: `packages/dependents`
- Description: How many packages depend on one version of a package (deps.dev total/direct/indirect; the default version unless one is named). For crates also crates.io's package-wide reverse-dependency count and a named sample.
- Instructions: How many packages depend on one version of a package (deps.dev total/direct/indirect; the default version unless one is named). For crates also crates.io's package-wide reverse-dependency count and a named sample.
- Cost: 1 credit per call
- Capability file: [Dependents](https://firecrawl.dev/alexandria/agents/providers/package-registry-metadata-download-stats/packages/dependents)

Accepted options:
- `registry` (string, required): Which registry the name belongs to: npm (registry.npmjs.org), pypi (pypi.org), crates (crates.io) or maven (Maven Central). Example: `npm`
- `name` (string, required): Package name as the registry knows it: npm `express` or `@types/node`; PyPI `requests` (any PEP 503 spelling); crate `serde`; Maven `groupId:artifactId` such as `com.google.guava:guava`. Example: `<name>`
- `version` (string): Exact version to count dependents for, e.g. 5.1.0 or 33.4.8-jre. Default: the registry's default (latest) version. Example: `<version>`
- `sample` (number): crates only: how many dependent crates to list by name (0 to 100). Example: `20`

Response schema example:
```json
{
  "registry": "<registry>",
  "name": "<name>",
  "version": "<version>",
  "count": 0,
  "direct": 0,
  "indirect": 0,
  "scope": "<scope>",
  "package_dependents": {},
  "sample": [],
  "sources": [],
  "registry_url": "<registry_url>",
  "source_url": "<source_url>",
  "warnings": [],
  "observed_at_ms": 0
}
```
