Developer tools
PyPI Metadata API Scraper
Pull rich metadata for any PyPI package via the PyPI JSON API — current version, dependencies, classifiers, author, license, home page, download URLs, release history — export to JSON or CSV. Free PyPI API, no key required, with download-stat support.
Free Apify credit covers a first run. No credit card to try.
What this Actor scrapes
PyPI's metadata API (pypi.org/pypi/<package>/json) returns a full metadata record for every published package. This Actor accepts a list of package names, fans the requests out in parallel, and writes one typed dataset row per package — version, requires_dist, classifiers (Python versions, OS, license, framework), author, project URLs, and the latest 10 release timestamps. Bulk PyPI data export in a single run.
What we handle for you
- 🛡️ Browser fingerprint rotation —
curl-cffiimpersonates real Chrome, Firefox, and Safari TLS handshakes so the endpoint sees a browser, not a Python script. Profiles rotate across requests. - 🌐 Residential proxy rotation via Apify Proxy — fresh session and exit IP on every block or rate-limit response.
- 🔁 Retries with exponential backoff on
408 / 429 / 5xx— up to 5 attempts per package,Retry-Afterrespected. - 🧱 Rate-limit-aware pacing — when the API pushes back we throttle automatically; you never get silently blocked or handed an empty dataset.
- 🧊 Clean, typed rows — Pydantic-validated, ISO-8601 timestamps, stable field names. Export to JSON, CSV, or Excel straight from the Apify Console.
- 💰 Pay-Per-Event pricing — you pay only for rows that hit your dataset. No data, no charge.
Use cases
- Dependency intel — feed your dependency tree to surface outdated or yanked packages across a full monorepo.
- Compliance audit — pull license classifier and Python-version bounds for every direct dependency in one bulk PyPI data export.
- Maintainer mapping — correlate your stack to authors and maintainers for supply-chain analysis.
- Release monitoring — schedule a daily run on a watch list; alert your team when a new version lands.
- RAG corpus — pull PyPI package READMEs in bulk for AI retrieval pipelines or language-model fine-tuning datasets.
Input
Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.
| Field | Type | Required | What it does |
|---|---|---|---|
packages | array | yes | List of PyPI package names. Case-insensitive — `Requests` and `requests` are equivalent on PyPI. |
includeReleases | boolean | no | When true, include the latest 10 release versions + dates per package. Adds no extra API call (it's in the same JSON). |
concurrency | integer | no | Parallel API requests. |
{
"packages": [
"httpx"
],
"includeReleases": true,
"concurrency": 4,
"proxyConfiguration": {
"useApifyProxy": false
}
} Output
One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.
nameversionsummarydescriptiondescription_content_typeauthorauthor_emailmaintainerlicensehome_pageproject_urlproject_urlsrequires_pythonrequires_distclassifierskeywords
{
"name": "httpx",
"version": "0.27.0",
"summary": "The next generation HTTP client.",
"requires_python": ">=3.9",
"license": "BSD-3-Clause",
"home_page": null,
"project_url": "https://pypi.org/project/httpx/"
} Pricing
| Event | Price | When |
|---|---|---|
| Actor start | $0.20 | Once per run, covers warm-up and proxy session setup. |
| Result emitted | $0.0015 | Per result written to the dataset. |
You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.
FAQ
What is the PyPI metadata API?
pypi.org/pypi/<package>/json. It returns the full metadata record for a published package: version info, classifiers, dependencies, author details, and release history. This Actor wraps that endpoint with retry logic, proxy rotation, and bulk throughput so you can pull thousands of records in a single run.Are download counts included?
pypi-public-data public dataset or the pypistats.org API — those are separate surfaces and not in scope here.What happens if a package name doesn't exist?
404 and skips that package. The dataset still contains every package that resolved successfully; the run log lists skipped names.Why is the `description` field so large?
Can I get vulnerability or CVE data?
osv.dev) or Snyk's advisory database for vulnerability enrichment; they publish dedicated APIs built for that purpose.How do I do a bulk PyPI data export for my whole requirements.txt?
concurrency to 16 and consider enabling Apify residential proxies to distribute the load. At $1.50 / 1 000 results the cost scales linearly.Ready to run it?
Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.
Related Actors