A bug bounty domain management tool for security researchers and penetration testers. This repository contains my remix of Jason Haddix's bountycatch.py script. The original script was simple and easier to manage, and I just added my own twist so it could do other commands I needed 🧸.
(Note: courtesy of this script goes to Jason Haddix. I just added some features that I wanted there and maintaining the core simplicity ❤️)
BountyCatch is a simple Python application for managing domain lists in bug bounties. It provides domain validation, duplicate detection, multiple export formats, and Redis-backed storage with connection pooling!
- Domain validation with RFC-compliant regex patterns
- Automatic duplicate detection and statistics reporting
- Bulk import from text files with validation feedback
- Multiple export formats (text and JSON with metadata)
- Project-based organisation for multiple targets
- Configuration file support with environment variable overrides
- Better logging to both console and file
- Redis connection pooling for optimal performance
- Better error handling with graceful failure recovery
- JSON export with project metadata and timestamps
- Text export for integration with other tools
- Domain statistics and duplicate reporting
- Project counting and listing capabilities
You'll need Redis installed and running on your system.
sudo apt update
sudo apt install redis-server redis-tools
# Start Redis service
sudo systemctl start redis
sudo systemctl enable redissudo dnf install redis
# or for older systems: sudo yum install redis
# Start Redis service
sudo systemctl start redis
sudo systemctl enable redis# Using Chocolatey
choco install redis-64
# Or download from: https://github.com/microsoftarchive/redis/releases
# Then run: redis-server.exebrew install redis
brew services start redispip install redis
# or
pip install -r requirements.txtCreate config.json for custom Redis settings:
{
"redis": {
"host": "localhost",
"port": 6379,
"db": 0,
"max_connections": 10
},
"logging": {
"level": "INFO",
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
}
}Override settings with environment variables:
export REDIS_HOST=my-redis-server
export REDIS_PORT=6380python3 bountycatch.py [global-options] <command> [command-options]-c, --config CONFIG- Specify configuration file path-v, --verbose- Enable verbose (DEBUG) logging-h, --help- Show help message
Import domains from a text file with automatic validation:
python3 bountycatch.py add -p example-project -f domains.txt
# Skip domain validation (not recommended)
python3 bountycatch.py add -p example-project -f domains.txt --no-validateGet the total number of domains in a project:
python3 bountycatch.py count -p example-projectPrint all domains in alphabetical order:
python3 bountycatch.py print -p example-projectExport domains to various formats:
# Export to text file (default)
python3 bountycatch.py export -p example-project -f domains.txt
# Export to JSON with metadata
python3 bountycatch.py export -p example-project -f domains.json --format jsonRemove a project and all its domains:
# With confirmation prompt
python3 bountycatch.py delete -p example-project
# Skip confirmation (use with caution)
python3 bountycatch.py delete -p example-project --confirmpython3 bountycatch.py -c my-config.json -v add -p project -f domains.txt# Process multiple files
for file in *.txt; do
python3 bountycatch.py add -p "$(basename "$file" .txt)" -f "$file"
doneexample.com
api.example.com
subdomain.example.org
test.co.uk
- Must be valid RFC-compliant domain names
- No wildcards or protocols
- Invalid domains are logged and skipped
- Empty lines are ignored
api.example.com
example.com
subdomain.example.org
{
"project": "example-project",
"domain_count": 3,
"exported_at": "2025-06-05T20:29:54.867184",
"domains": [
"api.example.com",
"example.com",
"subdomain.example.org"
]
}DEBUG- Verbose debugging informationINFO- General operational messagesWARNING- Important notices (invalid domains, etc.)ERROR- Error conditions
- Console - Real-time feedback
- File -
bountycatch.logfor persistent logging
# 1. Add domains with validation
python3 bountycatch.py add -p bugcrowd-target -f subdomains.txt
# 2. Check domain count
python3 bountycatch.py count -p bugcrowd-target
# 3. Export for further processing
python3 bountycatch.py export -p bugcrowd-target -f results.json --format json
# 4. Clean up when finished
python3 bountycatch.py delete -p bugcrowd-target --confirm# Export domains for subdomain enumeration
python3 bountycatch.py export -p target -f domains.txt
subfinder -dL domains.txt -o new_subdomains.txt
# Import discovered subdomains
python3 bountycatch.py add -p target -f new_subdomains.txtThis project maintains the same licence as the original work by Jason Haddix.
- Jason Haddix - Original
bountycatch.pyconcept.
Happy hunting folks! 🕵️♂️