# Artifact Hub Helm Charts Scraper (`ahmdshrif/artifact-hub-helm-chart-scraper`) Actor

Exports Helm chart package metadata (versions, stars, security scan counts, signing status, repository and publisher details) from Artifact Hub's search API.

- **URL**: https://apify.com/ahmdshrif/artifact-hub-helm-chart-scraper.md
- **Developed by:** [Ahmed](https://apify.com/ahmdshrif) (community)
- **Categories:** Developer tools, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.30 / 1,000 chart exporteds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Artifact Hub Helm Chart Scraper

Exports Helm chart package metadata from Artifact Hub's search API — versions, star counts, security scan tallies (CVE counts by severity), signing status, and repository/publisher trust signals. Built for platform engineers, DevOps teams, and security reviewers who need a bulk, structured view of the Helm chart catalog rather than looking up charts one at a time in the UI.

### Why this scraper

- Reads Artifact Hub's official JSON search API directly, exporting 21+ fields per chart — versions, stars, security scan counts, signing status, and publisher verification — covering full catalog discovery, not just alerting on charts you already run.
- No JS rendering, tokens, or login required: the target is a public unauthenticated API, so results are complete structured JSON rather than partial page scrapes.
- No personal data collected — output is limited to chart, repository, and publisher metadata.

### Output fields

| Field | Type | Description |
|---|---|---|
| package\_id | string | Artifact Hub internal package UUID |
| name | string | Chart name |
| normalized\_name | string | URL-safe normalized chart name |
| category | integer | Artifact Hub category code |
| stars | integer | Number of stars the chart has received |
| official | boolean | Whether the chart is marked official |
| cncf | boolean | Whether the chart belongs to a CNCF project |
| description | string | Short chart description |
| version | string | Latest chart version |
| app\_version | string | Version of the underlying application packaged by the chart |
| license | string | SPDX license identifier of the chart |
| deprecated | boolean | Whether the chart is marked deprecated |
| has\_values\_schema | boolean | Whether the chart ships a values.schema.json |
| signed | boolean | Whether the chart release is cryptographically signed |
| security\_critical | integer | Count of critical-severity CVEs in the latest security scan |
| security\_high | integer | Count of high-severity CVEs in the latest security scan |
| security\_medium | integer | Count of medium-severity CVEs in the latest security scan |
| security\_low | integer | Count of low-severity CVEs in the latest security scan |
| security\_unknown | integer | Count of unrated-severity CVEs in the latest security scan |
| production\_organizations\_count | integer | Number of organizations reporting production use of the chart |
| last\_updated\_ts | integer | Unix timestamp of the package's last update |
| repository\_name | string | Artifact Hub repository slug hosting the chart |
| repository\_display\_name | string | Human-readable repository name |
| repository\_url | string | Git/Helm repository URL the chart is published from |
| repository\_organization\_name | string | Publishing organization's slug |
| repository\_verified\_publisher | boolean | Whether the publisher is verified on Artifact Hub |
| package\_url | string | Direct Artifact Hub page URL for the chart |

### Input

```json
{
  "startUrls": [
    { "url": "https://artifacthub.io/api/v1/packages/search?kind=0&limit=50" }
  ],
  "maxItems": 50
}
```

### Output

```json
{
  "package_id": "7918f2cb-0742-4993-b58a-673129604cf6",
  "name": "kube-prometheus-stack",
  "normalized_name": "kube-prometheus-stack",
  "category": 4,
  "stars": 1233,
  "official": true,
  "cncf": null,
  "description": "kube-prometheus-stack collects Kubernetes manifests, Grafana dashboards, and Prometheus rules combined with documentation and scripts to provide easy to operate end-to-end Kubernetes cluster monitoring with Prometheus using the Prometheus Operator.",
  "version": "90.2.0",
  "app_version": "v0.93.1",
  "license": "Apache-2.0",
  "deprecated": false,
  "has_values_schema": false,
  "signed": true,
  "security_critical": 0,
  "security_high": 218,
  "security_medium": 74,
  "security_low": 1,
  "security_unknown": 13,
  "production_organizations_count": 30,
  "last_updated_ts": 1789257361,
  "repository_name": "prometheus-community",
  "repository_display_name": "prometheus-community",
  "repository_url": "https://prometheus-community.github.io/helm-charts",
  "repository_organization_name": "prometheus",
  "repository_verified_publisher": true,
  "package_url": "https://artifacthub.io/packages/helm/prometheus-community/kube-prometheus-stack"
}
```

### Pricing

Pay per result: **$0.0003 per chart exported**. A typical run of 150 charts costs under $0.05.

### Use cases

- Building an internal Helm chart inventory dashboard that flags charts with unsigned releases or high/critical CVE counts before they're approved for cluster use.
- Auditing which charts in your organization's dependency list come from verified publishers vs. unverified repositories.
- Tracking chart version and app\_version drift across a set of repositories to plan upgrade cycles for platform teams.

# Actor input Schema

## `startUrls` (type: `array`):

Pages to export.

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

Stop after this many records.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://artifacthub.io/api/v1/packages/search?kind=0&limit=50"
    },
    {
      "url": "https://artifacthub.io/api/v1/packages/search?kind=0&limit=50&sort=stars"
    },
    {
      "url": "https://artifacthub.io/api/v1/packages/search?kind=0&limit=50&ts_query_web=database"
    }
  ],
  "maxItems": 50
}
```

# Actor output Schema

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

One structured record per input URL.

# 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 = {
    "startUrls": [
        {
            "url": "https://artifacthub.io/api/v1/packages/search?kind=0&limit=50"
        },
        {
            "url": "https://artifacthub.io/api/v1/packages/search?kind=0&limit=50&sort=stars"
        },
        {
            "url": "https://artifacthub.io/api/v1/packages/search?kind=0&limit=50&ts_query_web=database"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmdshrif/artifact-hub-helm-chart-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 = { "startUrls": [
        { "url": "https://artifacthub.io/api/v1/packages/search?kind=0&limit=50" },
        { "url": "https://artifacthub.io/api/v1/packages/search?kind=0&limit=50&sort=stars" },
        { "url": "https://artifacthub.io/api/v1/packages/search?kind=0&limit=50&ts_query_web=database" },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("ahmdshrif/artifact-hub-helm-chart-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 '{
  "startUrls": [
    {
      "url": "https://artifacthub.io/api/v1/packages/search?kind=0&limit=50"
    },
    {
      "url": "https://artifacthub.io/api/v1/packages/search?kind=0&limit=50&sort=stars"
    },
    {
      "url": "https://artifacthub.io/api/v1/packages/search?kind=0&limit=50&ts_query_web=database"
    }
  ]
}' |
apify call ahmdshrif/artifact-hub-helm-chart-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmdshrif/artifact-hub-helm-chart-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/HeixzP2uJ7REds9y3/builds/CXWCdGP8HV0o4sK28/openapi.json
