# PyPI Download Stats API
> Live PyPI (Python Package Index) download analytics from pypistats.org — no key, nothing stored. The adoption view of a Python package: how much it is downloaded, the daily trend, and the breakdown by Python version and operating system, distinct from the PyPI registry-metadata API in the catalogue (which describes a package — this measures how much the community actually uses it). The recent endpoint returns the headline download counts: last day, last week and last month. The overall endpoint returns the daily download timeline so you can chart growth. The python endpoint breaks downloads down by Python version, showing which versions the package's users are actually on. The system endpoint breaks downloads down by operating system — Linux, Windows and macOS. Build package-popularity dashboards, dependency-adoption trackers, "which Python version should we still support" tools and ecosystem-trend widgets on top of real PyPI download data. Look up any package by its PyPI name (requests, numpy, flask); names are normalised to lowercase and the version and system splits include each category's share of total downloads.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/pypistats-api/..."
```

## Pricing
- **Free** (Free) — 22,000 calls/Mo, 3 req/s
- **Starter** ($5/Mo) — 300,000 calls/Mo, 10 req/s
- **Pro** ($15/Mo) — 1,250,000 calls/Mo, 25 req/s
- **Scale** ($35/Mo) — 4,400,000 calls/Mo, 55 req/s

## Endpoints

### Recent

#### `GET /v1/recent` — Headline download counts — day, week, month

**Parameters:**
- `package` (query, required, string) — PyPI package name Example: `requests`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/pypistats-api/v1/recent?package=requests"
```

**Response:**
```json
{
    "data": {
        "source": "pypistats.org",
        "package": "requests",
        "last_day": 63643270,
        "last_week": 323515989,
        "last_month": 1572094434
    },
    "meta": {
        "timestamp": "2026-06-12T01:42:25.210Z",
        "request_id": "b664d43d-81b3-4fc4-98f8-bea3b7bd5d2a"
    },
    "status": "ok",
    "message": "Recent downloads retrieved successfully",
    "success": true
}
```

### Overall

#### `GET /v1/overall` — Daily download timeline

**Parameters:**
- `package` (query, required, string) — PyPI package name Example: `requests`
- `limit` (query, optional, string) — Days (default 30, max 180) Example: `30`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/pypistats-api/v1/overall?package=requests&limit=30"
```

**Response:**
```json
{
    "data": {
        "count": 30,
        "source": "pypistats.org",
        "mirrors": false,
        "package": "requests",
        "timeline": [
            {
                "date": "2026-05-12",
                "downloads": 64191630
            },
            {
                "date": "2026-05-13",
                "downloads": 61920814
            },
            {
                "date": "2026-05-14",
                "downloads": 61120946
            },
            {
                "date": "2026-05-15",
                "downloads": 57961455
            },
            {
                "date": "2026-05-16",
                "downloads": 41320667
            },
            {
                "date": "2026-05-17",
                "downloads": 41659961
            },
            {
                "date": "2026-05-18",
                "downloads": 59418023
            },
            {
                "date": "2026-05-19",
                "downloads": 62083507
            },
            {
                "date": "2026-05-20",
                "downloads": 61546528
            },
            {
                "date": "2026-05-21",
                "downloads": 63123361
            },
            {
                "date": "2026-05-22",
                "downloads": 57666405
            },
            {
                "date": "2026-05-23",
                "downloads": 40837194
            },
            {
                "date": "2026-05-24",
                "downloads": 41758740
…(truncated, see openapi.json for full schema)
```

### Python

#### `GET /v1/python` — Downloads by Python version

**Parameters:**
- `package` (query, required, string) — PyPI package name Example: `requests`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/pypistats-api/v1/python?package=requests"
```

**Response:**
```json
{
    "data": {
        "source": "pypistats.org",
        "package": "requests",
        "total_downloads": 7546740025,
        "by_python_version": [
            {
                "downloads": 1970972772,
                "share_pct": 26.12,
                "python_version": "3.12"
            },
            {
                "downloads": 1869564711,
                "share_pct": 24.77,
                "python_version": "3.11"
            },
            {
                "downloads": 1169111483,
                "share_pct": 15.49,
                "python_version": "3.10"
            },
            {
                "downloads": 878762193,
                "share_pct": 11.64,
                "python_version": "3.13"
            },
            {
                "downloads": 500312994,
                "share_pct": 6.63,
                "python_version": "3.9"
            },
            {
                "downloads": 363479584,
                "share_pct": 4.82,
                "python_version": "3.14"
            },
            {
                "downloads": 286303558,
                "share_pct": 3.79,
                "python_version": "3.8"
            },
            {
                "downloads": 270750601,
                "share_pct": 3.59,
                "python_version": "3.7"
            },
            {
                "downloads": 159042613,
                "share_pct": 2.11,
                "python_version": "null"
            },
            {
                "download
…(truncated, see openapi.json for full schema)
```

### System

#### `GET /v1/system` — Downloads by operating system

**Parameters:**
- `package` (query, required, string) — PyPI package name Example: `requests`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/pypistats-api/v1/system?package=requests"
```

**Response:**
```json
{
    "data": {
        "source": "pypistats.org",
        "package": "requests",
        "by_system": [
            {
                "system": "Linux",
                "downloads": 7168426068,
                "share_pct": 94.99
            },
            {
                "system": "Windows",
                "downloads": 252156979,
                "share_pct": 3.34
            },
            {
                "system": "Darwin",
                "downloads": 89983560,
                "share_pct": 1.19
            },
            {
                "system": "null",
                "downloads": 34069391,
                "share_pct": 0.45
            },
            {
                "system": "other",
                "downloads": 2104027,
                "share_pct": 0.03
            }
        ],
        "total_downloads": 7546740025
    },
    "meta": {
        "timestamp": "2026-06-12T01:42:26.978Z",
        "request_id": "e3828ca3-20ce-49b0-a075-dfebaac10e62"
    },
    "status": "ok",
    "message": "System breakdown retrieved successfully",
    "success": true
}
```

### Meta

#### `GET /v1/meta` — Service metadata

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/pypistats-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "note": "Look up a package by its PyPI name (package=requests, numpy, flask). Names are normalised to lowercase. Version and system breakdowns are totalled over the available ~180-day window with each category's share of total downloads.",
        "source": "pypistats.org public API (live)",
        "service": "pypistats-api",
        "endpoints": {
            "GET /v1/meta": "This document.",
            "GET /v1/python": "Downloads broken down by Python version (package=requests).",
            "GET /v1/recent": "Headline download counts — last day, week and month (package=requests).",
            "GET /v1/system": "Downloads broken down by operating system (package=requests).",
            "GET /v1/overall": "Daily download timeline (package=requests, limit=30, max 180)."
        },
        "description": "Live PyPI (Python Package Index) download analytics from pypistats.org — the adoption view of a Python package. recent = the headline download counts (last day, last week, last month); overall = the daily download timeline; python = the breakdown by Python version (which versions the package's users are on); system = the breakdown by operating system (Linux, Windows, macOS). Live, no key, nothing stored. Distinct from the PyPI registry-metadata API — this measures how much the community actually uses a package.",
        "upstream_status": "ok",
        "requests_last_month": 1572094434
    },
    "meta": {
        "timestamp": "2026-06-12T
…(truncated, see openapi.json for full schema)
```


---
Marketplace page: https://www.oanor.com/api/pypistats-api
OpenAPI spec: https://www.oanor.com/api/pypistats-api/openapi.json
