# Packagist PHP Packages Scraper (`parseforge/packagist-php-packages-scraper`) Actor

Scrape PHP package metadata from Packagist public API. Get package name, vendor, description, latest version, downloads, dependencies, repository, license. No API key required.

- **URL**: https://apify.com/parseforge/packagist-php-packages-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.37 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## 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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/parseforge-banner.png)

## 🐘 Packagist PHP Packages Scraper

> 🚀 **Search the entire Packagist PHP catalog in seconds.** Filter by keyword, type, or tags, then enrich with downloads, dependencies, and GitHub stats. No API key, no registration, no manual CSV wrangling.

> 🕒 **Last updated:** 2026-05-12 · **📊 Up to 24 fields** per record · **Search 400,000+ PHP packages** indexed by Packagist · **Composer-compatible types** including Symfony bundles, WordPress plugins, Drupal modules · **Hourly upstream refresh**

The Packagist PHP Packages Scraper turns the official **Packagist.org** public API into a clean, ready-to-use dataset. Packagist is the default Composer registry for PHP and the canonical source for every public PHP library, framework, plugin, and tool. The actor exposes two modes: **search** for keyword-driven discovery and **packageDetail** for deep enrichment of a specific package by `vendor/name`.

In search mode you get vendor, package name, description, repository, downloads, and favers (stargazers) for every match, with optional `type` filter (library, project, symfony-bundle, wordpress-plugin, drupal-module, and more) and tag filters (`orm`, `framework`, `testing`, ...). In packageDetail mode you get the full enrichment: monthly and daily and total downloads, dependent count, suggester count, GitHub stars and watchers and forks and open issues, maintainer list, latest version with timestamp, license, keywords, homepage, and the latest `require` map. The output is flat JSON ready to push into a dashboard, dependency audit, or vendor inventory.

| 🎯 Target audience | 💼 Primary use cases |
|---|---|
| PHP and Composer engineers | Discover packages by tag and audit dependency health |
| Security and compliance | Catalog dependency licenses and detect abandoned packages |
| Hosting and managed PHP | Build internal mirrors and dependency dashboards |
| Open-source maintainers | Track adoption metrics for your own packages |
| Research and analytics | Study the PHP ecosystem and Composer adoption curves |

---

### 📋 What the Packagist PHP Packages Scraper does

- 🔎 **Keyword search.** Pass a query like `symfony`, `laravel`, or `orm` and stream every matching package.
- 🏷️ **Type filter.** Restrict to `library`, `project`, `metapackage`, `composer-plugin`, `symfony-bundle`, `wordpress-plugin`, or `drupal-module`.
- 🏷️ **Tag filter.** Combine tags like `["orm", "framework"]` to narrow further.
- 📦 **Detail mode.** Pass a list of `vendor/name` ids and get the full Packagist metadata for each.
- 🐙 **GitHub stats baked in.** Detail records include stars, watchers, forks, and open issues when the repository is on GitHub.
- ⬇️ **Download metrics.** Monthly, daily, and total downloads pre-computed, plus favers (stargazer count on Packagist).
- 📌 **Latest version metadata.** Detail mode resolves the most recent stable version, its release date, license, keywords, and `require` map.
- 🚨 **Abandoned flag.** Search results surface the upstream `abandoned` marker when present.

Each record carries a `mode` discriminator (`search` or `packageDetail`) so you can union both shapes in one downstream table.

> 💡 **Why it matters:** PHP powers a significant share of the web through WordPress, Laravel, Drupal, Symfony, and countless custom apps. A clean Packagist feed lets engineering, security, and product teams reason about real dependency choices instead of guessing.

---

### 🎬 Full Demo

🚧 Coming soon: a 3-minute walkthrough showing how to search by tag, enrich with detail mode, and route results into a vendor inventory.

---

### ⚙️ Input

