crazy-max/ghaction-virustotal

GitHub Action to upload and scan files with VirusTotal

TypeScript

233

462 commits

updated Sep 13, 2026

See the code

README

GitHub release GitHub marketplace CI workflow Test workflow Codecov
Become a sponsor Donate Paypal

About

GitHub Action to upload and scan files with VirusTotal.


Usage

Scan local files

This action can be used to scan local files with VirusTotal:

VirusTotal GitHub Action

- name: VirusTotal Scan
  uses: crazy-max/ghaction-virustotal@v5
  with:
    vt_api_key: ${{ secrets.VT_API_KEY }}
    files: |
      ./foo-win32.exe
      ./foo-win64.exe

Scan through VirusTotal Monitor

To scan your assets through VirusTotal Monitor you can use the following workflow:

- name: VirusTotal Scan
  uses: crazy-max/ghaction-virustotal@v5
  with:
    vt_api_key: ${{ secrets.VT_API_KEY }}
    vt_monitor: true
    monitor_path: /ghaction-virustotal
    files: |
      ./foo-win32.exe
      ./foo-win64.exe

Scan assets of a published release

You can also use this action to scan assets of a published release on GitHub when a release event is triggered:

name: released

permissions:
  contents: read

on:
  release:
    types:
      - published

jobs:
  virustotal:
    runs-on: ubuntu-latest
    steps:
      -
        name: VirusTotal Scan
        uses: crazy-max/ghaction-virustotal@v5
        with:
          vt_api_key: ${{ secrets.VT_API_KEY }}
          files: |
            .exe$

If you set update_release_body: true input, analysis link(s) will be appended to the release body:

name: released

permissions:
  contents: read

on:
  release:
    types:
      - published

jobs:
  virustotal:
    runs-on: ubuntu-latest
    permissions:
      # required to write GitHub Release body
      contents: write
    steps:
      -
        name: VirusTotal Scan
        uses: crazy-max/ghaction-virustotal@v5
        with:
          vt_api_key: ${{ secrets.VT_API_KEY }}
          update_release_body: true
          files: |
            .exe$

And will look like this:

VirusTotal GitHub Action update release body

Customizing

inputs

Following inputs can be used as step.with keys

NameTypeDefaultDescription
vt_api_keyStringVirusTotal API key to upload assets (required)
filesStringNewline-delimited list of path globs/patterns for asset files to upload for analysis (required)
vt_monitorBoolfalseIf enabled, files will be uploaded to VirusTotal Monitor endpoint
monitor_path¹String/A path relative to current monitor user root folder to upload files
update_release_body²BoolfalseIf enabled, analysis link(s) will be appended to the release body
github_token³StringGitHub Token used to create an authenticated client for GitHub API as provided by secrets
request_rateNumber0API request-rate in requests/minute. Set to 4 or lower when using the standard free public API. 0 to disable rate-limit.

[!NOTE]

outputs

The following outputs are available

NameTypeDescription
analysisStringAnalysis results formatted as <filename>=<analysisURL> (comma separated)

Contributing

Want to contribute? Awesome! The most basic way to show your support is to star the project, or to raise issues. You can also support this project by becoming a sponsor on GitHub or by making a PayPal donation to ensure this journey continues indefinitely!

Thanks again for your support, it is much appreciated! 🙏

License

MIT. See LICENSE for more details.

actions
github-actions
virustotal

crazy-max/ghaction-virustotal

GitHub Action to upload and scan files with VirusTotal

TypeScript

233

462 commits

updated Sep 13, 2026

See the code

README

GitHub release GitHub marketplace CI workflow Test workflow Codecov
Become a sponsor Donate Paypal

About

GitHub Action to upload and scan files with VirusTotal.


Usage

Scan local files

This action can be used to scan local files with VirusTotal:

VirusTotal GitHub Action

- name: VirusTotal Scan
  uses: crazy-max/ghaction-virustotal@v5
  with:
    vt_api_key: ${{ secrets.VT_API_KEY }}
    files: |
      ./foo-win32.exe
      ./foo-win64.exe

Scan through VirusTotal Monitor

To scan your assets through VirusTotal Monitor you can use the following workflow:

- name: VirusTotal Scan
  uses: crazy-max/ghaction-virustotal@v5
  with:
    vt_api_key: ${{ secrets.VT_API_KEY }}
    vt_monitor: true
    monitor_path: /ghaction-virustotal
    files: |
      ./foo-win32.exe
      ./foo-win64.exe

Scan assets of a published release

You can also use this action to scan assets of a published release on GitHub when a release event is triggered:

name: released

permissions:
  contents: read

on:
  release:
    types:
      - published

jobs:
  virustotal:
    runs-on: ubuntu-latest
    steps:
      -
        name: VirusTotal Scan
        uses: crazy-max/ghaction-virustotal@v5
        with:
          vt_api_key: ${{ secrets.VT_API_KEY }}
          files: |
            .exe$

If you set update_release_body: true input, analysis link(s) will be appended to the release body:

name: released

permissions:
  contents: read

on:
  release:
    types:
      - published

jobs:
  virustotal:
    runs-on: ubuntu-latest
    permissions:
      # required to write GitHub Release body
      contents: write
    steps:
      -
        name: VirusTotal Scan
        uses: crazy-max/ghaction-virustotal@v5
        with:
          vt_api_key: ${{ secrets.VT_API_KEY }}
          update_release_body: true
          files: |
            .exe$

And will look like this:

VirusTotal GitHub Action update release body

Customizing

inputs

Following inputs can be used as step.with keys

NameTypeDefaultDescription
vt_api_keyStringVirusTotal API key to upload assets (required)
filesStringNewline-delimited list of path globs/patterns for asset files to upload for analysis (required)
vt_monitorBoolfalseIf enabled, files will be uploaded to VirusTotal Monitor endpoint
monitor_path¹String/A path relative to current monitor user root folder to upload files
update_release_body²BoolfalseIf enabled, analysis link(s) will be appended to the release body
github_token³StringGitHub Token used to create an authenticated client for GitHub API as provided by secrets
request_rateNumber0API request-rate in requests/minute. Set to 4 or lower when using the standard free public API. 0 to disable rate-limit.

[!NOTE]

outputs

The following outputs are available

NameTypeDescription
analysisStringAnalysis results formatted as <filename>=<analysisURL> (comma separated)

Contributing

Want to contribute? Awesome! The most basic way to show your support is to star the project, or to raise issues. You can also support this project by becoming a sponsor on GitHub or by making a PayPal donation to ensure this journey continues indefinitely!

Thanks again for your support, it is much appreciated! 🙏

License

MIT. See LICENSE for more details.

actions
github-actions
virustotal

Project health

Overall

5.2/10

Maintained

0/10

Code review

0/10
OpenSSF Scorecard

Significant stargazers

Dave Lane

178 followers · starred Feb 2025

Marc Brugger

79 followers · starred Feb 2025

Oleg Iarygin

74 followers · starred Oct 2022

Umberto Baldi

27 followers · starred Dec 2020