Skip to main content

Output basics

Nuclei provides flexible output options to save, format, and export scan results for analysis, reporting, and integration with other tools.

File output

Save to file

Write findings to a text file:
nuclei -target https://example.com -output results.txt
Short flag:
nuclei -u https://example.com -o findings.txt
The output file contains one finding per line in Nuclei’s default format:
[CVE-2021-44228] [http] [critical] https://example.com/api
[self-signed-ssl] [ssl] [info] example.com:443
Output files are appended to by default. Delete or rename old output files before new scans to avoid mixing results.

JSON export

Export detailed results in JSON format:

JSON Lines (JSONL)

Export in JSON Lines format (one JSON object per line):
nuclei -target https://example.com -jsonl-export output.jsonl
Short flag:
nuclei -u https://example.com -jle output.jsonl
Or use the -jsonl flag to output to stdout:
nuclei -target https://example.com -jsonl
Short flag:
nuclei -u https://example.com -j

JSON array

Export as a single JSON array:
nuclei -target https://example.com -json-export output.json
Short flag:
nuclei -u https://example.com -je output.json
JSONL format is better for streaming and processing large result sets, while JSON array format is better for one-time analysis.

JSON structure

Nuclei’s JSON output includes:
{
  "template-id": "CVE-2021-44228",
  "info": {
    "name": "Apache Log4j RCE",
    "author": ["pdteam"],
    "severity": "critical",
    "description": "Apache Log4j2 remote code execution",
    "tags": ["cve", "rce", "log4j"]
  },
  "type": "http",
  "host": "https://example.com",
  "matched-at": "https://example.com/api",
  "timestamp": "2024-03-01T12:00:00Z",
  "curl-command": "curl -X GET https://example.com/api",
  "matcher-name": "log4j-detection",
  "request": "GET /api HTTP/1.1...",
  "response": "HTTP/1.1 200 OK..."
}

JSON customization

Omit raw requests/responses

Reduce output size by omitting HTTP request/response pairs:
nuclei -target https://example.com -jsonl-export output.jsonl -omit-raw
Short flag:
nuclei -u https://example.com -jle output.jsonl -or

Omit template encoding

Exclude encoded template from JSON output:
nuclei -target https://example.com -jsonl-export output.jsonl -omit-template
Short flag:
nuclei -u https://example.com -jle output.jsonl -ot
Omitting raw data and templates significantly reduces output file size for large scans.

Markdown export

Generate organized Markdown reports:
nuclei -target https://example.com -markdown-export reports/
Short flag:
nuclei -u https://example.com -me reports/
This creates a directory structure:
reports/
├── example.com/
│   ├── CVE-2021-44228.md
│   ├── self-signed-ssl.md
│   └── index.md

Markdown sorting

Control how Markdown reports are organized:
Sort by template ID (default):
MARKDOWN_EXPORT_SORT_MODE=template nuclei -u example.com -me reports/

SARIF export

Export in SARIF format for integration with code analysis platforms:
nuclei -target https://example.com -sarif-export output.sarif
Short flag:
nuclei -u https://example.com -se output.sarif
SARIF (Static Analysis Results Interchange Format) is widely supported by GitHub, GitLab, Azure DevOps, and other platforms.

Response storage

Store all HTTP requests and responses:

Store responses

# Store in default directory (./output)
nuclei -target https://example.com -store-resp

# Store in custom directory
nuclei -target https://example.com -store-resp -store-resp-dir responses/
Short flags:
nuclei -u https://example.com -sresp -srd responses/
This creates files like:
output/
├── https_example.com_443/
│   ├── request_1.txt
│   ├── response_1.txt
│   ├── request_2.txt
│   └── response_2.txt
Storing all responses can generate large amounts of data. Use disk space wisely.

Display options

Silent mode

Display only findings, no progress or banner:
nuclei -target https://example.com -silent
Perfect for piping to other tools:
nuclei -u https://example.com -silent | grep critical

No metadata

Disable printing result metadata:
nuclei -target https://example.com -no-meta
Short flag:
nuclei -u https://example.com -nm

Timestamps

Enable timestamps in output:
nuclei -target https://example.com -timestamp
Short flag:
nuclei -u https://example.com -ts
Output includes timestamps:
[2024-03-01 12:00:00] [CVE-2021-44228] [http] [critical] https://example.com

Matcher status

Show match failure status for debugging:
nuclei -target https://example.com -matcher-status
Short flag:
nuclei -u https://example.com -ms
Matcher status helps debug template logic by showing why certain conditions failed.

No color

Disable colored output:
nuclei -target https://example.com -no-color
Short flag:
nuclei -u https://example.com -nc
Useful for log files and CI/CD pipelines.

Statistics

Enable statistics

Display scan statistics:
nuclei -target https://example.com -stats
Shows periodic updates:
Templates: 3500 | Hosts: 1 | RPS: 150 | Errors: 0 | Matches: 5

Statistics interval

Control update frequency (in seconds):
nuclei -target https://example.com -stats -stats-interval 10
Short flag:
nuclei -u https://example.com -stats -si 10

JSON statistics

Output statistics in JSON format:
nuclei -target https://example.com -stats -stats-json
Short flag:
nuclei -u https://example.com -stats -sj

HTTP statistics

