Repository Analysis

kaifcodec/user-scanner

🕵️‍♂️ (2-in-1) Email & Username OSINT suite for deep data extraction just from a single Email/Username. Analyzes 375+ scan vectors (150+ email / 225+ username) for security research, investigations, and digital footprinting.

26.7 Moderate AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of kaifcodec/user-scanner, a Python project with 3,075 GitHub stars. SynthScan v2.0 examined 30,718 lines of code across 475 source files, recording 749 pattern matches distributed across 12 syntactic categories. The overall adjusted score of 26.7 places this repository in the Moderate AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

26.7
Adjusted Score
26.7
Raw Score
100%
Time Factor
2026-08-09
Last Push
3.1K
Stars
Python
Language
30.7K
Lines of Code
475
Files
749
Pattern Hits
2026-08-09
Scan Date
0.01
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.

No multi-scan history yet — run the scanner again to build trend data.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 6MEDIUM 15LOW 728

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 749 distinct pattern matches across 12 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Excessive Try-Catch Wrapping368 hits · 374 pts
SeverityFileLineSnippetContext
LOWCONTRIBUTING.md103 except Exception as exc:CODE
LOWabandoned/user_scan/social/xing.py41 except Exception as e:CODE
LOWabandoned/user_scan/dev/appledeveloper.py23 except Exception as e:CODE
LOWabandoned/user_scan/adult/motherless.py49 except Exception:CODE
LOWabandoned/email_scan/entertainment/webtoon.py46 except Exception:CODE
LOWabandoned/email_scan/entertainment/webtoon.py65 except Exception as e:CODE
LOWabandoned/email_scan/dev/codepen.py50 except Exception as e:CODE
LOWabandoned/email_scan/dev/boot_dev.py33 except Exception as e:CODE
LOWabandoned/email_scan/dev/leetcode.py53 except Exception as e:STRING
LOWabandoned/email_scan/dev/saashub.py68 except Exception as e:CODE
LOWabandoned/email_scan/dev/replit.py49 except Exception as e:CODE
LOWabandoned/email_scan/adult/motherless.py41 except Exception as e:CODE
LOWuser_scanner/__main__.py264 except Exception as e:CODE
LOWuser_scanner/__main__.py302 except Exception as e:CODE
LOWuser_scanner/__main__.py327 except Exception as e:CODE
LOWuser_scanner/__main__.py497 except Exception as e:CODE
LOWuser_scanner/__main__.py521 except Exception:CODE
LOWuser_scanner/user_scan/creator/unsplash.py91 except Exception:CODE
LOWuser_scanner/user_scan/creator/devto.py29 except Exception as e:CODE
LOWuser_scanner/user_scan/creator/fansly.py33 except Exception:CODE
LOWuser_scanner/user_scan/creator/itch_io.py32 except Exception as e:CODE
LOWuser_scanner/user_scan/creator/substack.py42 except Exception:CODE
LOWuser_scanner/user_scan/creator/substack.py50 except Exception:CODE
LOWuser_scanner/user_scan/creator/behance.py37 except Exception:CODE
LOWuser_scanner/user_scan/creator/behance.py44 except Exception as e:CODE
LOWuser_scanner/user_scan/creator/gumroad.py27 except Exception as e:CODE
LOWuser_scanner/user_scan/creator/vimeo.py33 except Exception:CODE
LOWuser_scanner/user_scan/creator/medium.py36 except Exception as e:CODE
LOWuser_scanner/user_scan/creator/boosty.py43 except Exception:CODE
LOWuser_scanner/user_scan/creator/boosty.py51 except Exception:CODE
LOWuser_scanner/user_scan/creator/kaggle.py22 except Exception as e:CODE
LOWuser_scanner/user_scan/creator/patreon.py22 except Exception:CODE
LOWuser_scanner/user_scan/creator/patreon.py29 except Exception as e:CODE
LOWuser_scanner/user_scan/creator/dribbble.py63 except Exception as e:CODE
LOWuser_scanner/user_scan/creator/ameblo.py22 except Exception as e:CODE
LOWuser_scanner/user_scan/donation/donatealerts.py17 except Exception:CODE
LOWuser_scanner/user_scan/donation/buymeacoffee.py34 except Exception as e:CODE
LOWuser_scanner/user_scan/music/myspace.py23 except Exception as e:CODE
LOWuser_scanner/user_scan/music/bandcamp.py43 except Exception:CODE
LOWuser_scanner/user_scan/music/discogs.py39 except Exception:CODE
LOWuser_scanner/user_scan/music/beatstars.py55 except Exception:CODE
LOWuser_scanner/user_scan/music/lastfm.py36 except Exception:CODE
LOWuser_scanner/user_scan/music/yandexmusic.py45 except Exception as e:CODE
LOWuser_scanner/user_scan/music/bandlab.py36 except Exception:CODE
LOWuser_scanner/user_scan/music/soundcloud.py62 except Exception:CODE
LOWuser_scanner/user_scan/music/audiojungle.py41 except Exception:CODE
LOWuser_scanner/user_scan/music/freesound.py59 except Exception:CODE
LOWuser_scanner/user_scan/music/mixcloud.py43 except Exception as e:CODE
LOWuser_scanner/user_scan/music/spotify.py50 except Exception as e:CODE
LOWuser_scanner/user_scan/music/allthelyrics.py26 except Exception as e:CODE
LOWuser_scanner/user_scan/political/bitchute.py23 except Exception:CODE
LOWuser_scanner/user_scan/gaming/warframemarket.py32 except Exception:CODE
LOWuser_scanner/user_scan/gaming/lichess.py55 except Exception:CODE
LOWuser_scanner/user_scan/gaming/stackb.py128 except Exception:CODE
LOWuser_scanner/user_scan/gaming/stackb.py132 except Exception as exc:CODE
LOWuser_scanner/user_scan/gaming/apexlegends.py29 except Exception as e:CODE
LOWuser_scanner/user_scan/gaming/apexlegends.py46 except Exception:CODE
LOWuser_scanner/user_scan/gaming/chess_com.py45 except Exception:CODE
LOWuser_scanner/user_scan/gaming/roblox.py57 except Exception:CODE
LOWuser_scanner/user_scan/gaming/roblox.py96 except Exception:CODE
308 more matches not shown…
Deep Nesting227 hits · 227 pts
SeverityFileLineSnippetContext
LOWabandoned/user_scan/social/xing.py4CODE
LOWuser_scanner/__main__.py53CODE
LOWuser_scanner/user_scan/creator/fansly.py3CODE
LOWuser_scanner/user_scan/creator/fansly.py7CODE
LOWuser_scanner/user_scan/creator/substack.py6CODE
LOWuser_scanner/user_scan/creator/substack.py11CODE
LOWuser_scanner/user_scan/creator/behance.py6CODE
LOWuser_scanner/user_scan/creator/vimeo.py3CODE
LOWuser_scanner/user_scan/creator/vimeo.py7CODE
LOWuser_scanner/user_scan/creator/boosty.py6CODE
LOWuser_scanner/user_scan/creator/boosty.py11CODE
LOWuser_scanner/user_scan/creator/patreon.py6CODE
LOWuser_scanner/user_scan/creator/dribbble.py6CODE
LOWuser_scanner/user_scan/music/bandcamp.py4CODE
LOWuser_scanner/user_scan/music/bandcamp.py8CODE
LOWuser_scanner/user_scan/music/beatstars.py4CODE
LOWuser_scanner/user_scan/music/beatstars.py21CODE
LOWuser_scanner/user_scan/music/lastfm.py4CODE
LOWuser_scanner/user_scan/music/lastfm.py8CODE
LOWuser_scanner/user_scan/music/bandlab.py4CODE
LOWuser_scanner/user_scan/music/bandlab.py8CODE
LOWuser_scanner/user_scan/music/soundcloud.py5CODE
LOWuser_scanner/user_scan/music/soundcloud.py9CODE
LOWuser_scanner/user_scan/music/audiojungle.py5CODE
LOWuser_scanner/user_scan/music/audiojungle.py13CODE
LOWuser_scanner/user_scan/music/mixcloud.py4CODE
LOWuser_scanner/user_scan/gaming/warframemarket.py3CODE
LOWuser_scanner/user_scan/gaming/warframemarket.py7CODE
LOWuser_scanner/user_scan/gaming/lichess.py7CODE
LOWuser_scanner/user_scan/gaming/lichess.py32CODE
LOWuser_scanner/user_scan/gaming/stackb.py11CODE
LOWuser_scanner/user_scan/gaming/speedrun.py4CODE
LOWuser_scanner/user_scan/gaming/battlenet.py8CODE
LOWuser_scanner/user_scan/gaming/battlenet.py41CODE
LOWuser_scanner/user_scan/learning/duolingo.py3CODE
LOWuser_scanner/user_scan/learning/duolingo.py7CODE
LOWuser_scanner/user_scan/learning/pedsovet.py9CODE
LOWuser_scanner/user_scan/learning/pedsovet.py24CODE
LOWuser_scanner/user_scan/other/pastebin.py4CODE
LOWuser_scanner/user_scan/other/pastebin.py8CODE
LOWuser_scanner/user_scan/other/statsfm.py3CODE
LOWuser_scanner/user_scan/other/statsfm.py7CODE
LOWuser_scanner/user_scan/other/issuu.py5CODE
LOWuser_scanner/user_scan/other/vivino.py4CODE
LOWuser_scanner/user_scan/other/omglol.py3CODE
LOWuser_scanner/user_scan/other/omglol.py7CODE
LOWuser_scanner/user_scan/other/freelancer.py3CODE
LOWuser_scanner/user_scan/other/freelancer.py7CODE
LOWuser_scanner/user_scan/other/zomato.py5CODE
LOWuser_scanner/user_scan/other/zomato.py13CODE
LOWuser_scanner/user_scan/other/paragraph.py4CODE
LOWuser_scanner/user_scan/other/trello.py3CODE
LOWuser_scanner/user_scan/other/trello.py7CODE
LOWuser_scanner/user_scan/social/youtube.py9CODE
LOWuser_scanner/user_scan/social/mastodon.py7CODE
LOWuser_scanner/user_scan/social/mastodon.py22CODE
LOWuser_scanner/user_scan/social/anilist.py4CODE
LOWuser_scanner/user_scan/social/anilist.py12CODE
LOWuser_scanner/user_scan/social/sportstracker.py3CODE
LOWuser_scanner/user_scan/social/sportstracker.py7CODE
167 more matches not shown…
Hyper-Verbose Identifiers123 hits · 130 pts
SeverityFileLineSnippetContext
LOWtests/test_result.py42def test_get_reason_and_humanize():CODE
LOWtests/test_result.py94def test_result_update_empty_values():CODE
LOWtests/test_result.py169def test_console_output_and_show_url():CODE
LOWtests/test_result.py239def test_csv_cell_neutralizes_formula_triggers(raw):CODE
LOWtests/test_result.py245def test_to_csv_neutralizes_username_field():CODE
LOWtests/test_result.py252def test_to_csv_neutralizes_extra_value_with_dangerous_key():CODE
LOWtests/test_result.py260def test_humanize_exception_dns_and_network_branches():CODE
LOWtests/test_result.py271def test_get_reason_skipped_default_message():CODE
LOWtests/test_result.py279def test_get_output_color_and_icon_per_status():CODE
LOWtests/test_result.py293def test_show_default_filters_non_taken(capsys):CODE
LOWtests/test_result.py306def test_show_all_displays_non_taken(capsys):CODE
LOWtests/test_result.py313def test_extra_update_skips_none_and_blank_values():CODE
LOWtests/test_result.py321def test_extra_update_preserves_bool_and_int_values():CODE
LOWtests/test_engine.py78async def test_module_func_raise_exception(github_stub):CODE
LOWtests/test_engine.py91async def test_missing_validate_func():CODE
LOWtests/test_engine.py100async def test_default_category_email(github_stub):CODE
LOWtests/test_engine.py113async def test_default_category_username(github_stub):CODE
LOWtests/test_engine.py174async def test_is_email_passed_correctly(monkeypatch, github_stub):CODE
LOWtests/test_engine.py192async def test_case_insensitive_category_match(monkeypatch, github_stub):CODE
LOWtests/test_engine.py220async def test_category_not_found_email(monkeypatch):CODE
LOWtests/test_engine.py230async def test_category_not_found_username(monkeypatch):CODE
LOWtests/test_engine.py259async def test_check_all_email_passed_correct(monkeypatch):CODE
LOWtests/test_engine.py280async def test_check_all_nested_lis_flatten(monkeypatch):CODE
LOWtests/test_engine.py296async def test_check_all_category_exception(monkeypatch):CODE
LOWtests/test_engine.py297 async def check_category_side_effect(cat_name, target, is_email=True):CODE
LOWtests/test_loud_prompt.py5def test_loud_module_config_value():CODE
LOWtests/test_loud_prompt.py12def test_check_loud_module_permission_tty_yes(monkeypatch):CODE
LOWtests/test_loud_prompt.py19def test_check_loud_module_permission_tty_no(monkeypatch):CODE
LOWtests/test_loud_prompt.py26def test_check_loud_module_permission_tty_dont_ask(monkeypatch):CODE
LOWtests/test_loud_prompt.py36def test_check_loud_module_permission_no_tty(monkeypatch):CODE
LOWtests/test_loud_prompt.py45def test_check_loud_module_permission_saved_preference(monkeypatch):CODE
LOWtests/test_loud_prompt.py52def test_save_config_value_preserves_loud_module_key(tmp_path):CODE
LOWtests/test_impersonate.py36def test_warmup_runs_once_and_session_is_reused(monkeypatch):CODE
LOWtests/test_impersonate.py60def test_request_reuses_warm_session(monkeypatch):CODE
LOWtests/test_impersonate.py78def test_exception_becomes_error_result(monkeypatch):CODE
LOWtests/test_patterns.py22def test_charset_range_letters():CODE
LOWtests/test_patterns.py26def test_charset_range_digits():CODE
LOWtests/test_patterns.py68def test_charset_dash_literal():CODE
LOWtests/test_patterns.py73def test_charset_mixed_range_and_literal():CODE
LOWtests/test_patterns.py78def test_charset_same_start_end():CODE
LOWtests/test_patterns.py83def test_charset_reversed_range():CODE
LOWtests/test_patterns.py89def test_reversed_range_with_text():CODE
LOWtests/test_patterns.py130def test_lenset_two_digit_combos():CODE
LOWtests/test_patterns.py137def test_lenset_mixed_range_and_single():CODE
LOWtests/test_patterns.py143def test_default_lenset_is_one():CODE
LOWtests/test_patterns.py150def test_escaped_open_bracket():CODE
LOWtests/test_patterns.py154def test_escaped_close_bracket():CODE
LOWtests/test_patterns.py162def test_escaped_bracket_pair():CODE
LOWtests/test_patterns.py166def test_escape_inside_charset():CODE
LOWtests/test_patterns.py174def test_error_unclosed_bracket():CODE
LOWtests/test_patterns.py179def test_error_unmatched_close_bracket():CODE
LOWtests/test_patterns.py184def test_error_unclosed_brace():CODE
LOWtests/test_patterns.py189def test_error_lone_open_bracket():CODE
LOWtests/test_patterns.py194def test_error_lenset_starts_with_dash():CODE
LOWtests/test_patterns.py201def test_mixed_text_and_patterns():CODE
LOWtests/test_patterns.py37def test_charset_explicit_chars():CODE
LOWtests/test_patterns.py51def test_charset_with_prefix_and_suffix():CODE
LOWtests/test_patterns.py255def test_random_reservoir_sampling():CODE
LOWtests/test_patterns.py290def test_count_multiple_blocks():CODE
LOWtests/test_patterns.py294def test_count_matches_expansion():CODE
63 more matches not shown…
Decorative Section Separators8 hits · 32 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_patterns.py20# ── expand_patterns: charset basics ──────────────────────────────────────COMMENT
MEDIUMtests/test_patterns.py95# ── expand_patterns: lenset ──────────────────────────────────────────────COMMENT
MEDIUMtests/test_patterns.py148# ── expand_patterns: escaped characters ──────────────────────────────────COMMENT
MEDIUMtests/test_patterns.py172# ── expand_patterns: error cases ─────────────────────────────────────────COMMENT
MEDIUMtests/test_patterns.py199# ── expand_patterns: complex / combined ──────────────────────────────────COMMENT
MEDIUMtests/test_patterns.py6# ── expand_patterns: plain text (no pattern syntax) ──────────────────────COMMENT
MEDIUMtests/test_patterns.py222# ── expand_patterns_random ───────────────────────────────────────────────COMMENT
MEDIUMtests/test_patterns.py271# ── count_patterns ───────────────────────────────────────────────────────COMMENT
Cross-File Repetition4 hits · 20 pts
SeverityFileLineSnippetContext
HIGHuser_scanner/email_scan/learning/talkpal.py0bunpo email validator. note: this will send a password reset email if it exists.STRING
HIGHuser_scanner/email_scan/learning/hellochinese.py0bunpo email validator. note: this will send a password reset email if it exists.STRING
HIGHuser_scanner/email_scan/learning/hanzii.py0bunpo email validator. note: this will send a password reset email if it exists.STRING
HIGHuser_scanner/email_scan/learning/bunpo.py0bunpo email validator. note: this will send a password reset email if it exists.STRING
Cross-Language Confusion2 hits · 15 pts
SeverityFileLineSnippetContext
HIGHuser_scanner/user_scan/other/tripadvisor.py79 # Nested fields can be present-but-null, so coalesce with `or {}` at eachCOMMENT
HIGHuser_scanner/user_scan/social/instagram.py82 # If API response succeeded but user object is empty/null, the user does not existCOMMENT
Verbosity Indicators4 hits · 6 pts
SeverityFileLineSnippetContext
LOWuser_scanner/email_scan/shopping/walmart.py77 # Step 1: Request the login page to seed the session cookies; theCOMMENT
LOWuser_scanner/email_scan/shopping/walmart.py90 # Step 2: Post to the GraphQL endpointCOMMENT
LOWuser_scanner/email_scan/fitness/fitnessblender.py24 # Step 1: Visit homepage to get cookies (XSRF-TOKEN and FB_SESSION)COMMENT
LOWuser_scanner/email_scan/fitness/fitnessblender.py44 # Step 2: Post to the validation APICOMMENT
Structural Annotation Overuse4 hits · 6 pts
SeverityFileLineSnippetContext
LOWuser_scanner/email_scan/shopping/walmart.py77 # Step 1: Request the login page to seed the session cookies; theCOMMENT
LOWuser_scanner/email_scan/shopping/walmart.py90 # Step 2: Post to the GraphQL endpointCOMMENT
LOWuser_scanner/email_scan/fitness/fitnessblender.py24 # Step 1: Visit homepage to get cookies (XSRF-TOKEN and FB_SESSION)COMMENT
LOWuser_scanner/email_scan/fitness/fitnessblender.py44 # Step 2: Post to the validation APICOMMENT
Redundant / Tautological Comments3 hits · 4 pts
SeverityFileLineSnippetContext
LOWuser_scanner/user_scan/social/myanimelist.py17 # Verify if user profile loadedCOMMENT
LOWuser_scanner/email_scan/shopping/walmart.py110 # Check if there is an error stating Enum can't represent STEP_UP_REQUIREDCOMMENT
LOWuser_scanner/email_scan/shopping/walmart.py122 # Check if errors indicates a non-existent emailCOMMENT
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_orchestrator.py35 # Create a temporary module file to simulate a real module fileCOMMENT
Fake / Example Data3 hits · 2 pts
SeverityFileLineSnippetContext
LOWCONTRIBUTING.md1362. **Deep Data Extraction:** If the user is found, attempt to extract rich metadata (fullname, location, bio, stats) andCODE
LOWtests/test_helpers.py134 email_file.write_text("user@example.com")STRING
LOWuser_scanner/user_scan/social/x.py36 params = {"username": user, "full_name": "John Doe", "email": "johndoe07@gmail.com"}CODE
Modern Structural Boilerplate2 hits · 2 pts
SeverityFileLineSnippetContext
LOWuser_scanner/core/helpers.py69def set_global_timeout(timeout: float) -> None:CODE
LOWuser_scanner/core/helpers.py268def set_proxy_manager(proxy_file: Optional[str] = None, proxies: Optional[list[str]] = None) -> None:CODE