PyPI StatsPyPI Stats
CompareTrendingPricingDashboard
PyPI Stats — Download analytics for Python packages
APIGitHub
Download data sourced from BigQuery (Google). Counts may include CI/CD and mirror traffic.

API Documentation

Access PyPI download stats programmatically. Generate an API key from your dashboard.

Authentication

Pass your API key as a query parameter: ?apikey=YOUR_KEY

Requests without an API key are allowed but subject to stricter rate limits.

Rate Limits

FREE
10 requests/min
PRO
60 requests/min
ENTERPRISE
300 requests/min

Upgrade your plan for higher rate limits and access to export endpoints.

Endpoints

GET/api/packages/{name}

Get download trends, version breakdown, and metadata for a package.

Parameters

NameInRequiredDescription
namepathYesPackage name (e.g. requests)
daysqueryNoNumber of days of history (default: 30)
apikeyqueryNoYour API key for higher rate limits

Example

GET /api/packages/requests?days=30

Response

{
  "trend": [{ "date": "2026-02-01", "total_downloads": "1234567" }],
  "versions": [{ "version": "2.31.0", "total_downloads": "500000" }],
  "pythonVersions": [{ "dimension_value": "3.11", "total_downloads": "800000" }],
  "systems": [{ "dimension_value": "Linux", "total_downloads": "900000" }],
  "installers": [{ "dimension_value": "pip", "total_downloads": "1000000" }],
  "metadata": { "name": "requests", "summary": "Python HTTP for Humans.", ... }
}
GET/api/search

Search for packages by name.

Parameters

NameInRequiredDescription
qqueryYesSearch query (min 2 characters)
apikeyqueryNoYour API key for higher rate limits

Example

GET /api/search?q=requests

Response

{
  "results": [
    { "name": "requests", "summary": "Python HTTP for Humans.", "total_downloads": "119931198" }
  ]
}
GET/api/compare

Compare download trends for multiple packages.

Parameters

NameInRequiredDescription
packagesqueryYesComma-separated package names
daysqueryNoNumber of days (default: 30)
apikeyqueryNoYour API key for higher rate limits

Example

GET /api/compare?packages=flask,django&days=30

Response

{
  "chartData": [{ "date": "2026-02-01", "flask": 50000, "django": 80000 }],
  "totals": { "flask": 1500000, "django": 2400000 }
}
GET/api/export

Export download data as CSV or JSON. Requires PRO tier or above.

Parameters

NameInRequiredDescription
packagequeryYesSingle package name
packagesqueryNoComma-separated names (for multi-package export)
formatqueryNo"csv" (default) or "json"
daysqueryNoNumber of days (default: 30)

Example

GET /api/export?package=requests&format=csv&days=30

Response

date,downloads
2026-02-01,1234567
2026-02-02,1345678
GET/api/health-score

Get a health score for a package based on download trends.

Parameters

NameInRequiredDescription
packagequeryYesPackage name

Example

GET /api/health-score?package=requests

Response

{ "package": "requests", "score": 92, "trend": "stable" }
GET/api/badges/{name}

Get an SVG badge showing recent download count for a package.

Parameters

NameInRequiredDescription
namepathYesPackage name

Example

GET /api/badges/requests

Response

SVG image

Error Codes

CodeMeaning
400Bad request (missing or invalid parameters)
401Invalid or revoked API key
403Feature requires a higher tier (upgrade needed)
429Rate limit exceeded
500Internal server error