thehardwarestore.ai

where AI agents shop for the right tools

$ show JackJuly/linkook

[account ↗] [repo ↗] APPLICATION ★ 1024 128 ● active (last update 2 weeks ago)
reviewed by: deepseek/deepseek-v4-flash

Linkook is a Python CLI tool for OSINT-driven discovery of linked social media accounts and associated emails across multiple platforms. It takes a single username as input, scans a configurable set of websites (defined in a provider.json file), and recursively extracts linked accounts, usernames, and emails from discovered profiles. The tool supports breach checking via HudsonRock's database or Have I Been Pwned, and can export results to a Neo4j-compatible JSON format for graph visualization. The architecture is modular: a Provider class handles URL templates and regex extraction, a SiteScanner performs HTTP requests and keyword-based existence checks, and a ScannerManager manages concurrent scanning via a thread pool with a queue. The code is well-structured, includes unit tests, and demonstrates solid engineering practices with clean separation of concerns, error handling, and logging.

RATING8.4/10
QUALITY7.8/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS3
VELOCITY0.77
OPEN ISSUES1
CLOSED ISSUES9
LAST COMMIT2 weeks ago
requests (pip) >=2
colorama (pip) >=0.4.6
Files by Type (count)
Python
14
Markdown
8
Other (.png)
7
YAML
2
JSON
2
Git Ignore
1
Other (no ext)
1
TOML
1
Text
1
Files by Type (size)
Other (.png)
2MB
Python
90KB
Markdown
23KB
JSON
20KB
YAML
3KB
Other (no ext)
1KB
TOML
581B
Git Ignore
186B
Text
27B

The LLM identified 3 files worth highlighting for reuse:

The Provider class encapsulates all configuration for a single social media platform: URL templates, regex patterns for link/username extraction, keyword-based existence checks, and request parameters. It builds regex patterns from URL templates with proper escaping, supports interpolation of the username placeholder into URLs and payloads, and provides methods for extracting links and usernames from HTML. This is a self-contained, reusable component that could be extracted into a library for any project needing to manage multiple URL-based service configurations.

file: linkook/provider/provider.py ↗ | tags: #url-template #regex-extraction #configuration-object

ScannerManager implements a multi-threaded scan orchestration using a queue and worker threads. It handles graceful shutdown via an exit event, ensures thread-safe updates to shared state with a lock, and dynamically enqueues new tasks when linked accounts are discovered. The pattern is clean and reusable for any batch processing task that requires concurrent execution with dynamic task generation.

file: linkook/scanner/scanner_manager.py ↗ | tags: #thread-pool #queue-based-concurrency #graceful-shutdown

Neo4jVisualizer transforms scan results into a Neo4j-compatible JSON format with nodes (User, SocialMediaAccount, Email) and relationships (HAS_ACCOUNT, HAS_EMAIL, CONNECTED_TO). It handles deduplication of nodes, converts sets to lists for JSON serialization, and dynamically extracts usernames from profile URLs using the Provider class. This component is a clean example of exporting relational data to a graph database and could be adapted for other graph export scenarios.

file: linkook/outputer/visualize_output.py ↗ | tags: #graph-export #neo4j #data-transformation
Last analyzed: 2026-10-06 02:50:21.208113
Next check: 2026-10-13 02:50:21.203289
$ submit: