
TorBot v4.3.1
Crawls .onion sites over Tor to collect page titles, hostnames, and link relationships, exporting JSON trees and visualizations for dark web OSINT investigations.
████████╗ ██████╗ ██████╗ ██████╗ ██████╗ ████████╗
╚══██╔══╝██╔═══██╗██╔══██╗ ██╔══██╗██╔═████╗╚══██╔══╝
██║ ██║ ██║██████╔╝ ██████╔╝██║██╔██║ ██║
██║ ██║ ██║██╔══██╗ ██╔══██╗████╔╝██║ ██║
██║ ╚██████╔╝██║ ██║ ██████╔╝╚██████╔╝ ██║
╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝
Open Source Intelligence Tool for the Dark Web
Status/Social links
Features
- Onion Crawler (.onion)
- Returns page title or host name if no page title is available and address with a short description of the site.
- Save links to a database (Not done)
- Output the HTML from a site or save it to an HTML file. (Not done)
- Save the link tree as a JSON file.
- Crawl custom domains
- Check if the link is live
- Built-in Updater
- Build a visual tree of link relationships that can be quickly viewed or saved to a file
Recent improvements
- The CLI now allows
--versionand--updateto run without requiring a URL. - The crawler now resolves relative links against the current page and skips unsupported or malformed hrefs more gracefully.
- The optional TorBotApp desktop UI can be launched from the CLI with
torbot appwhen installed as a sibling checkout.
...(will be updated)
Dependencies
- Tor (Optional)
- Python 3.10+
- pip
Quick start
Local setup
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
python -m pip install -e .
Install with OTinstaller (Linux)
OTinstaller is a third-party tool manager that installs the torbot PyPI release into its own virtualenv. It is not maintained by the TorBot team, so please report problems with it on the OTinstaller tracker.
pipx install otinstaller
otinstaller init
otinstaller install torbot
# url:... is passed to TorBot as -u; the other flags go through unchanged
otinstaller run torbot -- url:https://example.com --depth 2 --visualize table
Run the CLI
python main.py --help
python main.py --version
python main.py -u https://example.com --depth 2 --visualize table
Common examples
# Gather basic site information
python main.py -u https://example.com --info
# Save the crawl tree as JSON
python main.py -u https://example.com --depth 2 --save json
# Disable SOCKS5 if you are not using Tor locally
python main.py -u https://example.com --disable-socks5 --visualize tree
# Launch the optional desktop app when TorBotApp is installed
torbot app
Evidence-first AI analysis
Save a versioned crawl result and turn it into a cited investigation bundle:
torbot --url https://example.com --disable-socks5 \
--save result --result-file crawl-result.json
torbot analyze crawl-result.json --provider ollama --model qwen3 \
--output investigation/
Analyst defaults to a local Ollama endpoint. Remote OpenAI-compatible
providers require the explicit --allow-remote flag. Every supported finding
must cite captured evidence, and a provider outage never prevents the
deterministic evidence bundle from being written. See
TorBot Analyst for the offline quick start, output formats,
privacy boundary, and schemas.
Options
usage: Gather and analyze data from Tor sites.
optional arguments:
-u URL, --url URL Specify a website link to crawl
--depth DEPTH Specify max depth of crawler (default 1)
-h, --help Show this help message and exit
--host Set IP address for SOCKS5 proxy (defaults to 127.0.0.1)
--port Set port for SOCKS5 proxy (defaults to 9050)
-v Displays DEBUG level logging, default is INFO
--version Show the current version of TorBot.
--update Update TorBot to the latest stable version
--app Run optional TorBot desktop app
--app-dir APP_DIR Path to a TorBotApp checkout
-q, --quiet Prevents display of header and IP address
--save FORMAT Save results in a file. (tree, JSON)
--visualize FORMAT Visualizes tree of data gathered. (tree, JSON, table)
-i, --info Info displays basic info of the scanned site
--disable-socks5 Executes HTTP requests without using SOCKS5 proxy
-u/--urlis required for crawl-related commands such as--info,--save, and--visualize.
If you are using Tor locally, keep the SOCKS5 proxy enabled. If you are not using Tor, add --disable-socks5 to avoid proxy connection errors.
Read more about torrc here: Torrc
Optional desktop app
TorBot remains a CLI-first Python tool. The desktop UI lives in the separate TorBotApp Electron project so Node and Electron are not required for CLI users.
To launch it from this CLI, install TorBotApp as a sibling checkout:
code/
+-- TorBot/
+-- TorBotApp/
Then run:
torbot app
If TorBotApp is somewhere else, use either:
TORBOT_APP_DIR=/path/to/TorBotApp torbot app
torbot --app --app-dir /path/to/TorBotApp
See Desktop App Architecture for how the CLI, optional UI, and backend services fit together.
Curated Features
- Visualization Module Revamp
- Implement BFS Search for webcrawler
- Improve stability (Handle errors gracefully, expand test coverage, etc.)
- Increase test coverage
- Save the most recent search results to a database
- Randomize Tor Connection (Random Header and Identity)
- Keyword/Phrase Search
- Social Media Integration
- Increase anonymity
- Screenshot capture
Contribution Guidelines
Found an issue?
If you face any issues in the project, please let us know by creating a new issue here.