npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

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 cruter

Verify the installation:

cruter --version

Quick Start

1. Create Configuration

cruter init

Creates 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 start

Results are saved to separate files per category in your output folder.

Validate a specific amount:

cruter start 500

Configuration

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 = continue

Proxy 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 --jsonc

Convert between formats:

cruter convert

Output

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.txt

Each file contains one email per line. Invalid emails include the detected provider:

[email protected] - Google
[email protected] - Yahoo

Commands

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 20

Duplicate 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 project

Device 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 subcommands

Progress Display

During validation:

Processing |████████████░░░░░░░░| 60% | 600/1000 | 12.5/s | ETA 0:32
           ✓ 480 valid | ✗ 95 invalid | ⚠ 2 errors | avg 245ms

After completion:

✨ Processing Complete
─────────────────────────────────────────────
  Total:     1000 emails
  Valid:     900
  Invalid:   95
  Errors:    5
─────────────────────────────────────────────
  Duration:  1:20
  Speed:     12.5 emails/sec
  Avg:       245ms/email

Device 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

  • socks5
  • socks4
  • http
  • https

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 project

Benefits:

  • Resume interrupted validation — already-checked emails are skipped
  • Track validation history per project
  • Switch between projects with different projectName values

Best Practices

Performance

  1. Start with concurrency of 5, increase to 10-20 if stable
  2. Use intervalCap of 50-200 per second
  3. Use 3-10 proxies for best results, or one rotating proxy
  4. Test with 100 emails first, then scale up

Reliability

  1. Enable duplicate tracking (allowDuplicate = false)
  2. Use proxies to avoid IP-based rate limits
  3. If error rate exceeds 10%, reduce concurrency and increase interval
  4. Monitor the error count in the progress display

Security

  1. Never share your access token
  2. Set up 2-3 security questions for PIN recovery
  3. Use a non-obvious PIN
  4. 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 device

High 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-update

Install the latest version:

cruter upgrade

Cruter detects your package manager (npm, bun, pnpm, yarn) and runs the appropriate install command.


Examples

Basic

cruter init
cruter login ABC123TOKEN
cruter start

Validate First 500 Emails

cruter start 500

High-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 = 1080
cruter start

Resume After Interruption

# Just run again — already-checked emails are skipped
cruter start

# Or clear tracking to start fresh
cruter clear -c
cruter start

Change Settings on the Fly

cruter set --concurrency 20 --interval 500
cruter set --emails new-batch.txt --project batch-2
cruter start

License

Copyright 2024 Cruter. All rights reserved.

This software is proprietary and confidential. Unauthorized copying, distribution, or use is strictly prohibited.