# ArtifactHub Scraper (`crawlerbros/artifacthub-scraper`) Actor

Scrape ArtifactHub - the hub for cloud-native packages. Search Helm charts, Falco rules, OPA policies, OLM operators, KEDA scalers, and 15+ other package types. Get metadata, versions, stars, publishers, and direct links.

- **URL**: https://apify.com/crawlerbros/artifacthub-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (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 $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## ArtifactHub Scraper

Scrape [ArtifactHub](https://artifacthub.io) — the official hub for cloud-native packages. Extract Helm charts, Falco rules, OPA policies, OLM operators, KEDA scalers, Krew plugins, Argo templates, Kyverno policies, and 15+ other package types with full metadata.

### What You Can Scrape

- **Helm Charts** — Kubernetes application packages
- **Falco Rules** — Runtime security rules
- **OPA Policies** — Open Policy Agent rules
- **OLM Operators** — Kubernetes operators via Operator Lifecycle Manager
- **Tekton Tasks & Pipelines** — CI/CD pipeline components
- **KEDA Scalers** — Kubernetes event-driven autoscaling
- **Krew Plugins** — kubectl plugin manager packages
- **Argo Templates** — Argo Workflows workflow templates
- **Kubewarden, Gatekeeper, Kyverno Policies** — Policy-as-code solutions
- And more...

### Input

| Field | Type | Description |
|-------|------|-------------|
| `mode` | select | `searchPackages` (default) or `getPackageDetail` |
| `searchQuery` | string | Free-text search query (e.g. `nginx`, `prometheus`) |
| `packageKind` | select | Filter by package type (Helm Chart, OLM Operator, etc.) |
| `sort` | select | Sort by `relevance`, `stars`, or `last_updated` |
| `packageRefs` | array | For `getPackageDetail`: list of `kind/repo/name` refs (e.g. `helm/stable/nginx-ingress`) |
| `maxItems` | integer | Maximum number of packages to return (1–500, default 50) |

### Output

Each record contains:

| Field | Description |
|-------|-------------|
| `packageId` | Unique ArtifactHub package UUID |
| `packageName` | Package slug name |
| `displayName` | Human-readable display name |
| `description` | Package description |
| `version` | Latest version string |
| `appVersion` | Upstream application version |
| `logoUrl` | Logo image URL |
| `stars` | Number of stars on ArtifactHub |
| `repository` | Repository name |
| `repositoryUrl` | Repository source URL |
| `repositoryKind` | Repository kind integer |
| `publisher` | Publisher or organization name |
| `officialStatus` | Whether the package is officially maintained |
| `cncfStatus` | Whether the package is from a CNCF project |
| `deprecated` | Whether the package is deprecated |
| `license` | SPDX license identifier |
| `containsSecurityUpdates` | Whether this version contains security fixes |
| `prerelease` | Whether this is a pre-release version |
| `categories` | List of category integers |
| `keywords` | List of keyword strings |
| `links` | List of related links (name + url) |
| `sourceUrl` | Direct ArtifactHub package page URL |
| `recordType` | Always `"package"` |
| `scrapedAt` | ISO 8601 timestamp of scrape |

### Sample Output

```json
{
  "packageId": "7918f2cb-0742-4993-b58a-673129604cf6",
  "packageName": "kube-prometheus-stack",
  "displayName": "kube-prometheus-stack",
  "description": "kube-prometheus-stack collects Kubernetes manifests, Grafana dashboards, and Prometheus rules...",
  "version": "86.1.0",
  "appVersion": "v0.91.0",
  "logoUrl": "https://artifacthub.io/image/0503add5-3fce-4b63-bbf3-b9f649512a86",
  "stars": 1206,
  "repository": "prometheus-community",
  "repositoryUrl": "https://prometheus-community.github.io/helm-charts",
  "repositoryKind": 0,
  "publisher": "prometheus-community",
  "officialStatus": true,
  "cncfStatus": true,
  "deprecated": false,
  "license": "Apache-2.0",
  "containsSecurityUpdates": false,
  "prerelease": false,
  "categories": [4],
  "keywords": ["operator", "prometheus", "kube-prometheus"],
  "links": [{"name": "Chart Source", "url": "https://github.com/prometheus-community/helm-charts"}],
  "sourceUrl": "https://artifacthub.io/packages/helm/prometheus-community/kube-prometheus-stack",
  "recordType": "package",
  "scrapedAt": "2026-05-30T12:00:00+00:00"
}
````

### Use Cases

- **DevOps research** — discover cloud-native tools by category or keyword
- **Security audits** — find packages with security updates or deprecated status
- **Competitive analysis** — track stars and publisher activity for popular charts
- **Integration discovery** — find operators and plugins by kind

### FAQ

**Do I need API keys or authentication?**
No. ArtifactHub's search API is fully public and requires no authentication.

**How many packages can I scrape?**
Up to 500 per run. ArtifactHub has thousands of packages — use `searchQuery` and `packageKind` to narrow results.

**Can I get details for a specific chart?**
Yes — use `mode=getPackageDetail` with `packageRefs` like `["helm/prometheus-community/kube-prometheus-stack"]`.

**What package kinds are available?**
Helm (0), Falco (1), OPA (2), OLM (3), Tekton Task (4), KEDA (5), Helm Plugin (6), Tekton Pipeline (7), Krew (8), Headlamp (9), Argo (10), Kubewarden (11), Gatekeeper (12), Kyverno (13), Knative (14).

**How often is data refreshed?**
Each run fetches live data from ArtifactHub at the time of execution.

# Actor input Schema

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

What to fetch: search packages across ArtifactHub, or retrieve full details for specific packages.

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

Free-text query to search packages (used in searchPackages mode). Leave blank to browse all packages.

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

Filter results to a specific package kind. Leave blank to return all kinds.

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

How to sort search results.

## `packageRefs` (type: `array`):

List of package references in format kind/repo/name (e.g. "helm/stable/nginx-ingress").

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

Maximum number of packages to scrape.

## Actor input object example

```json
{
  "mode": "searchPackages",
  "searchQuery": "nginx",
  "packageKind": "",
  "sort": "relevance",
  "maxItems": 50
}
```

# Actor output Schema

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

Dataset containing all scraped ArtifactHub packages.

# 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": "searchPackages",
    "searchQuery": "nginx",
    "packageKind": "",
    "sort": "relevance",
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/artifacthub-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": "searchPackages",
    "searchQuery": "nginx",
    "packageKind": "",
    "sort": "relevance",
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/artifacthub-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": "searchPackages",
  "searchQuery": "nginx",
  "packageKind": "",
  "sort": "relevance",
  "maxItems": 50
}' |
apify call crawlerbros/artifacthub-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "ArtifactHub Scraper",
        "description": "Scrape ArtifactHub - the hub for cloud-native packages. Search Helm charts, Falco rules, OPA policies, OLM operators, KEDA scalers, and 15+ other package types. Get metadata, versions, stars, publishers, and direct links.",
        "version": "1.0",
        "x-build-id": "luOH7tsJLFFcdSfLO"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~artifacthub-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-artifacthub-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/crawlerbros~artifacthub-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-artifacthub-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/crawlerbros~artifacthub-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-artifacthub-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",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "searchPackages",
                            "getPackageDetail"
                        ],
                        "type": "string",
                        "description": "What to fetch: search packages across ArtifactHub, or retrieve full details for specific packages.",
                        "default": "searchPackages"
                    },
                    "searchQuery": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Free-text query to search packages (used in searchPackages mode). Leave blank to browse all packages."
                    },
                    "packageKind": {
                        "title": "Package kind filter",
                        "enum": [
                            "",
                            "0",
                            "1",
                            "2",
                            "3",
                            "4",
                            "5",
                            "6",
                            "7",
                            "8",
                            "9",
                            "10",
                            "11",
                            "12",
                            "13",
                            "14"
                        ],
                        "type": "string",
                        "description": "Filter results to a specific package kind. Leave blank to return all kinds.",
                        "default": ""
                    },
                    "sort": {
                        "title": "Sort order",
                        "enum": [
                            "relevance",
                            "stars",
                            "last_updated"
                        ],
                        "type": "string",
                        "description": "How to sort search results.",
                        "default": "relevance"
                    },
                    "packageRefs": {
                        "title": "Package references (mode=getPackageDetail)",
                        "type": "array",
                        "description": "List of package references in format kind/repo/name (e.g. \"helm/stable/nginx-ingress\").",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of packages to scrape.",
                        "default": 50
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
