Proxy formatter & list converter

Paste a proxy list in any format and get it back as IP:Port:User:Pass, User:Pass@IP:Port, an http:// or socks5:// URL, or your own template. Duplicates removed, bad lines flagged. Free, no signup, nothing leaves your browser.

Protocol (if a line has none)
4 proxies · 1 duplicate removed
http://user1:pass1@198.51.100.7:8000
http://user2:pass2@198.51.100.8:8000
http://user3:pass3@198.51.100.9:8000
socks5://user4:pass4@203.0.113.5:1080

Runs in your browser. Your list and passwords are never sent anywhere.

Proxy formats and what reads them

The formatter reads all six on input, line by line, with or without a protocol in front.

FormatUsed by
IP:Port:User:Pass
198.51.100.7:8000:user:pass
The usual export from proxy providers; most bots and antidetect browsers take it on bulk import.
User:Pass@IP:Port
user:pass@198.51.100.7:8000
curl -x reads it and assumes HTTP. Some bots ask for it by this name.
protocol://User:Pass@IP:Port
http://user:pass@198.51.100.7:8000
Python requests, Scrapy's meta['proxy'], Node's undici ProxyAgent, the HTTP_PROXY and HTTPS_PROXY variables.
User:Pass:IP:Port
user:pass:198.51.100.7:8000
Some sellers' exports and a few bot tools.
IP:Port@User:Pass
198.51.100.7:8000@user:pass
A few sneaker and account tools.
IP:Port
198.51.100.7:8000
IP-whitelist logins, free proxy lists, Chrome's --proxy-server flag (it has no field for a password).

Getting the format right

How the input is read

A line with an @ is split there: whichever side is a host and port is the address, the other side is the login. A line with four parts is IP:Port:User:Pass when the first part is a host and the second a port, otherwise User:Pass:IP:Port. A password may contain colons and stays whole.

Special characters in passwords

In a proxy URL, @ : / # and % in the user or password break parsing unless they are percent-encoded, so p@ss becomes p%40ss. The URL output encodes them; every other format keeps the password as typed, and an encoded URL pasted in is decoded back.

Custom templates

Any text with {host}, {port}, {user}, {pass} and {scheme} works, one line per proxy:

{host},{port},{user},{pass}
--proxy-server={scheme}://{host}:{port}
{"server": "{scheme}://{host}:{port}", "username": "{user}", "password": "{pass}"}

Proxmint lines

The Proxmint dashboard exports up to 1,000 lines at once in IP:Port:User:Pass, User:Pass@IP:Port or URL form. Every line uses gw.proxmint.com:823 (SOCKS5 on 824), and the country, city and sticky session ride in the username, as login__cr.us;sessid.ab12, so a conversion keeps the targeting.

Build a username with targeting

Proxy format questions

What is the most common proxy format?

IP:Port:User:Pass, one proxy per line, such as 198.51.100.7:8000:user:pass. Most providers export it and most bots and antidetect browsers import it. Code usually wants the URL form instead, http://user:pass@198.51.100.7:8000.

How do I convert IP:Port:User:Pass to User:Pass@IP:Port?

Paste the list into the formatter above and pick User:Pass@IP:Port as the output format. Each line is read on its own, so a list that mixes formats comes out in one. Copy the result or download it as a .txt file.

Is it safe to paste proxies with passwords here?

The conversion runs in your browser. The page makes no request with your list, so the passwords stay on your machine. You can load the page, go offline and it still works.

Which format does Python requests need?

A URL with the scheme: http://user:pass@host:port for an HTTP proxy, socks5h://user:pass@host:port for SOCKS5 (with requests[socks] installed). If the password contains @, :, / or #, it has to be percent-encoded, @ as %40; the formatter's URL output does that for you.

Why were some lines skipped?

A line needs a host (an IPv4 address or a name with a dot, such as gw.example.com) and a port from 1 to 65535, with the user and password on the same line. Lines with only three parts, a missing port or a port above 65535 are listed under the output so you can fix them.

How do I format proxies for Playwright or Puppeteer?

Playwright takes the server, username and password as separate fields. Pick Custom template: the default template writes one Playwright proxy object per line. Puppeteer takes --proxy-server=host:port at launch and the login through page.authenticate, so use IP:Port for the flag and keep the user and password from the original list.

Proxies in the format your tool wants

Residential, datacenter and mobile IPs billed per GB, exported in any of these formats. Bandwidth never expires.