Free tool · no account

Proxy format
converter.

Paste a list in whatever shape your provider handed you. Get it back in the shape your tool actually wants — host:port, user:pass@host:port, a proxy URL, curl, JSON, CSV, or a template you write yourself.

  • Runs in your browser
  • Nothing uploaded
  • No signup, no limit
  • Mixed formats in one paste

What every HTTP client, browser flag and library actually consumes.

Paste your list

Output · Proxy URL

Nothing pasted yet

Your list is parsed by JavaScript on this page and never sent anywhere — there is no server behind this tool to send it to. Proxy credentials are credentials; a converter that uploads them is one you should not be using.

01 The formats

Nobody agreed
on a format.

A proxy is four values: a host, a port, and usually a username and password. There is no standard for writing them down, so every provider picked something. One panel exports host:port:user:pass. The next writes user:pass@host:port. Your HTTP client wants a URL with a scheme on the front. Your browser automation wants the host and port on their own, with the credentials passed through a separate API entirely.

None of this is difficult, which is exactly why it is annoying — it is a text-shuffling chore that sits between you and the work, usually at the point where you have just paid for something and want to use it. The converter above reads every one of the shapes below, decides per line rather than per paste, and writes out any other one.

Every format it reads and writes

host:port

The bare pair. Anything authenticated by IP whitelist wants this.

203.0.113.10:8080

host:port:user:pass

The most common list format. Most sneaker and checker tools expect it.

203.0.113.10:8080:alice:s3cret

user:pass@host:port

A URL with the scheme left off. Common in browser and anti-detect panels.

alice:[email protected]:8080

user:pass:host:port

The inverted four-field order. A handful of resellers export this way.

alice:s3cret:203.0.113.10:8080

host:port@user:pass

Rare, but some panels emit it and almost nothing else parses it.

203.0.113.10:8080@alice:s3cret

Proxy URL

What every HTTP client, browser flag and library actually consumes.

http://alice:[email protected]:8080

curl

One ready-to-run request per proxy, for checking a list by hand.

curl -x "http://alice:[email protected]:8080" https://api.ipify.org

Shell env vars

HTTP_PROXY / HTTPS_PROXY exports for a terminal or Dockerfile.

export HTTP_PROXY="http://alice:[email protected]:8080" HTTPS_PROXY="http://alice:[email protected]:8080"

Python requests

A proxies list you can paste straight into a requests session.

PROXIES = [ {"http": "...", "https": "..."}, ]

JSON

One object per proxy — for config files and your own tooling.

[ { "protocol": "http", "host": "203.0.113.10", "port": 8080 } ]

CSV

Header row plus one row per proxy, for a spreadsheet or a database load.

protocol,host,port,username,password http,203.0.113.10,8080,alice,s3cret

Custom template

Your own layout. Use {scheme} {host} {port} {user} {pass} as placeholders.

{host}|{port}|{user}|{pass}

Input detection also handles CSV, TSV, spreadsheet rows, curl commands, HTTP_PROXY lines and quoted URLs pasted out of JSON or Python.

02 By client

Which one does
your tool want?

The most common way a working proxy looks broken is being handed to a client in a shape it does not parse. Chrome is the classic: --proxy-server silently ignores credentials, so an authenticated proxy pasted into it fails as though the proxy were dead. Here is what each client actually expects.

curl, wget

Proxy URL

curl -x "http://user:pass@host:8080" https://example.com

Quote the URL — a password containing & or ! will otherwise be eaten by your shell.

Python requests, httpx

Proxy URL

proxies={"http": "http://user:pass@host:8080", "https": "..."}

Both keys point at the same proxy. The "https" key sets the proxy for HTTPS targets, not an HTTPS proxy.

Node — axios, undici, got

Proxy URL

new HttpsProxyAgent("http://user:pass@host:8080")

Node has no built-in proxy support for fetch; you need an agent library.

Scrapy

Proxy URL

request.meta["proxy"] = "http://user:pass@host:8080"

Set it per request in meta, not in settings.py, if you are rotating.

