Negative SEO protection web app with automated, hierarchical and historical Google Search Console disavow generation and granular link-level control.
Features
- 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
Quick Start with Docker
# Clone the repository git clone https://github.com/BansheeTech/Disavow-Generator.git # Bring up the container docker compose up -d # Access open http://localhost:44444
Default credentials: user / passwd
Change the default credentials immediately after first login via Settings.
Manual Installation
Requirements
- Python 3.11+
- pip
Setup
# 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.py
The app will start on http://localhost:44444
Configuration
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>
Configuration Options
| Option | Description | Default |
|---|---|---|
port |
Server port | 44444 |
mode |
production or development |
production |
workers |
Number of worker processes | 4 |
Usage
1. Upload Backlink Data
Upload backlink exports from tools like Ahrefs, SEMrush, Majestic, or any CSV/Excel file containing URLs.
2. Manage Whitelist
Add legitimate domains to the whitelist to prevent them from being included in the disavow file.
3. Generate Disavow File
Click "Generate Disavow File" to process all uploaded files. New domains/IPs will be highlighted for review.
4. Download & Upload to Google
Download the generated disavow file and upload it to Google Search Console Disavow Tool.
Docker Volumes
| 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
API Endpoints
| 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 |
Tech Stack
- Backend: Python 3.11, Flask 3.1, Hypercorn (ASGI)
- Frontend: Vue.js 3, Tailwind CSS
- Auth: Flask-Login, bcrypt
- Data: pandas, openpyxl
License
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).
See LICENSE.md for the full license text.
Author
Banshee - https://www.banshee.pro
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.



