An OSINT tool for intelligence gathering and username enumeration
Project description
Canopy is a Python-based OSINT (Open-Source Intelligence) framework designed to help individuals discover, organize, and analyze publicly available information about their own digital footprint.
Note: Canopy was developed and tested exclusively on my own publicly available data as a learning and portfolio project.
Project Goals
- Understand how publicly available information is indexed and exposed online
- Practice structured OSINT methodology using search engines
- Correlate results from multiple sources into meaningful categories
- Demonstrate ethical boundaries and legal awareness in OSINT work
Features
- Multi-platform username enumeration across social media, coding sites, gaming platforms, and more.
- Avoids false positives using fingerprint-based validation.
- Supports local caching of platform fingerprints to speed up scans.
- Multi-threaded, high-performance scanning with optional rate-limiting and delays.
- Generates reports in JSON, CSV, HTML, or TXT formats.
- CLI interface for easy integration into scripts or automation workflows.
- Categorized results for better organization (e.g., social, professional, gaming).
usage: canopy.py [-h] [-u USERNAME] [-U USERNAMES] [-t THREADS] [--timeout TIMEOUT] [--delay DELAY]
[--rate-limit RATE_LIMIT] [-c CATEGORIES] [-p PLATFORMS] [--exclude EXCLUDE] [--only-found]
[--list-categories] [-o OUTPUT] [-f {json,csv,html,txt}] [-v] [-q] [--print-found]
Canopy - Username Enumeration Tool
options:
-h, --help show this help message and exit
Target Options:
-u, --username USERNAME
Username to search for
-U, --usernames USERNAMES
File containing list of usernames (one per line)
Performance Options:
-t, --threads THREADS
Number of concurrent threads (default: 10)
--timeout TIMEOUT Request timeout in seconds (default: 10)
--delay DELAY Delay between requests in seconds (default: 0)
--rate-limit RATE_LIMIT
Max requests per second (default: unlimited)
Filtering Options:
-c, --categories CATEGORIES
Comma-separated categories to check (e.g., social,gaming)
-p, --platforms PLATFORMS
Comma-separated specific platforms to check
--exclude EXCLUDE Comma-separated platforms to exclude
--only-found Only show found accounts
--list-categories Show all available platform categories and exit
Output Options:
-o, --output OUTPUT Output file path
-f, --format {json,csv,html,txt}
Output format: json, csv, html, txt (default: json)
-v, --verbose Verbose output
-q, --quiet Minimal output (only results)
--print-found Print found accounts in real-time
Examples:
canopy -u johndoe
canopy -u johndoe -t 50 --timeout 15
canopy -u johndoe -o report.json --format json
canopy -u johndoe --categories social,gaming
canopy --list-categories
Installation
Clone the repository:
git clone https://github.com/guyvolvo/Canopy.git
cd Canopy
Legal & Ethical Disclaimer
This framework is intended strictly for self-OSINT, educational use, or explicit consent-based research.
This tool should be used to analyze:
- Your own digital footprint
- Accounts, domains, and identifiers you own
- Targets for which you have explicit written permission
- Using this tool against private individuals without consent may violate privacy laws and platform Terms of Service.
- I have no responsibility for misuse of this software.
Canopy collects metadata only, such as:
- Page titles
- URLs
- Search snippets
- Source domain
It does not:
- Bypass CAPTCHAs
- Scrape authenticated content
- Harvest private data
- Enumerate personal contact lists
Theoretical Project Structure (Generated by ChatGPT and Cluade Made for reference so I can follow along and add or remove things as I see fit):
GPT Workflow :
canopy/
├── README.md
├── DISCLAIMER.md
├── methodology/
│ └── osint_methodology.md
├── canopy/
│ ├── query_generator.py
│ ├── collector.py
│ ├── parser.py
│ └── correlator.py
├── output/
│ └── sample_report.md
└── lessons_learned.md\
Claude workflow :
Canopy/
├── main.py # Entry point, CLI interface
├── platforms.json # Platform database
├── query_generator.py # Generate queries from usernames
├── username_checker.py # Check if username exists on platforms
├── data_collector.py # Collect and aggregate data
├── report_generator.py # Format and export results
├── config.py # Configuration settings
├── utils.py # Helper functions
└── requirements.txt # Dependencies\
platforms.json inspired by the Sherlock OSINT project :)
Methodology
- Canopy uses a structured OSINT approach:
- Generate a list of platforms to query (social, professional, gaming).
- Create URL patterns for a target username.
- Validate account existence using HTTP responses, redirects, error messages, and HTML fingerprints.
- Aggregate results into structured reports.
- Optionally store fingerprints locally to avoid redundant requests.
- This ensures high accuracy while reducing false positives.
Best Practices
- Only scan accounts you own or have explicit permission to analyze.
- Use --threads and --rate-limit responsibly to avoid being blocked by platforms.
- Review your JSON/CSV/HTML reports for patterns before taking any action.
- Update platforms.json regularly to include new platforms.
- Periodically refresh fingerprints for platforms that change their 404 pages.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file canopy_scanner-0.1.2.tar.gz.
File metadata
- Download URL: canopy_scanner-0.1.2.tar.gz
- Upload date:
- Size: 19.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b3f15e1b0c5b1478cf32ac7903d6722d107a7b30824ab4bd75060672de009d77
|
|
| MD5 |
511d0c1df711b8add6b001a45aa4841f
|
|
| BLAKE2b-256 |
7fbb65ff80ab8dadac2a95d1c987aaee7b1464e03a762011149ca7570e8bccdc
|
File details
Details for the file canopy_scanner-0.1.2-py3-none-any.whl.
File metadata
- Download URL: canopy_scanner-0.1.2-py3-none-any.whl
- Upload date:
- Size: 18.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b37d0173c4947c007686ad3cfb303dfae626971251ebeb78b5899deffe252c2a
|
|
| MD5 |
758cbf4340ce785c74a0953109ff77b9
|
|
| BLAKE2b-256 |
1b69b29f41aba88e03295313a85388b28a8b3bbf5e1ae75a0d19379216b2449e
|