# Arch Linux Packages Scraper (`b2b_lead_generation/arch-linux-packages-scraper`) Actor

Search official Arch Linux repositories and the AUR to extract detailed package metadata, dependencies, and maintainer info. Filter by repository or keyword, and instantly export clean structured datasets in JSON, CSV, or Excel formats.

- **URL**: https://apify.com/b2b_lead_generation/arch-linux-packages-scraper.md
- **Developed by:** [B2B Lead Generation](https://apify.com/b2b_lead_generation) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Arch Linux Packages Scraper

This Arch Linux packages scraper collects detailed package information from official repositories and the AUR. You can easily target specific repositories, search for a individual package, or explore AUR submissions, then export structured dataset results in JSON, CSV, or Excel formats.

### Use Cases

- **Package Lookup**: Search official repositories for specific package names (like `python-requests`) to retrieve version information, maintainers, and architecture details.
- **Single Package Detail**: Load detailed package metadata—including dependencies, licenses, maintainers, and installed size—for targeted packages.
- **AUR Search**: Query AUR submissions for specific keywords (like `yay`) and extract matching results.
- **Repository Filtering**: Limit searches to specific repositories like `extra`, `core`, or `multilib`.
- **Dataset Export**: Set item limits and download clean structured datasets directly in JSON, CSV, or Excel formats.

### Data Fields Extracted

Depending on your run configuration, the scraper outputs clean dataset rows containing:

- Package name, release, version, and repository assignment
- System architecture details
- Short description and upstream package URLs
- License details, dependency lists, and maintainer information
- Installed package size in bytes
- Last update timestamp
- Dataset origin metadata and timestamp tracking

### Input Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `mode` | string | `search` | Choose between official repo search, detailed single package lookup, or AUR search. |
| `query` | string | `python-requests` | Search keyword, exact package name, or structured package path. |
| `repos` | array | empty | Filter by specific official repository names. Leave empty to cover all official repositories. |
| `includeAur` | boolean | false | Include matching AUR results alongside official search results. |
| `maxItems` | integer | 100 | Maximum number of package rows to extract and save. |
| `requestDelaySecs` | number | 1 | Delay interval between outbound requests. |
| `timeoutSecs` | integer | 300 | Total runtime timeout for the actor run. |
| `requestTimeoutSecs` | integer | 30 | Maximum wait time per individual request. |
| `proxyConfiguration` | object | Default settings | Optional proxy setup if needed for custom routing. |

#### Example Input

```json
{
  "mode": "search",
  "query": "python-requests",
  "repos": ["extra"],
  "includeAur": false,
  "maxItems": 100,
  "requestDelaySecs": 1,
  "timeoutSecs": 300,
  "requestTimeoutSecs": 30,
  "proxyConfiguration": { "useApifyProxy": false }
}

```

### Dataset Output

| Field | Type | Description |
| --- | --- | --- |
| `pkgname` | string | Package name. |
| `repo` | string | Associated repository or `aur`. |
| `arch` | string | Architecture assignment. |
| `pkgver` | string | Package version string. |
| `pkgrel` | string | Release number. |
| `pkgdesc` | string | Summary description. |
| `url` | string | Upstream website or project URL. |
| `licenses` | array | Associated license identifiers. |
| `maintainers` | array | Names or IDs of maintaining contributors. |
| `depends` | array | Direct dependency requirements. |
| `installed_size` | integer | Total installed footprint in bytes. |
| `last_update` | string | Timestamp of the latest update in UTC ISO format. |
| `source` | string | Origin indicator (`official` or `aur`). |
| `scraped_at` | string | Timestamp indicating when the row was collected. |
| `error` | string | Displayed on error records when applicable. |
| `status` | integer | HTTP response status on error records. |
| `message` | string | Descriptive status message on error records. |

#### Example Output

```json
{
  "pkgname": "python-requests",
  "repo": "extra",
  "arch": "any",
  "pkgver": "2.34.2",
  "pkgrel": "1",
  "pkgdesc": "Python HTTP for Humans",
  "url": "[https://requests.readthedocs.io/](https://requests.readthedocs.io/)",
  "licenses": ["Apache-2.0"],
  "maintainers": ["grawlinson", "polyzen"],
  "depends": ["python"],
  "installed_size": 796237,
  "last_update": "2026-05-15T09:18:41.190Z",
  "source": "official",
  "scraped_at": "2026-10-12T00:00:00+00:00"
}

```

### Frequently Asked Questions

**Can I export the extracted dataset to CSV or Excel?**
Yes. You can export datasets from Apify directly in CSV, Excel, or JSON formats.

**How does deduplication work across runs?**
Records are automatically deduplicated by repository, architecture, and package name. Each run stamps a fresh `scraped_at` timestamp.

**What happens when a package search returns no results?**
If a query produces no results, the scraper completes cleanly with zero saved records and logs a clear run summary without raising errors.

### Trademark Notice

Arch Linux and related names, logos, and trademarks belong to their respective owners. Their use in this documentation is solely to identify the target dataset and does not imply affiliation, sponsorship, endorsement, or partnership.

### Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, sponsored by, or otherwise officially associated with Arch Linux or its owners. All data is collected from publicly accessible sources. Users are responsible for complying with applicable terms of use, rate limits, and licensing requirements.

### Is web scraping legal?

This Actor only collects publicly available data without logging in or bypassing access controls. Scraping public data is generally legal, but how you use it matters:

- **Personal data:** If the results include personal data (such as names or contact details), privacy laws like GDPR and CCPA may apply. Only collect and store personal data when you have a legitimate reason.
- **Copyright:** Content like package descriptions or documentation may be protected by copyright. Avoid republishing full copyrighted materials without permission.
- **Terms of use:** Respect source guidelines, terms, and rate limits.
- **Legal advice:** This general information is not legal advice. Consult a legal expert if you have specific regulatory questions.

To learn more, check out Apify's comprehensive guide: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

# Actor input Schema

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

search reads the official package search JSON. details loads one package JSON page, or resolves a bare name through search first. aur calls the AUR RPC v5 search.

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

Search term for official repos or the AUR. For details, use a package name such as python-requests, or a path extra/any/python-requests.

## `repos` (type: `array`):

Official repo names to filter, one per line. Examples: core, extra, multilib. Leave empty to search every official repo. Names are sent in lowercase.

## `includeAur` (type: `boolean`):

When mode is search, also query the AUR RPC for the same term after the official pages. Ignored in details and aur modes.

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

Maximum package rows to save this run. Hard cap is 1000. Error rows do not count toward this limit.

## `requestDelaySecs` (type: `number`):

Seconds to wait before each request. A short burst of the public endpoints returned 2xx with no rate-limit headers, and the actor still waits.

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

User-Agent sent on every request. Include an app name and a contact so the host can identify the client.

## `timeoutSecs` (type: `integer`):

Stop the run after this many seconds and keep rows already collected. Default 300. Maximum 3600.

## `requestTimeoutSecs` (type: `integer`):

How long to wait for one response before treating that call as failed. Default 30 seconds.

## `proxyConfiguration` (type: `object`):

Optional proxy for package requests. Leave useApifyProxy off. The public Arch and AUR endpoints do not need a proxy.

## Actor input object example

```json
{
  "mode": "search",
  "query": "python-requests",
  "repos": [],
  "includeAur": false,
  "maxItems": 100,
  "requestDelaySecs": 1,
  "userAgent": "BigiByteActorResearch/1.0 (contact: research@bigibyte.com)",
  "timeoutSecs": 300,
  "requestTimeoutSecs": 30,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Package name, repo, arch, version, release, description, upstream URL, licenses, and source URL.

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

Failed requests with URL, HTTP status, and message.

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

Every row from the run, without a table view applied.

# 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 = {
    "query": "python-requests",
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("b2b_lead_generation/arch-linux-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 = {
    "query": "python-requests",
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("b2b_lead_generation/arch-linux-packages-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "query": "python-requests",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call b2b_lead_generation/arch-linux-packages-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,b2b_lead_generation/arch-linux-packages-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/GGyEZbdymfeDKd60T/builds/06W4HYj49cDeKrPP6/openapi.json
