Proxy Format Converter: Any List Into The Format Your Tool Wants
Runs in your browser — nothing you enter here is sent to us.
Four values, six arrangements, no agreement on the separator. Paste your provider's list in whatever shape it arrived and take out the shape your tool wants. Nothing you paste here leaves your browser.
One proxy per line, in whatever shape your provider gave you. Blank lines and lines starting with # are ignored.
Used only where the output needs one. A line that already carries its own (socks5://…) keeps it.
converted, lines we could not read.
A line we could not read is left out rather than guessed at. Usually it is a port that is not a number, or four fields where the host is somewhere we did not expect — send us the line and we will teach the parser about it.
This one runs entirely in your browser. There is no form to submit and no request to make: open your browser's network tab and press Convert, and you will see nothing happen. That matters here more than on most pages, because a proxy list is usually a list of passwords.
Why a proxy list never matches the tool you are using
There is no standard for writing down a proxy. Four values need to travel together — host, port, username, password — and providers have settled on at least six ways of arranging them, with no agreement on the separator. One panel gives you 198.51.100.10:8080:alice:s3cret. The next gives you alice:s3cret@198.51.100.10:8080. A third uses semicolons. A fourth prints the credentials first and the endpoint last. Some include a socks5:// prefix and some expect you to know.
Meanwhile the thing you want to paste them into has exactly one opinion. curl wants a URL after -x. Python's requests wants a dict with a scheme in the value. Most scraping frameworks want user:pass@host:port. Browser extensions tend to want the four fields in separate boxes. So the first ten minutes with a new provider are spent reformatting a list by hand in a text editor, which is both boring and the easiest possible place to corrupt a credential.
This page does that conversion. Paste the list in whatever shape it arrived, pick the shape you need, press Convert.
What it reads, and what it writes
You do not have to tell it the input format. It works out each line's shape from the line itself, which means a list that is inconsistent — and exported lists often are — still comes out uniform. The arrangements it recognises:
- host:port
- host:port:user:pass
- user:pass:host:port
- user:pass@host:port
- host:port@user:pass
- any of the above with a scheme:// prefix
- any of the above separated by semicolons, pipes, commas, tabs or spaces instead of colons
On the way out you can have a bare host:port list, either four-field arrangement, a full URL, a ready-to-run curl -x command per line, a Python requests dict per line, or the whole list as JSON with one object per proxy. The URL-shaped outputs need a protocol, so there is a dropdown for it — but a line that already carried its own (socks5://…) keeps it rather than being overwritten, because your provider knew which port speaks which protocol and the dropdown does not.
Lines it refuses
A line it cannot parse is left out and counted, never guessed at. The count is shown next to the result, because silently dropping three proxies out of two hundred is how you end up debugging a scraper at two in the morning. Blank lines and lines beginning with # or // are treated as comments and are not counted as failures.
The usual reason for a refusal is a port that is not a number — a copy that caught a column header, or a trailing note on the line. The other is four fields where the host is not where we expected and no field looks like a port, which no amount of guessing can resolve correctly.
Which output goes where
If you are not sure which of the shapes you need, this is roughly how they get used:
- user:pass@host:port — Scrapy, Puppeteer and Playwright launch arguments, most scraping frameworks, and nearly every "paste your proxies here" box in a bot or an SEO tool.
- Full URL with a scheme — anything that takes a single proxy string from an environment variable, including HTTP_PROXY and HTTPS_PROXY.
- curl -x commands — testing a handful by hand. Paste the block into a terminal and watch which endpoints answer.
- Python requests dicts — drop straight into a proxies= argument, one per request in a rotation list.
- JSON — feeding a proxy pool to your own code, or into a config file. The port comes out as a number and empty credentials as null, so it loads without further cleaning.
- Bare host:port — IP-authenticated proxies, where the credentials are your own address and there is nothing to carry.
Nothing you paste here leaves your browser
A proxy list with credentials in it is a list of passwords. Pasting one into a web page should make you uneasy, and on most converter sites it should: the text goes to a server, gets processed, and comes back, and you have no way of knowing what happened in between or how long the request log keeps it.
This page is built so that the question does not arise. The conversion is JavaScript running in your tab. There is no form to submit, no endpoint behind it and no request made when you press Convert — not an analytics event, not a background save. You can verify that rather than take our word for it: open your browser's developer tools, switch to the Network tab, paste a list and convert it. Nothing appears.
The same follows for the obvious consequences. We cannot keep your list, because we never have it. We cannot leak it. The page works with your connection unplugged.
Getting the credentials part right
Two things go wrong often enough to be worth naming.
Passwords containing a colon or an @. These are what break hand reformatting, and they are genuinely ambiguous: in alice:pa:ss@host:8080 the password could be pa or pa:ss. This page splits the credentials at the first colon and the endpoint at the last @, which is the reading that matches how providers actually issue them. If your password contains an @, no line-based format can represent it unescaped — change the password or use a tool that takes the four fields separately.
The protocol and the port. A SOCKS5 proxy on port 1080 handed to a tool as http://…:1080 will fail in a way that looks like a dead proxy. If you are unsure which of your endpoints is which, our proxy checker will tell you what each one actually answers on, along with its latency and whether it passes your real address through in the headers.
Proxy format converter: questions we get
Is my proxy list sent to your server?
No. The conversion is JavaScript running in your browser, and there is no endpoint behind the page. Open the Network tab in your developer tools and press Convert — you will see no request. The page also works offline.
Do I need to tell it which format my list is in?
No. Each line is identified from its own shape, so a list that mixes formats still converts. That is deliberate: exported lists are often inconsistent, especially when two providers' lists have been pasted together.
What happens to lines it cannot read?
They are skipped and counted, and the count is shown with the result. A line is never guessed at — dropping proxies silently is how a scraper ends up failing for a reason nobody can find.
My password has a colon in it. Will that work?
Yes. The credentials are split at the first colon, so everything after it is the password. A password containing an @ cannot be written in any of these single-line formats without escaping, and needs a tool that takes the four fields separately.
Which protocol should I choose?
Whichever your provider says the endpoint speaks — the port is a hint, not a guarantee. A line that already carries its own scheme keeps it and ignores the dropdown. If you do not know, run the list through our proxy checker, which reports what each endpoint actually answers on.
Can it convert a list of thousands of proxies?
Yes. It runs in your browser, so the only limit is your machine, and parsing is linear. Lists in the tens of thousands convert instantly; there is no rate limit because there is no server to rate-limit.