Enable HTTP status code tracking:
nuclei -target https://example.com -http-stats
Short flag:
nuclei -u https://example.com -hps
Tracks request/response statistics for analysis.

Metrics endpoint

Expose metrics via HTTP endpoint:
nuclei -target https://example.com -metrics-port 9092
Short flag:
nuclei -u https://example.com -mp 9092
Access metrics at http://localhost:9092/metrics.
Metrics are exposed in Prometheus format for monitoring integration.

Reporting database

Persist results to a database for deduplication:
nuclei -target https://example.com -report-db results.db
Short flag:
nuclei -u https://example.com -rdb results.db
Benefits:
  • Automatic deduplication
  • Historical tracking
  • Persistent storage

Reporting integrations

Configure external reporting systems:
nuclei -target https://example.com -report-config reporting-config.yaml
Short flag:
nuclei -u https://example.com -rc reporting-config.yaml
Supported integrations:
  • Jira
  • Slack
  • GitHub Issues
  • Elasticsearch
  • Splunk
  • Custom webhooks
See Cloud Integration for detailed reporting configuration.

Data redaction

Redact sensitive data from output:
# Redact specific keys
nuclei -target https://example.com \
  -jsonl-export output.jsonl \
  -redact Authorization,Cookie,api-key

# Redact from file
nuclei -target https://example.com \
  -jsonl-export output.jsonl \
  -redact redact-keys.txt
Short flag:
nuclei -u https://example.com -jle output.jsonl -rd Authorization,Cookie
Redaction removes sensitive data from query parameters, request headers, and request body.

Verbose output

Verbose mode

Show additional details:
nuclei -target https://example.com -verbose
Short flag:
nuclei -u https://example.com -v

Very verbose mode

Show template loading and detailed execution:
nuclei -target https://example.com -vv
Shows:
  • Templates being loaded
  • Request/response pairs
  • Matcher evaluation
  • Workflow execution

Variable dump

Display variable values for debugging:
nuclei -target https://example.com -show-var-dump
Short flag:
nuclei -u https://example.com -svd
Limit displayed characters:
nuclei -u https://example.com -svd -var-dump-limit 500
Short flag:
nuclei -u https://example.com -svd -vdl 500

Debug output

Debug mode

Show all requests and responses:
nuclei -target https://example.com -debug

Debug requests only

nuclei -target https://example.com -debug-req
Short flag:
nuclei -u https://example.com -dreq

Debug responses only

nuclei -target https://example.com -debug-resp
Short flag:
nuclei -u https://example.com -dresp
Debug mode generates extensive output. Use with single targets for troubleshooting.

Trace and error logs

Trace log

Log all requests to a file:
nuclei -target https://example.com -trace-log trace.log
Short flag:
nuclei -u https://example.com -tlog trace.log

Error log

Log errors to a separate file:
nuclei -target https://example.com -error-log errors.log
Short flag:
nuclei -u https://example.com -elog errors.log

Practical examples

Example 1: Comprehensive reporting

nuclei -list targets.txt \
  -output findings.txt \
  -json-export findings.json \
  -markdown-export reports/ \
  -sarif-export findings.sarif \
  -report-db scan-results.db \
  -stats

Example 2: Silent pipeline

cat targets.txt | \
  nuclei -silent -jsonl | \
  jq -r 'select(.info.severity=="critical") | .host'

Example 3: Detailed debugging

nuclei -u https://example.com \
  -t custom-template.yaml \
  -debug \
  -verbose \
  -matcher-status \
  -trace-log trace.log

Example 4: Production scan

nuclei -list production.txt \
  -severity critical,high \
  -silent \
  -jsonl-export findings.jsonl \
  -omit-raw \
  -no-color \
  -report-db production-scan.db

Example 5: CI/CD integration

nuclei -target $CI_TARGET \
  -silent \
  -no-color \
  -sarif-export nuclei-results.sarif \
  -severity critical,high \
  -exclude-tags dos,intrusive

Example 6: Research and analysis

nuclei -list research-targets.txt \
  -jsonl-export full-results.jsonl \
  -store-resp \
  -store-resp-dir responses/ \
  -stats \
  -stats-json \
  -report-db research.db

Output format comparison

FormatUse CaseSizeStreamingMachine Readable
TextQuick reviewSmallYesNo
JSONLProcessingMediumYesYes
JSONAnalysisMediumNoYes
MarkdownReportsLargeNoNo
SARIFCI/CD IntegrationLargeNoYes

Best practices

1

Choose appropriate formats

Select output formats based on your workflow:
# Development: verbose + debug
nuclei -u example.com -v -debug-req

# Production: silent + JSON + database
nuclei -list targets.txt -silent -jle results.jsonl -rdb scan.db

# Reporting: Markdown + SARIF
nuclei -u example.com -me reports/ -se results.sarif
2

Use deduplication

Always use report database for recurring scans:
nuclei -list targets.txt -report-db scan.db
3

Optimize output size

Omit unnecessary data for large scans:
nuclei -list large-targets.txt -jle results.jsonl -or -ot
4

Enable statistics

Monitor long-running scans:
nuclei -list targets.txt -stats -si 30

Next steps

Rate limiting

Control scan speed and performance

Cloud integration

Upload results to ProjectDiscovery Cloud

Filtering templates

Filter what gets scanned and reported

Running scans

Back to scanning fundamentals

Build docs developers (and LLMs) love