# PyPI Package Release Velocity Tracker (`saint_person/pypi-package-release-velocity-tracker`) Actor

Compare PyPI package release frequencies, version-count velocity, and maintenance recency. Python developer audience, official PyPI JSON API, no key required.

- **URL**: https://apify.com/saint\_person/pypi-package-release-velocity-tracker.md
- **Developed by:** [saint person](https://apify.com/saint_person) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## PyPI Package Release Velocity Tracker

Compare Python package maintenance velocity across multiple PyPI packages in a single run — ranked by release frequency, maintenance recency, and total release count. Official PyPI JSON API, no API key required.

### Who This Is For

- **Python developers** evaluating which packages to depend on (maintenance health signals)
- **DevOps/Infra teams** auditing dependency maintenance in requirements files
- **AI/ML teams** tracking framework release velocity (PyTorch, TensorFlow, JAX, etc.)
- **Technical leads** comparing package activity to make architectural decisions
- **Procurement/OSS due diligence** — assess maintenance before corporate adoption

### Key Features & Value

- **Cross-package release-velocity ranking** — see which packages release most frequently, ranked
- **Multiple recency signals** — releases in last year, last quarter, days since last release
- **Maintenance health labels** — TORCH (highly active), BLAZING, ACTIVE, STEADY, SLOW, STALLED
- **Total release count** — lifetime history for maturity assessment
- **Official PyPI JSON API** — no keys, no rate limits, no scraping
- **Free-tier friendly** — up to 10 results for free Apify accounts
- **PPE pricing** — pay per run, not per month

### Quick Start

1. Open the Actor on Apify Store
2. Enter comma-separated PyPI package names (up to 20)
3. Run — results appear in seconds
4. Read the ranked table: highest release-velocity packages first

```json
{
  "packages": "requests,flask,django,fastapi,numpy,pandas,scipy,pytest,click,rich"
}
````

### Input Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| packages | string | requests,flask,django,fastapi,numpy,pandas,scipy,matplotlib,pytest,click | Comma-separated PyPI package names (max 20) |

### Output Structure

```json
[
  {
    "packageName": "fastapi",
    "summary": "FastAPI framework, high performance, easy to learn, fast to code, ready for production",
    "currentVersion": "0.139.2",
    "totalReleases": 301,
    "lastReleaseDate": "2026-07-16",
    "daysSinceLastRelease": 3,
    "releasesLastYear": 152,
    "releasesLastQuarter": 22,
    "velocityLabel": "TORCH"
  },
  {
    "packageName": "requests",
    "summary": "Python HTTP for Humans.",
    "currentVersion": "2.34.2",
    "totalReleases": 163,
    "lastReleaseDate": "2026-05-14",
    "daysSinceLastRelease": 65,
    "releasesLastYear": 14,
    "releasesLastQuarter": 8,
    "velocityLabel": "TORCH"
  }
]
```

#### Velocity Labels

| Label | Criteria | Meaning |
|-------|----------|---------|
| TORCH | ≥12 releases/year, last release ≤90 days | Extremely active maintenance |
| BLAZING | ≥6 releases/year, last release ≤180 days | Highly active maintenance |
| ACTIVE | ≥3 releases/year, last release ≤365 days | Regular maintenance |
| STEADY | ≥1 release/year, last release ≤365 days | Occasional maintenance |
| SLOW | <1 release/year, last release <2 years | Infrequent maintenance |
| STALLED | ≥2 years since last release | Abandoned/unmaintained |

### Usage Examples

#### 1. Compare AI/ML Framework Activity (5 packages)

```json
{"packages": "torch,tensorflow,jax,keras,flax"}
```

Returns: TORCH/BLAZING labels identify the most actively developed frameworks.

#### 2. Audit Your requirements.txt Dependencies

```json
{"packages": "django,django-rest-framework,django-cors-headers,celery,redis,gunicorn,psycopg2-binary,sentry-sdk,whitenoise,pillow"}
```

Returns: STALLED/SLOW labels flag dependencies that may need replacement planning.

#### 3. AI Agent Workflow — Dependency Health Assessment

> "I'm considering adopting FastAPI for production. Check the maintenance velocity of fastapi together with uvicorn, pydantic, starlette, and httpx."

Run this actor with those 5 packages. The TORCH/BLAZING labels on all of them confirms a healthy ecosystem. An agent can then decide: *High confidence — all core dependencies are actively maintained.*

#### 4. Zapier/Make/n8n Automation — Slack Alert on Stalled Dependencies

```
Trigger: Weekly schedule
Action: Run PyPI Release Velocity Tracker with "numpy,pandas,scikit-learn,matplotlib"
Filter: Where velocityLabel = "STALLED"
Result: Send Slack message "@channel WARNING: dependency XYZ is STALLED"
```

#### 5. CI/CD Gate — Pre-Merge Dependency Check

```yaml
## GitHub Actions: gate PRs that add STALLED dependencies
jobs:
  dependency-audit:
    runs-on: ubuntu-latest
    steps:
      - run: |
          curl -X POST https://api.apify.com/v2/acts/saint_person/pypi-package-release-velocity-tracker/runs \
            -H "Content-Type: application/json" \
            -d '{"packages":"'$NEW_DEP'"}' | jq '.data[0].velocityLabel'
          # Fail if label == "STALLED"
```

#### 6. MCP Tool — Package Health Lookup

An MCP client can call this actor with a single package to get its full velocity profile. If velocityLabel returns STALLED, the MCP agent can recommend alternatives.

### Integration Notes

| Platform | How to Integrate |
|----------|-----------------|
| **Zapier** | Webhook trigger → Run Actor → Parse JSON → Write to Sheet/Slack |
| **Make** | Apify module (Run Actor) → Router by velocityLabel → Email/Slack notification |
| **n8n** | HTTP Request node → POST to Apify API → IF(velocityLabel=STALLED) → Alert |
| **MCP** | Standard Apify MCP server integration — call by actor name |
| **Code** | `curl -X POST https://api.apify.com/v2/acts/saint_person~pypi-package-release-velocity-tracker/runs` |

### Pricing & Typical Cost

| Event | Price | Count per Run | Total |
|-------|-------|---------------|-------|
| Actor Start | $0.01 | 1 | $0.01 |
| Package Profile | $0.003 | 5-10 packages | $0.015-0.03 |
| **Total (typical)** | | | **~$0.02-0.04 per run** |

Example: 15 packages run costs = $0.01 + (15 × $0.003) = **$0.055 per run**.

Free Apify plan returns up to 10 package profiles per run (free-tier cap). Paid plans unlock the full 20-package limit.

### Troubleshooting

| Issue | Cause | Fix |
|-------|-------|-----|
| Package not found | Typo in name or private package | Check spelling on pypi.org |
| Empty results | No packages provided or all failed | Ensure comma-separated names with no extra quotes |
| All results STALLED | Package really is unmaintained for 2+ years | Consider alternatives |

### Changelog

- **2026-07-20**: v1.0 — Initial release.

# Actor input Schema

## `packages` (type: `string`):

Comma-separated PyPI package names to compare (max 20). Example: requests,flask,django,fastapi,numpy,pandas,scipy,matplotlib,pytest,click

## Actor input object example

```json
{
  "packages": "requests,flask,django,fastapi,numpy,pandas,scipy,matplotlib,pytest,click"
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "packages": "requests,flask,django,fastapi,numpy,pandas,scipy,matplotlib,pytest,click"
};

// Run the Actor and wait for it to finish
const run = await client.actor("saint_person/pypi-package-release-velocity-tracker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "packages": "requests,flask,django,fastapi,numpy,pandas,scipy,matplotlib,pytest,click" }

# Run the Actor and wait for it to finish
run = client.actor("saint_person/pypi-package-release-velocity-tracker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "packages": "requests,flask,django,fastapi,numpy,pandas,scipy,matplotlib,pytest,click"
}' |
apify call saint_person/pypi-package-release-velocity-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=saint_person/pypi-package-release-velocity-tracker",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "PyPI Package Release Velocity Tracker",
        "description": "Compare PyPI package release frequencies, version-count velocity, and maintenance recency. Python developer audience, official PyPI JSON API, no key required.",
        "version": "1.0",
        "x-build-id": "6BU0U9uVIGguLbfcF"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/saint_person~pypi-package-release-velocity-tracker/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-saint_person-pypi-package-release-velocity-tracker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/saint_person~pypi-package-release-velocity-tracker/runs": {
            "post": {
                "operationId": "runs-sync-saint_person-pypi-package-release-velocity-tracker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/saint_person~pypi-package-release-velocity-tracker/run-sync": {
            "post": {
                "operationId": "run-sync-saint_person-pypi-package-release-velocity-tracker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "packages"
                ],
                "properties": {
                    "packages": {
                        "title": "PyPI Package Names",
                        "maxLength": 500,
                        "type": "string",
                        "description": "Comma-separated PyPI package names to compare (max 20). Example: requests,flask,django,fastapi,numpy,pandas,scipy,matplotlib,pytest,click",
                        "default": "requests,flask,django,fastapi,numpy,pandas,scipy,matplotlib,pytest,click"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
