Social Analyzer provides comprehensive filtering capabilities to focus investigations on specific platforms, geographic regions, or quality thresholds. Effective filtering reduces noise and improves analysis efficiency.
Overview
Filtering options include:
- Quality Filtering: Filter by detection quality (good, maybe, bad)
- Status Filtering: Filter by profile status (detected, unknown, failed)
- Country Filtering: Select websites by country
- Type Filtering: Select websites by category
- Ranking Filtering: Select top-ranked websites
- Website Filtering: Select specific websites
Quality Filtering
Quality filtering controls which profiles appear in results based on detection confidence.
Filter Options
good - Profiles with 100% match rate (default)
maybe - Profiles with 50-99% match rate
bad - Profiles with 0-49% match rate
all - All profiles regardless of quality
- Comma-separated combinations:
good,maybe or good,bad
How It Works
From the CLI help:
--filter Filter detected profiles by good, maybe or bad
You can combine them with comma (good,bad) or use all
Implementation:
if (argv.filter.includes('all')) {
// Return all profiles
} else {
// Filter by status
temp_detected.detected = temp_detected.detected
.filter(item => argv.filter.includes(item.status))
}
Detection Quality Levels
From fast-scan.js:124-133 and slow-scan.js:124-133:
const temp_value = ((temp_profile.found / detections_count) * 100).toFixed(2)
temp_profile.rate = '%' + temp_value
if (temp_value >= 100.00) {
temp_profile.status = 'good'
} else if (temp_value >= 50.00 && temp_value < 100.00) {
temp_profile.status = 'maybe'
} else {
temp_profile.status = 'bad'
}
Usage Examples
# Only show confirmed profiles (default)
node app.js --username "johndoe" --filter good
# Show both confirmed and possible profiles
node app.js --username "johndoe" --filter good,maybe
# Show all profiles including uncertain ones
node app.js --username "johndoe" --filter all
# Only show uncertain profiles for investigation
node app.js --username "johndoe" --filter maybe,bad
Start with --filter good for initial investigations. Expand to good,maybe if you need more leads to investigate.
Status Filtering
Status filtering controls which profile types appear based on detection outcome.
Filter Options
detected - Successfully detected profiles
unknown - Profiles with unknown status
failed - Failed connection or timeout
all - All profiles regardless of status
- Comma-separated combinations:
detected,failed
Usage
From the CLI help:
--profiles Filter profiles by detected, unknown or failed
You can combine them with comma (detected,failed) or use all
Examples
# Only show detected profiles (most common)
node app.js --username "johndoe" --profiles detected
# Show detected and failed for troubleshooting
node app.js --username "johndoe" --profiles detected,failed
# Show all including failures
node app.js --username "johndoe" --profiles all
Failed profiles usually indicate network issues, rate limiting, or platform changes. Use --profiles all to see what’s failing.
Country Filtering
Filter websites by country of origin or primary audience.
How It Works
From the app.js implementation:
if (argv.countries != 'all') {
const list_of_countries = argv.countries.toLowerCase().split(' ')
for (let i = 0; i < helper.websites_entries.length; i++) {
if (helper.websites_entries[i].country.toLowerCase() !== '' &&
list_of_countries.includes(helper.websites_entries[i].country.toLowerCase())) {
helper.websites_entries[i].selected = 'true'
} else {
helper.websites_entries[i].selected = 'false'
}
}
}
Usage
From the CLI help:
--countries Select websites by country or countries separated by space
Example: us br ru
Examples
# Search only US-based websites
node app.js --username "johndoe" --countries us
# Search multiple countries
node app.js --username "johndoe" --countries "us uk ca"
# Brazil and Russia
node app.js --username "johndoe" --countries "br ru"
# All countries (default)
node app.js --username "johndoe" --countries all
Common Country Codes
us - United States
uk - United Kingdom
ca - Canada
au - Australia
de - Germany
fr - France
br - Brazil
ru - Russia
cn - China
jp - Japan
in - India
Use country filtering when investigating targets in specific regions to reduce scan time and focus on relevant platforms.
Type Filtering
Filter websites by category or content type.
How It Works
From the app.js implementation:
if (argv.type != 'all') {
let websites_entries_filtered = helper.websites_entries
.filter((item) => item.selected === 'true')
websites_entries_filtered = websites_entries_filtered
.filter((item) => item.type.toLowerCase().includes(argv.type.toLowerCase()))
// Mark matching websites as selected
await websites_entries_filtered.forEach(async function (value, i) {
await search_and_change(websites_entries_filtered[i], {
selected: 'true'
})
})
}
Available Types
Common website types include:
social - Social networking platforms
music - Music and audio platforms
video - Video sharing platforms
adult - Adult content platforms
gaming - Gaming platforms
business - Professional networking
dating - Dating platforms
forum - Forum and discussion sites
tech - Technology platforms
art - Art and design platforms
Usage
From the CLI help:
--type Select websites by type (Adult, Music etc)
Examples
# Search only music platforms
node app.js --username "johndoe" --type music
# Search social media platforms
node app.js --username "johndoe" --type social
# Search gaming platforms
node app.js --username "johndoe" --type gaming
# Search adult platforms
node app.js --username "johndoe" --type adult
# All types (default)
node app.js --username "johndoe" --type all
Type filtering uses substring matching, so searching for “social” will match “social media”, “social network”, etc.
Ranking Filtering
Filter websites by Alexa ranking to focus on popular platforms.
How It Works
From the app.js implementation:
const top_number = parseInt(argv.top.replace(/[^0-9]/g, ''))
let websites_entries_filtered = helper.websites_entries
.filter((item) => item.selected === 'true')
websites_entries_filtered = websites_entries_filtered
.filter((item) => item.global_rank !== 0)
websites_entries_filtered.sort(function (a, b) {
return a.global_rank - b.global_rank
})
// Select top N websites
for (let i = 0; i < top_number && i < websites_entries_filtered.length; i++) {
await search_and_change(websites_entries_filtered[i], {
selected: 'true'
})
}
Usage
From the CLI help:
--top Select top websites as 10, 50 etc...
[--websites is not needed]
Examples
# Search top 10 websites
node app.js --username "johndoe" --top 10
# Search top 50 websites
node app.js --username "johndoe" --top 50
# Search top 100 websites
node app.js --username "johndoe" --top 100
# Top 200 for comprehensive scan
node app.js --username "johndoe" --top 200
Ranking Benefits
- Faster Scans: Focus on most popular platforms
- Higher Hit Rate: Popular sites more likely to have profiles
- Resource Efficient: Reduces unnecessary checks
- Strategic Targeting: Prioritize high-impact platforms
For most investigations, --top 50 provides a good balance between coverage and speed.
Website Filtering
Select specific websites to search.
Usage
From the CLI help:
--websites A website or websites separated by space
Example: youtube, tiktok or tumblr
Examples
# Search single website
node app.js --username "johndoe" --websites twitter
# Search multiple specific websites
node app.js --username "johndoe" --websites "twitter facebook instagram"
# Search tech platforms
node app.js --username "johndoe" --websites "github gitlab stackoverflow"
# Search media platforms
node app.js --username "johndoe" --websites "youtube tiktok twitch"
List Available Websites
# Show all available websites
node app.js --list
Website names should match those in the detection database. Use --list to see exact names.
Combining Filters
Filters can be combined for precise targeting.
Multiple Filter Examples
# Top US social media sites, good matches only
node app.js --username "johndoe" \
--countries us \
--type social \
--top 20 \
--filter good
# Specific websites with quality filter
node app.js --username "johndoe" \
--websites "twitter facebook linkedin" \
--filter good,maybe
# Country + type + ranking
node app.js --username "johndoe" \
--countries "us uk" \
--type music \
--top 30
# All filters combined
node app.js --username "johndoe" \
--countries us \
--type social \
--top 50 \
--filter good \
--profiles detected
Filter Priority
Filters are applied in this order:
- Countries: First filters by country
- Type: Then filters by category
- Ranking: Then selects top N
- Websites: Or selects specific sites
- Quality: Finally filters results by match quality
- Status: Finally filters by detection status
Scan Time Comparison
| Filter Configuration | Websites Checked | Typical Time |
|---|
| No filters (all) | 1000+ | 10-15 minutes |
--top 100 | 100 | 2-3 minutes |
--top 50 | 50 | 1-2 minutes |
--top 10 | 10 | 20-30 seconds |
--websites "twitter facebook" | 2 | 5-10 seconds |
Memory Usage
- More websites = more memory for parallel processing
- Fast mode: ~15 concurrent workers
- Slow mode: ~8 concurrent browser instances
Optimization Strategies
# Fast initial scan - top platforms only
node app.js --username "johndoe" --top 20 --filter good
# Targeted deep scan - specific platforms
node app.js --username "johndoe" \
--websites "twitter facebook linkedin github" \
--mode slow --metadata --extract
# Regional scan - country specific
node app.js --username "johndoe" \
--countries us --top 50 --filter good,maybe
# Category scan - specific interest
node app.js --username "johndoe" \
--type gaming --filter good
Practical Workflows
Initial Investigation
# Phase 1: Quick scan of top sites
node app.js --username "johndoe" --top 20 --filter good
# Phase 2: Expand to more sites if hits found
node app.js --username "johndoe" --top 100 --filter good
# Phase 3: Deep scan with metadata
node app.js --username "johndoe" \
--top 50 --filter good --metadata --extract
Targeted Investigation
# Focus on professional platforms
node app.js --username "johndoe" \
--websites "linkedin github stackoverflow stackexchange"
# Focus on social media
node app.js --username "johndoe" \
--type social --top 30 --filter good
# Focus on regional platforms
node app.js --username "johndoe" \
--countries "ru cn" --filter good
Correlation Analysis
# Compare multiple usernames on same platforms
node app.js --username "johndoe,janedoe" \
--top 50 --filter good --metadata
# Check specific variants across platforms
node app.js --username "johndoe,jdoe,john_doe" \
--websites "twitter facebook instagram" \
--filter good,maybe
Output Filtering
Beyond search filtering, output can be refined:
Options Parameter
From the CLI help:
--options Show the following when a profile is found:
link, rate, title or text
Method Parameter
From the CLI help:
--method find -> show detected profiles
get -> show all profiles regardless detected or not
all -> combine find & get
Examples
# Show only links
node app.js --username "johndoe" --options link
# Show links and detection rates
node app.js --username "johndoe" --options "link rate"
# Show all profile information
node app.js --username "johndoe" --options "link rate title text"
# Different methods
node app.js --username "johndoe" --method find # Detected only
node app.js --username "johndoe" --method get # All attempts
node app.js --username "johndoe" --method all # Combined
Best Practices
Start Narrow, Expand Wide
- Begin with
--top 20 --filter good
- If hits found, expand to
--top 100
- Finally scan all with
--filter good,maybe
Use Appropriate Filters
- Time-sensitive: Use
--top 10 or specific --websites
- Comprehensive: Use
--top 100 or --type
- Regional: Use
--countries
- Category: Use
--type
# Filter to good matches, then extract deeply
node app.js --username "johndoe" \
--top 50 --filter good \
--metadata --extract --mode slow
# Add logs to track progress
node app.js --username "johndoe" \
--top 50 --filter good --logs
Save filtered results to JSON for further processing: --output json > results.json
Troubleshooting
No Results Found
Problem: Filtering too aggressively
Solutions:
- Expand filter from
good to good,maybe
- Increase
--top N value
- Remove
--type or --countries restrictions
- Try different username variations
Too Many Results
Problem: Need to narrow scope
Solutions:
- Use
--filter good only
- Reduce
--top N value
- Add
--type filtering
- Use
--countries for regional focus
- Specify exact
--websites
Problem: Too many websites selected
Solutions:
- Use
--top 50 instead of checking all
- Switch to fast mode instead of slow
- Remove
--metadata and --extract for initial scans
- Filter by
--type or --countries