Guide · 6 min read

ProxyDesk quick start: one local address for every scraper you run

Download ProxyDesk, sign in or paste your proxies, press Start and point curl, Python or Playwright at 127.0.0.1. Plus what it does when a proxy dies.

Every scraper you write starts the same way: paste a proxy URL in, paste another one in when that one dies, write a little rotation loop, forget to handle the case where all of them are down. ProxyDesk takes that whole chore off the script. It runs on your machine, opens one SOCKS5 address and one HTTP address on 127.0.0.1, and deals with the list behind them. Your code only ever knows one address.

This guide gets it running, points curl, Python and Playwright at it, and then breaks a proxy on purpose so you know what ProxyDesk does when one dies. Spoiler: it never quietly falls back to your own connection.

Step 1: download it

The builds are in your dashboard: open the desktop app page, or Apps & extensions in the left rail, and download the one for your system. Two warnings you will meet, both expected:

Windows warns on first run, because the build is unsigned.

macOS will not open it at first, because the build is not notarized yet. You approve it once, and only the first time:

  1. Open ProxyDesk. macOS says it cannot verify the app and does not open it. Close that dialog.
  2. Open System Settings > Privacy & Security, scroll to the Security section, find the message about ProxyDesk being blocked and click Open Anyway.
  3. Confirm with your password or Touch ID, then open ProxyDesk again and choose Open.

Step 2: give it proxies

Sign in. On the Account page, press Sign in to ProxyMonkey. Your browser opens; sign in there and come back. Where your system lets the browser hand the session straight back to the app, ProxyDesk picks it up by itself. That hand-back does not work everywhere yet, so the sign-in page also shows a code: press Have a code? in ProxyDesk and paste it.

Signed in, go to Proxies, open the From my account tab, select a proxy and press Connect. That adds it to ProxyDesk and starts the local addresses in one go.

Or paste your own. Proxies → Import takes one proxy per line as host:port, host:port:user:pass, user:pass@host:port or scheme://user:pass@host:port, and ignores lines starting with #. Before anything is saved it shows how it read each line: ready, a duplicate it will skip, or a line that needs a fix, with an example of the fix. The button then says exactly what happens next, such as Add 2 and test: the good lines go in and get batch-tested straight away.

ProxyDesk import dialog: four pasted lines read as two ready, one duplicate skipped and one that needs a fix, with an Add 2 and test button

If the batch test finds a problem, the result has a Copy report for support button. Paste that into Discord rather than a screenshot; it says which proxies failed and why.

Step 3: press Start

Press Start. ProxyDesk opens SOCKS5 on 127.0.0.1:11080 and HTTP on 127.0.0.1:18080. Those are the defaults; change either port in Settings. Nothing else on the machine changes. Only an app you point at one of those addresses goes through ProxyDesk, which the Overview page says in as many words.

ProxyDesk overview: running with 13 of 14 proxies usable, the local SOCKS5 and HTTP addresses with copy buttons, a curl snippet, and the pool with each proxy’s health and latency

Two settings to know about. A local login makes apps send a username and password to use the endpoint; without one, any app on your machine can use it. And Accept connections from other machines on the network is off until you turn it on. If you do, set the local login too, otherwise anyone on your network can use your proxies, and ProxyDesk tells you so.

Step 4: point your tools at it

The Overview page has copy-paste snippets for curl, your shell, Python, Playwright and a browser, already filled in with your ports and local login. With the defaults and no local login, they read:

curl -x socks5h://127.0.0.1:11080 https://example.com

# or every tool started from this shell
export ALL_PROXY=socks5h://127.0.0.1:11080
export HTTP_PROXY=http://127.0.0.1:18080
export HTTPS_PROXY=http://127.0.0.1:18080
import requests  # pip install requests[socks]
proxies = {"http": "socks5h://127.0.0.1:11080", "https": "socks5h://127.0.0.1:11080"}
print(requests.get("https://example.com", proxies=proxies).status_code)
const browser = await chromium.launch({
  proxy: { server: "http://127.0.0.1:18080" },
});

Note the h in socks5h: it makes DNS resolve through the proxy. Plain socks5 looks names up on your own connection first. The SOCKS5 vs HTTP guide has the long version. The Playwright snippet uses the HTTP address: Chromium cannot send a password to a SOCKS5 proxy, so HTTP is the one that keeps working once you set a local login.

Step 5: pick how it rotates

By default every new connection gets the next healthy proxy. For targets that care about sessions, Settings has Stay on one proxy until it fails. Either way, Rotate now on the Overview moves you off the current proxy on demand. If you are not sure which you want, rotating vs sticky settles it with code.

What happens when a proxy dies

Each connection gets up to three tries. If the proxy it was handed fails, that proxy is benched and the next healthy one is tried, so one dead proxy costs a retry, not your request. The benched proxy is re-tested on its own, every five minutes by default, waiting longer each time it keeps failing, up to half an hour. When it passes, it is back in rotation. Both timings are in Settings, and nothing needs a restart.

ProxyDesk proxies page: healthy proxies with type, country and latency, and one proxy whose login was refused, set aside and retrying in 4 minutes while traffic uses the others

If every proxy is down, ProxyDesk refuses the connection instead of sending it out on your own IP. A SOCKS5 client gets the reply connection not allowed by ruleset; an HTTP client gets 502 Bad Gateway. Your scraper sees an error, which is annoying, and the target never sees your home address, which is the point. Handle it like any other failed request and retry later.

The health checks themselves cost a little traffic. ProxyDesk counts it separately from yours, so it never inflates your own numbers. Those numbers live on the Activity page, which is a whole post of its own: count your own requests.

What it does not do

  • No UDP. It carries TCP over SOCKS5 and HTTP, nothing else.
  • No per-site rules yet; every app you point at it shares the one pool. For per-site routing inside a browser, use the browser extension.
  • No exit-IP check in the app yet. Until there is, ask the internet: curl -x socks5h://127.0.0.1:11080 https://httpbin.org/ip prints the address the target sees.

That is the whole loop: one address in your code, the list behind it looked after, and a refusal instead of a leak when things go wrong. The rest of the screens are on the ProxyDesk page.

Try it while you read

Top-ups start at $5.

One shared datacenter IP for 30 days is $1.25. A single gigabyte of residential is $2.40. The balance never expires.

Published

Filed under

Found a mistake? Tell us in Discord and we will fix the post.

The community layer

Stuck halfway through?

Paste the error in Discord. Someone has hit it before and the answer is usually one message long.

Join the Discord

4,200+monkeys in the Discord

  • Help from humans

    Post your error, get an answer. Usually in minutes, usually from someone who has hit the same wall.

  • A status bot that tells on us

    Pool health, incidents and maintenance posted automatically. Including the bad days.

  • Deals and free traffic

    Bonus GB drops, early access to new pools, and the occasional giveaway for a good bug report.

Join the Discord4,200+ monkeys, free to lurk