Chrome, Puppeteer, Playwright, Selenium

host:port

--proxy-server=http://host:8080

The Chrome flag will not accept credentials. Username and password have to be supplied separately, through the browser API.

Anti-detect browsers — Multilogin, AdsPower, GoLogin

Separate fields

host · port · username · password

Most also accept a pasted user:pass@host:port and split it for you.

Sneaker bots, checkers, most GUI tools

host:port:user:pass

203.0.113.10:8080:alice:s3cret

The default list format in this corner of the ecosystem. Rarely documented, almost always expected.

Shell-wide, Docker, CI

Environment variables

export HTTP_PROXY="http://user:pass@host:8080"

Set HTTPS_PROXY too. Most clients read both, and some read only one.

03 FAQ

Questions,
answered properly.

Is my proxy list uploaded anywhere?

No. The converter is JavaScript running in your browser — the list never leaves the page. There is no upload, no request to our servers, no logging and no storage, so closing the tab discards everything. You can confirm it by opening your network tab, or by disconnecting from the internet after the page loads: it keeps working.

Which input formats does it detect?

host:port, host:port:user:pass, user:pass:host:port, user:pass@host:port, host:port@user:pass, and full proxy URLs with an http, https, socks4 or socks5 scheme. It also reads CSV, TSV and spreadsheet rows, curl commands, HTTP_PROXY environment lines and quoted URLs pasted out of JSON or Python. Detection runs per line, so a list that mixes several formats converts in one pass.

What is the difference between host:port:user:pass and user:pass@host:port?

Nothing but the writing. They carry the same four values, and the converter treats them as identical. The colon-separated form is what proxy sellers and GUI tools tend to export; the @ form is a proxy URL with the scheme left off, which is what HTTP clients and libraries expect.

How does it tell host:port:user:pass from user:pass:host:port?

Both are four colon-separated fields and neither is labelled, so the converter scores each reading on how host-like the candidate host is. An IP address is decisive, a dotted hostname is strong evidence, and a bare word is weak because usernames look the same. When both readings score equally it picks host-first, which is the more common of the two. The Detected line under the panes tells you which shape it settled on for every line.

My password contains @ or : — will that break the conversion?

No. Credentials are split on the first colon and the address on the last @, so a password containing either character survives the round trip. When the output is a proxy URL, curl command, environment variable or Python snippet, the username and password are percent-encoded, because an unencoded @ or / in a password produces a URL that silently parses to the wrong host.

Can it convert IPv6 proxies?

Yes, with the address in square brackets: [2001:db8::1]:8080. Brackets are required rather than optional, because a bare IPv6 address is itself full of colons and cannot be told apart from the separators. A line that looks like an unbracketed IPv6 address is reported with that specific advice rather than a generic failure.

What is the difference between socks5 and socks5h?

Where DNS resolution happens. With socks5 your own machine resolves the hostname and sends the resulting IP to the proxy; with socks5h the proxy resolves it. Use socks5h when the target should never see a DNS lookup from your network, or when the hostname only resolves correctly from the proxy location.

Why did one of my lines fail?

Every line that cannot be read is listed underneath with its original line number, the text as pasted and the specific reason — a port outside 1–65535, a host that is not a valid address or hostname, or a field count that does not resolve. Nothing is dropped silently, because a list that comes back shorter than it went in is the most expensive way this tool could fail you.

Does the output keep my credentials?

Only when the format you pick has somewhere to put them. host:port cannot carry a username and password, so choosing it drops them, and the page says so with a count of the affected lines. The Strip credentials switch does the same thing deliberately, which is what you want before sharing a list or filing a support ticket.

Is there a limit on list size?

The first 20,000 lines of a paste are converted. Anything beyond that is reported as ignored rather than quietly cut, so you know to split the list. There is no account, no signup and no rate limit — the work happens on your own machine.

Now get proxies
worth converting.

Dedicated ISP and residential IPs on real carrier subnets, priced in the open and provisioned in under two minutes. $1 gets you a trial.