OSV Dependency Vulnerability Check (npm, PyPI, CVE) avatar

OSV Dependency Vulnerability Check (npm, PyPI, CVE)

Pricing

from $1.00 / 1,000 vulnerability founds

Go to Apify Store
OSV Dependency Vulnerability Check (npm, PyPI, CVE)

OSV Dependency Vulnerability Check (npm, PyPI, CVE)

Check npm, PyPI, Go, Maven, crates.io and other packages (or a package.json / package-lock / requirements.txt / go.mod) against the free OSV.dev database. One row per package and per vulnerability with CVE, CVSS, fixed versions. Built for AI agents.

Pricing

from $1.00 / 1,000 vulnerability founds

Rating

0.0

(0)

Developer

Fairquery

Fairquery

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 hours ago

Last modified

Share

Checks npm, PyPI, Go, Maven and other dependencies (or a lockfile) against OSV.dev, for $0.50 per 1,000 packages plus $1.50 per 1,000 vulnerability rows. Error and warning rows are free. Example: a 300-package lockfile with 12 vulnerability rows costs 300 × $0.0005 + 12 × $0.0015 = $0.17, plus Apify's $0.00005 Actor-start fee.

Fairquery Apify Actor that checks open-source dependencies against the free OSV.dev vulnerability database and returns agent-ready rows: one per package (vulnerable or not) and one per vulnerability (CVE, CVSS, severity, affected/fixed versions, references).

When to use this Actor (LLM / tool selection)

Use it when an agent needs to:

  • Answer "is lodash@4.17.20 / django==3.2.0 vulnerable, and to what version should I upgrade?"
  • Audit a pasted package.json, package-lock.json, requirements.txt, or go.mod
  • Filter to HIGH/CRITICAL issues only for a CI gate or PR comment
  • Map OSV / GHSA / PYSEC / GO IDs to CVE IDs and CVSS scores

Supported ecosystems: everything OSV supports (npm, PyPI, Go, Maven, crates.io, RubyGems, NuGet, Packagist, Pub, Hex, …). Aliases like pip, golang, cargo, composer are accepted.

Do not use it for: reachability analysis, license checks, container/OS image scanning, or unpinned version ranges (it checks exact versions).

Data sources

ResourceURL
Batch queryPOST https://api.osv.dev/v1/querybatch
Vulnerability detailGET https://api.osv.dev/v1/vulns/{id}

Free, no API key. Retries on 429/5xx with exponential backoff; detail fetches are cached and run 8 in parallel.

Input

FieldTypeDefaultDescription
packages{ecosystem,name,version}[][]Exact package versions to check
manifestTextstring—Raw package.json / package-lock.json (v1–v3) / requirements.txt / go.mod
manifestTypeenumautoForce the manifest format
minSeverityALL|LOW|MEDIUM|HIGH|CRITICALALLMinimum severity of emitted vulnerability rows
includeUnknownSeveritybooltrueKeep vulns with no severity data when filtering
includeDevDependenciesbooltrueInclude dev deps from npm manifests
dedupeAliasesbooltrueCollapse GHSA/PYSEC/GO records describing the same issue into one row (GHSA preferred)
maxPackagesint1000Safety cap on unique packages

Manifest notes: package.json ranges are approximated to their lower bound (^4.17.20 → 4.17.20) and a RANGE_APPROXIMATED warning row is emitted — prefer the lockfile. requirements.txt lines without == pins are skipped with a VERSION_NOT_PINNED warning (use pip freeze).

Example input

{
"packages": [
{ "ecosystem": "npm", "name": "lodash", "version": "4.17.20" },
{ "ecosystem": "PyPI", "name": "django", "version": "3.2.0" }
],
"minSeverity": "HIGH"
}

Output

Every row has schema_version (1.0.0), type (package | vulnerability | error), source_url (OSV API URL), and checked_at.

Package row

{
"type": "package", "ecosystem": "npm", "name": "lodash", "version": "4.17.20",
"purl": "pkg:npm/lodash@4.17.20", "vulnerable": true, "vuln_count": 3, "vuln_count_total": 5,
"vuln_ids": ["GHSA-r5fr-rjxr-66jc", "GHSA-35jh-r3h4-6jhm", "GHSA-29mw-wpgm-hmr9"],
"max_severity": "HIGH", "max_cvss_score": 8.1,
"fixed_versions": ["4.18.0", "4.17.21"], "recommended_version": "4.18.0"
}

vuln_count is after the severity filter and alias de-duplication; vuln_count_total is the raw OSV count. recommended_version is the smallest version that fixes every emitted vuln (best-effort, null if some vuln has no fix).

Vulnerability row

Fields: id, package_name, package_version, aliases, cve_ids, summary, details (≤2000 chars), severity, cvss_score (computed CVSS v3 base score), cvss_vector, cvss_version, severity_source (cvss | database_specific | alias | none), severity_alias_id, cwe_ids, affected_ranges[] (introduced/fixed/last_affected), affected_versions_sample, fixed_versions, published, modified, references[], osv_url.