<table>
<tr><th>Field</th><th>Type</th><th>Description</th></tr>
<tr><td><code>mode</code></td><td>enum</td><td><code>search</code> or <code>packageDetail</code>. Default <code>search</code>.</td></tr>
<tr><td><code>query</code></td><td>string</td><td>Keyword search across packages. Required in <code>search</code> mode.</td></tr>
<tr><td><code>type</code></td><td>enum</td><td>Composer type filter. One of <code>library</code>, <code>project</code>, <code>metapackage</code>, <code>composer-plugin</code>, <code>symfony-bundle</code>, <code>wordpress-plugin</code>, <code>drupal-module</code>.</td></tr>
<tr><td><code>tags</code></td><td>array</td><td>Tag filter, for example <code>["orm", "framework"]</code>.</td></tr>
<tr><td><code>packageNames</code></td><td>array</td><td>List of <code>vendor/name</code> ids for <code>packageDetail</code> mode.</td></tr>
<tr><td><code>maxItems</code></td><td>integer</td><td>Free users 10, paid users up to 1,000,000.</td></tr>
</table>

Example: top Laravel packages by Packagist relevance.

```json
{
  "mode": "search",
  "query": "laravel",
  "maxItems": 100
}
````

Example: enrich a curated set of dependencies.

```json
{
  "mode": "packageDetail",
  "packageNames": ["symfony/symfony", "laravel/framework", "guzzlehttp/guzzle"],
  "maxItems": 10
}
```

> ⚠️ **Good to Know:** Packagist sorts search results by relevance to your query, not by downloads. Use detail mode to get download metrics for ranking. Search mode paginates internally at 100 per page until your `maxItems` is reached.

***

### 📊 Output

Each record is a flat JSON object with the fields below. Field availability depends on the chosen mode.

#### 🧾 Schema

| Field | Type | Example |
|---|---|---|
| 🆔 `mode` | string | `search` |
| 🏷️ `name` | string | `laravel/framework` |
| 🏢 `vendor` | string | `laravel` |
| 📦 `packageName` | string | `framework` |
| 🔗 `url` | string | `https://packagist.org/packages/laravel/framework` |
| 📝 `description` | string | `The Laravel Framework.` |
| 🐙 `repository` | string | `https://github.com/laravel/framework` |
| ⬇️ `downloads` | number | `525255647` |
| ⭐ `favers` | number | `35180` |
| 🚨 `abandoned` | string | `successor-package-name` |
| 📥 `monthlyDownloads` | number | `12500000` |
| 📅 `dailyDownloads` | number | `420000` |
| 🧮 `totalDownloads` | number | `525255647` |
| 👥 `dependentsCount` | number | `12300` |
| 💡 `suggestersCount` | number | `450` |
| ⭐ `githubStars` | number | `34501` |
| 👁️ `githubWatchers` | number | `34501` |
| 🍴 `githubForks` | number | `12000` |
| 🐛 `githubOpenIssues` | number | `220` |
| 👤 `maintainers` | array | `[{ "name": "taylorotwell", "avatar": "..." }]` |
| 🏷️ `latestVersion` | string | `v11.30.0` |
| 📅 `latestVersionTime` | string | `2026-04-30T10:00:00+00:00` |
| 🪪 `latestLicense` | array | `["MIT"]` |
| ⏱️ `scrapedAt` | string | `2026-05-12T16:30:27.799Z` |

#### 📦 Sample records

<details>
<summary>Typical: flagship framework with full search payload</summary>

```json
{
  "mode": "search",
  "name": "laravel/framework",
  "vendor": "laravel",
  "packageName": "framework",
  "url": "https://packagist.org/packages/laravel/framework",
  "description": "The Laravel Framework.",
  "repository": "https://github.com/laravel/framework",
  "downloads": 525255647,
  "favers": 35180,
  "scrapedAt": "2026-05-12T16:30:27.799Z"
}
```

</details>

<details>
<summary>Edge case: third-party plugin with high stargazer count</summary>

```json
{
  "mode": "search",
  "name": "spatie/laravel-permission",
  "vendor": "spatie",
  "packageName": "laravel-permission",
  "url": "https://packagist.org/packages/spatie/laravel-permission",
  "description": "Permission handling for Laravel 12 and up",
  "repository": "https://github.com/spatie/laravel-permission",
  "downloads": 95232001,
  "favers": 13042,
  "scrapedAt": "2026-05-12T16:30:27.799Z"
}
```

