id = "gau"
name = "gau"
homepage = "https://github.com/lc/gau"
description = "Fetch known URLs from AlienVault's Open Threat Exchange, the Wayback Machine, and Common Crawl."
executables = ["gau"]
[dotfiles]
paths = ["~/.gau.toml", "%USERPROFILE%/.gau.toml"]
secret = []
side_effect = false
[commands]
format = 1
label = "Fetch known URLs"
description = "Fetch known URLs for one or more domains from archive providers, with filters. Reading domains from standard input is not covered."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = false, short_bundles = false }
[[commands.source]]
id = "readme"
kind = "manual"
url = "https://github.com/lc/gau/blob/master/README.md"
revision = "master 2026-10"
evidence = """
|`--blacklist`| list of extensions to skip | gau --blacklist ttf,woff,svg,png|
|`--fc`| list of status codes to filter | gau --fc 404,302 |
|`--from`| fetch urls from date (format: YYYYMM) | gau --from 202101 |
|`--fp`| remove different parameters of the same endpoint | gau --fp|
|`--json`| output as json | gau --json |
|`--mc`| list of status codes to match | gau --mc 200,500 |
|`--o`| filename to write results to | gau --o out.txt |
|`--providers`| list of providers to use (wayback,commoncrawl,otx,urlscan) | gau --providers wayback|
|`--subs`| include subdomains of target domain | gau example.com --subs |
|`--threads`| number of workers to spawn | gau example.com --threads |
|`--to`| fetch urls to date (format: YYYYMM) | gau example.com --to 202101 |
|`--verbose`| show verbose output | gau --verbose example.com |
"""
[[commands.field]]
id = "domains"
label = "Domains"
type = "string"
position = 0
multiple = true
min = 0
sources = ["readme"]
[[commands.field]]
id = "providers"
label = "Providers"
description = "Comma-separated list."
type = "string"
option = ["--providers"]
suggestions = [{ value = "wayback", label = "Wayback" }, { value = "commoncrawl", label = "Common Crawl" }, { value = "otx", label = "OTX" }, { value = "urlscan", label = "urlscan" }, { value = "wayback,commoncrawl,otx,urlscan", label = "All" }]
sources = ["readme"]
[[commands.field]]
id = "subs"
label = "Include subdomains"
type = "boolean"
option = ["--subs"]
sources = ["readme"]
[[commands.field]]
id = "blacklist"
label = "Skip extensions"
description = "Comma-separated, e.g. ttf,woff,svg,png."
type = "string"
option = ["--blacklist"]
sources = ["readme"]
[[commands.field]]
id = "from"
label = "From date (YYYYMM)"
type = "string"
option = ["--from"]
sources = ["readme"]
[[commands.field]]
id = "to"
label = "To date (YYYYMM)"
type = "string"
option = ["--to"]
sources = ["readme"]
[[commands.field]]
id = "mc"
label = "Match status codes"
type = "string"
option = ["--mc"]
sources = ["readme"]
[[commands.field]]
id = "fc"
label = "Filter status codes"
type = "string"
option = ["--fc"]
sources = ["readme"]
[[commands.field]]
id = "fp"
label = "Remove duplicate parameters"
type = "boolean"
option = ["--fp"]
sources = ["readme"]
[[commands.field]]
id = "threads"
label = "Threads"
type = "integer"
option = ["--threads"]
sources = ["readme"]
[[commands.field]]
id = "json"
label = "JSON output"
type = "boolean"
option = ["--json"]
sources = ["readme"]
[[commands.field]]
id = "output"
label = "Output file"
type = "path"
option = ["--o"]
path = { kind = "file", role = "output" }
effect = "overwrite"
sources = ["readme"]
[[commands.field]]
id = "verbose"
label = "Verbose"
type = "boolean"
option = ["--verbose"]
sources = ["readme"]
[[commands.task]]
id = "fetch"
label = "Fetch URLs"
fields = ["domains", "providers", "subs", "blacklist", "output"]
required = ["domains"]
[[commands.task]]
id = "range"
label = "Fetch within a date range"
fields = ["domains", "from", "to", "subs", "blacklist", "output"]
required = ["domains"]
[[commands.group]]
id = "basic"
label = "Basic"
fields = ["domains", "providers", "subs", "blacklist", "output"]
[[commands.group]]
id = "advanced"
label = "Advanced"
fields = ["from", "to", "mc", "fc", "fp", "threads", "json", "verbose"]