Severity: CVSS v3 base score → NONE/LOW/MEDIUM/HIGH/CRITICAL; otherwise the advisory's label (GHSA MODERATE → MEDIUM); otherwise borrowed from a GHSA alias; otherwise UNKNOWN (common for some Go advisories).

Error / warning rows (machine-readable)

{ "type": "error", "code": "OSV_VULN_FETCH_FAILED", "message": "OSV /vulns/GHSA-… -> HTTP 503", "retryable": true, "vuln_id": "GHSA-…" }

Codes: INPUT_EMPTY, INVALID_PACKAGE, MANIFEST_UNDETECTED, MANIFEST_PARSE_FAILED, MAX_PACKAGES_EXCEEDED, OSV_QUERYBATCH_FAILED, OSV_VULN_FETCH_FAILED; warnings (with context.severity = "warning"): RANGE_APPROXIMATED, VERSION_NOT_PINNABLE, VERSION_NOT_PINNED.

Run summary

Key-value store record RUN_SUMMARY: packages checked/vulnerable, vulnerabilities emitted/filtered/deduplicated, severity counts, OSV request count, echoed input.

Pricing

EventPriceWhen
package-checked$0.0005Each package row (vulnerable or clean)
vulnerability-found$0.0015Each emitted vulnerability row (after the severity filter and alias de-duplication)
apify-actor-start$0.00005Once per run, per GB of memory (Apify default event)

Error and warning rows are never charged.

Worked example: a 300-package lockfile with 12 vulnerability rows: 300 × $0.0005 + 12 × $0.0015 = $0.15 + $0.018 = $0.17, plus $0.00005. Set minSeverity: "HIGH" to emit (and pay for) only high and critical rows.

To cap spend, set a maximum cost per run in the run options; the Actor stops cleanly at the limit. maxPackages caps unique packages per run. Prices are from the Store pricing tab (October 2026).

Memory / runtime

Default 128 MB. HTTP only (no browser). A 2-package run finishes in about 5–10 s; time grows with the number of advisories to fetch.

MCP / Apify tools

Call from agents via Apify MCP:

  1. Connect an MCP client to https://mcp.apify.com with your Apify token.
  2. Run actor fairquery/osv-dependency-vulnerability-check.
  3. Read the default dataset (filter type == "vulnerability") and the RUN_SUMMARY record.
{
"actor": "fairquery/osv-dependency-vulnerability-check",
"input": { "manifestText": "django==3.2.0\nrequests==2.25.0", "minSeverity": "HIGH" }
}

Troubleshooting

SymptomCause and fix
Run fails at once with INPUT_EMPTYNeither packages nor manifestText was given. The sample packages in the Console form are prefill only and are not sent with API calls.
RANGE_APPROXIMATED warningspackage.json ranges were reduced to their lower bound. Paste package-lock.json instead for exact versions.
VERSION_NOT_PINNED warningsrequirements.txt lines without == are skipped. Use pip freeze output.
MANIFEST_UNDETECTED / MANIFEST_PARSE_FAILEDSet manifestType explicitly, and paste the raw file content (not a path or URL).
OSV_QUERYBATCH_FAILED / OSV_VULN_FETCH_FAILEDOSV.dev was unavailable after retries (retryable: true). These rows are free; re-run later.
Severity UNKNOWNSome advisories (often Go) publish no CVSS or label. Keep includeUnknownSeverity on so they are not filtered out.

FAQ

Which ecosystems are supported?

Everything OSV.dev supports: npm, PyPI, Go, Maven, crates.io, RubyGems, NuGet, Packagist, Pub, Hex and more.

Does no result mean my package is safe?

No. It means OSV.dev has no matching advisory for that exact version. It is not reachability analysis or a full security review.

How much does it cost?

$0.0005 per package row plus $0.0015 per vulnerability row, and a $0.00005 start fee. Error and warning rows are free.

How do I limit spend?

Use minSeverity to skip low-severity rows, set a maximum cost per run in the run options, and/or lower maxPackages.

Can an AI agent call it?

Yes, through Apify MCP with Actor fairquery/osv-dependency-vulnerability-check.

Fairquery family

Other Fairquery tools on the Apify Store. Each one returns structured rows with machine-readable error codes, and error rows are never charged:

All Fairquery Actors: https://apify.com/fairquery

Data handling, security and support

  • Data retention: Each run keeps only its own storages in your Apify account (INPUT, the results dataset and a counts-only RUN_SUMMARY), under your Apify plan's retention. Package names and versions go only to api.osv.dev. You can delete run storages and named stores at any time in Apify Console or through the API. Fairquery's code sends nothing to Fairquery.
  • Security reports: email info@getfairquery.com.
  • Support: the Issues tab on this page or info@getfairquery.com. We aim to reply within 3 business days (a target, not an SLA).

Disclaimer

Data comes from OSV.dev (aggregating GitHub Advisory Database, PyPA, Go Vulnerability DB and others) under their respective licenses. No warranty of completeness; absence of results does not prove a package is safe.