</details>

<details>
<summary>Sparse: starter skeleton with terse description</summary>

```json
{
  "mode": "search",
  "name": "laravel/laravel",
  "vendor": "laravel",
  "packageName": "laravel",
  "url": "https://packagist.org/packages/laravel/laravel",
  "description": "The skeleton application for the Laravel framework.",
  "repository": "https://github.com/laravel/laravel",
  "downloads": 61972287,
  "favers": 84961,
  "scrapedAt": "2026-05-12T16:30:27.799Z"
}
```

</details>

***

### ✨ Why choose this Actor

| | Capability |
|---|---|
| 🆓 | **No API key.** Packagist exposes a public API, and this actor inherits that. |
| 🔎 | **Keyword and tag filtering.** Stream by query, type, and tag in one call. |
| 📦 | **Two modes.** Lightweight search for discovery, deep detail for enrichment. |
| 🐙 | **GitHub stats included.** Stars, forks, watchers, open issues on detail mode. |
| 📌 | **Latest version metadata.** Release date, license, keywords, and `require` map. |
| 🚨 | **Abandoned marker.** Surface deprecation signals from upstream. |
| 🔌 | **Integrates everywhere.** Land results in Sheets, Notion, Slack, or a database. |

> 📊 400,000+ packages searchable, 24 fields per record on detail mode, 1 free actor.

***

### 📈 How it compares to alternatives

| Approach | Cost | Coverage | Refresh | Filters | Setup |
|---|---|---|---|---|---|
| **⭐ Packagist PHP Packages Scraper** *(this Actor)* | Free tier available | Whole Packagist catalog | On-demand | Query, type, tags, names | One JSON input |
| Direct API integration | Engineering time | Whatever you build | Custom | Custom code | High |
| Composer CLI scripting | Free | Local only | Per-command | None | Shell expertise |
| Paid dependency intelligence | $100+ per month | Often broader, multi-ecosystem | Daily | Vendor-specific | Account, key, SDK |

For teams that want PHP dependency intelligence without writing API client code, this actor is the shortest path from question to row.

***

### 🚀 How to use

