GitHub Security Advisories Scraper
parseforge/github-security-advisories-scraper
Developer toolsBusinessAutomation
Scrapes GitHub Security Advisories by GHSA ID, CVE, ecosystem, severity, CWE, or date range. Returns each advisory as a flat row with description, affected packages, CVSS scores, and references. Export to CSV, JSON, Excel, or XML.
- Total users
- 3
- Monthly active
- 2
- Total runs
- 121
- Bookmarked
- 0
- Rating
- Not rated yet
- Last modified
- 12 days ago
Overview
GitHub Security Advisories Scraper
Scrape GitHub Security Advisories by GHSA ID, CVE, ecosystem, severity, or date range, up to a million per run. Every advisory comes with its full description, affected packages, CVSS scores, CWE IDs, and references. No API key or login required. Export to CSV, JSON, Excel, or XML.
GitHub's official GraphQL API needs a personal access token and rate-limits you. This reads the public GitHub Security Advisories database directly, filtered by GHSA ID, CVE, ecosystem, severity, CWE, or date range, and returns each match in one fixed schema. It covers reviewed, unreviewed, and malware advisories across npm, Maven, pip, Go, and more.
| Who uses it | What they scrape GitHub Security Advisories for |
|---|---|
| Security engineers | Which vulnerabilities affect the packages their applications depend on |
| DevSecOps teams | Monitoring new advisories for their tech stack to trigger patching workflows |
| Compliance officers | Auditing which CVEs and CWEs are present in their software inventory |
| Threat intelligence analysts | Tracking malware advisories and unreviewed reports across ecosystems |
| Open source maintainers | Checking if their packages appear in any advisory, including withdrawn ones |
What it does
This Actor collects GitHub Security Advisories by GHSA ID, CVE, ecosystem, severity, CWE, or date range, and returns each one as a flat row.
- ๐ฏ GHSA ID lookup: fetch one advisory by its GHSA ID, or batch up to 100 IDs in a single run.
- ๐ CVE and CWE filters: narrow to advisories linked to a specific CVE or a list of CWE numbers.
- ๐ฆ Ecosystem and package filters: limit to npm, Maven, pip, Go, Rust, and more, or to specific packages and versions.
- ๐ Date ranges: filter by published, updated, or modified-after dates using ISO 8601 or range syntax.
- ๐ท๏ธ Type and severity: choose reviewed, unreviewed, or malware advisories, and filter by CVSS severity tier.
- ๐ซ Withdrawn only: return only advisories that GitHub has withdrawn, useful for audit trails.
Results export to CSV, JSON, Excel, or XML, or straight from the API.
What you can do with GitHub Security Advisories data
๐ก๏ธ Monitor your dependencies.
A DevSecOps engineer runs the Actor daily with an ecosystem filter for npm and a severity of critical or high, then feeds new advisories into an alerting pipeline.
๐ Enrich a CVE list.
A security analyst passes a batch of CVE IDs to get the corresponding GHSA records, including affected packages and CVSS scores, for a vulnerability report.
๐งช Audit for malware advisories.
A threat researcher sets type to malware and ecosystem to pip to collect all Python malware advisories published in the last month.
๐ Track advisory trends.
A compliance officer filters by published date range and CWE IDs to see how many advisories match specific weakness classes over a quarter.
๐ Verify a specific advisory.
An open source maintainer looks up a GHSA ID to check if their package is affected and whether the advisory has been withdrawn.
Why choose this scraper
| What you get | |
|---|---|
| No API key | Uses the public GitHub Security Advisories database, no token or OAuth setup |
| Fixed schema | Every advisory returns the same flat fields, ready for CSV, JSON, Excel, or XML |
| Batch lookups | Pass up to 100 GHSA IDs in one run for efficient enrichment |
| Full coverage | Includes reviewed, unreviewed, and malware advisories, plus withdrawn ones |
How it compares
No other Store actor targets GitHub Security Advisories the same way, so the honest comparison is with the alternatives teams actually weigh.
| GitHub Security Advisories Scraper | Build it in-house | By hand | |
|---|---|---|---|
| Setup | Run it now, zero config | Days of engineering | None, but hours per pull |
| When GitHub Security Advisories changes | Maintained for you | You fix it | You re-learn the page |
| Proxies, retries, anti-bot | Built in | Your problem | Browser only |
| Output | Fixed JSON schema, CSV/Excel export | Whatever you build | Copy-paste |
| Cost | Pay per result | Engineering time | Analyst hours |
Configure the run
Drive the Actor from GHSA IDs, CVE IDs, ecosystems, severities, CWE numbers, or date ranges, alone or together, and filters run as each advisory is read so only matches reach your dataset. The Input tab lists every parameter.
A first run with the defaults:
{
"maxItems": 10
}
A larger pull:
{
"maxItems": 200
}
Pricing
Pay-per-result: $0.0315 per result collected. You pay only for the results written to your dataset.
| Results collected | Approximate cost |
|---|---|
| 100 results | $3.15 |
| 1,000 results | $31.50 |
| 10,000 results | $315.00 |
New Apify accounts start with $5 in free credit.
Free users
Free-plan runs return up to 10 results as a preview. Upgrade your Apify plan to collect up to 1,000,000 results per run.
Run it
- Create a free Apify account with $5 in credit.
- Open the GitHub Security Advisories Scraper.
- Set your inputs and any filters, then click Start.
- Export the results as CSV, Excel, JSON, or XML from the Dataset tab.
Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.
Use with AI agents (MCP)
Give an AI agent live access to GitHub Security Advisories through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/github-security-advisories-scraper"
Then prompt it in plain language to run the scraper and read back the results.
Troubleshooting
Why am I getting no results?
Check your filters. If you set a CVE ID, ecosystem, severity, or date range, the combination may be too narrow. Try removing filters one at a time to see which one excludes all advisories.
Why does my batch lookup return fewer results than expected?
The ghsaIds field takes precedence over a single ghsaId. Make sure you are not setting both, and verify that each GHSA ID is spelled correctly. Some IDs may not exist or may be withdrawn.
Why do I get an error about the date format?
Use ISO 8601 format like '2023-01-01' or a range like '2023-01-01..2023-12-31'. For modifiedAfter, a single date is translated to '>=date', but a range is passed as-is.
Why are some fields empty in my results?
Not all advisories have every field. For example, unreviewed advisories may lack a GHSA ID or CVSS score. Check the advisory type and source.
Why does my run take a long time?
If you set a high maxItems and broad filters, the Actor may need to paginate through many advisories. Reduce maxItems or add more specific filters like ecosystem or severity.
Why do I get duplicate advisories?
If you pass overlapping filters, such as both a CVE ID and a GHSA ID, the same advisory may match multiple criteria. The Actor returns each advisory once per run, but check your input for redundancy.
FAQ
| Question | Answer |
|---|---|
| Do I need a GitHub API token? | No. This Actor reads the public GitHub Security Advisories database directly, so no authentication or API key is required. |
| What is a GHSA ID? | A GHSA ID is GitHub's unique identifier for a security advisory, formatted like GHSA-xxxx-xxxx-xxxx. You can find it in the advisory URL or in the GitHub Advisory Database. |
| Can I fetch multiple advisories at once? | Yes. Use the ghsaIds field to pass an array of up to about 100 GHSA IDs in a single run. |
| What ecosystems are supported? | The Actor supports npm, Maven, pip, Go, Rust, RubyGems, Composer, NuGet, Swift, pub, Erlang/Elixir, GitHub Actions, and other. |
| How do I filter by severity? | Use the severity field and choose critical, high, medium, low, or unknown. The filter matches the CVSS severity tier of the advisory. |
| Can I filter by CWE? | Yes. Pass a comma-separated list of CWE numbers in the cwes field, such as '79,89,787'. |
| What date filters are available? | You can filter by published date, updated date, or modified-after date. Use ISO 8601 dates or ranges like '2023-01-01..2023-12-31'. |
| Does the Actor include withdrawn advisories? | By default, withdrawn advisories are included. Set isWithdrawn to true to return only withdrawn advisories. |
| What is the difference between reviewed and unreviewed? | Reviewed advisories are curated by GitHub and have a GHSA ID. Unreviewed advisories come from community sources and may not have a GHSA ID. Malware advisories are a separate type for malicious packages. |
| How many advisories can I collect in one run? | You can set maxItems up to 1,000,000. The default is 10. |
| What output formats are supported? | The Actor exports to CSV, JSON, Excel, and XML, with a fixed schema for every advisory. |
| Can I filter by affected package? | Yes. Use the affects field with a comma-separated list of packages, optionally with versions like 'package1,package2@1.0.0'. |
Related actors
Browse the full ParseForge collection for more scrapers.
๐ Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.
โ ๏ธ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by GitHub, Inc. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.
Input
| Field | Type | What it does | Default |
|---|---|---|---|
| ghsaId | string | Fetch a specific advisory by GHSA ID (e.g. GHSA-652x-xj99-gmcc). | not set |
| ghsaIds | array | Array of GHSA IDs to fetch in one run (e.g. ["GHSA-652x-xj99-gmcc", "GHSA-jfh8-c2jp-5v3q"]). Takes precedence over single ghsaId. Recommended max ~100 per call. | [] |
| cveId | string | Filter to advisories with this CVE ID (e.g. CVE-2021-44228). | not set |
| type | string (4 options) | GitHub-reviewed advisories, community/unreviewed, or malware advisories. | not set |
| severity | string (6 options) | Filter by CVSS severity tier. | not set |
| ecosystem | string (14 options) | Filter by package ecosystem. | not set |
| affects | string | Comma-separated list of packages (e.g. 'package1,package2@1.0.0') to filter advisories that affect them. | not set |
| cwes | string | Comma-separated CWE numbers (e.g. '79,89,787'). | not set |
| cwesFilter | string | Alias for the cwes field. Comma-separated CWE numbers (e.g. '79,89,787'). | not set |
| published | string | Filter by publish date. Use ISO 8601 or a range like '2023-01-01..2023-12-31'. | not set |
| updated | string | Filter by last-updated date. | not set |
| modifiedAfter | string | Single date (YYYY-MM-DD): translated to '>=date'. Pass a range like '2024-01-01..2024-12-31' to use as-is. Filters by the advisory's last-modified date. | not set |
| isWithdrawn | boolean | When true, only withdrawn advisories are returned. | false |
| maxItems | integer | How many security advisories to collect per run. | 10 |
Pricing
from $23.63 per 1,000 results
| Charged for | What it is | Price each |
|---|---|---|
| result | Single result in the default dataset. | $0.02363 to $0.0315 |
Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.
API
One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.
curl -X POST "https://api.apify.com/v2/acts/parseforge~github-security-advisories-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"helloWorld": 123
}' Examples
Input that runs as-is.
{
"helloWorld": 123
} Reviews
No reviews yet. Be the first.
Issues
We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.
Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.
Related scrapers
Run GitHub Security Advisories Scraper on Apify All scrapers
