cruter
v0.0.3
Published
Microsoft Office 365 email validator & categorizer — proxy support, concurrent processing, real-time categorization
Readme
Cruter
Microsoft Office 365 email validator and categorizer. Validate bulk email lists, categorize account types, and track results — all from the command line.
Proxy Support | Concurrent Processing | Real-time Categorization
What is Cruter?
Cruter validates and categorizes Microsoft Office 365 email accounts. It identifies whether an email exists and determines its account type in real-time.
Categories
| Category | Description | |---|---| | Outlook | Personal Microsoft accounts (hotmail, outlook, live, msn) | | Office 365 | Business and enterprise Office 365 accounts | | Adfs | Active Directory Federation Services | | GoDaddy | GoDaddy email hosting | | Okta | Okta Single Sign-On | | Duo Security | Duo Security authentication | | Office (Others) | Other federated Office accounts | | Invalid | Non-existent or non-Office emails |
Features
- No Captcha — Direct validation, no captcha solving
- 8 Categories — Sorts emails into detailed account types
- Proxy Support — SOCKS5, SOCKS4, HTTP, HTTPS with rotation and authentication
- Concurrent Processing — Configurable parallel validation
- Real-time Progress — Speed, ETA, and category breakdown while running
- Duplicate Tracking — Per-project tracking to skip already-checked emails
- Device Management — PIN protection, security questions, multi-device support
- Rate Limiting — Configurable request throttling
- Graceful Shutdown — Ctrl+C flushes pending results before exiting
Installation
npm install -g cruterVerify the installation:
cruter --versionQuick Start
1. Create Configuration
cruter initCreates config.toml in your current directory with default settings.
2. Authenticate
cruter login <your-access-token>First time login will prompt you to:
- Create a 6-digit PIN
- Set up a security question for PIN recovery
3. Prepare Email List
Create emails.txt with one email per line:
[email protected]
[email protected]
[email protected]
[email protected]4. Start Validation
cruter startResults are saved to separate files per category in your output folder.
Validate a specific amount:
cruter start 500Configuration
Cruter supports config.toml (default) and config.jsonc formats.
Basic Settings
projectName = "my-project" # For duplicate tracking
outputFolder = "./cruter-output" # Where results are saved
filePath = "./emails.txt" # Email list to validate
allowDuplicate = false # Skip already-checked emails
concurrency = 10 # Parallel workers (5-15 recommended)
intervalCap = 1000 # Max requests per interval
interval = 1000 # Interval in milliseconds
maximumError = 5 # Consecutive errors before action
stopIfMaximumErrorReached = false # true = stop, false = continueProxy Settings
[proxy]
enabled = true
stopIfNone = true # Stop if all proxies fail
rotate = true # Rotate between proxies
maximumProxyError = 5 # Errors before disabling a proxy
stopIfMaximumProxyErrorReached = false
[[proxy.proxies]]
useMe = true
protocol = "socks5" # socks5, socks4, http, https
host = "proxy.example.com"
port = 1080
useAuth = true
username = "your-username"
password = "your-password"
# Add more proxies by duplicating the [[proxy.proxies]] block
[[proxy.proxies]]
useMe = true
protocol = "http"
host = "proxy2.example.com"
port = 8080
useAuth = false
username = ""
password = ""JSONC Format
Use --jsonc to create a JSONC config instead:
cruter init --jsoncConvert between formats:
cruter convertOutput
Results are organized into separate files:
./cruter-output/
├── Outlook.txt
├── Office 365.txt
├── Adfs.txt
├── GoDaddy.txt
├── Okta.txt
├── Duo Security.txt
├── Office (Others).txt
└── notOfficeOrInvalid.txtEach file contains one email per line. Invalid emails include the detected provider:
[email protected] - Google
[email protected] - YahooCommands
Core
| Command | Description |
|---|---|
| cruter init | Create config file |
| cruter init --jsonc | Create JSONC config |
| cruter convert | Convert config between TOML and JSONC |
| cruter start [N] | Start validation (optionally limit to N emails) |
| cruter login <token> | Authenticate with access token |
| cruter logout | Log out current device |
Configuration
Update config values without editing the file:
| Command | Description |
|---|---|
| cruter set --output <path> | Set output folder |
| cruter set --emails <path> | Set email file path |
| cruter set --project <name> | Set project name |
| cruter set --concurrency <n> | Set parallel workers |
| cruter set --interval <ms> | Set rate limit interval |
| cruter set --interval-cap <n> | Set max requests per interval |
| cruter set --max-errors <n> | Set error threshold |
| cruter set --allow-duplicates | Allow duplicate emails |
| cruter set --no-allow-duplicates | Filter duplicate emails |
Multiple values can be set at once:
cruter set --project campaign-2 --output ./results --concurrency 20Duplicate Tracking
| Command | Description |
|---|---|
| cruter stats | View project statistics |
| cruter clear --current | Clear current project tracking |
| cruter clear --project <name> | Clear specific project |
| cruter clear --force | Skip confirmation prompt |
Combine flags:
cruter clear -cf # Clear current project, skip prompt
cruter clear -p old-data # Clear specific projectDevice Management
| Command | Description |
|---|---|
| cruter auth list | List all registered devices |
| cruter auth device <id> | View device details (supports partial ID) |
| cruter auth pin | Change your PIN |
| cruter auth reset-pin <token> | Reset PIN via security questions |
Security Questions
| Command | Description |
|---|---|
| cruter auth security-questions | View your security questions |
| cruter auth add-security | Add a security question (max 3) |
| cruter auth update-security <n> | Update question by number (1-3) |
| cruter auth remove-security <n> | Remove question by number (1-3) |
Updates
| Command | Description |
|---|---|
| cruter check-update | Check for new versions |
| cruter upgrade | Install the latest version |
Help
cruter --help # General help
cruter --version # Show version
cruter start --help # Help for a specific command
cruter auth --help # Help for auth subcommandsProgress Display
During validation:
Processing |████████████░░░░░░░░| 60% | 600/1000 | 12.5/s | ETA 0:32
✓ 480 valid | ✗ 95 invalid | ⚠ 2 errors | avg 245msAfter completion:
✨ Processing Complete
─────────────────────────────────────────────
Total: 1000 emails
Valid: 900
Invalid: 95
Errors: 5
─────────────────────────────────────────────
Duration: 1:20
Speed: 12.5 emails/sec
Avg: 245ms/emailDevice Management
Limits
- Maximum 3 active devices per account
- Devices inactive for 30+ days are auto-removed
- 3-day cooling period after auto-removal
Logout Wait Period
After logging out, you must wait before logging back in on the same device:
- 30+ days of usage: 3-day wait
- Less than 30 days: 14-day wait
PIN
- 6-digit PIN required for authentication
- Optional hint to help you remember
- Can be reset using security questions
Security Questions
- 1-3 questions for PIN recovery
- Choose from predefined questions or write your own
- Required to reset a forgotten PIN
Proxies
Why Use Proxies?
- Avoid rate limiting from a single IP
- Distribute requests across multiple IPs
- Increase validation throughput
Setup
[proxy]
enabled = true
rotate = true
[[proxy.proxies]]
useMe = true
protocol = "socks5"
host = "proxy.example.com"
port = 1080
useAuth = true
username = "user"
password = "pass"Cruter automatically:
- Rotates between available proxies
- Disables proxies that exceed the error threshold
- Retries failed requests with a different proxy
- Falls back to direct connection if all proxies fail (unless
stopIfNone = true)
Supported Protocols
socks5socks4httphttps
Rate Limiting
Control request rate to stay under detection thresholds:
concurrency = 10 # 10 simultaneous checks
intervalCap = 100 # Max 100 requests...
interval = 1000 # ...per 1000ms (1 second)Example: 10 concurrent workers, max 100 requests per second.
Duplicate Tracking
Cruter tracks checked emails per project to avoid rechecking:
cruter stats # View current project stats
cruter clear --current # Clear and re-check
cruter clear --project old-run # Clear a different projectBenefits:
- Resume interrupted validation — already-checked emails are skipped
- Track validation history per project
- Switch between projects with different
projectNamevalues
Best Practices
Performance
- Start with concurrency of 5, increase to 10-20 if stable
- Use
intervalCapof 50-200 per second - Use 3-10 proxies for best results, or one rotating proxy
- Test with 100 emails first, then scale up
Reliability
- Enable duplicate tracking (
allowDuplicate = false) - Use proxies to avoid IP-based rate limits
- If error rate exceeds 10%, reduce concurrency and increase interval
- Monitor the error count in the progress display
Security
- Never share your access token
- Set up 2-3 security questions for PIN recovery
- Use a non-obvious PIN
- Log out from devices you no longer use
Troubleshooting
"Not authenticated"
cruter login <your-token>"Configuration file not found"
cruter init"Email file not found"
cruter set --emails ./path/to/emails.txt"Maximum consecutive errors reached"
- Check your internet connection
- Verify proxy settings if enabled
- Reduce concurrency:
cruter set --concurrency 5 - Increase interval:
cruter set --interval 2000
"Device limit reached"
cruter auth list # See all devices
cruter logout # Logout from old deviceHigh error rate
- Enable proxy rotation
- Reduce concurrency to 5
- Increase interval to 2000ms
- Check proxy health
Slow validation
- Increase concurrency to 15-20
- Use multiple fast proxies
- Reduce interval (minimum 500ms recommended)
Updating
Check for updates:
cruter check-updateInstall the latest version:
cruter upgradeCruter detects your package manager (npm, bun, pnpm, yarn) and runs the appropriate install command.
Examples
Basic
cruter init
cruter login ABC123TOKEN
cruter startValidate First 500 Emails
cruter start 500High-Speed with Proxies
concurrency = 20
intervalCap = 2000
interval = 1000
[proxy]
enabled = true
rotate = true
[[proxy.proxies]]
useMe = true
protocol = "socks5"
host = "fast-proxy-1.com"
port = 1080
[[proxy.proxies]]
useMe = true
protocol = "socks5"
host = "fast-proxy-2.com"
port = 1080cruter startResume After Interruption
# Just run again — already-checked emails are skipped
cruter start
# Or clear tracking to start fresh
cruter clear -c
cruter startChange Settings on the Fly
cruter set --concurrency 20 --interval 500
cruter set --emails new-batch.txt --project batch-2
cruter startLicense
Copyright 2024 Cruter. All rights reserved.
This software is proprietary and confidential. Unauthorized copying, distribution, or use is strictly prohibited.