1. 🔐 **Create a free Apify account.** Sign up at [Apify](https://console.apify.com/sign-up?fpr=vmoqkp) and claim the $5 starter credit.
2. 🎚️ **Open the actor.** Pick `search` for discovery or `packageDetail` for enrichment.
3. 🔎 **Set filters.** Add a query, optional type, and tag list for search. List `vendor/name` ids for detail mode.
4. ▶️ **Run it.** Free users get a 10-row preview, paid users can pull up to 1,000,000 records per run.
5. 📤 **Export.** Download JSON, CSV, or Excel, or push results into Google Sheets, Airtable, Slack, Notion, or a database via Apify integrations.

> ⏱️ Total time from sign-up to first dataset: about 90 seconds.

***

### 💼 Business use cases

<table>
<tr><td width="50%">

#### 🛠️ Engineering and platform

- Inventory the dependency graph of your PHP apps
- Spot abandoned packages and plan replacements
- Track GitHub stars and forks across vendor libraries
- Build internal dashboards of approved packages

</td><td width="50%">

#### 🔒 Security and compliance

- License audits across the dependency tree
- Detect packages with low maintainer counts
- Watch for sudden adoption drops or repo deletions
- Cross-reference Packagist with vulnerability feeds

</td></tr>
<tr><td width="50%">

#### 📊 Analytics and BI

- Ecosystem-wide adoption studies of PHP frameworks
- Trend reports on Composer type distributions
- Tag popularity over time across years
- Top-100 dashboards by downloads, favers, or stars

</td><td width="50%">

#### 🧰 Tooling and integrations

- Power internal package search portals
- Sync Packagist data into a developer-experience dashboard
- Drive recommendation engines for new projects
- Refresh marketing site comparison tables

</td></tr>
</table>

***

### 🌟 Beyond business use cases

Data like this powers more than commercial workflows. The same structured records support research, education, civic projects, and personal initiatives.

<table>
<tr>
<td width="50%">

#### 🎓 Research and academia

- Empirical datasets for papers, thesis work, and coursework
- Longitudinal studies tracking changes across snapshots
- Reproducible research with cited, versioned data pulls
- Classroom exercises on data analysis and ethical scraping

</td>
<td width="50%">

#### 🎨 Personal and creative

- Side projects, portfolio demos, and indie app launches
- Data visualizations, dashboards, and infographics
- Content research for bloggers, YouTubers, and podcasters
- Hobbyist collections and personal trackers

</td>
</tr>
<tr>
<td width="50%">

#### 🤝 Non-profit and civic

- Transparency reporting and accountability projects
- Advocacy campaigns backed by public-interest data
- Community-run databases for local issues
- Investigative journalism on public records

</td>
<td width="50%">

#### 🧪 Experimentation

- Prototype AI and machine-learning pipelines with real data
- Validate product-market hypotheses before engineering spend
- Train small domain-specific models on niche corpora
- Test dashboard concepts with live input

</td>
</tr>
</table>

***

### 🔌 Automating Packagist PHP Packages Scraper

Drive this actor from your own stack with a few lines of code.

- Trigger runs from **Node.js** using the [Apify JavaScript client](https://docs.apify.com/api/client/js/)
- Trigger runs from **Python** using the [Apify Python client](https://docs.apify.com/api/client/python/)
- Read the [Apify REST API docs](https://docs.apify.com/api/v2) to call the actor over HTTP

Schedules let you re-pull a curated vendor inventory weekly, watch a single package daily, or sync a search query across all packages on a cron.

***

### ❓ Frequently Asked Questions

#### 💰 Is there a cost to run this Actor?

The actor itself is free to use on Apify. You pay only for the platform compute and storage you consume during a run. New accounts come with $5 of starter credit, which covers many small runs.

#### 🔑 Do I need a Packagist API key?

No. The actor uses public read-only endpoints that do not require authentication. The same endpoints power the official Packagist website.

#### 🏷️ Which Composer types are supported in the filter?

The `type` enum covers `library`, `project`, `metapackage`, `composer-plugin`, `symfony-bundle`, `wordpress-plugin`, and `drupal-module`. Leave the field blank to include every type.

#### 🔎 How does search sorting work?

Packagist sorts search results by relevance to your query, not by downloads or stars. To rank by downloads, run search first to gather names then re-run in `packageDetail` mode and sort downstream.

#### 📦 What does packageDetail mode add?

Detail mode returns the full Packagist payload: monthly, daily, and total downloads, dependent and suggester counts, GitHub stars and watchers and forks and open issues, maintainer list, latest version with release date, license, keywords, homepage, and the latest `require` map.

#### 🤝 Can I use this Actor for commercial use?

Yes. The Packagist registry is openly accessible and widely used in commercial tooling. You are responsible for following the Packagist terms of service and the license of each individual package.

#### 💳 Do I need a paid Apify plan?

A paid plan is not required. Free accounts can preview up to 10 rows per run. Paid plans unlock up to 1,000,000 rows per run plus larger storage and compute budgets.

#### 🆘 What if a run fails?

Open the run in the Apify console to inspect the log, the input, and any partial dataset. Network errors and upstream rate limits are surfaced as `error` items in the dataset rather than as silent crashes.

#### ⚖️ Is scraping this data legal?

Packagist publishes its API for public consumption. This actor reads only the public endpoints with no login or token, so the data flow is the same one any browser or Composer install would produce. Compliance with the source terms and local law remains your responsibility.

#### 🚨 Are abandoned packages flagged?

Yes. Search results include an optional `abandoned` field when Packagist marks a package as abandoned, which often names the recommended successor.

#### 🔄 How fresh is the data?

Packagist refreshes its metadata several times per hour. Each run reads the live API, so values reflect the most recent upstream refresh at the moment of the request.

***

### 🔌 Integrate with any app

Stream results into the tools your team already uses.

- [**Make**](https://apify.com/integrations) - low-code automation across thousands of apps
- [**Zapier**](https://apify.com/integrations) - trigger and route data into 6,000+ services
- [**n8n**](https://apify.com/integrations) - self-hosted workflow runner with native Apify support
- [**Slack**](https://apify.com/integrations) - notifications when runs complete or hit anomalies
- [**Google Sheets**](https://apify.com/integrations) - one-click dataset to spreadsheet sync
- [**BigQuery and Snowflake**](https://apify.com/integrations) - warehouse loads via webhook or schedule

***

### 🔗 Recommended Actors

- [**📦 NPM Packages Scraper**](https://apify.com/parseforge/npm-packages-scraper) - inspect Node.js package metadata, downloads, and versions
- [**🐙 GitHub Trending Scraper**](https://apify.com/parseforge/github-trending-scraper) - track trending repos by language and time window
- [**🦀 Crates.io Scraper**](https://apify.com/parseforge/crates-io-scraper) - browse the Rust package registry with the same shape
- [**🔎 CrossRef Scraper**](https://apify.com/parseforge/crossref-scraper) - pull peer-reviewed software engineering research papers
- [**🌐 Wikidata Entity Search Scraper**](https://apify.com/parseforge/wikidata-entity-search-scraper) - enrich vendor and project records with structured entity links

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more data feeds across developer ecosystems, research, and analytics.

***

**🆘 Need Help?** [**Open our contact form**](https://tally.so/r/BzdKgA) and a human will reply within one business day.

***

> This Actor accesses publicly available data only. By using it you accept the responsibility to comply with the source's Terms of Service, rate limits, and applicable laws including data-protection regulations. The data is scraped on-demand from the upstream public API and is not cached or pre-stored by this Actor.

# Actor input Schema

## `mode` (type: `string`):

What to scrape

## `query` (type: `string`):

Keyword search across packages

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

Composer package type filter

## `tags` (type: `array`):

Filter by package tags (e.g. orm, framework)

## `packageNames` (type: `array`):

List of package names in vendor/name format (e.g. symfony/symfony, laravel/framework)

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## Actor input object example

```json
{
  "mode": "search",
  "query": "symfony",
  "type": "",
  "tags": [],
  "packageNames": [
    "symfony/symfony"
  ],
  "maxItems": 10
}
```

# Actor output Schema

## `overview` (type: `string`):

Overview of scraped data

## `fullData` (type: `string`):

Complete dataset

# 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 = {
    "mode": "search",
    "query": "symfony",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/packagist-php-packages-scraper").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 = {
    "mode": "search",
    "query": "symfony",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/packagist-php-packages-scraper").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 '{
  "mode": "search",
  "query": "symfony",
  "maxItems": 10
}' |
apify call parseforge/packagist-php-packages-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=parseforge/packagist-php-packages-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Packagist PHP Packages Scraper",
        "description": "Scrape PHP package metadata from Packagist public API. Get package name, vendor, description, latest version, downloads, dependencies, repository, license. No API key required.",
        "version": "0.0",
        "x-build-id": "IwWruga0f8bYWajCH"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~packagist-php-packages-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-packagist-php-packages-scraper",
                "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/parseforge~packagist-php-packages-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-packagist-php-packages-scraper",
                "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/parseforge~packagist-php-packages-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-packagist-php-packages-scraper",
                "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",
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "search",
                            "packageDetail"
                        ],
                        "type": "string",
                        "description": "What to scrape",
                        "default": "search"
                    },
                    "query": {
                        "title": "Search query (for search mode)",
                        "type": "string",
                        "description": "Keyword search across packages"
                    },
                    "type": {
                        "title": "Package type (for search mode, optional)",
                        "enum": [
                            "",
                            "library",
                            "project",
                            "metapackage",
                            "composer-plugin",
                            "symfony-bundle",
                            "wordpress-plugin",
                            "drupal-module"
                        ],
                        "type": "string",
                        "description": "Composer package type filter",
                        "default": ""
                    },
                    "tags": {
                        "title": "Tag filter (for search mode, optional)",
                        "type": "array",
                        "description": "Filter by package tags (e.g. orm, framework)",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "packageNames": {
                        "title": "Package names (for packageDetail mode)",
                        "type": "array",
                        "description": "List of package names in vendor/name format (e.g. symfony/symfony, laravel/framework)",
                        "default": [
                            "symfony/symfony"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
