EPSS Exploit Prediction Scores Scraper - FIRST.org avatar

EPSS Exploit Prediction Scores Scraper - FIRST.org

Pricing

from $1.00 / 1,000 results

Go to Apify Store
EPSS Exploit Prediction Scores Scraper - FIRST.org

EPSS Exploit Prediction Scores Scraper - FIRST.org

$1/1K ๐Ÿ”ฅ Scrape EPSS exploit prediction scores from FIRST.org: the daily-updated probability that a CVE will be exploited in the next 30 days. Lookup by CVE list, pull the highest-risk CVEs, stream the full 350k-row daily dump, or get 30-day score history with trends. No API key.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

ninhothedev

ninhothedev

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

EPSS Exploit Prediction Scores Scraper

Scrape EPSS (Exploit Prediction Scoring System) data from FIRST.org โ€” the daily-updated probability that a given CVE will be exploited in the wild within the next 30 days. That is the prioritisation signal severity scores lack: CVSS tells you how bad a vulnerability would be if exploited, EPSS tells you how likely it is to actually be exploited. No API key, no login, no proxy required.

Covers 354,000+ CVEs, rescored every single day by FIRST.org's machine-learning model.

Why EPSS instead of just CVSS?

CVSS is a static severity rating โ€” it describes the theoretical impact and exploitability characteristics of a flaw, and it barely changes over a CVE's lifetime. EPSS is a live, empirical probability derived from real-world exploitation telemetry, so it re-ranks your backlog every day and tells you which of your 4,000 "critical" CVSS 9.8s are the ~2% that attackers are actually weaponising right now.

Features

  • 4 scrape modes โ€” explicit CVE lookup, top-risk listing, full daily dump, and 30-day score history.
  • No API key โ€” FIRST.org's EPSS API is free and public.
  • Never silently drops a CVE โ€” a CVE the EPSS model does not know still returns a row with found: false and null scores, so your joins stay intact.
  • Derived risk fields โ€” risk_band, in_top_1pct, in_top_10pct, percentage-formatted scores.
  • Trend detection in history mode โ€” previous_epss, epss_change, and rising / falling / stable.
  • Streaming bulk mode โ€” the ~350k-row gzipped daily dump is decompressed incrementally, so memory stays flat.
  • Numbers arrive from the API as strings ("0.97236") and are converted to real floats for you.

Modes

ModeWhat it doesUses
top (default)Highest-risk CVEs above the minEpss probability threshold, sorted highest firstminEpss, maxItems
cvesLook up an explicit list of CVE idscves
bulkStream the full daily EPSS dump (354k+ CVEs)maxItems
history30-day EPSS time series per CVE, with trendcves, days, maxItems

Input

FieldTypeDefaultDescription
modestringtoptop, cves, bulk or history.
cvesarray[]CVE ids for cves / history mode, e.g. CVE-2021-44228.
minEpssnumber0.5Exploit-probability threshold for top mode. 0.5 = 50% chance of exploitation in 30 days.
daysinteger30Days of score history per CVE in history mode (API window is 30).
maxItemsinteger500Hard cap on dataset rows (max 50,000).
{
"mode": "cves",
"cves": ["CVE-2021-44228", "CVE-2014-0160"],
"maxItems": 500
}

Output

One row per CVE per scoring date.

{
"cve": "CVE-2021-44228",
"epss": 0.99999,
"epss_percent": 99.999,
"percentile": 1.0,
"percentile_pct": 100.0,
"date": "2026-07-29",
"risk_band": "critical",
"in_top_1pct": true,
"in_top_10pct": true,
"found": true,
"previous_epss": null,
"epss_change": null,
"trend": null,
"url": "https://www.first.org/epss/",
"source": "first-epss",
"scraped_at": "2026-07-30T13:40:11Z"
}
FieldDescription
cveCVE identifier, upper-cased.
epssExploit probability, float 0โ€“1.
epss_percentepss * 100, rounded to 3 decimals.
percentileRank against all scored CVEs, float 0โ€“1.
percentile_pctpercentile * 100, rounded to 2 decimals.
dateScoring date (ISO YYYY-MM-DD).
risk_bandcritical (โ‰ฅ0.5), high (โ‰ฅ0.1), medium (โ‰ฅ0.01), else low.
in_top_1pct / in_top_10pctPercentile โ‰ฅ 0.99 / โ‰ฅ 0.90.
foundfalse for CVEs EPSS does not score.
previous_epss, epss_change, trendHistory mode: prior day's score, delta, and rising / falling / stable.
url, source, scraped_atProvenance.

All fields are nullable.

Use cases

  • Vulnerability prioritisation โ€” patch the 2% of CVEs that are actually being exploited instead of every CVSS 9.8.
  • Risk scoring โ€” blend EPSS probability with your own asset criticality for a true expected-loss ranking.
  • SOC dashboards โ€” feed daily bulk runs into Grafana/Splunk and alert when a CVE in your stack crosses risk_band: critical.
  • Patch planning โ€” use history mode to catch CVEs whose exploit probability is rising and pull the patch window forward.
  • Compliance evidence โ€” document why a low-EPSS "critical" was deferred.

Pricing

Roughly $0.5 per 1,000 results. A bulk run pulling all 354k CVEs takes a couple of minutes.

Pair this actor with CIRCL for the vulnerability detail and Exploit-DB for the weaponisation evidence โ€” EPSS supplies the probability that ties them together.

Notes

  • Data ยฉ FIRST.org, published under the EPSS terms of use. Scores update daily.
  • The FIRST.org API caps limit at 10,000 records per request; the actor pages automatically.
  • Bulk mode reads https://epss.cyentia.com/epss_scores-current.csv.gz (redirects to Empirical Security's CDN).

Development

$python tests/test_mapping.py # offline smoke tests, stdlib only