Skip to content

CVEQL — Query Language

CVEQL (CVE Query Language) is CVEFeed.io’s structured query language for searching vulnerabilities with precision. Write queries that combine severity, CVSS score, affected products, CISA KEV status, EPSS scores, and more — using dot notation to traverse related data and logical operators to combine conditions.

CVEQL is available to all users, including unauthenticated guests (with lower rate limits and query timeouts).

CVEQL query editor with example queries, operator reference, and search/validate buttons

Queries follow the pattern field operator value, combined with the and and or logical operators and grouped with parentheses. There is no standalone not — negate a condition with !=, !~, or one of the not in / not startswith / not endswith operators.

FieldTypeDescription
idstringCVE ID (e.g., "CVE-2024-3400")
descriptionstringFull vulnerability description text
publisheddatePublication date
last_modifieddateLast modification date
statusstringCVE status value
cvss_scorenumberCVSS score (0.0–10.0)
severitystringSeverity level — "CRITICAL", "HIGH", "MEDIUM", "LOW", plus "NA" and "NONE" for CVEs with no CVSS score
is_remotebooleanWhether the vulnerability is remotely exploitable
is_cisa_kevbooleanWhether it appears in the CISA KEV catalog
has_epssbooleanWhether EPSS scores are available
has_categorystringVulnerability category id (e.g., "injection", "memory-corruption")

has_category matches a closed taxonomy of 15 ids. Ids are hyphenated, and a value outside this list matches nothing rather than raising an error:

injection, memory-corruption, race-condition, xee, xss, csrf, ssrf, path-traversal, authentication, authorization, cryptography, information-disclosure, misconfiguration, supply-chain, denial-of-service

Each CVE is classified into at most one of these categories from its description, and many CVEs carry no category at all.

You can query related data using dot notation:

FieldDescription
products.nameName of an affected product
products.vendor.nameVendor name of an affected product
products.vendor.partCPE part of the vendor ("application", "operating system", "hardware")
cwes.idCWE identifier
cwes.nameCWE name
cisa_kevs.vulnerability_nameCISA KEV vulnerability name
cisa_kevs.date_addedDate added to CISA KEV
cisa_kevs.due_dateCISA remediation due date
cisa_kevs.known_ransomware_campaign_useKnown ransomware campaign usage — stored lowercase ("known", "unknown")
epss_scores.scoreEPSS probability score
epss_scores.percentileEPSS percentile
epss_scores.release_dateDate the EPSS score was published
OperatorMeaning
=Equals
!=Not equals
>, >=, <, <=Numeric/date comparison
~Contains (partial text match)
!~Does not contain
inValue is in a list
not inValue is not in a list
startswithString starts with
not startswithString does not start with
endswithString ends with
not endswithString does not end with
andBoth conditions must match
orEither condition must match

String comparison with =, !=, in, and not in is case-sensitive; ~, !~, startswith, and endswith are not. products.name is the exception — =, !=, ~, !~, in, and not in on it run through PostgreSQL full-text search and ignore case, while startswith and endswith are not supported on that field and silently match nothing.

Critical vulnerabilities with a CVSS score of 9.0 or higher:

cvss_score >= 9.0 and severity = "CRITICAL"

CISA KEV critical CVEs:

severity = "CRITICAL" and is_cisa_kev = True

Apache product vulnerabilities:

products.vendor.name ~ "apache"

Recent high-severity CVEs from 2025:

published >= "2025-01-01" and cvss_score >= 7.0

Vulnerabilities with known ransomware campaigns:

cisa_kevs.known_ransomware_campaign_use = "known"

Buffer overflow vulnerabilities that contain specific text:

description ~ "buffer overflow"

Click the Validate button to check your query syntax without executing it. This helps you catch typos or unsupported field names before running the search.

CVEQL queries are rate-limited per tier:

TierQueries per Minute
Anonymous5 (with 5-second query timeout)
Free10
Starter20
Pro30
Enterprise40

Authenticated queries get a 10-second query timeout; anonymous queries get 5 seconds.

Every CVEQL search — authenticated or not — is restricted to CVEs published in the last 90 days unless the query itself references published or last_modified. Mention either field anywhere in the query (for example severity = "CRITICAL" and published >= "2000-01-01") to search the full catalog. Each search response includes a default_date_filter boolean: true means the 90-day window was applied, false means your query supplied its own date range.