Scrapers / Developer & File Tools

Packagist Scraper
hipersoft/packagist-scraper
Look up exact PHP Composer packages or search Packagist in bulk and get clean structured data: latest version, total/monthly/daily downloads, favers, type, license, authors, requirements, repository and homepage. Built for dependency audits, dev tooling and n8n.
Total users
2Monthly users
1Total runs
65Per package scraped
$0.001Last rebuilt
Oct 26, 2026Overview
Look up exact PHP Composer packages by name or search Packagist in bulk and get back clean, structured JSON for every package: latest version, total, monthly and daily download counts, favers, package type, license, authors, requirements, and repository and homepage links. Built for PHP developers, dependency auditors and OSS analysts who need reliable, ready-to-use Composer package data. Export to JSON, CSV or Excel.
Features
- ๐ฏ Exact lookups โ pass precise
vendor/namepackages likemonolog/monolog,guzzlehttp/guzzleorsymfony/consoleand get one clean record each. - ๐ Bulk search โ run a free-text query (
http client,logging,orm) and collect matching packages up to your limit. - ๐ Download metrics โ capture
total,monthlyanddailydownloads plusfaversfor popularity and trend analysis. - ๐งพ Licenses & requirements โ every record includes
license,typeand the latest version'srequiresmap for fast auditing. - ๐ Ready-to-use links โ
repository,homepageand the canonical Packagisturl. - ๐งฉ Integrations โ plug the output straight into n8n, Make, Zapier and more.
- โ๏ธ Reliable by design โ retry-with-backoff and graceful handling of missing packages so runs finish cleanly.
What you get
Each package becomes one clean JSON record.
{
"name": "monolog/monolog",
"description": "Sends your logs to files, sockets, inboxes, databases and various web services",
"latestVersion": "3.10.0",
"downloads": { "total": 1051647307, "monthly": 18488587, "daily": 337950 },
"favers": 22272,
"repository": "https://github.com/Seldaek/monolog",
"type": "library",
"license": ["MIT"],
"authors": ["Jordi Boggiano"],
"requires": { "php": ">=8.1", "psr/log": "^2.0 || ^3.0" },
"homepage": "https://github.com/Seldaek/monolog",
"url": "https://packagist.org/packages/monolog/monolog",
"ok": true
}
Output schema
| Field | Type | Description |
|---|---|---|
name |
string | Package name in vendor/name form. |
description |
string | Package description / summary. |
latestVersion |
string | Latest published version. |
downloads |
object | Download counts: total, monthly and daily. |
favers |
integer | Number of users who favorited the package. |
repository |
string (URL) | Source repository URL. |
type |
string | Composer package type (e.g. library, symfony-bundle). |
license |
array | SPDX license identifiers. |
authors |
array | Package author names. |
requires |
object | Requirements of the latest version (package โ version constraint). |
homepage |
string (URL) | Project homepage. |
url |
string (URL) | Canonical Packagist page for the package. |
ok |
boolean | true for a fetched package; false with an error for one that could not be found. |
Input
{
"packages": ["monolog/monolog", "guzzlehttp/guzzle", "symfony/console"],
"search": "http client",
"maxItems": 100
}
| Field | Description |
|---|---|
packages |
Exact vendor/name packages to look up. Always fetched, in addition to any search results. |
search |
Free-text query matching package name and description. Matches are collected up to maxItems. |
maxItems |
Maximum number of packages to collect from the search query (1โ5000). |
Provide packages, search, or both in a single run.
Use cases
- Audit the licenses and requirements of the packages in your
composer.jsonbefore shipping. - Track download momentum to compare competing packages in a category.
- Build a catalog of packages for a topic (e.g. HTTP clients) for research or content.
- Enrich an internal dependency dashboard with versions, descriptions and repo links.
Pricing
Pay-per-event: you're billed a small amount per package scraped โ you only pay for what you get. See the Pricing tab for current rates.
FAQ
How many packages can I scrape per run?
Add any number of exact vendor/name packages in the packages field and collect up to maxItems (5000) more from a search query โ all in one run.
What's the output format?
Structured JSON โ one record per package with fields such as latestVersion, downloads, favers, type, license, authors and requires. Export as JSON, CSV, Excel or via the API.
What happens to a package name that doesn't exist?
It's returned as a record with ok: false and an error, so a typo never breaks the run โ every other package is still scraped.
Can I use this with n8n? Yes. Run the actor from the Apify node for n8n and map the package records straight into your workflow โ enrich a dependency list, trigger alerts on new versions, or sync package data into a database or spreadsheet.
Can I connect this Actor to other apps? The Packagist Scraper works with almost any cloud service or web app thanks to integrations on the Apify platform: Make, Zapier, Slack, Google Drive and many more, plus the Apify API, JavaScript/Python clients and MCP. Or use webhooks to trigger an action whenever a run finishes.
Tracking packages across ecosystems? Pair this with our other developer-data scrapers:
- npm Package Scraper โ search and look up npm packages with metadata, dependencies and downloads.
- PyPI Package Scraper โ metadata, dependencies, licenses and downloads for Python packages.
- RubyGems Scraper โ Ruby gems with downloads, versions, licenses and dependencies.
- crates.io Scraper โ Rust crates with downloads, versions, license and repository links.
Notes
This actor reads only publicly available package data from Packagist. It is an independent tool and is not affiliated with, endorsed by, or sponsored by Packagist, Composer or their maintainers; "Packagist" and "Composer" are trademarks of their respective owners. Original clean-room implementation.
Input
| Field | Type | Description |
|---|---|---|
packagesExact package names | array | Look up specific PHP Composer packages by their exact "vendor/name", e.g. "monolog/monolog", "guzzlehttp/guzzle", "symfony/console". Combined with any search results in the same run. |
searchSearch query | string | Free-text Packagist search (matches package name and description), e.g. "http client". Matching packages are collected up to Max items. |
maxItemsMax items (search) | integer | Maximum number of packages to collect from the search query. Exact package names above are always fetched in addition to this. Default: 100 |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~packagist-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"packages": [
"monolog/monolog",
"guzzlehttp/guzzle"
],
"search": "http client"
}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/packagist-scraper").call(run_input={
"packages": [
"monolog/monolog",
"guzzlehttp/guzzle"
],
"search": "http client"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('hipersoft/packagist-scraper').call({
"packages": [
"monolog/monolog",
"guzzlehttp/guzzle"
],
"search": "http client"
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| Package Scraped Charged per package scraped. | $0.001 | $0.0005 |
You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.
Related scrapers
Bulk Image Downloader
Download thousands of images from a list of URLs and store each in the key-value store with a public link. Returns content type, size, dimensions and SHA-256 per image. Bulk-ready. Great for datasets, backups and media pipelines.
8,102 runs ยท 103 users ยท $0.056 / url processedText to Speech
Convert any text to natural-sounding speech as an MP3 download. 300+ premium neural voices across 70+ languages, adjustable rate, pitch and volume. Great for voiceovers, videos, accessibility and audio content. No setup.
278 runs ยท 22 users ยท $0.01 / audio generatedGoogle Maps Email Extractor
Search Google Maps for businesses, then crawl each business website to extract emails, social profiles and extra phone numbers. Turns any Maps search into a ready lead list. No setup.
159 runs ยท 8 users ยท $0.006 / business lead scrapedWebsite Screenshot
Capture full-page or viewport screenshots of any URL as PNG or JPEG, at any device size. For monitoring, previews, thumbnails and automation workflows.
156 runs ยท 3 users ยท $0.004 / screenshot capturedBulk URL Status Checker
Check thousands of URLs over plain HTTP: status codes, broken links (404/410/5xx), full redirect chains, response time, content type, page title and SSL certificate expiry.
154 runs ยท 13 users ยท $0.002 / url checkedGoogle Search Scraper
Scrape Google Search results (organic listings) for any query: title, URL, displayed URL, snippet and position. Multi-query, per-country/language, pagination. Uses Google SERP proxy โ reliable, no captcha, no setup.
121 runs ยท 8 users ยท $0.001 / result scrapedSend the site and the fields. We build it and you get it first.