NVD CVE Change History Scraper avatar

NVD CVE Change History Scraper

Pricing

from $0.50 / 1,000 results

Go to Apify Store
NVD CVE Change History Scraper

NVD CVE Change History Scraper

$0.5/1K ๐Ÿ”ฅ NVD CVE History Scraper! Track CVE vulnerability records, change history, CVSS scores & references from the NVD. No key. JSON, CSV, Excel or API in seconds. Feed a security-monitoring or threat-intel tool โšก

Pricing

from $0.50 / 1,000 results

Rating

0.0

(0)

Developer

ninhothedev

ninhothedev

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

The audit trail of the National Vulnerability Database. This actor scrapes the NVD CVE change history API and returns one row per change event โ€” who changed what on a CVE and when: re-analysis, rejection, CVSS re-scoring, CWE remaps, reference edits, SSVC additions and more.

No API key required. ~$0.5 per 1,000 change events.

What makes this different from my other CVE actors

This is not another "current state of a CVE" scraper. It is the change/audit history โ€” the log of modifications over a CVE's lifetime.

ActorWhat it gives you
circl-cve-scraperThe current CVE record (description, CVSS, references) from CIRCL
nist-cpe-scraperCPE product/platform dictionary entries
cisa-kev-scraperCISA Known Exploited Vulnerabilities catalog
epss-scores-scraperEPSS exploit-probability scores
nvd-cve-history-scraper (this one)The change log: every modification event on a CVE (re-analysis, rejection, CVSS change) with old vs. new values

If you want the current state of a CVE, use one of the others. If you want to know how a CVE record has changed over time โ€” for audit trails, compliance evidence, or catching silently re-scored vulnerabilities โ€” this is the one.

Modes

  • window โ€” every change event inside a date range (default = the last 7 days).
  • cves โ€” the full change history for one or more specific CVE ids (e.g. Log4Shell CVE-2021-44228).

Use cases

  • Vulnerability-management audit trails โ€” a defensible log of when and how a CVE record changed.
  • CVE lifecycle tracking โ€” follow a CVE from Received โ†’ Initial Analysis โ†’ Modified โ†’ Reanalysis.
  • Detecting re-scored CVEs โ€” flag CVEs whose CVSS was quietly raised or lowered (affects_cvss).
  • Compliance โ€” evidence that your triage reflects the latest NVD analysis.

Input

FieldTypeDescription
modeselectwindow (date range, default) or cves (history for specific ids).
cvesarrayCVE ids to fetch when mode = cves, e.g. ["CVE-2021-44228"].
changeStartDatestringWindow start YYYY-MM-DD (UTC). Default = 7 days ago.
changeEndDatestringWindow end YYYY-MM-DD (UTC). Default = now.
eventNameFilterstringKeep only events with this exact name, e.g. CVE Rejected.
apiKeystringOptional NVD key โ€” raises the rate limit.
maxItemsintegerMax change events for the run (default 200, max 5000).

Output

One dataset row per change event:

{
"type": "cve_change",
"cve_id": "CVE-2021-44228",
"change_id": "4485E73F-35C2-4A94-82B4-D644383FDC73",
"event_name": "Reanalysis",
"source_identifier": "nvd@nist.gov",
"created": "2021-12-14T19:15:00.000000Z",
"detail_count": 2,
"changes": [
{"action": "Changed", "type": "CVSS V3.1", "old_value": "...", "new_value": "..."}
],
"changed_fields": ["CVSS V3.1", "CWE"],
"is_rejection": false,
"is_reanalysis": true,
"affects_cvss": true,
"url": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228",
"source": "nvd-cvehistory",
"scraped_at": "2026-08-11T00:00:00.000000Z"
}

Event names you will see include: New CVE Received, Initial Analysis, CVE Modified, Modified Analysis, Reanalysis, CVE Rejected, CWE Remap, CPE Deprecation Remap. Detail type values include Description, CVSS V2, CVSS V3.1, CWE, Reference, Affected, CPE Configuration, SSVC.

Rate limits & the 120-day window cap

  • Keyless: NVD allows roughly 5 requests per 30 seconds. The actor spaces requests ~6s apart and backs off on HTTP 403/429. Supplying a free NVD apiKey raises the limit and speeds up large runs.
  • 120-day window cap: NVD rejects change windows longer than 120 days. The actor automatically splits longer ranges into 120-day chunks, so you can request any span.

Notes

Values for each field-level change are capped at 300 characters and the per-event changes list is capped at 30 entries to keep rows lightweight; detail_count and changed_fields always reflect the full set.