PyPI Python Packages Scraper - Versions, Authors & Licenses
Pricing
from $6.80 / 1,000 results
PyPI Python Packages Scraper - Versions, Authors & Licenses
Scrape Python packages by name or keyword: version, summary, author and maintainer contacts, license, repository links, requires-python, release date, keywords, classifiers and dependencies. Export to JSON, CSV or Excel.
Pricing
from $6.80 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
PyPI Python Packages Scraper - Versions, Authors & Licenses
Here is one real result, with every field the actor returns:
{"name": "FastAPI-Cookiecutter","version": "0.1.2","summary": "This projects consist of a cookiecutter template that generates a full structure for a creating a PyPi standard package.","author": "Zhiwei Zhang","authorEmail": "zhiwei2017@gmail.com","maintainer": null,"maintainerEmail": null,"license": "MIT","requiresPython": ">=3.7,<4.0","releaseDate": "2024-02-03T21:30:15.210718Z","homePage": "https://github.com/zhiwei2017/fastapi-cookiecutter","projectUrl": "https://pypi.org/project/FastAPI-Cookiecutter/","documentationUrl": "https://zhiwei2017.github.io/fastapi-cookiecutter/","repositoryUrl": "https://github.com/zhiwei2017/fastapi-cookiecutter","bugTrackerUrl": null,"changelogUrl": null,"fundingUrl": null,"keywords": ["cookiecutter template", "python37", "python38", "fastapi", "RESTful API"],"classifiers": ["License :: OSI Approved :: MIT License","Programming Language :: Python :: 3","Programming Language :: Python :: 3.12"],"dependencies": ["cookiecutter (>=2.1,<2.2)"],"dependencyCount": 1,"releaseCount": 4,"yanked": false,"matchedQuery": "fastapi","source": "pypi","observedAt": "2026-08-10T14:32:05.540Z"}
The most complete PyPI package scraper available. It returns every metadata field a project page exposes, including version, summary, author and maintainer contacts, license, requires-python, release date, all project and repository links, keywords, classifiers and the full dependency list, plus derived counts, and gives you exact-name lookup and keyword search to target exactly the packages you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor looks up Python packages on the Python Package Index (PyPI) by exact name and by keyword search, reads each project's full metadata, and writes one normalized record per package to the run's dataset. Every record carries the version, summary, author and maintainer with their email addresses, license, requires-python constraint, release date, the project, home, documentation, repository, bug-tracker, changelog and funding URLs, plus keywords, classifiers, the dependency list and derived dependencyCount and releaseCount. Missing source values are returned as null.
Exact packageNames are fetched directly; each entry in searchQueries is matched against package names across the whole index, ranked best-first, and the top matches are fetched with full metadata.
Quickstart
Open the actor, paste this into the input, and press Run. It looks up three packages by name and one by keyword search.
{"packageNames": ["requests", "numpy", "flask"],"searchQueries": ["fastapi"],"maxPackages": 10}
Every input field is optional, but provide at least one package name or search query. Both fields are lists, so one run can cover many packages and searches.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
packageNames | string[] | no | ["requests","numpy","flask"] | Exact PyPI project names to look up, for example requests, numpy, django. Each returns full metadata. |
searchQueries | string[] | no | ["fastapi"] | Keywords matched against package names across the whole index, for example machine learning, async http. Best matches are fetched with full metadata. |
maxPackages | integer | no | 10 | Maximum packages to collect across all names and searches. Free Apify plans are capped at 10 per run. |
Output reference
One dataset item per package. Types: string, integer, boolean, string[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
name | string | PyPI project name. |
version | string | Latest version string. |
summary | string | One-line project summary. |
author | string | Author name. |
authorEmail | string | Author email, when published. |
maintainer | string | Maintainer name, or null. |
maintainerEmail | string | Maintainer email, or null. |
license | string | License, for example MIT, Apache-2.0. |
requiresPython | string | Requires-Python constraint, for example >=3.7,<4.0. |
releaseDate | string | Release date of the latest version (ISO 8601). |
homePage | string | Project home page URL. |
projectUrl | string | PyPI project URL. |
documentationUrl | string | Documentation URL, or null. |
repositoryUrl | string | Source repository URL, or null. |
bugTrackerUrl | string | Bug tracker / issues URL, or null. |
changelogUrl | string | Changelog URL, or null. |
fundingUrl | string | Funding / sponsor URL, or null. |
keywords | string[] | Author-supplied keywords. |
classifiers | string[] | Trove classifiers (license, Python versions, topics). |
dependencies | string[] | Declared runtime dependencies with version specifiers. |
dependencyCount | integer | Number of declared dependencies. |
releaseCount | integer | Total number of releases on PyPI. |
yanked | boolean | true when the latest version has been yanked. |
matchedQuery | string | The search query that surfaced this package, or null for a direct name lookup. |
source | string | Source label. Always pypi. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed lookup, a record with a populated error field is written instead. |
Example output record
Real record from a live run (input {"searchQueries":["fastapi"]}). The keywords and classifiers arrays are trimmed here; every value shown is unchanged from the live record:
{"name": "FastAPI-Cookiecutter","version": "0.1.2","summary": "This projects consist of a cookiecutter template that generates a full structure for a creating a PyPi standard package.","author": "Zhiwei Zhang","authorEmail": "zhiwei2017@gmail.com","maintainer": null,"maintainerEmail": null,"license": "MIT","requiresPython": ">=3.7,<4.0","releaseDate": "2024-02-03T21:30:15.210718Z","homePage": "https://github.com/zhiwei2017/fastapi-cookiecutter","projectUrl": "https://pypi.org/project/FastAPI-Cookiecutter/","documentationUrl": "https://zhiwei2017.github.io/fastapi-cookiecutter/","repositoryUrl": "https://github.com/zhiwei2017/fastapi-cookiecutter","keywords": ["cookiecutter template", "fastapi", "RESTful API"],"classifiers": ["License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3"],"dependencies": ["cookiecutter (>=2.1,<2.2)"],"dependencyCount": 1,"releaseCount": 4,"yanked": false,"matchedQuery": "fastapi","source": "pypi","observedAt": "2026-08-10T14:32:05.540Z"}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~pypi-packages-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"packageNames":["requests","numpy","flask"],"maxPackages":10}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~pypi-packages-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQueries":["machine learning","async http"],"maxPackages":100}'
Apify CLI:
apify call scrapers_lat/pypi-packages-scraper \--input '{"packageNames":["django"]}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per package returned (
resultevent). See the pricing tab for the current per-result price. - No charge on failure. If a lookup has no match or errors, the actor writes a record with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 packages per run. Upgrade for higher
maxPackages. - Live data. Versions and metadata are read at run time, so each record reflects the moment of the run (see
observedAt).
FAQ and troubleshooting
Can I look up several packages at once?
Yes. packageNames and searchQueries are both lists, so one run can cover many packages and searches.
How does the keyword search work?
Each query is matched against package names across the whole index, ranked best-first, and the top matches are fetched with full metadata. The matchedQuery field tells you which query surfaced each package.
Do I get author and maintainer contacts? Yes, when the package publishes them. Author, maintainer and their email addresses are captured as standard.
Do I get the dependency list?
Yes. The dependencies array carries the declared runtime dependencies with their version specifiers, and dependencyCount gives the total.
How fresh is the data?
Versions and metadata are read live at run time, so each record reflects the moment of the run (see observedAt).
Is this an official PyPI tool? No. This actor is independent and has no affiliation with the Python Package Index or the Python Software Foundation. It accesses only publicly available package data.
Related scrapers
- npm Packages Scraper: JavaScript package metadata from npm.
- crates.io Rust Packages Scraper: Rust crate metadata.
- Docker Hub Images Scraper: container image metadata and stats.
- GitHub Repositories Scraper: repositories with stars and metadata.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with the Python Package Index or the Python Software Foundation. Accesses only publicly available package data. Use the results in accordance with the source's terms.
