Negative SEO protection web app with automated, hierarchical and historical Google Search Console disavow generation and granular link-level control.
- Automated Disavow Generation - Upload backlink exports and generate Google Search Console disavow files
- Smart Categorization - Automatically categorizes entries as IPs, domains, or specific URLs
- Historical Tracking - Tracks previously disavowed entries to highlight new threats
- Whitelist Management - Maintain a whitelist of legitimate domains to exclude from disavow
- New Entries Review - Review new domains/IPs before blocking with option to whitelist
- Multi-format Support - Import from Excel (.xlsx, .xls), CSV, and TXT files
- Production Ready - Multi-worker support with Hypercorn ASGI server
- Docker Support - Easy deployment with Docker and docker-compose
# Clone the repository
git clone https://github.com/BansheeTech/Disavow-Generator.git
# Bring up the container
docker compose up -d
# Access
open http://localhost:44444Default credentials: user / passwd
Change the default credentials immediately after first login via Settings.
- Python 3.11+
- pip
# Clone the repository
git clone https://github.com/BansheeTech/Disavow-Generator.git
cd Disavow-Generator
# Create virtual environment
python -m venv venv
source venv/bin/activate # Linux/macOS
# venv\Scripts\activate # Windows
# Install dependencies
pip install -r requirements.txt
# Run the application
python app.pyThe app will start on http://localhost:44444
Configuration is stored in conf/disavow.conf (auto-generated on first run):
[server]
port = 44444
mode = production
workers = 4
secret_key = <auto-generated>
[paths]
input_dir = __DISAVOW_DATA__/INGEST
output_dir = __DISAVOW_DATA__/OUTPUT
whitelist_file = __DISAVOW_DATA__/whitelist.txt
[auth]
username = user
password_hash = <bcrypt-hash>| Option | Description | Default |
|---|---|---|
port |
Server port | 44444 |
mode |
production or development |
production |
workers |
Number of worker processes | 4 |
Upload backlink exports from tools like Ahrefs, SEMrush, Majestic, or any CSV/Excel file containing URLs.
Add legitimate domains to the whitelist to prevent them from being included in the disavow file.
Click "Generate Disavow File" to process all uploaded files. New domains/IPs will be highlighted for review.
Download the generated disavow file and upload it to Google Search Console Disavow Tool.
| Volume | Container Path | Description |
|---|---|---|
| Config | /app/conf |
Configuration file (disavow.conf) |
| Data | /app/__DISAVOW_DATA__ |
Input files, output files, whitelist |
Example docker-compose.yml:
services:
disavow-generator:
image: bansheetech/disavow-generator:latest
container_name: disavow-generator
restart: unless-stopped
ports:
- "44444:44444"
volumes:
- ./disavow_data:/app/__DISAVOW_DATA__
- ./disavow_conf:/app/conf
environment:
- TZ=Europe/Madrid| Method | Endpoint | Description |
|---|---|---|
POST |
/api/upload |
Upload input file |
POST |
/api/process |
Generate disavow file |
GET |
/api/stats |
Get current statistics |
GET |
/api/whitelist |
Get whitelist |
POST |
/api/whitelist |
Update whitelist |
GET |
/api/files |
List input files |
GET |
/api/outputs |
List generated files |
GET |
/api/download/<filename> |
Download disavow file |
- Backend: Python 3.11, Flask 3.1, Hypercorn (ASGI)
- Frontend: Vue.js 3, Tailwind CSS
- Auth: Flask-Login, bcrypt
- Data: pandas, openpyxl
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).
See LICENSE.md for the full license text.
Banshee - https://www.banshee.pro
Contributions are welcome! Please feel free to submit a Pull Request.



