proxychecker-dev
v1.2.0
Published
Fast proxy checker CLI. Test HTTP/HTTPS/SOCKS proxies for liveness, latency, and datacenter-vs-residential type. Free, no signup.
Maintainers
Readme
proxycheck
Fast proxy checker for the command line. Test HTTP, HTTPS, SOCKS4, and SOCKS5 proxies for liveness, latency, and datacenter-vs-residential type. No signup, no ads, no sketchy binary.
Powered by proxychecker.dev.
npx proxychecker-dev proxies.txt ALIVE 45.12.30.9:8080 http datacenter 142ms US Cloudflare
ALIVE 98.162.25.7:31654 socks5 residential 380ms DE Deutsche Telekom
DEAD 9.9.9.9:3128 http - - - timeout
2 alive · 1 dead · avg 261ms · 1 dc · 1 resWhy
If you buy proxies for scraping, half the list is usually dead, slow, or a datacenter IP being sold as "residential." Checking them by hand or hacking together a curl loop is a waste of a morning. This does it in one command, tells you which are actually alive, how fast, and what type they really are.
Install
Run it with no install:
npx proxychecker-dev proxies.txtOr install globally for the short proxycheck command:
npm install -g proxychecker-dev
proxycheck proxies.txtRequires Node.js 18+.
Usage
# from a file (one proxy per line, # comments ignored)
proxycheck proxies.txt
# inline
proxycheck 1.2.3.4:8080 socks5://5.6.7.8:1080
# from stdin
cat proxies.txt | proxycheck
# only the live ones, as JSON, piped to jq
proxycheck proxies.txt --alive --json | jq -r '.results[].input'
# export a CSV
proxycheck proxies.txt --csv > results.csvAccepted formats
One per line. Lines starting with # are ignored.
ip:port
ip:port:user:pass
user:pass@ip:port
socks5://ip:portProtocols: http, https, socks4, socks5.
Options
| Flag | Description |
|------|-------------|
| -k, --key <pck_...> | API key, unlocks up to 10,000 proxies/call depending on plan, with auto-chunking (or set PROXYCHECK_KEY) |
| -t, --timeout <ms> | Per-proxy timeout, 3000-30000 (default 10000) |
| -a, --alive | Only output proxies that are alive |
| --json | Output raw JSON (pipe to jq) |
| --csv | Output CSV |
| --target <url> | Test each proxy against a real URL, not just liveness |
| -q, --quiet | Suppress progress and summary, results only |
| --fail-if-none | Exit non-zero if nothing usable came back (useful in CI) |
| -h, --help | Show help |
| -v, --version | Show version |
Target mode
Liveness and usefulness are different questions. A proxy can be perfectly alive and still be blocked by the site you actually need:
proxycheck proxies.txt --target https://www.example.com --key pck_live_xxx OK 1.2.3.4:8080 812ms HTTP 200
BLOCK 5.6.7.8:1080 640ms Cloudflare
DEAD 9.10.11.12:3128 - timeout
1 reached · 1 blocked · 1 dead · avg 726ms
blocked by: Cloudflare (1)With --fail-if-none, target mode fails when nothing reached the target,
not merely when nothing was alive. A pool of healthy proxies that are all
blocked is exactly the CI failure worth catching.
What this sends
Two headers ride along with each check: the CLI version, and how many proxies you asked to check. Never your proxies, never your credentials, and never the ones the free cap skipped.
It exists because the free path only ever sends the first 50 (shipping 50,000 for the server to discard would be rude to both ends), which meant a user with a huge list and a user with a tiny one produced identical requests. "People hit the free ceiling from the CLI" was unanswerable. Now it is a number.
Because it rides on a request that was happening anyway, there is no telemetry call that can fail, hang, or need a timeout. The CLI behaves identically whether or not anyone is listening.
Free vs. keyed
The free tier checks 50 proxies per call with no key and no signup. That covers casual use forever.
Paid plans work on validation credits: every proxy you submit consumes one credit (a batch of 3,000 proxies costs 3,000 credits).
| Plan | Price | Credits | Per call | |------|-------|---------|----------| | One-Shot | $5 one time | 5,000 validations, valid 7 days | 5,000 | | Pro | $15/mo | 100,000 validations per month | 5,000 | | Business | $49/mo | 500,000 validations per month | 10,000 |
The CLI asks the server for your plan's per-call cap and automatically splits larger jobs into chunks and merges the results, so proxycheck huge-list.txt --key pck_... just works.
Buy at proxychecker.dev/pricing, or grab a One-Shot directly: proxychecker.dev/checkout?plan=oneshot. Manage or rotate keys at proxychecker.dev/account. Set the key once:
export PROXYCHECK_KEY=pck_live_xxxxx
proxycheck huge-list.txtAfter every keyed run the CLI prints what's left on the meter:
credits remaining: 94,850 · plan renews 2026-09-01Running out of credits
When a key is out of credits, expired, or suspended, the server answers 402 and the CLI stops immediately (it never retries a 402, so nothing extra gets burned). It prints the reason, your remaining balance if the server reports one, and the manage/pricing links, then exits with code 3.
Exit codes
| Code | Meaning |
|------|---------|
| 0 | Success |
| 1 | Errors (network failure, bad input, batch too large) |
| 2 | --fail-if-none was set and zero proxies came back alive |
| 3 | Auth or entitlement problem (invalid/revoked key, out of credits, expired or inactive plan) |
What you get per proxy
- status: alive or dead
- protocol: http / https / socks4 / socks5
- type: datacenter, residential, or mobile
- latency: round-trip in ms
- country / city / ISP / ASN: geo + network
- suspected_fake_residential: flags datacenter IPs being sold as residential
API
The CLI is a thin wrapper over the proxychecker.dev API. POST a JSON array of proxies to /api/check with Authorization: Bearer pck_... and get JSON or CSV back. Use whichever you like.
License
MIT © Flash AI Solutions
