id = "theharvester" name = "theHarvester" homepage = "https://github.com/laramies/theHarvester" description = "theHarvester gathers open-source intelligence about a domain or organization from public sources." executables = ["theHarvester"] [dotfiles] # https://github.com/laramies/theHarvester/wiki/Configuration-and-API-Keys # documents the per-user directory and says it reads api-keys.yaml and # proxies.yaml there (before the system-wide /etc and /usr/local/etc copies). paths = ["~/.theHarvester/proxies.yaml"] # api-keys.yaml contains provider credentials and is a whole-file secret. secret = ["~/.theHarvester/api-keys.yaml"] exclude = [] side_effect = false [commands] format = 1 label = "Gather OSINT for a domain" description = "Query public sources for hosts, emails and IPs of a domain. Active options (brute force, takeover, screenshots, vhost, API scan) are left out." quality = "ai-draft" parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = false } [[commands.source]] id = "src" kind = "help" url = "https://github.com/laramies/theHarvester/blob/master/theHarvester/__main__.py" revision = "master 2026-10" evidence = """ '-d', '--domain', help='Company name or domain to search, or an explicit ASN/IP/CIDR target for --routeviews.', '-l', '--limit', help='Maximum results requested from each source that supports result limits '-S', '--start', help='Result offset for sources that support pagination (default: 0).', '-f', '--filename', help='Write NAME.json, NAME.xml, and NAME.jsonl.', '-v', '--verbose', help='Show informational diagnostic messages.' '-b', '--source', help='Comma-separated source names or source capabilities. Capabilities: subdomains, emails, ips, asns, urls, people, breaches, all. """ [[commands.field]] id = "domain" label = "Domain or company" type = "string" option = ["--domain", "-d"] sources = ["src"] [[commands.field]] id = "source" label = "Sources or capabilities" description = "Comma-separated source names or capabilities." type = "string" option = ["--source", "-b"] suggestions = [{ value = "all", label = "All sources" }, { value = "subdomains", label = "Subdomains" }, { value = "emails", label = "Emails" }, { value = "ips", label = "IPs" }] sources = ["src"] [[commands.field]] id = "limit" label = "Result limit per source" type = "integer" option = ["--limit", "-l"] sources = ["src"] [[commands.field]] id = "start" label = "Result offset" type = "integer" option = ["--start", "-S"] sources = ["src"] [[commands.field]] id = "filename" label = "Output base name" description = "Writes NAME.json, NAME.xml and NAME.jsonl." type = "string" option = ["--filename", "-f"] effect = "overwrite" sources = ["src"] [[commands.field]] id = "verbose" label = "Verbose" type = "boolean" option = ["--verbose", "-v"] sources = ["src"] [[commands.task]] id = "search" label = "Search a domain" fields = ["domain", "source", "limit", "filename"] required = ["domain", "source"] [[commands.group]] id = "basic" label = "Basic" fields = ["domain", "source", "limit", "filename"] [[commands.group]] id = "advanced" label = "Advanced" fields = ["start", "verbose"]