PyPI Python Packages Scraper - Versions, Authors & Licenses avatar

PyPI Python Packages Scraper - Versions, Authors & Licenses

Pricing

from $6.80 / 1,000 results

Go to Apify Store
PyPI Python Packages Scraper - Versions, Authors & Licenses

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

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

PyPI Python Packages Scraper - Versions, Authors & Licenses

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

Apify Coverage Output Billing

Table of contents

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

FieldTypeRequiredDefaultDescription
packageNamesstring[]no["requests","numpy","flask"]Exact PyPI project names to look up, for example requests, numpy, django. Each returns full metadata.
searchQueriesstring[]no["fastapi"]Keywords matched against package names across the whole index, for example machine learning, async http. Best matches are fetched with full metadata.
maxPackagesintegerno10Maximum 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.

FieldTypeDescription
namestringPyPI project name.
versionstringLatest version string.
summarystringOne-line project summary.
authorstringAuthor name.
authorEmailstringAuthor email, when published.
maintainerstringMaintainer name, or null.
maintainerEmailstringMaintainer email, or null.
licensestringLicense, for example MIT, Apache-2.0.
requiresPythonstringRequires-Python constraint, for example >=3.7,<4.0.
releaseDatestringRelease date of the latest version (ISO 8601).
homePagestringProject home page URL.
projectUrlstringPyPI project URL.
documentationUrlstringDocumentation URL, or null.
repositoryUrlstringSource repository URL, or null.
bugTrackerUrlstringBug tracker / issues URL, or null.
changelogUrlstringChangelog URL, or null.
fundingUrlstringFunding / sponsor URL, or null.
keywordsstring[]Author-supplied keywords.
classifiersstring[]Trove classifiers (license, Python versions, topics).
dependenciesstring[]Declared runtime dependencies with version specifiers.
dependencyCountintegerNumber of declared dependencies.
releaseCountintegerTotal number of releases on PyPI.
yankedbooleantrue when the latest version has been yanked.
matchedQuerystringThe search query that surfaced this package, or null for a direct name lookup.
sourcestringSource label. Always pypi.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull 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:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "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 (result event). 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 error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on 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.

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.