Fast bulk proxy checker with support for HTTP, SOCKS4, and SOCKS5. Tests hundreds of proxies concurrently, measures latency, determines anonymity level, and resolves geolocation.
- Multi-protocol - HTTP, HTTPS, SOCKS4, SOCKS5
- Concurrent checking - Configurable worker pool (default: 50 concurrent)
- Anonymity detection - Transparent, Anonymous, or Elite classification
- Geolocation - Country, region, city, and ISP resolution
- Flexible input - Multiple proxy string formats, file or stdin
- Multiple outputs - Colored table, JSON, CSV, plain text
- Retry logic - Configurable retry attempts per proxy
- Programmatic API - Use as a library in your own projects
npm install -g @birdproxies/proxy-checkerOr clone and build from source:
git clone https://github.com/birdproxies/proxy-checker.git
cd proxy-checker
npm install
npm run build# Check proxies from a file
proxy-checker proxies.txt
# Pipe proxies via stdin
cat proxies.txt | proxy-checker
# Generate a list and pipe it
echo -e "1.2.3.4:8080\n5.6.7.8:1080" | proxy-checkerUsage: proxy-checker [options] [file]
Arguments:
file File containing proxies (one per line)
Options:
-V, --version Output the version number
-p, --protocol <proto> Default protocol (http, https, socks4, socks5) [default: "http"]
-t, --timeout <ms> Connection timeout in milliseconds [default: 10000]
-c, --concurrency <n> Number of concurrent checks [default: 50]
-o, --output <format> Output format: table, json, csv, plain [default: "table"]
-f, --output-file <path> Save results to file
--alive-only Show only alive proxies [default: false]
--no-geo Skip geolocation lookups
--no-banner Suppress the ASCII banner
--judge <url> Custom judge URL [default: "http://httpbin.org/get"]
--retries <n> Number of retries per proxy [default: 1]
-h, --help Display help for command
# Check SOCKS5 proxies with higher concurrency
proxy-checker proxies.txt -p socks5 -c 100
# Output as JSON, only alive proxies
proxy-checker proxies.txt -o json --alive-only
# Save CSV results to file
proxy-checker proxies.txt -o csv -f results.csv
# Quick check with short timeout
proxy-checker proxies.txt -t 5000 --no-geo
# Plain text output (alive proxies only, one per line)
proxy-checker proxies.txt -o plain > alive.txtThe parser accepts proxies in any of the following formats, one per line:
# Basic
1.2.3.4:8080
# With authentication
1.2.3.4:8080:username:password
username:password@1.2.3.4:8080
# With protocol
http://1.2.3.4:8080
socks5://1.2.3.4:1080
https://1.2.3.4:443
# Protocol + authentication
socks5://username:password@1.2.3.4:1080
http://user:pass@1.2.3.4:8080
# Lines starting with # or // are ignored
BirdProxies
-----------------------------------------------
Proxy Checker v1.0.0
Loaded 5 proxies
Detecting public IP... 203.0.113.1
Checking ████████████████████████████████████████ 100% | 5/5 | 3 alive | 2 dead
┌────────────────────┬──────────┬────────┬─────────┬─────────────┬──────────────┬──────────────────┐
│ Proxy │ Protocol │ Status │ Latency │ Anonymity │ Country │ ISP │
├────────────────────┼──────────┼────────┼─────────┼─────────────┼──────────────┼──────────────────┤
│ 1.2.3.4:8080 │ HTTP │ ALIVE │ 245ms │ Elite │ US USA │ Cloudflare │
│ 5.6.7.8:3128 │ HTTP │ ALIVE │ 512ms │ Anonymous │ DE Germany │ Hetzner │
│ 9.10.11.12:1080 │ SOCKS5 │ ALIVE │ 189ms │ Elite │ NL Netherlands│ DigitalOcean │
│ 13.14.15.16:8888 │ HTTP │ DEAD │ - │ - │ - │ - │
│ 17.18.19.20:80 │ HTTP │ DEAD │ - │ - │ - │ - │
└────────────────────┴──────────┴────────┴─────────┴─────────────┴──────────────┴──────────────────┘
Summary
----------------------------------------
Total checked: 5
Alive: 3 (60.0%)
Dead: 2
Avg latency: 315ms
Min latency: 189ms
Max latency: 512ms
Transparent: 0
Anonymous: 1
Elite: 2
Top countries: US (1), DE (1), NL (1)
proxy-checker proxies.txt -o json[
{
"proxy": "1.2.3.4:8080",
"protocol": "http",
"alive": true,
"latency": 245,
"anonymity": "elite",
"country": "United States",
"countryCode": "US",
"region": "California",
"city": "San Francisco",
"isp": "Cloudflare",
"error": null,
"checkedAt": "2026-01-15T12:00:00.000Z"
}
]proxy-checker proxies.txt -o csvproxy,protocol,alive,latency,anonymity,country,country_code,region,city,isp,error,checked_at
1.2.3.4:8080,http,true,245,elite,United States,US,California,San Francisco,Cloudflare,,2026-01-15T12:00:00.000Z
5.6.7.8:3128,http,false,,,,,,,,Connection refused,2026-01-15T12:00:01.000Z
import { checkProxies, parseProxyList } from '@birdproxies/proxy-checker';
const input = `
1.2.3.4:8080
socks5://5.6.7.8:1080
`;
const proxies = parseProxyList(input);
const results = await checkProxies(proxies, {
timeout: 5000,
concurrency: 20,
geoLookup: true,
}, (completed, total, result) => {
console.log(`[${completed}/${total}] ${result.proxy.host}:${result.proxy.port} - ${result.alive ? 'ALIVE' : 'DEAD'}`);
});
const alive = results.filter(r => r.alive);
console.log(`Found ${alive.length} alive proxies`);
for (const r of alive) {
console.log(` ${r.proxy.host}:${r.proxy.port} - ${r.latency}ms - ${r.anonymity} - ${r.geo?.country}`);
}npm install
npm run buildThe compiled output will be in the dist/ directory.
MIT - see LICENSE
Built by BirdProxies - Premium Proxy Provider