Pipeline Integration
Urx is designed to work seamlessly in command-line pipelines and with other security tools.
Standard Input/Output
Urx reads domains from standard input and outputs URLs to standard output, making it perfect for piping:
cat domains.txt | urx | grep "api"
With Security Tools
Nuclei
Scan for vulnerabilities in discovered JavaScript files:
urx example.com -e js | nuclei -t xss
httpx
Probe discovered URLs for HTTP information:
urx example.com | httpx -silent -status-code
gf (Go Filters)
Filter URLs for specific patterns:
urx example.com | gf xss
urx example.com | gf redirect
urx example.com | gf ssrf
ffuf
Fuzz discovered endpoints:
urx example.com --patterns api | ffuf -w - -u FUZZ
--fuzz-placeholder hands ffuf the parameter templates directly — every query
value replaced, one URL per parameter signature:
urx example.com --fuzz-placeholder FUZZ | ffuf -w - -u FUZZ
-f wordlist turns the run into a target-specific wordlist instead — the path
segments and parameter names the target is built from, with ids, hashes and
dates left out:
urx example.com --subs -f wordlist -o words.txt
ffuf -w words.txt -u https://example.com/FUZZ
dalfox
Parameter templates feed a scanner just as well as a fuzzer:
urx example.com --fuzz-placeholder FUZZ | dalfox pipe
waybackurls / gau
Combine with other URL collection tools:
(urx example.com && gau example.com) | sort -u
Notification Integration
Built-in Webhook (--notify)
urx can POST a run summary itself — no extra tool in the pipe. Paired with
--incremental the webhook fires only when the run finds new URLs:
# Slack
urx target.com --incremental --silent \
--notify https://hooks.slack.com/services/T000/B000/XXXX --notify-format slack
# Discord
urx target.com --incremental --silent --notify "$DISCORD_HOOK" --notify-format discord
# Anything that takes JSON (n8n, ntfy, a Lambda, your own receiver)
export URX_NOTIFY_URL=https://n8n.example/webhook/urx
urx target.com --incremental --silent
See CLI Options → Webhook Notifications
for the payload schema, --notify-on, and the length limits.
Notify
Send the new URLs themselves, one per message, through an external notifier:
urx target.com --incremental --silent | notify -silent
Discord Webhook (per URL)
urx example.com | while read url; do
curl -X POST "webhook_url" -d "{\"content\":\"$url\"}"
done
Database Integration
PostgreSQL
Store results in a database:
urx example.com -f json | jq -r '.url' | while read url; do
psql -c "INSERT INTO urls (url) VALUES ('$url')"
done
MongoDB
urx example.com -f json | mongoimport --db security --collection urls
Continuous Monitoring
Daily Cron Job
Monitor targets daily for new URLs:
# Add to crontab
0 0 * * * /usr/local/bin/urx target.com --incremental --silent >> /var/log/urx.log
With Redis for Distributed Scanning
urx example.com --cache-type redis --redis-url redis://central-cache:6379 --incremental
CI/CD Integration
GitHub Actions
name: URL Discovery
on:
schedule:
- cron: '0 0 * * *'
jobs:
discover:
runs-on: ubuntu-latest
steps:
- name: Install Urx
run: cargo install urx
- name: Run Discovery
run: urx example.com --incremental -o results.txt
- name: Upload Results
uses: actions/upload-artifact@v3
with:
name: urls
path: results.txt
Docker Integration
Run in Container
docker run --rm \
-v $(pwd):/data \
ghcr.io/hahwul/urx:latest \
example.com -o /data/results.txt
Docker Compose for Monitoring Stack
version: '3'
services:
urx:
image: ghcr.io/hahwul/urx:latest
command: example.com --cache-type redis --redis-url redis://redis:6379 --incremental
depends_on:
- redis
redis:
image: redis:alpine
volumes:
- redis-data:/data
volumes:
redis-data:
Kubernetes CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
name: urx-scanner
spec:
schedule: "0 0 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: urx
image: ghcr.io/hahwul/urx:latest
args: ["example.com", "--incremental", "--silent"]
restartPolicy: OnFailure
Multi-Tool Workflows
Complete Reconnaissance Pipeline
#!/bin/bash
TARGET=$1
# Discover URLs
urx $TARGET --subs -e js,json,xml -o urls.txt
# Probe for live URLs
cat urls.txt | httpx -silent -o live.txt
# Scan for vulnerabilities
cat live.txt | nuclei -t cves/ -o vulnerabilities.txt
# Check for secrets in JS files
cat urls.txt | grep "\.js$" | while read url; do
curl -s $url | grep -i "api.*key"
done
Bug Bounty Automation
#!/bin/bash
TARGET=$1
# Initial discovery
urx $TARGET --subs --incremental -o new-urls.txt
# Filter interesting endpoints
cat new-urls.txt | gf redirect > potential-redirects.txt
cat new-urls.txt | gf xss > potential-xss.txt
cat new-urls.txt | gf sqli > potential-sqli.txt
# Notify on Slack
if [ -s new-urls.txt ]; then
COUNT=$(wc -l < new-urls.txt)
curl -X POST $SLACK_WEBHOOK -d "{\"text\":\"Found $COUNT new URLs for $TARGET\"}"
fi