# GitHub Security Advisories Scraper (`maximedupre/github-security-advisories-scraper`) Actor

GitHub Security Advisories Scraper for GHSA feeds, CVE lookup, package lookup, severity filters, CVSS, EPSS, CWE, fixed versions, references, credits, and advisory timestamps.

- **URL**: https://apify.com/maximedupre/github-security-advisories-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Developer tools, Business, Automation
- **Stats:** 2 total users, 1 monthly users, 33.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.45 / 1,000 scraped advisories

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/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

### 🔎 GitHub security advisories for GHSA, CVE, and package checks

GitHub Security Advisories Scraper collects public GitHub Security Advisory records and saves them as clean Apify dataset rows. Use it to export GHSA feeds, look up known CVEs, check affected packages, and pull advisory facts such as CVSS, EPSS, CWE, vulnerable version ranges, fixed versions, references, credits, and timestamps.

- [`github security advisories`](https://apify.com/maximedupre/github-security-advisories-scraper/examples/github-security-advisories-export) - export source-backed GHSA rows for AppSec, DevSecOps, vulnerability research, and security reporting.
- [`github advisory database api`](https://apify.com/maximedupre/github-security-advisories-scraper/examples/github-advisory-database-api) - run focused GitHub Advisory Database pulls from Apify and consume the output through the Apify API.
- [`github security advisory database`](https://apify.com/maximedupre/github-security-advisories-scraper/examples/github-security-advisory-database) - build repeatable advisory exports with filters for severity, ecosystem, advisory type, CWE, dates, and withdrawn advisories.
- [`github advisory database download`](https://apify.com/maximedupre/github-security-advisories-scraper/examples/github-advisory-database-download) - save analysis-ready advisory rows to JSON, CSV, Excel, XML, RSS, or HTML.
- [`GitHub Security Advisories scraper GitHub API GHSA scraping tool`](https://apify.com/maximedupre/github-security-advisories-scraper/examples/github-security-advisories-ghsa-scraping-tool) - use a ready-made Actor when you want the data in Apify datasets, schedules, webhooks, or integrations.

#### 📦 Data you can extract

Each dataset row is one successfully scraped GitHub Security Advisory. Fields can include:

- `ghsaId` and `cveIds`
- `summary`, `description`, `classification`, and `severity`
- `cvss` with preferred score/vector plus v3 and v4 score/vector objects
- `epss` percentage and percentile when GitHub provides them
- `cwes` with CWE IDs and names
- `affectedPackages` with ecosystem, package name, vulnerable version range, and first patched version
- `references`, `credits`, `sourceCodeLocation`, and `repositoryAdvisoryUrl`
- `publishedAt`, `updatedAt`, `githubReviewedAt`, `nvdPublishedAt`, and `withdrawnAt`

Missing source values are returned as `null` or empty arrays. The Actor does not invent CVE, CVSS, EPSS, CWE, package, patch, credit, or timestamp facts.

#### 🚀 How to run it

1. Open the Actor input.
2. Fill one target section:
   - **Collect advisory feed** for recent or filtered GHSA exports.
   - **GHSA IDs** when you already know advisory IDs such as `GHSA-jfh8-c2jp-5v3q`.
   - **CVE IDs** when you want to map CVEs such as `CVE-2021-44228` to GitHub Security Advisories.
   - **Affected packages** when you want advisories for packages such as `org.apache.logging.log4j:log4j-core`.
3. Add optional filters for ecosystem, advisory type, severity, CWE, date windows, withdrawn status, sort order, or maximum advisories.
4. Add a GitHub token only when you need larger public GitHub pulls.
5. Run the Actor and open the dataset.

The default feed target is useful for a first run. Direct GHSA, CVE, or package targets override the default feed target when you provide them.

#### ⚙️ Input options

| Field | What it does |
| --- | --- |
| `collectFeed` | Collects matching advisories from the public GitHub Security Advisories catalogue. |
| `ghsaIds` | Fetches exact GitHub Security Advisory IDs. |
| `cveIds` | Maps CVE IDs to linked GitHub Security Advisory records. |
| `affectedPackages` | Finds advisories for package names or package@version values. |
| `ecosystems` | Limits results to package ecosystems such as npm, pip, Maven, Go, RubyGems, Rust, Swift, and GitHub Actions. |
| `advisoryTypes` | Filters reviewed, unreviewed, or malware advisories. |
| `severities` | Filters critical, high, medium, low, or unknown advisories. |
| `cweIds` | Filters by CWE numbers such as `79` or `CWE-862`. |
| `publishedFrom`, `publishedTo` | Filters by advisory publication date. |
| `updatedFrom`, `updatedTo` | Filters by advisory update date. |
| `modifiedAfter` | Collects advisories changed after a date. |
| `withdrawnOnly` | Collects only advisories marked as withdrawn. |
| `sortBy`, `sortDirection` | Sorts feed results by published date, updated date, EPSS percentage, or EPSS percentile. |
| `maxItems` | Caps the number of advisory rows saved. |
| `githubToken` | Optional token for larger public GitHub pulls. |

Example input:

```json
{
  "collectFeed": true,
  "severities": ["critical", "high"],
  "ecosystems": ["npm", "maven"],
  "publishedFrom": "2026-01-01",
  "sortBy": "published",
  "sortDirection": "desc",
  "maxItems": 25
}
````

Exact CVE lookup:

```json
{
  "cveIds": ["CVE-2021-44228"],
  "maxItems": 5
}
```

#### 📄 Output example

```json
{
  "ghsaId": "GHSA-jfh8-c2jp-5v3q",
  "cveIds": ["CVE-2021-44228"],
  "summary": "Remote code injection in Log4j",
  "description": "Apache Log4j2 versions 2.0-beta9 through 2.15.0 are vulnerable to remote code execution.",
  "classification": "reviewed",
  "severity": "critical",
  "cvss": {
    "score": 10,
    "vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H",
    "v3": {
      "score": 10,
      "vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H"
    },
    "v4": {
      "score": null,
      "vector": null
    }
  },
  "epss": {
    "percentage": 0.94321,
    "percentile": 0.99874
  },
  "cwes": [
    {
      "cweId": "CWE-20",
      "name": "Improper Input Validation"
    }
  ],
  "affectedPackages": [
    {
      "ecosystem": "maven",
      "name": "org.apache.logging.log4j:log4j-core",
      "vulnerableVersionRange": ">= 2.0-beta9, < 2.3.2",
      "firstPatchedVersion": "2.3.2"
    }
  ],
  "references": [
    "https://nvd.nist.gov/vuln/detail/CVE-2021-44228"
  ],
  "credits": [
    {
      "login": "chenzhaojun",
      "type": "reporter"
    }
  ],
  "sourceCodeLocation": "https://github.com/apache/logging-log4j2",
  "repositoryAdvisoryUrl": "https://github.com/apache/logging-log4j2/security/advisories/GHSA-jfh8-c2jp-5v3q",
  "publishedAt": "2021-12-10T00:00:35Z",
  "updatedAt": "2025-01-14T08:36:01Z",
  "githubReviewedAt": "2021-12-10T00:00:00Z",
  "nvdPublishedAt": "2021-12-10T10:15:09Z",
  "withdrawnAt": null
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. You are charged for each successfully scraped advisory row. Empty runs, no-result lookups, and failed lookups do not create result charges.

#### 🔌 Integrations

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

- Export rows as JSON, CSV, Excel, XML, RSS, or HTML from the dataset.
- Call the Actor through the Apify API for CI, security dashboards, or internal tools.
- Schedule recurring runs to monitor new or updated advisories.
- Connect runs to webhooks so downstream systems receive fresh advisory data.
- Send dataset exports to spreadsheets, warehouses, BI tools, or vulnerability triage workflows.

#### ❓ FAQ

##### 🔎 Can this work as a GHSA scraping tool for GitHub API data?

Yes. It collects GHSA records from the public GitHub Security Advisories API and saves them as Apify dataset rows. That makes it useful when you want a scraper-style workflow around GitHub API data.

##### 🔌 Can I use this as a GitHub advisory database API?

Yes. You can run the Actor through the Apify API and read the default dataset items after each run. The output is structured for automation, exports, and recurring advisory checks.

##### 📥 Can I download the GitHub advisory database?

You can export the rows collected by each run as JSON, CSV, Excel, XML, RSS, or HTML. Use `maxItems`, filters, and schedules to control how much of the public advisory catalogue you collect.

##### 🧩 Does it support CVE and package lookups?

Yes. You can submit CVE IDs to find linked GitHub Security Advisories, or submit affected package names and package@version values to find matching advisories.

##### 🔑 Do I need a GitHub token?

No for normal small public runs. Add an optional GitHub token when you need larger pulls and want higher public GitHub rate limits.

##### 🛑 What happens when no advisory matches my input?

The run finishes successfully, logs that no GitHub Security Advisories matched, and saves no dataset rows. You are not charged for result rows that do not exist.

##### ⚙️ Why not use the GitHub API?

Use the GitHub API when you want to build and maintain your own integration. Use this Actor when you want Apify inputs, datasets, exports, schedules, webhooks, and a reusable scraper workflow around the same source data.

##### 🧭 What are GitHub alternatives?

For broader vulnerability coverage, teams often compare GitHub Security Advisories with NVD, OSV.dev, CISA KEV, EPSS, and package-specific security feeds. This Actor stays focused on GitHub Security Advisories and does not merge those other sources into the output.

### 📝 Changelog

- 0.1: Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~github-security-advisories-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Other actors

- [SSL Certificate Checker ↗](https://apify.com/maximedupre/ssl-certificate-checker) - Monitor public HTTPS certificates, expiry, trust, hostname match, and TLS posture.
- [Email MX Verifier ↗](https://apify.com/maximedupre/email-mx-verifier) - Check email syntax, MX records, disposable domains, role addresses, and send decisions.
- [Sitemap Validator ↗](https://apify.com/maximedupre/sitemap-validator) - Validate public XML sitemaps and check listed URLs for status, redirects, and issues.
- [Schema Markup Validator ↗](https://apify.com/maximedupre/schema-markup-validator) - Audit JSON-LD, Microdata, RDFa, meta tags, and rich-result readiness on public pages.
- [YAML Validator & Converter ↗](https://apify.com/maximedupre/yaml-validator-converter) - Validate YAML, JSON, and TOML, then convert valid documents for automation workflows.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `collectFeed` (type: `boolean`):

Collect matching GitHub Security Advisories from the public catalogue.

## `ghsaIds` (type: `array`):

GitHub Security Advisory IDs to fetch directly.

## `cveIds` (type: `array`):

CVE IDs to map to their GitHub Security Advisories.

## `affectedPackages` (type: `array`):

Package names or package@version values to check for advisories.

## `ecosystems` (type: `array`):

Limit results to selected package ecosystems.

## `advisoryTypes` (type: `array`):

Limit results to GitHub advisory classifications.

## `severities` (type: `array`):

Limit results to selected severity buckets.

## `cweIds` (type: `array`):

CWE numbers to filter by, such as 79 or 862.

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

Earliest advisory publication date.

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

Latest advisory publication date.

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

Earliest advisory update date.

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

Latest advisory update date.

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

Collect advisories changed after this date.

## `withdrawnOnly` (type: `boolean`):

Collect advisories marked as withdrawn.

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

Order feed results by this advisory field.

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

Choose newest/highest first or oldest/lowest first.

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

Maximum advisory records to save for feed and package targets.

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

Optional token for larger public GitHub pulls.

## Actor input object example

```json
{
  "collectFeed": true,
  "severities": [
    "critical",
    "high"
  ],
  "publishedFrom": "2026-01-01",
  "withdrawnOnly": false,
  "sortBy": "published",
  "sortDirection": "desc",
  "maxItems": 1024
}
```

# Actor output Schema

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

Open the dataset with one row per successfully collected GitHub Security Advisory.

# 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 = {
    "severities": [
        "critical",
        "high"
    ],
    "publishedFrom": "2026-01-01",
    "sortBy": "published",
    "sortDirection": "desc",
    "maxItems": 1024
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/github-security-advisories-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 = {
    "severities": [
        "critical",
        "high",
    ],
    "publishedFrom": "2026-01-01",
    "sortBy": "published",
    "sortDirection": "desc",
    "maxItems": 1024,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/github-security-advisories-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 '{
  "severities": [
    "critical",
    "high"
  ],
  "publishedFrom": "2026-01-01",
  "sortBy": "published",
  "sortDirection": "desc",
  "maxItems": 1024
}' |
apify call maximedupre/github-security-advisories-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "GitHub Security Advisories Scraper",
        "description": "GitHub Security Advisories Scraper for GHSA feeds, CVE lookup, package lookup, severity filters, CVSS, EPSS, CWE, fixed versions, references, credits, and advisory timestamps.",
        "version": "0.1",
        "x-build-id": "Z6mY8wT2ZsOunuXV9"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/maximedupre~github-security-advisories-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-maximedupre-github-security-advisories-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/maximedupre~github-security-advisories-scraper/runs": {
            "post": {
                "operationId": "runs-sync-maximedupre-github-security-advisories-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/maximedupre~github-security-advisories-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-maximedupre-github-security-advisories-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": {
                    "collectFeed": {
                        "title": "Collect advisory feed",
                        "type": "boolean",
                        "description": "Collect matching GitHub Security Advisories from the public catalogue.",
                        "default": true
                    },
                    "ghsaIds": {
                        "title": "GHSA IDs",
                        "maxItems": 500,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "GitHub Security Advisory IDs to fetch directly.",
                        "items": {
                            "type": "string",
                            "pattern": "^GHSA-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}$"
                        }
                    },
                    "cveIds": {
                        "title": "CVE IDs",
                        "maxItems": 500,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "CVE IDs to map to their GitHub Security Advisories.",
                        "items": {
                            "type": "string",
                            "pattern": "^CVE-[0-9]{4}-[0-9]{4,}$"
                        }
                    },
                    "affectedPackages": {
                        "title": "Affected packages",
                        "maxItems": 500,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Package names or package@version values to check for advisories.",
                        "items": {
                            "type": "string",
                            "minLength": 1
                        }
                    },
                    "ecosystems": {
                        "title": "Package ecosystems",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Limit results to selected package ecosystems.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "actions",
                                "composer",
                                "erlang",
                                "go",
                                "maven",
                                "npm",
                                "nuget",
                                "other",
                                "pip",
                                "pub",
                                "rubygems",
                                "rust",
                                "swift"
                            ],
                            "enumTitles": [
                                "GitHub Actions",
                                "Composer",
                                "Erlang and Elixir",
                                "Go",
                                "Maven",
                                "npm",
                                "NuGet",
                                "Other",
                                "pip",
                                "Pub",
                                "RubyGems",
                                "Rust",
                                "Swift"
                            ]
                        }
                    },
                    "advisoryTypes": {
                        "title": "Advisory types",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Limit results to GitHub advisory classifications.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "reviewed",
                                "unreviewed",
                                "malware"
                            ],
                            "enumTitles": [
                                "Reviewed",
                                "Unreviewed",
                                "Malware"
                            ]
                        }
                    },
                    "severities": {
                        "title": "Severities",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Limit results to selected severity buckets.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "critical",
                                "high",
                                "medium",
                                "low",
                                "unknown"
                            ],
                            "enumTitles": [
                                "Critical",
                                "High",
                                "Medium",
                                "Low",
                                "Unknown"
                            ]
                        }
                    },
                    "cweIds": {
                        "title": "CWE IDs",
                        "maxItems": 100,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "CWE numbers to filter by, such as 79 or 862.",
                        "items": {
                            "type": "string",
                            "pattern": "^(CWE-)?[0-9]+$"
                        }
                    },
                    "publishedFrom": {
                        "title": "Published from",
                        "type": "string",
                        "description": "Earliest advisory publication date."
                    },
                    "publishedTo": {
                        "title": "Published to",
                        "type": "string",
                        "description": "Latest advisory publication date."
                    },
                    "updatedFrom": {
                        "title": "Updated from",
                        "type": "string",
                        "description": "Earliest advisory update date."
                    },
                    "updatedTo": {
                        "title": "Updated to",
                        "type": "string",
                        "description": "Latest advisory update date."
                    },
                    "modifiedAfter": {
                        "title": "Modified after",
                        "type": "string",
                        "description": "Collect advisories changed after this date."
                    },
                    "withdrawnOnly": {
                        "title": "Withdrawn advisories only",
                        "type": "boolean",
                        "description": "Collect advisories marked as withdrawn.",
                        "default": false
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "published",
                            "updated",
                            "epssPercentage",
                            "epssPercentile"
                        ],
                        "type": "string",
                        "description": "Order feed results by this advisory field.",
                        "default": "published"
                    },
                    "sortDirection": {
                        "title": "Sort direction",
                        "enum": [
                            "desc",
                            "asc"
                        ],
                        "type": "string",
                        "description": "Choose newest/highest first or oldest/lowest first.",
                        "default": "desc"
                    },
                    "maxItems": {
                        "title": "Maximum advisories",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Maximum advisory records to save for feed and package targets.",
                        "default": 1024
                    },
                    "githubToken": {
                        "title": "GitHub token",
                        "type": "string",
                        "description": "Optional token for larger public GitHub pulls."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
