# Claude Code Source: https://docs.2extract.com/ai/clients/claude-code Add the 2extract MCP server to Claude Code with a single command and provision proxies from your terminal. Claude Code has first-class support for remote MCP servers, so setup is one command - no config files to edit. *** ## Prerequisites * Claude Code installed and signed in * A 2extract API key with the scopes your work needs - see [Quick Start](/ai/mcp-server/quick-start) *** ## Add the server ```bash icon="terminal" theme={null} claude mcp add --transport http 2extract https://mcp.2extract.com/mcp \ --header "Authorization: Bearer 2xt_YOUR_API_KEY" ``` That registers the server for your user account, so it is available in every project. To scope it to one project instead, add `--scope project` - the entry lands in `.mcp.json` in the repository root. > [!WARNING] > > With `--scope project` the key is written into a file that is usually committed. Either add `.mcp.json` to `.gitignore`, or keep the server at user scope. *** ## Verify Inside Claude Code, run: ``` /mcp ``` `2extract` should appear as connected. Then ask something read-only: > What is my 2extract balance? > [!TIP] > > A number comes back. You are connected, and nothing was created or charged. *** ## Managing the server ```bash icon="terminal" theme={null} # List every configured MCP server claude mcp list # Show details for this one claude mcp get 2extract # Remove it claude mcp remove 2extract ``` *** ## Troubleshooting > [accordion] /mcp does not list 2extract > > Run `claude mcp list` to confirm the entry exists. If it does but is not connecting, the URL is probably missing the `/mcp` path - the endpoint is `https://mcp.2extract.com/mcp`, not the bare host. > [accordion] Every tool returns unauthorized > > The key is missing, mistyped, or expired. Re-add the server with a fresh key: > > ```bash icon="terminal" theme={null} > claude mcp remove 2extract > claude mcp add --transport http 2extract https://mcp.2extract.com/mcp \ > --header "Authorization: Bearer 2xt_YOUR_API_KEY" > ``` > [accordion] Some tools work, others fail > > That is a scope problem, not a connection problem. The key is missing the scope that tool needs - most often `proxies:read` on a key that only has `proxies:write`. See [Overview](/ai/mcp-server/overview#scopes-an-agent-needs). *** ## Next steps > [card] [Usage Examples](/ai/mcp-server/usage-examples) > > Full sessions from request to connection string. > [card] [Prompts](/ai/mcp-server/prompts) > > Four slash commands that ship with the server. # Claude Desktop Source: https://docs.2extract.com/ai/clients/claude-desktop Connect the 2extract MCP server to the Claude desktop app by editing its configuration file. Claude Desktop reads its MCP servers from a JSON file on disk. Edit it, restart the app, and the tools appear. *** ## Where the config lives | Platform | Path | | :- | :- | | macOS | `~/Library/Application Support/Claude/claude_desktop_config.json` | | Windows | `%APPDATA%\Claude\claude_desktop_config.json` | You can also open it from the app: **Settings** → **Developer** → **Edit Config**. If the file does not exist yet, create it with the contents below. *** ## Add the server ```json claude_desktop_config.json icon="brackets-curly" theme={null} { "mcpServers": { "2extract": { "type": "http", "url": "https://mcp.2extract.com/mcp", "headers": { "Authorization": "Bearer 2xt_YOUR_API_KEY" } } } } ``` If you already have other servers, add `2extract` as another key inside the existing `mcpServers` object rather than replacing it. > [!WARNING] > > **Restart Claude Desktop completely.** Closing the window is not enough on macOS - quit the app from the menu bar or with `Cmd+Q`. A new conversation in a running app will not pick up config changes. *** ## Verify Open a new conversation and ask: > What is my 2extract balance? > [!TIP] > > Claude asks permission to use a 2extract tool, then reports your balance. You can also check the tools icon in the message composer - `2extract` should be listed with its tools. *** ## Older versions Some builds of Claude Desktop only launch local servers over stdio and ignore `type: "http"`. If your version does nothing with the config above, bridge to the remote server with `mcp-remote`: ```json claude_desktop_config.json icon="brackets-curly" theme={null} { "mcpServers": { "2extract": { "command": "npx", "args": [ "mcp-remote", "https://mcp.2extract.com/mcp", "--header", "Authorization: Bearer 2xt_YOUR_API_KEY" ] } } } ``` This needs Node.js on your machine. Prefer the direct HTTP form when your version supports it - it is faster and has no dependency. *** ## Troubleshooting > [accordion] No 2extract tools after editing the config > > In order of likelihood: > > 1. The app was not fully restarted. Quit it, do not just close the window. > 2. The JSON is malformed - a trailing comma or a missing brace. Paste it into any JSON validator; the app fails silently on syntax errors. > 3. The file is in the wrong place. Use **Settings** → **Developer** → **Edit Config** to open the one the app actually reads. > [accordion] Tools appear but every call is unauthorized > > Check the `Authorization` value. It must be the word `Bearer`, one space, then the key - `Bearer 2xt_...`. A stray newline from copy-pasting will also break it. > [accordion] Claude asks permission on every single call > > That is the app's own approval flow, not something the server controls. You can allow a tool for the rest of the conversation in the permission dialog. *** ## Next steps > [card] [Prompts](/ai/mcp-server/prompts) > > Guided workflows, available as slash commands. > [card] [Usage Examples](/ai/mcp-server/usage-examples) > > Sessions from request to connection string. # Cline Source: https://docs.2extract.com/ai/clients/cline Add the 2extract MCP server to Cline in VS Code so it can provision proxies as part of a task. Cline is a VS Code extension with its own MCP configuration, separate from the editor's built-in Copilot support. *** ## Add the server Open the Cline panel, click the **MCP Servers** icon, then **Configure MCP Servers**. That opens `cline_mcp_settings.json`. ```json cline_mcp_settings.json icon="brackets-curly" theme={null} { "mcpServers": { "2extract": { "type": "streamableHttp", "url": "https://mcp.2extract.com/mcp", "headers": { "Authorization": "Bearer 2xt_YOUR_API_KEY" }, "disabled": false } } } ``` > [!NOTE] > > Cline names the remote transport `streamableHttp`. If your version does not recognise it, look at an existing entry in the same file for the shape it expects, then supply the same three values: `https://mcp.2extract.com/mcp`, Streamable HTTP, and `Authorization: Bearer 2xt_...`. Cline writes this file itself, so it may reformat your edits - that is normal. *** ## Verify The server appears in the **MCP Servers** panel with a green indicator and its tool list. Then start a task: > What is my 2extract balance? > [!TIP] > > Cline requests approval for the tool call, then reports the number. *** ## Auto-approve Cline can auto-approve individual tools so it stops asking every time. Safe candidates are the read-only ones: * `getAccountBalance` * `getAccountTrafficUsage` * `listProxyResources` * `listGeoCountries` and the other `searchGeo*` tools > [!WARNING] > > Do not auto-approve `createProxyResource` - it is billable. Do not auto-approve `deleteProxyResource` or `regenerateProxyPassword` - they are destructive and the confirmation is the only thing standing between an agent and a deleted proxy. *** ## Troubleshooting > [accordion] Server shows red in the MCP panel > > Open the entry to see the error. A missing `/mcp` path or a malformed header are the usual causes. > [accordion] Config edits keep disappearing > > Cline owns this file and rewrites it. Make changes through the panel where possible, and close the JSON editor before switching back to the panel. > [accordion] Unauthorized on every call > > The key is wrong, expired, or the header is missing the word `Bearer`. *** ## Next steps > [card] [Tools](/ai/mcp-server/tools) > > Which tools are safe to auto-approve. > [card] [Usage Examples](/ai/mcp-server/usage-examples) > > Sessions from request to connection string. # Codex Source: https://docs.2extract.com/ai/clients/codex Connect the 2extract MCP server to the OpenAI Codex CLI so it can provision proxies while it builds your integration. Codex CLI reads its MCP servers from a TOML config file, or accepts them through its own `mcp` subcommand. *** ## Add the server Codex reads the key from an environment variable and adds the `Bearer` prefix itself, so the key never lands in the config file. Export it in your shell profile: ```bash icon="terminal" theme={null} export EXTRACT_API_KEY=2xt_YOUR_API_KEY ``` Then register the server with the CLI: ```bash icon="terminal" theme={null} codex mcp add 2extract \ --url https://mcp.2extract.com/mcp \ --bearer-token-env-var EXTRACT_API_KEY ``` Or edit `~/.codex/config.toml` directly: ```toml ~/.codex/config.toml icon="gear" theme={null} [mcp_servers.2extract] url = "https://mcp.2extract.com/mcp" bearer_token_env_var = "EXTRACT_API_KEY" ``` > [!NOTE] > > `codex mcp add` has no `--header` flag. To pass the key inline instead of through a variable, use the config file: put `http_headers = { "Authorization" = "Bearer 2xt_YOUR_API_KEY" }` under `[mcp_servers.2extract]` in place of `bearer_token_env_var`. *** ## Verify ```bash icon="terminal" theme={null} codex mcp list ``` `2extract` should be listed. Then start Codex and ask: > What is my 2extract balance? > [!TIP] > > A number comes back, and no proxy was created. *** ## Troubleshooting > [accordion] Codex does not see the server > > Run `codex mcp list`. If the entry is missing, the config file was not picked up - confirm the path is `~/.codex/config.toml` and that the TOML parses. > > If the entry is there but not connecting, update Codex: older builds had no remote HTTP transport. Check `codex mcp --help`. > [accordion] Unauthorized on every call > > With `bearer_token_env_var`, the variable must be set in the shell that starts Codex. Run `echo $EXTRACT_API_KEY` there; an empty line means Codex sends no key. The variable holds the bare key (`2xt_...`) - Codex adds `Bearer` itself. > > With `http_headers`, keep the whole value in one quoted string, including the word `Bearer`. > [accordion] Some tools fail, others work > > A scope problem rather than a connection problem. The key is missing the scope those tools need - see [Overview](/ai/mcp-server/overview#scopes-an-agent-needs). *** ## Next steps > [card] [Tools](/ai/mcp-server/tools) > > Everything the agent can call. > [card] [Other clients](/ai/clients/other) > > The three values any MCP client needs. # Cursor Source: https://docs.2extract.com/ai/clients/cursor Add the 2extract MCP server to Cursor, globally or per project, and provision proxies from the editor. Cursor reads MCP servers from a JSON file. You choose whether the server is available everywhere or only inside one repository. *** ## Global or per project? | File | Scope | Use when | | :- | :- | :- | | `~/.cursor/mcp.json` | Every project | It is your personal key and you want it everywhere | | `.cursor/mcp.json` | One repository | The whole team should get the same tools | > [!WARNING] > > A project-level `.cursor/mcp.json` is usually committed. Do not put a real API key in it - add the file to `.gitignore`, or use the global file instead. *** ## Add the server ```json mcp.json icon="brackets-curly" theme={null} { "mcpServers": { "2extract": { "url": "https://mcp.2extract.com/mcp", "headers": { "Authorization": "Bearer 2xt_YOUR_API_KEY" } } } } ``` Already have servers configured? Add `2extract` as another key inside the existing `mcpServers` object. *** ## Verify Open **Settings** → **Cursor Settings** → **MCP**. `2extract` should show as connected, with its tools listed. Then, in the chat panel with Agent mode active: > What is my 2extract balance? > [!TIP] > > A number comes back. The tool call is shown inline, and you can expand it to see exactly what was sent. *** ## Troubleshooting > [accordion] Server shows as disconnected in Settings > > Check the URL keeps the `/mcp` path. `https://mcp.2extract.com` on its own serves a web page, not the protocol. > > Then use the refresh control next to the server in the MCP settings panel - Cursor does not always re-read the file on save. > [accordion] Tools are listed but never used > > Tools are only available in **Agent** mode. In Ask mode the model can see them but will not call them. > [accordion] Everything returns unauthorized > > The `Authorization` header must read `Bearer 2xt_...` - the word, a space, the key. If you pasted from a terminal, check for a trailing newline inside the quotes. > [accordion] Project config works for you but not for a teammate > > Expected, if the key is yours. Each person needs their own key with their own scopes - keys are per account, and usage is billed to whoever owns the key. *** ## Next steps > [card] [Usage Examples](/ai/mcp-server/usage-examples) > > Sessions from request to connection string. > [card] [Tools](/ai/mcp-server/tools) > > Everything the agent can call. # Gemini CLI Source: https://docs.2extract.com/ai/clients/gemini-cli Connect the 2extract MCP server to Google's Gemini CLI so it can provision proxies from the terminal. Gemini CLI reads its MCP servers from a `settings.json` file, or adds them through its own `mcp` subcommand. *** ## Global or per project? | File | Scope | Use when | | :- | :- | :- | | `~/.gemini/settings.json` | Every project | It is your personal key and you want it everywhere | | `.gemini/settings.json` | One repository | The whole team should get the same tools | > [!WARNING] > > A project-level `.gemini/settings.json` may end up committed. Do not put a real API key in it - add the file to `.gitignore`, or use the user-level file instead. *** ## Add the server The quickest route is the CLI. `-s user` writes to your user-level file; without it, the server is added to the current project: ```bash icon="terminal" theme={null} gemini mcp add -s user --transport http \ --header "Authorization: Bearer 2xt_YOUR_API_KEY" \ 2extract https://mcp.2extract.com/mcp ``` Or edit `settings.json` directly: ```json settings.json icon="brackets-curly" theme={null} { "mcpServers": { "2extract": { "httpUrl": "https://mcp.2extract.com/mcp", "headers": { "Authorization": "Bearer 2xt_YOUR_API_KEY" } } } } ``` Already have servers configured? Add `2extract` as another key inside the existing `mcpServers` object. > [!NOTE] > > Use `httpUrl`, not `url`. In Gemini CLI, `httpUrl` selects Streamable HTTP, while `url` selects the older SSE transport. *** ## Verify ```bash icon="terminal" theme={null} gemini mcp list ``` `2extract` should be listed as connected. Then start Gemini CLI and ask: > What is my 2extract balance? > [!TIP] > > A number comes back, and no proxy was created. Inside a session, `/mcp` lists the server with its tools and prompts. *** ## Troubleshooting > [accordion] Server is listed but disconnected > > Check the key is `httpUrl` and the URL keeps the `/mcp` path. `https://mcp.2extract.com` on its own serves a web page, not the protocol. > [accordion] Unauthorized on every call > > The `Authorization` header must read `Bearer 2xt_...` - the word, a space, the key. The server shows as connected even with a wrong key; the error appears on the first tool call. > [accordion] Some tools fail, others work > > A scope problem rather than a connection problem. The key is missing the scope those tools need - see [Overview](/ai/mcp-server/overview#scopes-an-agent-needs). *** ## Next steps > [card] [Tools](/ai/mcp-server/tools) > > Everything the agent can call. > [card] [Other clients](/ai/clients/other) > > Any other MCP client. # OpenCode Source: https://docs.2extract.com/ai/clients/opencode Connect the 2extract MCP server to OpenCode so its agent can provision proxies while it writes your code. OpenCode reads MCP servers from the `mcp` section of its config file, `opencode.json`. *** ## Global or per project? | File | Scope | Use when | | :- | :- | :- | | `~/.config/opencode/opencode.json` | Every project | It is your personal key and you want it everywhere | | `opencode.json` in the repository root | One repository | The whole team should get the same tools | *** ## Add the server OpenCode can read the key from an environment variable, so the key never lands in the config file. Export it in your shell profile: ```bash icon="terminal" theme={null} export EXTRACT_API_KEY=2xt_YOUR_API_KEY ``` Then add the server: ```json opencode.json icon="brackets-curly" theme={null} { "$schema": "https://opencode.ai/config.json", "mcp": { "2extract": { "type": "remote", "url": "https://mcp.2extract.com/mcp", "enabled": true, "headers": { "Authorization": "Bearer {env:EXTRACT_API_KEY}" } } } } ``` `{env:EXTRACT_API_KEY}` is replaced with the value of the variable when OpenCode starts. Already have servers configured? Add `2extract` as another key inside the existing `mcp` object. > [!NOTE] > > Because the key comes from the environment, a project-level `opencode.json` with this config is safe to commit. Each teammate exports their own key. *** ## Verify Start OpenCode and ask: > What is my 2extract balance? > [!TIP] > > A number comes back, and no proxy was created. *** ## Troubleshooting > [accordion] OpenCode does not see the server > > Check that `type` is `remote`, `enabled` is `true`, and the URL keeps the `/mcp` path. Then restart OpenCode - the config is read at startup. > [accordion] Unauthorized on every call > > The variable must be set in the shell that starts OpenCode. Run `echo $EXTRACT_API_KEY` there; an empty line means OpenCode sends `Bearer` with no key. The variable holds the bare key (`2xt_...`) - the config adds `Bearer`. > [accordion] Some tools fail, others work > > A scope problem rather than a connection problem. The key is missing the scope those tools need - see [Overview](/ai/mcp-server/overview#scopes-an-agent-needs). *** ## Next steps > [card] [Tools](/ai/mcp-server/tools) > > Everything the agent can call. > [card] [Other clients](/ai/clients/other) > > Any other MCP client. # Other Clients Source: https://docs.2extract.com/ai/clients/other Connect any MCP-capable client to the 2extract MCP server - the three values you need, and how to test the connection by hand. Every client differs in where it keeps its configuration. None of them differ in what the configuration has to contain. *** ## The three values | | | | :- | :- | | **URL** | `https://mcp.2extract.com/mcp` | | **Transport** | Streamable HTTP | | **Header** | `Authorization: Bearer 2xt_YOUR_API_KEY` | Wherever your client asks for a remote or custom MCP server, those go in. If it offers a choice of transports, pick Streamable HTTP - not stdio, and not the deprecated HTTP+SSE. > [!WARNING] > > Keep the `/mcp` path. The bare host `https://mcp.2extract.com` serves a web page, not the protocol. *** ## The two shapes you will meet Most clients use one of these. If yours is not documented here, try the first. ```json mcpServers icon="brackets-curly" theme={null} { "mcpServers": { "2extract": { "type": "http", "url": "https://mcp.2extract.com/mcp", "headers": { "Authorization": "Bearer 2xt_YOUR_API_KEY" } } } } ``` ```json servers icon="brackets-curly" theme={null} { "servers": { "2extract": { "type": "http", "url": "https://mcp.2extract.com/mcp", "headers": { "Authorization": "Bearer 2xt_YOUR_API_KEY" } } } } ``` Variations you may run into: `serverUrl` instead of `url`, `streamableHttp` instead of `http`, headers as a list of strings rather than an object. The values stay the same. *** ## Clients that only speak stdio Some older clients launch local processes and cannot reach a remote server. Bridge to it with `mcp-remote`, which runs locally and forwards to us: ```json icon="brackets-curly" theme={null} { "mcpServers": { "2extract": { "command": "npx", "args": [ "mcp-remote", "https://mcp.2extract.com/mcp", "--header", "Authorization: Bearer 2xt_YOUR_API_KEY" ] } } } ``` Requires Node.js. Use the direct HTTP form whenever your client supports it. *** ## Testing without a client Useful when you want to know whether the problem is us or your editor. Open a session: ```bash icon="terminal" theme={null} curl -i -X POST https://mcp.2extract.com/mcp \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -H "Authorization: Bearer 2xt_YOUR_API_KEY" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "protocolVersion": "2025-06-18", "capabilities": {}, "clientInfo": { "name": "curl", "version": "1" } } }' ``` A healthy server replies `200` with an `mcp-session-id` response header and the server's capabilities in the body. > [!NOTE] > > `initialize` succeeds even without a valid key - authentication is checked when a tool actually runs. To test the key itself, call a tool: pass the returned `mcp-session-id` back as a header, send `notifications/initialized`, then call `tools/call` with `getAccountBalance`. A bad key returns `error_code: unauthorized`. *** ## Checklist when it will not connect **1. Is the path there?** `https://mcp.2extract.com/mcp`, not the bare host. **2. Is the transport right?** Streamable HTTP. If the client only lists SSE, it is likely too old for this server. **3. Is the header exactly right?** `Bearer`, one space, then the key. Watch for a trailing newline from copy-paste. **4. Did the client reload?** Most need a restart, not just a new conversation. **5. Does the key have the scopes?** If some tools work and others do not, it is scopes - not the connection. See [Overview](/ai/mcp-server/overview#scopes-an-agent-needs). *** ## Next steps > [card] [FAQ](/ai/mcp-server/faq) > > Error codes and what each one means. > [card] [Tools](/ai/mcp-server/tools) > > Everything the agent can call. # VS Code Source: https://docs.2extract.com/ai/clients/vs-code Connect the 2extract MCP server to GitHub Copilot in VS Code, keeping your API key out of the repository. VS Code supports MCP servers through Copilot's agent mode. Its config has one feature the others lack: **inputs**, which prompt for a secret at first use instead of storing it in the file. *** ## Add the server Create `.vscode/mcp.json` in your workspace: ```json .vscode/mcp.json icon="brackets-curly" theme={null} { "servers": { "2extract": { "type": "http", "url": "https://mcp.2extract.com/mcp", "headers": { "Authorization": "Bearer ${input:2extract-key}" } } }, "inputs": [ { "id": "2extract-key", "type": "promptString", "description": "2extract API key", "password": true } ] } ``` > [!TIP] > > Because the key comes from `inputs`, this file is safe to commit. VS Code prompts each person for their own key the first time the server starts, and stores it in the OS keychain rather than in the repository. Note the top-level key is `servers`, not `mcpServers` as in most other clients. *** ## Verify **1. Start the server** Open `.vscode/mcp.json`. VS Code shows a **Start** action above the server entry - click it, and enter your API key when prompted. **2. Switch Copilot to Agent mode** Open Chat and select **Agent** from the mode dropdown. Tools only run in agent mode. **3. Ask something read-only** > What is my 2extract balance? Copilot asks for permission to run the tool, then reports the number. You can see everything that is registered with **MCP: List Servers** from the Command Palette. *** ## User-level instead of workspace To make the server available in every workspace, run **MCP: Open User Configuration** from the Command Palette and put the same `servers` block there. The `inputs` mechanism works the same way. *** ## Troubleshooting > [accordion] No Start action above the server entry > > The JSON is malformed, or the top-level key is wrong. VS Code expects `servers`, not `mcpServers` - that is the most common mistake when copying a config from another client. > [accordion] It asks for the key again > > The stored value was cleared. Run **MCP: Reset Cached Tools** or restart the server from `.vscode/mcp.json` and enter the key again. > [accordion] Tools are visible but never called > > Copilot must be in **Agent** mode. Ask and Edit modes do not call MCP tools. > [accordion] Unauthorized on every call > > The key entered at the prompt is wrong or expired. Reset the input and re-enter it - the value is not in the JSON, so editing the file will not help. *** ## Next steps > [card] [Tools](/ai/mcp-server/tools) > > Everything the agent can call. > [card] [Usage Examples](/ai/mcp-server/usage-examples) > > Sessions from request to connection string. # Windsurf Source: https://docs.2extract.com/ai/clients/windsurf Add the 2extract MCP server to Windsurf so Cascade can provision proxies while you build. Windsurf exposes MCP servers to Cascade, its agent. Configuration is a JSON file, editable by hand or through the UI. *** ## Add the server Open **Settings** → **Cascade** → **MCP Servers** → **Add Server** → **Add custom server**, which opens `mcp_config.json`: | Platform | Path | | :- | :- | | macOS / Linux | `~/.codeium/windsurf/mcp_config.json` | | Windows | `%USERPROFILE%\.codeium\windsurf\mcp_config.json` | ```json mcp_config.json icon="brackets-curly" theme={null} { "mcpServers": { "2extract": { "serverUrl": "https://mcp.2extract.com/mcp", "headers": { "Authorization": "Bearer 2xt_YOUR_API_KEY" } } } } ``` > [!NOTE] > > Windsurf uses `serverUrl` for remote servers, where most other clients use `url`. If your version rejects the config, check the shape in **Settings** → **Cascade** → **MCP Servers**, then fill in the same three values: the URL `https://mcp.2extract.com/mcp`, Streamable HTTP, and the `Authorization: Bearer` header. *** ## Verify Press the refresh control in the MCP Servers panel, then ask Cascade: > What is my 2extract balance? > [!TIP] > > Cascade calls the tool and reports the number. Available tools are listed under the server entry in settings. *** ## Troubleshooting > [accordion] Server does not appear after saving > > Use the refresh control in the MCP Servers panel - Windsurf does not always re-read the file automatically. If that fails, restart the editor. > [accordion] Tool limit reached > > Windsurf caps how many MCP tools it will expose to Cascade at once. Our server contributes 19. If you run several servers, disable the ones you are not using, or turn off individual tools in the server's settings entry. > [accordion] Unauthorized on every call > > Check the header reads `Bearer 2xt_...` - the word, a space, the key. A trailing newline from copy-paste also breaks it. *** ## Next steps > [card] [Usage Examples](/ai/mcp-server/usage-examples) > > Sessions from request to connection string. > [card] [Tools](/ai/mcp-server/tools) > > Everything the agent can call. # Docs MCP Server Source: https://docs.2extract.com/ai/for-agents/docs-mcp-server Let an MCP client search the 2extract documentation live, instead of loading the whole thing into context. This documentation site is also an MCP server. Connect a client to it and your agent can search these pages on demand - no API key, no cost, nothing it can change. *** ## Endpoint ``` https://docs.2extract.com/mcp ``` | | | | :- | :- | | **Transport** | Streamable HTTP | | **Authentication** | None | | **Access** | Read-only | > [!WARNING] > > This is **not** the [2extract MCP Server](/ai/mcp-server/overview). That one lives at `mcp.2extract.com/mcp`, needs an API key, and creates real proxies. This one only reads documentation. Adding both is fine and common - give them distinct names in your config. *** ## Add it to your client ```bash Claude Code icon="terminal" theme={null} claude mcp add --transport http 2extract-docs https://docs.2extract.com/mcp ``` ```json mcpServers icon="brackets-curly" theme={null} { "mcpServers": { "2extract-docs": { "type": "http", "url": "https://docs.2extract.com/mcp" } } } ``` ```json VS Code icon="brackets-curly" theme={null} { "servers": { "2extract-docs": { "type": "http", "url": "https://docs.2extract.com/mcp" } } } ``` No headers, because there is nothing to authenticate. Client-specific file paths are on the [client pages](/ai/clients/claude-code) - the setup is the same, minus the key. > [!NOTE] > > Opening `https://docs.2extract.com/mcp` in a browser returns an error rather than a page. That is expected - the path speaks the protocol, not HTML. *** ## Verify Ask your agent something that is only answerable from these docs: > Search the 2extract docs: what is the format of the proxy connection username? > [!TIP] > > The agent calls a search tool against the docs server and answers with the real parameter format, citing the page it came from. *** ## Search versus loading a file Both routes get the documentation into your agent. They cost different things. | | Docs MCP Server | [llms-full.txt](/ai/for-agents/llm-references) | | :- | :- | :- | | Context cost | Only what the query returns | \~80-90k tokens, once | | Freshness | Always current | Current at the moment you fetched it | | Needs MCP support | Yes | No | | Works offline | No | Yes, once downloaded | | Good for | Occasional lookups during a long session | Writing an integration end to end | They are not exclusive. A useful combination is the file loaded for the format rules you keep needing, and the docs server for the occasional lookup of something specific - a country code, a particular error. *** ## Running both 2extract servers A setup that covers everything: ```json icon="brackets-curly" theme={null} { "mcpServers": { "2extract": { "type": "http", "url": "https://mcp.2extract.com/mcp", "headers": { "Authorization": "Bearer 2xt_YOUR_API_KEY" } }, "2extract-docs": { "type": "http", "url": "https://docs.2extract.com/mcp" } } } ``` Now the agent can look up how session parameters work, then create a proxy that uses them, in the same conversation. > [!TIP] > > Keep the names distinct - `2extract` and `2extract-docs`. Agents choose tools partly by server name, and two servers called the same thing will get confused for one another. *** ## Troubleshooting > [accordion] Client will not connect > > Check the `/mcp` path is present and the transport is Streamable HTTP. There is no key to get wrong here, so those are the only two variables. > [accordion] The agent answers from memory instead of searching > > Ask explicitly - "search the 2extract docs for..." - rather than asking the question directly. Models tend to answer from training data unless prompted to look. > [accordion] It found the page but the answer is wrong > > Ask it to quote the source. If the quote does not support the answer, the model summarised badly rather than the docs being wrong - and we would like to know either way at [support@2extract.com](mailto:support@2extract.com). *** ## Next steps > [card] [MCP Server](/ai/mcp-server/overview) > > The server that provisions proxies rather than reading docs. > [card] [LLM References](/ai/for-agents/llm-references) > > The same content as static files. # LLM References Source: https://docs.2extract.com/ai/for-agents/llm-references Two machine-readable documentation files following the llms.txt standard - an index and a full-text dump of the entire 2extract documentation. The [llms.txt standard](https://llmstxt.org) is a convention for publishing a site's content in a form a language model can read directly, without parsing navigation, sidebars, or scripts. We publish both files it defines. They update automatically whenever this documentation changes. > [card] [llms.txt](https://docs.2extract.com/llms.txt) > > An index: every page with its title, description, and a link. Roughly 14 KB. > [card] [llms-full.txt](https://docs.2extract.com/llms-full.txt) > > The entire documentation as one plain-text file. Roughly 330 KB. *** ## Which file to use | | `llms.txt` | `llms-full.txt` | | :- | :- | :- | | **Size** | \~14 KB | \~330 KB | | **Contains** | Titles, descriptions, links | Every page, full text | | **Fits in context** | Always | Usually, but it is not free | | **Needs web access** | Yes, to follow links | No | | **Best for** | Agents that can fetch | One-shot loading into a session | **Use `llms.txt`** when the model can reach the web. It reads the index, decides which page it needs, fetches that page, and spends nothing on the rest. **Use `llms-full.txt`** when it cannot, or when you would rather pay once for complete knowledge than pay per lookup. At around 330 KB it is roughly 80-90k tokens - comfortable in a large context window, wasteful in a small one. > [!WARNING] > > Do not paste `llms-full.txt` into every request. Load it once at the start of a session, or attach it as a project-level document that persists. *** ## What is inside `llms.txt` is a flat list of links with descriptions: ```text icon="file-lines" theme={null} # 2extract Docs ## Docs - [Country List](https://docs.2extract.com/data/countries.md): Full list of countries available for geo-targeting, with the parameter value to use in the proxy connection username. - [Quick Start: Your First Request in 2 Minutes](https://docs.2extract.com/getting-started/quick-start.md): Follow these 4 simple steps to go from a new account to a successful proxy request. ``` Every link points at the `.md` version of the page, so following one costs no HTML. `llms-full.txt` concatenates those pages, each with a header and its source URL: ```text icon="book" theme={null} # City List Source: https://docs.2extract.com/data/cities Countries with city-level targeting available. ... ``` *** ## Any page as markdown Both files are built from a third mechanism you can use directly: **append `.md` to any URL on this site**. ```bash icon="terminal" theme={null} curl https://docs.2extract.com/proxy-products/configuration/geo-targeting.md ``` Useful when you know exactly which page you need and do not want either file. *** ## Loading them into a tool > [accordion] Claude Projects > > Download `llms-full.txt` and add it to the project's knowledge. It persists across every conversation in that project, so the model has the full documentation without you re-attaching it. > > ```bash icon="terminal" theme={null} > curl -O https://docs.2extract.com/llms-full.txt > ``` > [accordion] Cursor > > **Settings** → **Features** → **Docs** → **Add new doc**, and give it: > > ``` > https://docs.2extract.com/llms-full.txt > ``` > > Then reference it in chat with `@Docs`. Cursor indexes it and pulls in the relevant parts rather than the whole file. > [accordion] A coding assistant in your terminal > > Drop the file into the repository where the assistant will find it: > > ```bash icon="terminal" theme={null} > curl -o docs/2extract-reference.txt https://docs.2extract.com/llms-full.txt > ``` > > Then tell it where to look: "The 2extract proxy documentation is in `docs/2extract-reference.txt` - read it before writing the proxy configuration." > [accordion] Your own application > > Fetch and cache. The files are static and regenerate when the docs change, so a daily refresh is plenty. > > ```python icon="python" theme={null} > import requests > > def load_reference() -> str: > r = requests.get("https://docs.2extract.com/llms-full.txt", timeout=30) > r.raise_for_status() > return r.text > ``` > > For per-question retrieval rather than bulk loading, the [Docs MCP Server](/ai/for-agents/docs-mcp-server) is the better fit. *** ## What this is good for The recurring problem people hit with proxies is not the HTTP client - it is the username format. Geo, session, and protocol parameters are all encoded in the username, in a specific order, with specific separators. A model that has not seen the format invents something plausible and you get a 407. With the reference loaded, the assistant writes: ``` 2xt-customer-K3nP7qLm2Xv-proxy-my_project-country-de-city-munich-session-run1-time-10 ``` correctly, first time - including the rule that proxy names cannot contain hyphens. *** ## Next steps > [card] [Docs MCP Server](/ai/for-agents/docs-mcp-server) > > Live search instead of a static file. > [card] [MCP Server](/ai/mcp-server/overview) > > When the agent should act, not just read. # Overview Source: https://docs.2extract.com/ai/for-agents/overview Machine-readable forms of the 2extract documentation - text files following the llms.txt standard, per-page markdown, and a hosted docs MCP server. Everything in this section exists for one reason: a language model reading a documentation site built for humans wastes tokens on navigation, and often reads the wrong thing. So we publish the same content in three shapes a model can consume directly. All three are free, need no key, and are read-only. > [card] [LLM References](/ai/for-agents/llm-references) > > Two text files with the whole portal in them, following the llms.txt standard. > [card] [Docs MCP Server](/ai/for-agents/docs-mcp-server) > > Live search over this documentation, for MCP-capable clients. *** ## Which one fits your setup | Your situation | Use | | :- | :- | | Building an integration with an AI coding assistant | [llms-full.txt](/ai/for-agents/llm-references), loaded once into context | | Agent has web access and can fetch what it needs | [llms.txt](/ai/for-agents/llm-references) as an index | | Client supports MCP | [Docs MCP Server](/ai/for-agents/docs-mcp-server) | | You want one specific page as clean text | Append `.md` to any URL on this site | That last one is worth knowing on its own: ``` https://docs.2extract.com/proxy-products/configuration/geo-targeting.md ``` Same page, no navigation, no HTML. *** ## Not to be confused with the MCP Server There are two MCP servers in this documentation and they do completely different things. | | [MCP Server](/ai/mcp-server/overview) | [Docs MCP Server](/ai/for-agents/docs-mcp-server) | | :- | :- | :- | | Endpoint | `mcp.2extract.com/mcp` | `docs.2extract.com/mcp` | | What it does | Creates and manages proxies | Searches this documentation | | Needs a key | Yes | No | | Costs money | The proxies it creates do | No | | Can change your account | Yes | No | If you want an agent that *does* things - provisions proxies, sets limits, reads your balance - you want the [MCP Server](/ai/mcp-server/overview). This section is about an agent that *knows* things. *** ## Using both together They complement each other well. A coding assistant with the documentation loaded writes correct usernames and picks the right session parameters on the first attempt, because it knows the format. The same assistant connected to the MCP server can then create the proxy it just wrote code for. > [!TIP] > > If you only do one thing: point your coding assistant at `llms-full.txt` before you start building the integration. Most of the time people lose to proxy integration is spent on the username parameter format, which is all in there. *** ## Next steps > [card] [LLM References](/ai/for-agents/llm-references) > > The two files, what is in each, and how to load them. > [card] [Docs MCP Server](/ai/for-agents/docs-mcp-server) > > Connect a client to live documentation search. # FAQ Source: https://docs.2extract.com/ai/mcp-server/faq Common questions about the 2extract MCP server: keys and scopes, cost, safety, limits, and what to do when a tool fails. ## Getting connected > [accordion] Do I need a separate key for MCP? > > No. Your regular 2extract API key works, with the same scopes. Create one in the [Dashboard](https://2extract.com/app/api-keys) under **API Keys**. > > Name it after the client that will use it - `Cursor MCP`, `Claude Code MCP` - so you can revoke the right one later without hunting. > [accordion] Which scopes does the agent need? > > For a read-only agent: `proxies:read`, `balance:read`, `stats:read`, `geo:read`. > > To let it create and configure proxies, add `proxies:write`. > > `proxies:write` does **not** include `proxies:read`. The scopes are independent, and an agent almost always reads before it writes - so a write-only key fails partway through most workflows. > [accordion] Why does the endpoint show an error in my browser? > > Because `/mcp` speaks the Model Context Protocol, not HTML. Opening `https://mcp.2extract.com` without the path gives you a normal page instead. > > Nothing is wrong - the endpoint is meant for your client, not your browser. > [accordion] My client shows no 2extract tools at all > > In order of likelihood: > > 1. The config file was not reloaded - restart the client. Claude Desktop in particular needs a full restart, not just a new conversation. > 2. The `/mcp` path is missing from the URL. > 3. The JSON has a syntax error. Most clients fail silently on a malformed config. > > Client-specific steps are on each [client page](/ai/clients/claude-code). > [accordion] The client says connected, but every call returns unauthorized > > The key is checked when a tool is called, not when the client connects. A client with a missing or wrong key still shows the server as connected and lists its tools - the error appears on the first call. > > Check the `Authorization` header: the word `Bearer`, a space, then the full `2xt_...` key. A key that was revoked or deleted in the [Dashboard](https://2extract.com/app/api-keys) fails the same way. *** ## Cost and safety > [accordion] Does the MCP server cost anything? > > The server is free. You pay for the proxies your agent creates and the traffic they carry, at the usual pay-as-you-go rates - see [Billing & Usage](/guides/billing-usage). > > Read-only tools - balance, usage, geo lookup - never cost anything. > [accordion] Can an agent spend my money without asking? > > Yes, if you give it a `proxies:write` key. Creating a proxy is a billable action, and it is not marked destructive in the protocol, so a client will not necessarily stop to confirm. > > Three ways to bound this: > > * Give read-only keys to agents that only need to look. > * Say the budget in the request: "cap it at 20 GB a month". The agent applies the limit at creation. > * Set `setProxyLimits` on every proxy. A capped proxy stops passing traffic instead of draining your balance. > > See [Provisioning & Cost Control](/ai/use-cases/provisioning-cost-control). > [accordion] Can an agent delete my proxies? > > Only with a `proxies:write` key, and `deleteProxyResource` is marked destructive with an explicit `confirm` parameter - a well-behaved client shows you what is about to happen and waits. > > That protection depends on your client honouring the marker. If deletion would be unacceptable, do not hand the agent a write-scoped key. > > `deactivateProxyResource` is the safe alternative: it stops traffic and can be undone. > [accordion] What happens if the agent hits my traffic limit? > > A limit is not enforced at the moment it is set. When usage crosses the ceiling, the proxy moves to a suspended status in the background and stops passing traffic. It resumes at the start of the next period, or when you raise the limit. > > Your other proxies are unaffected. *** ## Behaviour > [accordion] Can one proxy cover several countries? > > Yes, and usually it should. The country is a parameter in the connection username, not a property of the proxy resource. One proxy plus three usernames covers three countries. > > The `country` field on the resource is only the default used when the username carries no geo parameter. > [accordion] Can I rename a proxy the agent created? > > No. Proxy names are immutable, because the name is part of the connection username - renaming would break every string already in use. > > The description is free text and can be changed at any time. > [accordion] Why does the agent search for a country instead of listing them all? > > The country list is long and returns a capped page unfiltered. Searching by name is both faster and more reliable, so the tool descriptions steer the agent that way. > > If the agent ever reports that a country is unavailable, ask it to search by the exact name before believing it. > [accordion] Does the whitelist tool add or replace? > > Replaces. `setProxyIpWhitelist` overwrites the whole list, and so does `setProxyTargetHosts` for the list of allowed domains. > > To add one entry, the agent reads the current list and sends it back with the addition. Phrase requests as "add X to the whitelist" rather than "set the whitelist to X" so it reads first. *** ## When something fails The agent surfaces the error code. This is what each means. | Code | Meaning | What to do | | :- | :- | :- | | `unauthorized` | Key missing, wrong, or expired | Check the `Authorization` header in your client config | | `insufficient_balance_for_proxy` | Not enough funds for the chosen plan | Top up, or pick a cheaper plan | | `plan_required` | The tariff ID does not exist | Ask the agent to re-read `listProxyPlans` | | `proxy_list_name_duplicate` | A proxy with that name already exists | Names are unique per account and immutable - pick another | | `not_found` | No proxy with that ID | The ID is stale or the proxy was deleted | | `invalid_request` | The proxy ID is not a valid ID at all | Ask the agent to re-read the proxy list rather than reusing an ID from earlier | | `cannot_modify_deleted_proxy` | The proxy is already deleted | Nothing to do - create a new one | | `proxy_pool_unavailable` | No IP could be allocated right now | Retry shortly with the same arguments | | `too_many_requests` | Rate limit | Wait and retry with backoff | > [!NOTE] > > Validation errors - a malformed date, a name with a hyphen in it - come back as a human-readable message rather than a code. The agent reads the message and usually corrects itself on the next attempt. *** ## Still stuck? > [card] [Common Problems](/help/common-problems/407-proxy-authentication-required) > > Connection issues that are about the proxy, not the agent. > [card] [Contact Support](mailto:support@2extract.com) > > Include the tool name and the exact error the agent reported. # Overview Source: https://docs.2extract.com/ai/mcp-server/overview What the 2extract MCP server is, what it exposes, and how an AI agent authenticates against it. The 2extract MCP server exposes your account to an AI agent as a set of callable tools. The agent can create and configure proxies, resolve geo targeting down to city and ASN, cap traffic and spend, and read balance and usage - without you touching the dashboard or writing any code. It speaks the [Model Context Protocol](https://modelcontextprotocol.io), so any MCP-capable client can connect to it. *** ## Endpoint ``` https://mcp.2extract.com/mcp ``` | | | | :- | :- | | **Transport** | Streamable HTTP | | **Authentication** | `Authorization: Bearer 2xt_...` | | **Prompts** | 4 | > [!NOTE] > > Keep the `/mcp` path in your client configuration. The bare host serves a landing page, not the protocol. Configuration examples for every supported client and the MCP Registry manifest are also in the public [2extract/mcp](https://github.com/2extract/mcp) repository on GitHub. *** ## Authentication Use your regular 2extract API key. There is no separate MCP key type and nothing extra to enable. ```http theme={null} Authorization: Bearer 2xt_YOUR_API_KEY ``` Create a key in the [Dashboard](https://2extract.com/app/api-keys) under **API Keys**. Full details, including how keys are stored and rotated, are on the [API Keys](/public-api/api-keys) page. ### Scopes an agent needs Each key carries scopes that gate which tools will work. Grant only what the agent actually needs. | Scope | Unlocks | | :- | :- | | `proxies:read` | Listing and reading proxy resources | | `proxies:write` | Creating, updating, and deleting proxies; setting limits and whitelists | | `balance:read` | Account balance | | `stats:read` | Traffic and spend statistics | | `geo:read` | Country, region, city, ZIP, and ISP lookup | > [!WARNING] > > `proxies:write` does **not** include `proxies:read` - the scopes are independent. An agent almost always reads before it writes, so a write-only key fails partway through most workflows. Grant both. *** ## What the server exposes MCP servers can offer three kinds of things. This one offers all three. > [accordion] Tools - what the agent can do > > Everything the agent can *do*: account balance and usage, geo lookup, plan lookup, and full proxy lifecycle. Two of them are destructive and ask for your confirmation first. > > See the [Tools reference](/ai/mcp-server/tools). > [accordion] Prompts - 4 guided workflows > > Ready-made multi-step routines: create a proxy for a stated purpose, build a connection string, report on monthly cost, clean up idle proxies. Clients that support prompts expose them as slash commands. > > See the [Prompts reference](/ai/mcp-server/prompts). > [accordion] Resources - what each tool returns > > Reference documents the agent reads by itself, so it understands what came back from a tool instead of guessing. Nothing to call and nothing to configure. *** ## A worked example You ask: > Collect gaming-laptop prices from Amazon in Germany, the UK and Japan. The agent, on its own: **1. Resolves the countries** Calls `listGeoCountries` to turn "Germany, the UK and Japan" into values it can target with. **2. Picks a plan and checks funds** Calls `listProxyPlans` and `getAccountBalance` before spending anything. **3. Creates the proxy** Calls `createProxyResource` with a name and description that reflect the task, so the resource is recognisable later in your dashboard. **4. Caps the spend** Calls `setProxyLimits` to put a monthly ceiling on it. **5. Hands back connection strings** One per country, ready to paste into your tools. The full session, with real output, is on the [Usage Examples](/ai/mcp-server/usage-examples) page. *** ## Next steps > [card] [Quick Start](/ai/mcp-server/quick-start) > > Connect a client and run your first request. > [card] [Tools](/ai/mcp-server/tools) > > Everything the agent can reach, and what it cannot do. > [card] [Prompts](/ai/mcp-server/prompts) > > The four built-in workflows. > [card] [FAQ](/ai/mcp-server/faq) > > Keys, scopes, limits, errors, and cost. # Prompts Source: https://docs.2extract.com/ai/mcp-server/prompts Four guided workflows the 2extract MCP server ships with, exposed as slash commands in clients that support MCP prompts. Tools are single actions. **Prompts** are routines built on top of them - a sequence the server already knows how to run, so you do not have to spell it out. Clients that support MCP prompts surface them as slash commands. Type `/` in your agent and they appear alongside the client's own commands. *** ## The four workflows | Prompt | Arguments | What it does | | :- | :- | :- | | `create-proxy-resource` | `purpose` , `proxy_type`, `country` | Creates a proxy for a stated job and returns a ready connection string | | `build-connection-string` | `proxy_id`, `purpose` | Assembles a connection string for a proxy that already exists | | `monthly-cost-report` | `period` | Traffic and spend for a period, with warnings | | `cleanup-unused-proxies` | none | Finds idle proxies and deactivates them after you confirm | *** ## create-proxy-resource Describe the job. The prompt recommends a proxy type and geo setup, creates the resource with a name and description that match the task, and finishes with a connection string you can paste straight into your tools. **purpose** `string` *required* What the proxy is for, in plain language - `collecting Amazon product prices in the US`. **proxy\_type** `string` `residential` or `mobile`. Omit it and the agent recommends one based on the purpose. **country** `string` Default country, as a name or ISO code - `US`, `Germany`. Omit it and the agent infers one from the purpose. The name it generates follows our naming rules automatically: lowercase, digits and underscores only, no hyphens. Names are immutable, so this matters - see [Tools](/ai/mcp-server/tools). *** ## build-connection-string The same recommend-then-assemble step as above, but for a proxy that already exists. Useful when the proxy was created in the dashboard and you now want the right username parameters for a specific job. **proxy\_id** `string` Which proxy to build the string for. Omit it and the agent asks, or picks from your list. **purpose** `string` What the connection is for. Drives the protocol, geo, and session recommendations. The output is a full `username:password@host:port` string with the geo and session parameters encoded in the username. The format itself is documented under [Authentication](/proxy-products/configuration/authentication). *** ## monthly-cost-report Traffic and spend over a period, per proxy, with the outliers called out: proxies burning traffic unusually fast, proxies sitting idle, and a low balance. **period** `string` *required* Accepts natural language - `this month`, `last 30 days`, `March`. Read-only. Nothing is created, changed or charged. *** ## cleanup-unused-proxies Finds proxies with zero traffic over the last 30 days and deactivates them, after showing you the list and waiting for confirmation. No arguments. > [!TIP] > > This prompt **never deletes**. It only deactivates, which is reversible - set a proxy back to `active` and it resumes. *** ## Next steps > [card] [Usage Examples](/ai/mcp-server/usage-examples) > > Full sessions, including one driven by a prompt. > [card] [Tools](/ai/mcp-server/tools) > > The individual actions these workflows are built from. # Quick Start Source: https://docs.2extract.com/ai/mcp-server/quick-start Connect the 2extract MCP server to your AI agent and provision your first proxy by describing what you need. Three steps: create a key, add the server to your client, describe what you want. *** **1. Create an API key** Open the [Dashboard](https://2extract.com/app/api-keys) and go to **API Keys** → **Create API Key**. Name it after the client that will use it - `Claude Code MCP`, `Cursor MCP` - so you can tell keys apart later and revoke the right one. Select these scopes: | Scope | Why | | :- | :- | | `proxies:read` | The agent inspects existing proxies before it creates anything | | `proxies:write` | Creating proxies, setting limits and whitelists | | `balance:read` | Checking funds before a billable action | | `stats:read` | Traffic and spend reports | | `geo:read` | Turning "Germany" into a country ID | Copy the key - it is shown only once. > [!WARNING] > > `proxies:write` does not include `proxies:read`. Grant both, or the agent will fail partway through most workflows. **2. Add the server to your client** Every client uses the same endpoint and the same auth header: ``` https://mcp.2extract.com/mcp Authorization: Bearer 2xt_YOUR_API_KEY ``` For Claude Code, that is one command: ```bash icon="terminal" theme={null} claude mcp add --transport http 2extract https://mcp.2extract.com/mcp \ --header "Authorization: Bearer 2xt_YOUR_API_KEY" ``` Using something else? Pick your client: > [card] [Claude Code](/ai/clients/claude-code) > [card] [Claude Desktop](/ai/clients/claude-desktop) > [card] [Codex](/ai/clients/codex) > [card] [Gemini CLI](/ai/clients/gemini-cli) > [card] [OpenCode](/ai/clients/opencode) > [card] [Cursor](/ai/clients/cursor) > [card] [VS Code](/ai/clients/vs-code) > [card] [Windsurf](/ai/clients/windsurf) > [card] [Cline](/ai/clients/cline) > [card] [Other clients](/ai/clients/other) **3. Check the connection** Ask the agent something read-only. If it answers with a number, you are connected: > What is my 2extract balance? The agent calls `getAccountBalance` and reports your available funds. Nothing is created and nothing is charged. **4. Create your first proxy** Now describe the job rather than the configuration: > Create a residential proxy in Germany for collecting Amazon product prices, cap it at 20 GB per month, and give me the connection string. The agent resolves Germany to a country ID, picks a plan, confirms you have funds, creates the proxy with a name and description that match the task, sets the cap, and returns a connection string. > [!TIP] > > The new proxy appears in your [Dashboard](https://2extract.com/app) under **My Proxies**, exactly as if you had created it by hand. **5. Try a built-in prompt** The server ships four guided workflows. Clients that support MCP prompts expose them as slash commands - try: ``` /create-proxy-resource ``` It asks what the proxy is for, then handles the rest. See [Prompts](/ai/mcp-server/prompts) for all four. *** ## What to ask for next Plain language works. The agent resolves IDs, plans, and geo codes on its own. * Show my traffic usage and spend for the last 30 days. * Which cities can I target in Brazil? * Put a 100 GB monthly traffic cap on the price-monitor proxy. * Add `203.0.113.10` to the IP whitelist on my active proxies. * Find proxies I have not used in a month and deactivate them. *** ## If something does not work | Symptom | Cause | | :- | :- | | Agent says the server is unauthorized | Key missing, mistyped, or expired. Check the `Authorization` header | | A tool fails but others work | The key is missing that tool's scope | | Client shows no 2extract tools at all | Config not reloaded - restart the client | | Browser shows an error on the endpoint | Expected. `/mcp` speaks the protocol, not HTML | More in the [FAQ](/ai/mcp-server/faq). *** ## Next steps > [card] [Tools](/ai/mcp-server/tools) > > Everything the agent can call, with parameters. > [card] [Usage Examples](/ai/mcp-server/usage-examples) > > Full sessions from request to connection string. # Tools Source: https://docs.2extract.com/ai/mcp-server/tools What the 2extract MCP server lets an agent do - the tools it exposes, the scopes they need, and the constraints that change how you should ask. Five domains of tools. You never call these by hand - you describe the outcome and the agent picks them. *** ## Account Needs `balance:read` for balance, `stats:read` for usage and history. All read-only - nothing here costs anything or changes anything. | Tool | What it does | | :- | :- | | `getAccountBalance` | Available funds, whether a new proxy can be created, and the proxy username prefix | | `getAccountTrafficUsage` | Traffic and spend over a period, for the account or one proxy | | `listAccountBalanceHistory` | Deposits and charges over a period | *** ## Geo targeting Needs `geo:read`. These turn names you say out loud into the values a connection username expects. | Tool | What it does | | :- | :- | | `listGeoCountries` | Countries available for targeting | | `searchGeoRegions` | Regions and states inside a country | | `searchGeoCities` | Cities inside a country or region | | `searchGeoZips` | ZIP and postal codes inside a country | | `searchGeoISP` | Mobile carriers, for ISP targeting | Three things constrain what you can ask for: * **Geographic and network targeting are mutually exclusive.** Country, state, city and ZIP go together. ISP and ASN go together. Never both in one connection. * **City, state and ZIP need a country.** Asking for a city on its own does nothing. * **ISP targeting is mobile proxies only.** > [!NOTE] > > Ask the agent to search by name rather than list everything. Country and city catalogues are long, and an unfiltered list comes back capped - which is how an agent ends up telling you a country is unavailable when it simply fell off the end of the page. *** ## Plans Needs `proxies:read`. | Tool | What it does | | :- | :- | | `listProxyPlans` | The plans available to you, and what each costs | The agent calls this before creating anything, so you do not have to know which plan you want. Saying "residential" is enough; saying nothing at all is usually also enough. *** ## Proxy resources Reading needs `proxies:read`. Everything else needs `proxies:write`. | Tool | What it does | | | :- | :- | :- | | `listProxyResources` | Every proxy on the account, with traffic and spend | | | `getProxyResource` | Full detail for one proxy, including both whitelists | | | `createProxyResource` | Create a proxy | Billable | | `updateProxyResource` | Change description, status, geo, whitelist or limits together | | | `deactivateProxyResource` | Stop traffic without deleting | | | `deleteProxyResource` | Remove a proxy permanently | Confirms first | | `regenerateProxyPassword` | Issue a new password | Confirms first | What to keep in mind: * **The name is permanent.** It is chosen at creation and cannot be changed afterwards, because it forms part of the connection username. Lowercase letters, digits and underscores only - no hyphens, since a hyphen separates parameters in that username. * **One proxy covers every country.** The country is set per connection, not per resource, so there is no reason to ask for one proxy per market. * **Deactivation is reversible, deletion is not.** If you want the traffic to stop but the resource to survive, say deactivate. * **A new password breaks whatever is connected.** Anything using the old one stops immediately. *** ## Proxy settings Needs `proxies:write`. | Tool | What it does | | :- | :- | | `setProxyLimits` | Cap traffic or spend, per day or per month | | `setProxyIpWhitelist` | Restrict which IP addresses may use the proxy | | `setProxyTargetHosts` | Restrict which domains the proxy may reach | * **Limits come in two flavours:** a traffic ceiling or a money ceiling, reset daily or monthly. A limit is not checked at the moment you set it - when usage crosses the line, the proxy is suspended in the background and stops passing traffic. * **Both whitelists replace, they do not append.** Say "add `203.0.113.10` to the whitelist" rather than "set the whitelist to `203.0.113.10`", so the agent reads the current list before writing. The same goes for target hosts. * **Target hosts accept wildcards.** `*.example.com` covers every subdomain. An empty list removes the restriction, and the proxy can reach any domain again. *** ## Destructive actions Two tools are marked destructive in the protocol: `deleteProxyResource` and `regenerateProxyPassword`. A well-behaved client shows you what is about to happen and waits for a yes. > [!WARNING] > > That confirmation lives in your client, not on our side. Treat any key carrying `proxies:write` as capable of deleting proxies, and scope it accordingly - see [Provisioning & Cost Control](/ai/use-cases/provisioning-cost-control). *** ## What the agent knows without asking Alongside the tools, the server publishes a set of documents the agent reads by itself, describing what each tool returns. You never see them and there is nothing to configure. They are the reason an agent connected to this server tends to get things right the first time: it knows what came back, rather than guessing from field names. *** ## Next steps > [card] [Prompts](/ai/mcp-server/prompts) > > Four guided workflows built on top of these tools. > [card] [Usage Examples](/ai/mcp-server/usage-examples) > > See the tools called in sequence on a real task. # Usage Examples Source: https://docs.2extract.com/ai/mcp-server/usage-examples Complete sessions with the 2extract MCP server - from a plain-language request to a working connection string. Four sessions, shown end to end. The point of each is the same: you state the outcome, the agent works out the calls. *** ## Multi-region price monitoring The request: > Collect gaming-laptop prices from Amazon in Germany, the UK and Japan. What the agent does: ```text icon="terminal" theme={null} listGeoCountries ⌐ DE · GB · JP listProxyPlans ⌐ Pay-As-You-Go · residential getAccountBalance ⌐ $149.95 available createProxyResource ⌐ amazon_gaming_laptops "Price tracking for gaming laptops on Amazon DE, GB and JP" setProxyLimits ⌐ 50 GB per month Proxy ready. Three connection strings: DE 2xt-customer-K3nP7qLm2Xv-proxy-amazon_gaming_laptops-country-de:s7Kd92mQ@proxy.2extract.net:5555 GB 2xt-customer-K3nP7qLm2Xv-proxy-amazon_gaming_laptops-country-gb:s7Kd92mQ@proxy.2extract.net:5555 JP 2xt-customer-K3nP7qLm2Xv-proxy-amazon_gaming_laptops-country-jp:s7Kd92mQ@proxy.2extract.net:5555 ``` Three things worth noticing: * **One proxy, three strings.** The country lives in the username, not in the resource. You do not need a separate proxy per region - see [Geo Targeting](/proxy-products/configuration/geo-targeting). * **The name describes the job.** `amazon_gaming_laptops` is recognisable in your dashboard six weeks later. The agent generated it from your sentence. * **The cap came first.** `setProxyLimits` ran before you touched the proxy, so a runaway job stops at 50 GB rather than at your balance. Drop a string straight into whatever makes the requests: ```python amazon_de.py icon="python" theme={null} import requests proxy = "https://2xt-customer-K3nP7qLm2Xv-proxy-amazon_gaming_laptops-country-de:s7Kd92mQ@proxy.2extract.net:5555" r = requests.get( "https://www.amazon.de/s?k=gaming+laptop", proxies={"http": proxy, "https": proxy}, timeout=30, ) print(r.status_code) ``` ```javascript amazon_de.js icon="js" theme={null} const axios = require("axios"); const { status } = await axios.get("https://www.amazon.de/s?k=gaming+laptop", { proxy: { protocol: "https", host: "proxy.2extract.net", port: 5555, auth: { username: "2xt-customer-K3nP7qLm2Xv-proxy-amazon_gaming_laptops-country-de", password: "s7Kd92mQ", }, }, timeout: 30000, }); console.log(status); ``` *** ## Narrowing down to a city The request: > I need a proxy that looks like it is browsing from Munich. ```text icon="terminal" theme={null} listGeoCountries search: "Germany" ⌐ Germany · DE searchGeoCities country_code: "DE", search: "Munich" ⌐ Munich · munich Add -city-munich to the username: 2xt-customer-K3nP7qLm2Xv-proxy-local_seo_de-country-de-city-munich:s7Kd92mQ@proxy.2extract.net:5555 ``` The agent searched rather than listing. City catalogues run to thousands of entries, so a name filter is the only sane approach - the tool descriptions tell it as much. > [!NOTE] > > City targeting requires the country in the same username. `-city-munich` on its own does nothing. *** ## A monthly cost review The request, or the `/monthly-cost-report` prompt: > Show my traffic and spend for last month and flag anything odd. ```text icon="terminal" theme={null} getAccountTrafficUsage date_from: 2026-07-01 date_to: 2026-07-31 listAccountBalanceHistory date_from: 2026-07-01 date_to: 2026-07-31 July 2026 · 412 GB · $1,644.88 amazon_gaming_laptops 186 GB $742.14 bestbuy_stock_us 94 GB $375.06 serp_us_daily 88 GB $351.12 local_seo_de 44 GB $175.56 legacy_test_proxy 0 GB $0.00 idle 41 days Balance $149.95 - about 37 GB at your current rate. ``` Read-only: nothing was created, changed, or charged. The idle proxy and the runway estimate are the parts you would have had to work out by hand. *** ## Cleaning up Following on from the report: > Deactivate anything that has not moved traffic in a month. ```text icon="terminal" theme={null} listProxyResources statistic_from: 2026-07-10 statistic_to: 2026-08-10 Two proxies with zero traffic in the last 30 days: legacy_test_proxy idle 41 days staging_probe idle 33 days Deactivate both? They can be reactivated at any time. > yes deactivateProxyResource legacy_test_proxy ⌐ inactive deactivateProxyResource staging_probe ⌐ inactive ``` The agent asked before acting, and it **deactivated rather than deleted**. That is deliberate: deactivation is reversible, deletion is not. The built-in `cleanup-unused-proxies` prompt is hard-wired never to delete. > [!WARNING] > > Deleting a proxy is irreversible and its name cannot be reused in the same way, since names are immutable. If you are unsure, deactivate. *** ## Writing requests that work well > [accordion] State the outcome, not the configuration > > **Good:** "Create a proxy for collecting Amazon prices in Germany, cap it at 20 GB a month." > > **Worse:** "Create a residential proxy on the plan I used last time." > > The second sends the agent hunting through history for something it cannot verify. The first lets it look up the current plans and check your balance before spending anything. > [accordion] Say the budget out loud > > An agent with `proxies:write` can create billable resources. Naming a cap in the request - "no more than 20 GB a month" - gets it applied at creation instead of after the first surprise invoice. > [accordion] Give the proxy a job in the description > > The description is free text and shows up next to the proxy in your dashboard. "Price tracking for gaming laptops on Amazon DE, GB and JP" is worth writing; "test" is not. > [accordion] Ask it to verify > > "Create it, then show me the final configuration." The agent re-reads the resource and reports what actually exists, rather than what it intended to create. *** ## Next steps > [card] [Use Cases](/ai/use-cases/agent-web-access) > > Longer-form scenarios, from web access to data enrichment. > [card] [FAQ](/ai/mcp-server/faq) > > Keys, scopes, limits, errors, and cost. # Overview Source: https://docs.2extract.com/ai/overview Connect AI agents to 2extract: provision proxies over MCP, feed our documentation to any model, and search the docs from your editor. 2extract is built to be driven by software, not only by people. If you work with AI agents - Claude Code, Cursor, Codex, or something you wrote yourself - there are three ways to plug 2extract into them. > [card] [MCP Server](/ai/mcp-server/overview) > > Let an agent create proxies, resolve geo targeting, set spend limits, and read usage. > [card] [LLM References](/ai/for-agents/llm-references) > > Our whole documentation portal as two machine-readable text files, following the llms.txt standard. > [card] [Docs MCP Server](/ai/for-agents/docs-mcp-server) > > Let an MCP client search this documentation live, instead of loading it into context. *** ## Which one do you need? The three are complementary, and most teams end up using more than one. | You want the agent to... | Use | | :- | :- | | Create and configure proxies, check balance, set limits | [MCP Server](/ai/mcp-server/overview) | | Know how 2extract works while building your tools | [LLM References](/ai/for-agents/llm-references) | | Look up an answer in our docs on demand | [Docs MCP Server](/ai/for-agents/docs-mcp-server) | The distinction that matters: the **MCP Server acts** - it changes things in your account and costs money. The other two only **read** - they are documentation in a shape a model can consume. *** ## What the MCP Server does Instead of clicking through the dashboard, you describe the job: > Collect gaming-laptop prices from Amazon in Germany, the UK and Japan. The agent resolves the countries, picks a plan, checks your balance, creates a proxy named after the task, sets a traffic cap, and hands back connection strings for each country - ready to paste into your tools. > [card] [Quick Start](/ai/mcp-server/quick-start) > > Connect your first client in about two minutes. > [card] [Usage Examples](/ai/mcp-server/usage-examples) > > Full sessions, from the request to the connection string. *** ## Supported clients Any client that speaks the Model Context Protocol over Streamable HTTP works. We keep setup guides for the most common ones: > [card] [Claude Code](/ai/clients/claude-code) > [card] [Claude Desktop](/ai/clients/claude-desktop) > [card] [Codex](/ai/clients/codex) > [card] [Gemini CLI](/ai/clients/gemini-cli) > [card] [OpenCode](/ai/clients/opencode) > [card] [Cursor](/ai/clients/cursor) > [card] [VS Code](/ai/clients/vs-code) > [card] [Windsurf](/ai/clients/windsurf) > [card] [Cline](/ai/clients/cline) > [card] [Other clients](/ai/clients/other) *** ## What it costs The MCP server itself is free. You pay for the proxies your agent creates, at the same pay-as-you-go rates as everything else - see [Billing & Usage](/guides/billing-usage). > [!WARNING] > > An agent with a `proxies:write` key can create billable resources on your account. Scope the API key to what the agent actually needs, and set a spend limit on every proxy. See [Provisioning & Cost Control](/ai/use-cases/provisioning-cost-control). # Agent Web Access Source: https://docs.2extract.com/ai/use-cases/agent-web-access Give an AI agent a way to read pages that block datacenter IPs, by letting it provision its own residential proxy. An agent with a browsing tool works fine until it meets a site that refuses cloud IP ranges. Then it gets a block page, reports back that the page was empty, and you spend an afternoon working out why. The fix is to route the agent's fetches through a residential IP. With the MCP server, the agent can set that up itself. *** ## The problem Most agent runtimes fetch from a datacenter: your CI runner, a cloud function, a hosted sandbox. A large share of commercial sites treat those ranges as automated traffic and respond with a block, a CAPTCHA, or a stripped-down page. What makes this expensive is that the agent usually cannot tell. It receives HTTP 200 and some HTML, and reports what it read. *** ## The setup Ask once, at the start of the session: > Before you fetch anything, create a residential proxy for browsing, cap it at 5 GB a month, and route your requests through it. The agent creates the resource, applies the cap, and hands back a connection string it can use for the rest of the run. ```text icon="terminal" theme={null} listProxyPlans ⌐ Pay-As-You-Go · residential getAccountBalance ⌐ $149.95 available createProxyResource ⌐ agent_browsing "General web access for research sessions" setProxyLimits ⌐ 5 GB per month https://2xt-customer-K3nP7qLm2Xv-proxy-agent_browsing:s7Kd92mQ@proxy.2extract.net:5555 ``` One proxy is usually enough. Add a country to the username when a site is region-locked - see [Geo Targeting](/proxy-products/configuration/geo-targeting). *** ## Sessions matter more than you expect A site that tolerates one request will often block the same client when the IP changes mid-flow. Anything with a login, a cart, or pagination needs the IP to stay put. Add a session parameter to the username and the exit IP holds: ``` ...-proxy-agent_browsing-session-run42-time-10:... ``` `session` is any identifier you choose; `time` is how many minutes to hold it. Full parameter reference under [Session Control](/proxy-products/configuration/session). > [!TIP] > > Give each agent run its own session ID. Two runs sharing one ID share one IP, and the rate limits that come with it. *** ## Keeping it contained An agent with web access and a proxy can reach anything, and it will keep going until something stops it. **Cap the spend.** Ask for a monthly ceiling when the proxy is created: > Create a browsing proxy and cap it at 5 GB a month. A runaway loop then stops at the cap instead of at your balance. This is the limit that actually holds - it is enforced on our side, not asked of the model. **Give the run its own proxy.** One proxy per agent run, rather than one shared across everything, means you can see exactly what that run consumed and deactivate it on its own when the job is done. *** ## Wiring it into a fetch Once the agent has the string, it goes wherever your runtime takes proxy settings: ```python fetch.py icon="python" theme={null} import requests PROXY = "https://2xt-customer-K3nP7qLm2Xv-proxy-agent_browsing-session-run42-time-10:s7Kd92mQ@proxy.2extract.net:5555" def fetch(url: str) -> str: r = requests.get(url, proxies={"http": PROXY, "https": PROXY}, timeout=30) r.raise_for_status() return r.text ``` ```javascript fetch.js icon="js" theme={null} import axios from "axios"; import { HttpsProxyAgent } from "https-proxy-agent"; const PROXY = "https://2xt-customer-K3nP7qLm2Xv-proxy-agent_browsing-session-run42-time-10:s7Kd92mQ@proxy.2extract.net:5555"; const agent = new HttpsProxyAgent(PROXY); export async function fetch(url) { const { data } = await axios.get(url, { httpsAgent: agent, timeout: 30000 }); return data; } ``` For a headless browser instead of an HTTP client, see the [Puppeteer](/integrations/frameworks/node-puppeteer) and [Playwright](/integrations/frameworks/node-playwright) guides. *** ## When this is the wrong tool Be honest about the boundary. A residential IP changes where the request appears to come from. It does not: * solve CAPTCHAs * make a headless browser look like a real one * get you past a login you do not have If you are getting CAPTCHAs rather than blocks, the fingerprint is the problem, not the IP - start with [Blocked or CAPTCHA](/help/common-problems/blocked-or-captcha). *** ## Next steps > [card] [Data Enrichment](/ai/use-cases/data-enrichment) > > Filling gaps in your own records from the open web. > [card] [Provisioning & Cost Control](/ai/use-cases/provisioning-cost-control) > > Keeping an agent's spending predictable. # Data Enrichment Source: https://docs.2extract.com/ai/use-cases/data-enrichment Fill gaps in your own records from public web sources, with an agent that provisions and manages the proxies for you. You have a table with holes in it: companies without an industry, products without a current price, contacts without a location. The data exists on the open web. Collecting it at any volume from one IP does not work. *** ## Why this needs proxies at all Enrichment is many small requests to the same few domains - exactly the shape rate limiters are built to catch. From a single IP you get maybe a few hundred rows before the responses turn into 429s and blocks. Spreading the requests across residential IPs turns the same job into ordinary traffic. *** ## The setup One proxy per source, so you can see per-source cost and stop one without touching the others: > I am enriching 40,000 company records from three sources. Create a proxy for each, name them after the source, cap each at 25 GB a month, and give me the connection strings. ```text icon="terminal" theme={null} getAccountBalance ⌐ $149.95 available createProxyResource ⌐ enrich_company_registry "Company registry lookups for the Q3 enrichment run" setProxyLimits ⌐ 25 GB per month createProxyResource ⌐ enrich_job_boards "Job board data collection, headcount and hiring signals" setProxyLimits ⌐ 25 GB per month createProxyResource ⌐ enrich_review_sites "Review site ratings and counts" setProxyLimits ⌐ 25 GB per month ``` Three separate resources rather than one shared proxy is the point: when the registry source starts blocking, you rotate that one and the other two keep running. > [!TIP] > > Ask the agent to write the run into the description - "Q3 enrichment run" - and you will still know what these were for when you find them next quarter. *** ## Rotating versus sticky Enrichment is the case where the default behaviour is what you want. Without a `session` parameter, each request gets a fresh IP - which is exactly right for independent lookups. Reach for a sticky session only when a single record needs several requests in sequence: a search, then a detail page, then a sub-page. Then hold the IP for that record and drop it: ``` ...-proxy-enrich_company_registry-session-rec_88412-time-2:... ``` Use the record ID as the session ID and a short TTL. See [Session Control](/proxy-products/configuration/session). *** ## Watching the cost while it runs Enrichment jobs have a habit of costing more than the estimate. Ask mid-run: > How much traffic and money have the three enrichment proxies used today? ```text icon="terminal" theme={null} getAccountTrafficUsage date_from: 2026-08-10 date_to: 2026-08-10 enrich_company_registry 4.2 GB $16.76 enrich_job_boards 11.8 GB $47.08 enrich_review_sites 1.1 GB $4.39 Total today: 17.1 GB · $68.23 ``` The job boards proxy is using three times the others. That is worth knowing on day one rather than at the invoice - usually it means a source is returning full pages where you only need a fragment. *** ## Country matters more than you think Many sources return different data by visitor location: local pricing, regional availability, translated fields. If your records are European, enriching them through US exit IPs quietly gives you the wrong values. Set the country in the username per batch: ``` ...-proxy-enrich_company_registry-country-de:... ``` One proxy covers every country you need - the country is a username parameter, not a property of the resource. *** ## When the run is done > The Q3 enrichment run is finished. Deactivate the three enrich\_ proxies. Deactivation stops the traffic and keeps the resource, so the next run reuses the same names and the same history. The agent will not delete them unless you explicitly ask. *** ## Next steps > [card] [Price Monitoring](/ai/use-cases/price-monitoring) > > The same shape, run on a schedule instead of once. > [card] [Provisioning & Cost Control](/ai/use-cases/provisioning-cost-control) > > Keeping a long job inside a budget. # Geo Verification Source: https://docs.2extract.com/ai/use-cases/geo-verification Check what your site, your search results, or your ads actually look like from another country - with an agent that resolves the targeting for you. Your site behaves differently depending on where the visitor is: currency, language, legal banners, available plans, which ads render. You cannot check any of that from your own desk. *** ## What this covers Three jobs that are the same job underneath - look at something from somewhere else: * **Localisation QA.** Does the German site actually show euros, and does the cookie banner appear where it must? * **Search and marketplace results.** What ranks in Brazil, what your competitors' listings look like there. * **Ad verification.** Which creatives run in which market, and whether your placements appear at all. *** ## The setup > I need to check how our site renders in Germany, Brazil and Japan. ```text icon="terminal" theme={null} listGeoCountries ⌐ DE · BR · JP createProxyResource ⌐ geo_qa "Localisation QA across DE, BR and JP" setProxyLimits ⌐ 5 GB per month DE 2xt-customer-K3nP7qLm2Xv-proxy-geo_qa-country-de:s7Kd92mQ@proxy.2extract.net:5555 BR 2xt-customer-K3nP7qLm2Xv-proxy-geo_qa-country-br:s7Kd92mQ@proxy.2extract.net:5555 JP 2xt-customer-K3nP7qLm2Xv-proxy-geo_qa-country-jp:s7Kd92mQ@proxy.2extract.net:5555 ``` Verification traffic is light - you are loading pages, not harvesting a catalogue - so a small cap is realistic. *** ## Hold the IP for the whole check This is the one case where a sticky session is not optional. A localisation check is a sequence: land on the page, accept the banner, switch a filter, look at checkout. If the exit IP changes halfway, the site may re-detect the location and reset everything you just did. ``` ...-proxy-geo_qa-country-de-session-qa_de_run1-time-30:... ``` A 30-minute TTL comfortably covers a manual pass. See [Session Control](/proxy-products/configuration/session). > [!WARNING] > > Use a different session ID per country. Reusing one ID across markets means reusing one IP, and the second check reports the first country's results. *** ## In a headless browser Most verification is visual, so a browser beats an HTTP client: ```javascript verify.js icon="js" theme={null} import { chromium } from "playwright"; const BASE = "2xt-customer-K3nP7qLm2Xv-proxy-geo_qa"; const PASSWORD = "s7Kd92mQ"; async function checkMarket(country) { const browser = await chromium.launch({ proxy: { server: "http://proxy.2extract.net:5555", username: `${BASE}-country-${country}-session-qa_${country}-time-30`, password: PASSWORD, }, }); const page = await browser.newPage(); await page.goto("https://example.com"); await page.screenshot({ path: `market-${country}.png`, fullPage: true }); await browser.close(); } for (const country of ["de", "br", "jp"]) { await checkMarket(country); } ``` Three screenshots, three markets, one proxy. Full setup notes in the [Playwright guide](/integrations/frameworks/node-playwright). *** ## Going city-level Ad targeting and delivery promises are often set below the country. Ask the agent to resolve it: > Same check, but from São Paulo. ```text icon="terminal" theme={null} searchGeoCities country_code: "BR", search: "Sao Paulo" ⌐ Sao Paulo · sao_paulo ...-proxy-geo_qa-country-br-city-sao_paulo-session-qa_br_sp-time-30:... ``` Region and ZIP targeting work the same way. Which countries support which level is listed under [Geo Reference](/data/cities). *** ## Reading the result honestly Two things trip people up. **IP geolocation databases disagree.** Two "where am I" services can report different cities for the same IP. What matters is what your target site concludes, not what a checker says - see [My IP location is incorrect](/help/common-problems/ip-location-incorrect). **The IP is not the only signal.** Sites also read `Accept-Language`, the timezone your browser reports, and any stored preference. If a page still renders in English through a German IP, check the browser locale before blaming the proxy. > [!TIP] > > Set the browser locale and timezone to match the market. In Playwright: `chromium.launch({ ... })` then `browser.newContext({ locale: "de-DE", timezoneId: "Europe/Berlin" })`. *** ## Next steps > [card] [Price Monitoring](/ai/use-cases/price-monitoring) > > The same geo mechanics, run on a schedule. > [card] [Agent Web Access](/ai/use-cases/agent-web-access) > > Giving an agent general reading access to the web. # Price Monitoring Source: https://docs.2extract.com/ai/use-cases/price-monitoring Track prices across regions and marketplaces, with an agent that sets up the geo-targeted proxies for each market. Prices differ by country, and marketplaces show you the ones for wherever they think you are. Checking a competitor's German pricing from a US IP gives you the US answer. This is the case the MCP server handles best, because the hard part - working out which country codes exist and how to encode them - is exactly what the agent is good at. *** ## The setup > Collect gaming-laptop prices from Amazon in Germany, the UK and Japan. ```text icon="terminal" theme={null} listGeoCountries ⌐ DE · GB · JP listProxyPlans ⌐ Pay-As-You-Go · residential getAccountBalance ⌐ $149.95 available createProxyResource ⌐ amazon_gaming_laptops "Price tracking for gaming laptops on Amazon DE, GB and JP" setProxyLimits ⌐ 50 GB per month DE 2xt-customer-K3nP7qLm2Xv-proxy-amazon_gaming_laptops-country-de:s7Kd92mQ@proxy.2extract.net:5555 GB 2xt-customer-K3nP7qLm2Xv-proxy-amazon_gaming_laptops-country-gb:s7Kd92mQ@proxy.2extract.net:5555 JP 2xt-customer-K3nP7qLm2Xv-proxy-amazon_gaming_laptops-country-jp:s7Kd92mQ@proxy.2extract.net:5555 ``` **One proxy, three markets.** The country lives in the username, so adding a fourth market later costs nothing - the agent just hands you another string. *** ## Wiring it into a scheduled job ```python monitor.py icon="python" theme={null} import requests BASE = "2xt-customer-K3nP7qLm2Xv-proxy-amazon_gaming_laptops" PASSWORD = "s7Kd92mQ" HOST = "proxy.2extract.net:5555" MARKETS = { "de": "https://www.amazon.de/s?k=gaming+laptop", "gb": "https://www.amazon.co.uk/s?k=gaming+laptop", "jp": "https://www.amazon.co.jp/s?k=gaming+laptop", } def fetch(country: str, url: str) -> str: proxy = f"http://{BASE}-country-{country}:{PASSWORD}@{HOST}" r = requests.get(url, proxies={"http": proxy, "https": proxy}, timeout=30) r.raise_for_status() return r.text for country, url in MARKETS.items(): html = fetch(country, url) # parse and store ``` Adding a market is one line in `MARKETS` - see the [country list](/data/countries) for available codes. *** ## Going below country level National pricing is often the same everywhere; delivery estimates, stock, and local promotions are not. Narrow down when that matters: > I need the same check from Munich specifically. ```text icon="terminal" theme={null} searchGeoCities country_code: "DE", search: "Munich" ⌐ Munich · munich ...-proxy-amazon_gaming_laptops-country-de-city-munich:... ``` City targeting needs the country in the same username. Region and ZIP work the same way - see [Geo Targeting](/proxy-products/configuration/geo-targeting). *** ## Sessions: usually not what you want Price checks are independent requests, so let each one take a fresh IP. That is the default with no `session` parameter, and it spreads the load naturally. Use a session only for flows that break when the IP changes - adding to a cart to reveal a discounted price, or paginating through a result set that keeps server-side state. Then hold it briefly: ``` ...-country-de-session-cart_check-time-5:... ``` *** ## Keeping the bill flat Monitoring runs on a schedule, so cost is a rate, not a one-off. Two habits keep it predictable. **A cap that matches the schedule.** Four runs a day at \~120 MB each is roughly 15 GB a month. Set the ceiling a little above that: > Cap the Amazon proxy at 20 GB a month. If the site changes and pages get heavier, you hit the cap and the proxy stops - rather than quietly tripling the bill. **A monthly review.** Ask, or run the `/monthly-cost-report` prompt: > Show traffic and spend for the price-monitoring proxies last month. > [!TIP] > > Fetching only the search result page rather than every product page is usually the difference between 15 GB and 150 GB a month. Bandwidth is what you pay for. *** ## Next steps > [card] [Geo Verification](/ai/use-cases/geo-verification) > > Checking how a site renders in a given market. > [card] [Provisioning & Cost Control](/ai/use-cases/provisioning-cost-control) > > Budgets, caps, and cleaning up what you stopped using. # Provisioning & Cost Control Source: https://docs.2extract.com/ai/use-cases/provisioning-cost-control Let an agent create and retire proxies for you without letting it surprise you on the invoice. Handing an agent a `proxies:write` key means handing it the ability to spend money. That is the point - it is also the risk. This page is about keeping both. *** ## The one thing that actually protects you Not prompt wording. **A limit on every proxy.** `setProxyLimits` puts a hard ceiling on a proxy. When traffic crosses it, the proxy is suspended in the background and stops passing traffic. A runaway loop hits the cap instead of your balance. > Create the proxy and cap it at 20 GB a month. Said in the same sentence as the creation request, the cap is applied immediately rather than after the first surprise. | Limit type | Unit | Good for | | :- | :- | :- | | `traffic` | bytes | Predictable jobs where you know the page weight | | `money` | USD | When you care about the invoice, not the gigabytes | Both accept `daily` or `monthly`. Daily caps are the better choice for anything an agent drives unattended - the blast radius of a bad loop is one day, not one month. > [!WARNING] > > A limit is not checked when you set it. It takes effect when usage crosses the line, which means a single very fast run can overshoot slightly before the suspension lands. Set the cap below the number that would actually hurt. *** ## Scope the key to the job An agent that only reads cannot spend anything. Match the key to the work: | The agent should... | Scopes | | :- | :- | | Report on usage and cost only | `proxies:read`, `balance:read`, `stats:read` | | Also look up geo data | add `geo:read` | | Also create and configure proxies | add `proxies:write` | Keep a separate read-only key for reporting agents and dashboards. Revoking it later costs nothing. > [!WARNING] > > `proxies:write` also permits deletion. `deleteProxyResource` is marked destructive and carries a `confirm` parameter, but that protection lives in your client, not on our side. If deletion would be unacceptable, do not issue a write key. *** ## A naming convention that pays off Proxy names are immutable, so the name the agent picks is the name you live with. Ask for a pattern: > Name proxies `_` - for example `q3_enrichment_registry`. Six weeks later, `listProxyResources` reads as an inventory instead of a puzzle. Names take lowercase letters, digits and underscores only - no hyphens, because hyphens separate parameters in the connection username. The description is free text and can be changed, so put the context there: what the proxy is for, which run, who asked for it. *** ## Reviewing what it spent Ask, or use the `/monthly-cost-report` prompt: > Show traffic and spend for last month and flag anything unusual. ```text icon="terminal" theme={null} getAccountTrafficUsage date_from: 2026-07-01 date_to: 2026-07-31 listAccountBalanceHistory date_from: 2026-07-01 date_to: 2026-07-31 July 2026 · 412 GB · $1,644.88 amazon_gaming_laptops 186 GB $742.14 bestbuy_stock_us 94 GB $375.06 serp_us_daily 88 GB $351.12 local_seo_de 44 GB $175.56 legacy_test_proxy 0 GB $0.00 idle 41 days Balance $149.95 - about 37 GB at your current rate. ``` The runway line is the useful part: not what you spent, but how long the balance lasts at the current rate. *** ## Retiring what you stopped using Idle proxies do not cost anything directly, but they hide the ones that do. Clean up on a schedule: > Find proxies with no traffic in the last 30 days and deactivate them. Or run `/cleanup-unused-proxies`, which does the same and is hard-wired never to delete. > [!TIP] > > **Deactivate, do not delete.** Deactivation stops traffic and is reversible - set the status back to `active` and the proxy resumes with the same name, same credentials, same history. Deletion is permanent, and the name cannot be reused the same way. *** ## A workable default **1. Two keys** A read-only key for reporting agents, a write key only for the agent that provisions. **2. A cap on every proxy at creation** Daily for anything unattended, monthly for scheduled jobs you understand well. **3. Names that carry the project** `_`, agreed once and repeated in every request. **4. One proxy per project, not one shared** Per-project resources make the cost report readable, and let you stop one job without touching the others. **5. A monthly review and cleanup** One report, one cleanup pass, and idle resources stop accumulating. *** ## Next steps > [card] [FAQ](/ai/mcp-server/faq) > > What each error code means, and what an agent can and cannot do. > [card] [Billing & Usage](/guides/billing-usage) > > How pricing and the account balance work. # City List Source: https://docs.2extract.com/data/cities Countries with city-level targeting available. Select a country to view its full list of cities and parameter values. City targeting (`-city-[slug]`) is available for the countries below. Requires `-country-[code]` in the same username. See [Geo Targeting](/proxy-products/configuration/geo-targeting) for the full parameter reference. | Country | Cities | | - | - | | Afghanistan | [6 cities](/data/cities/af) | | Albania | [24 cities](/data/cities/al) | | Algeria | [120 cities](/data/cities/dz) | | American Samoa | [2 cities](/data/cities/as) | | Andorra | [3 cities](/data/cities/ad) | | Angola | [9 cities](/data/cities/ao) | | Antigua and Barbuda | [1 cities](/data/cities/ag) | | Argentina | [526 cities](/data/cities/ar) | | Armenia | [16 cities](/data/cities/am) | | Australia | [220 cities](/data/cities/au) | | Austria | [185 cities](/data/cities/at) | | Azerbaijan | [5 cities](/data/cities/az) | | Bahrain | [12 cities](/data/cities/bh) | | Bangladesh | [88 cities](/data/cities/bd) | | Barbados | [3 cities](/data/cities/bb) | | Belarus | [27 cities](/data/cities/by) | | Belgium | [439 cities](/data/cities/be) | | Belize | [10 cities](/data/cities/bz) | | Benin | [4 cities](/data/cities/bj) | | Bermuda | [8 cities](/data/cities/bm) | | Bhutan | [2 cities](/data/cities/bt) | | Bolivia | [16 cities](/data/cities/bo) | | Bosnia and Herzegovina | [79 cities](/data/cities/ba) | | Botswana | [3 cities](/data/cities/bw) | | Brazil | [2842 cities](/data/cities/br) | | Brunei | [3 cities](/data/cities/bn) | | Bulgaria | [211 cities](/data/cities/bg) | | Burkina Faso | [2 cities](/data/cities/bf) | | Burundi | [2 cities](/data/cities/bi) | | Cambodia | [5 cities](/data/cities/kh) | | Cameroon | [2 cities](/data/cities/cm) | | Canada | [1307 cities](/data/cities/ca) | | Cape Verde | [8 cities](/data/cities/cv) | | Caribbean Netherlands | [2 cities](/data/cities/bq) | | Central African Republic | [1 cities](/data/cities/cf) | | Chad | [1 cities](/data/cities/td) | | Chile | [198 cities](/data/cities/cl) | | China | [477 cities](/data/cities/cn) | | Colombia | [242 cities](/data/cities/co) | | Comoros | [1 cities](/data/cities/km) | | Costa Rica | [32 cities](/data/cities/cr) | | Cote d'Ivoire | [6 cities](/data/cities/ci) | | Croatia | [61 cities](/data/cities/hr) | | Cuba | [5 cities](/data/cities/cu) | | Cyprus | [7 cities](/data/cities/cy) | | Czechia | [467 cities](/data/cities/cz) | | Democratic Republic of the Congo | [4 cities](/data/cities/cd) | | Denmark | [133 cities](/data/cities/dk) | | Djibouti | [3 cities](/data/cities/dj) | | Dominica | [3 cities](/data/cities/dm) | | Dominican Republic | [51 cities](/data/cities/do) | | Ecuador | [116 cities](/data/cities/ec) | | Egypt | [117 cities](/data/cities/eg) | | El Salvador | [10 cities](/data/cities/sv) | | Equatorial Guinea | [3 cities](/data/cities/gq) | | Eritrea | [1 cities](/data/cities/er) | | Estonia | [40 cities](/data/cities/ee) | | Eswatini | [4 cities](/data/cities/sz) | | Ethiopia | [13 cities](/data/cities/et) | | Fiji | [2 cities](/data/cities/fj) | | Finland | [68 cities](/data/cities/fi) | | France | [4086 cities](/data/cities/fr) | | French Polynesia | [2 cities](/data/cities/pf) | | Gabon | [1 cities](/data/cities/ga) | | Georgia | [20 cities](/data/cities/ge) | | Germany | [1773 cities](/data/cities/de) | | Ghana | [7 cities](/data/cities/gh) | | Greece | [106 cities](/data/cities/gr) | | Greenland | [1 cities](/data/cities/gl) | | Grenada | [6 cities](/data/cities/gd) | | Guatemala | [9 cities](/data/cities/gt) | | Guinea | [1 cities](/data/cities/gn) | | Guinea-Bissau | [1 cities](/data/cities/gw) | | Guyana | [4 cities](/data/cities/gy) | | Haiti | [2 cities](/data/cities/ht) | | Honduras | [26 cities](/data/cities/hn) | | Hong Kong | [75 cities](/data/cities/hk) | | Hungary | [347 cities](/data/cities/hu) | | Iceland | [8 cities](/data/cities/is) | | India | [1136 cities](/data/cities/in) | | Indonesia | [234 cities](/data/cities/id) | | Iran | [35 cities](/data/cities/ir) | | Iraq | [26 cities](/data/cities/iq) | | Ireland | [185 cities](/data/cities/ie) | | Israel | [161 cities](/data/cities/il) | | Italy | [1405 cities](/data/cities/it) | | Jamaica | [19 cities](/data/cities/jm) | | Japan | [1607 cities](/data/cities/jp) | | Jordan | [8 cities](/data/cities/jo) | | Kazakhstan | [48 cities](/data/cities/kz) | | Kenya | [19 cities](/data/cities/ke) | | Kiribati | [1 cities](/data/cities/ki) | | Kuwait | [9 cities](/data/cities/kw) | | Kyrgyzstan | [10 cities](/data/cities/kg) | | Laos | [6 cities](/data/cities/la) | | Latvia | [34 cities](/data/cities/lv) | | Lebanon | [19 cities](/data/cities/lb) | | Lesotho | [1 cities](/data/cities/ls) | | Liberia | [1 cities](/data/cities/lr) | | Libya | [5 cities](/data/cities/ly) | | Liechtenstein | [2 cities](/data/cities/li) | | Lithuania | [50 cities](/data/cities/lt) | | Luxembourg | [7 cities](/data/cities/lu) | | Malawi | [2 cities](/data/cities/mw) | | Malaysia | [144 cities](/data/cities/my) | | Maldives | [2 cities](/data/cities/mv) | | Mali | [2 cities](/data/cities/ml) | | Malta | [48 cities](/data/cities/mt) | | Marshall Islands | [1 cities](/data/cities/mh) | | Mauritius | [33 cities](/data/cities/mu) | | Mexico | [573 cities](/data/cities/mx) | | Moldova | [84 cities](/data/cities/md) | | Mongolia | [2 cities](/data/cities/mn) | | Montenegro | [12 cities](/data/cities/me) | | Morocco | [50 cities](/data/cities/ma) | | Mozambique | [8 cities](/data/cities/mz) | | Myanmar (Burma) | [10 cities](/data/cities/mm) | | Namibia | [9 cities](/data/cities/na) | | Nauru | [1 cities](/data/cities/nr) | | Nepal | [30 cities](/data/cities/np) | | Netherlands | [567 cities](/data/cities/nl) | | New Caledonia | [3 cities](/data/cities/nc) | | New Zealand | [47 cities](/data/cities/nz) | | Nicaragua | [5 cities](/data/cities/ni) | | Niger | [2 cities](/data/cities/ne) | | Nigeria | [15 cities](/data/cities/ng) | | North Macedonia | [30 cities](/data/cities/mk) | | Northern Mariana Islands | [1 cities](/data/cities/mp) | | Norway | [192 cities](/data/cities/no) | | Oman | [11 cities](/data/cities/om) | | Pakistan | [123 cities](/data/cities/pk) | | Palau | [3 cities](/data/cities/pw) | | Palestine | [10 cities](/data/cities/ps) | | Panama | [3 cities](/data/cities/pa) | | Papua New Guinea | [1 cities](/data/cities/pg) | | Paraguay | [33 cities](/data/cities/py) | | Peru | [98 cities](/data/cities/pe) | | Philippines | [344 cities](/data/cities/ph) | | Poland | [962 cities](/data/cities/pl) | | Portugal | [412 cities](/data/cities/pt) | | Qatar | [2 cities](/data/cities/qa) | | Republic of the Congo | [5 cities](/data/cities/cg) | | Romania | [219 cities](/data/cities/ro) | | Russia | [1768 cities](/data/cities/ru) | | Rwanda | [3 cities](/data/cities/rw) | | Saint Kitts and Nevis | [3 cities](/data/cities/kn) | | Saint Lucia | [4 cities](/data/cities/lc) | | Saint Pierre and Miquelon | [1 cities](/data/cities/pm) | | Saint Vincent and the Grenadines | [1 cities](/data/cities/vc) | | Samoa | [1 cities](/data/cities/ws) | | San Marino | [2 cities](/data/cities/sm) | | Sao Tome and Principe | [1 cities](/data/cities/st) | | Saudi Arabia | [26 cities](/data/cities/sa) | | Senegal | [6 cities](/data/cities/sn) | | Serbia | [112 cities](/data/cities/rs) | | Seychelles | [1 cities](/data/cities/sc) | | Sierra Leone | [1 cities](/data/cities/sl) | | Slovakia | [248 cities](/data/cities/sk) | | Slovenia | [77 cities](/data/cities/si) | | Solomon Islands | [1 cities](/data/cities/sb) | | Somalia | [6 cities](/data/cities/so) | | South Africa | [146 cities](/data/cities/za) | | South Korea | [272 cities](/data/cities/kr) | | South Sudan | [3 cities](/data/cities/ss) | | Spain | [1577 cities](/data/cities/es) | | Sri Lanka | [38 cities](/data/cities/lk) | | Sudan | [2 cities](/data/cities/sd) | | Suriname | [5 cities](/data/cities/sr) | | Sweden | [189 cities](/data/cities/se) | | Switzerland | [207 cities](/data/cities/ch) | | Syria | [5 cities](/data/cities/sy) | | Tadjikistan | [5 cities](/data/cities/tj) | | Taiwan | [183 cities](/data/cities/tw) | | Tanzania | [12 cities](/data/cities/tz) | | Thailand | [240 cities](/data/cities/th) | | The Bahamas | [7 cities](/data/cities/bs) | | The Gambia | [3 cities](/data/cities/gm) | | Timor-Leste | [1 cities](/data/cities/tl) | | Togo | [2 cities](/data/cities/tg) | | Tonga | [1 cities](/data/cities/to) | | Trinidad and Tobago | [42 cities](/data/cities/tt) | | Tunisia | [79 cities](/data/cities/tn) | | Turkey | [409 cities](/data/cities/tr) | | Turkmenistan | [3 cities](/data/cities/tm) | | U.S. Virgin Islands | [3 cities](/data/cities/vi) | | Uganda | [1 cities](/data/cities/ug) | | Ukraine | [404 cities](/data/cities/ua) | | United Arab Emirates | [9 cities](/data/cities/ae) | | United Kingdom | [1486 cities](/data/cities/gb) | | United States | [9024 cities](/data/cities/us) | | Uruguay | [35 cities](/data/cities/uy) | | Uzbekistan | [10 cities](/data/cities/uz) | | Vanuatu | [1 cities](/data/cities/vu) | | Venezuela | [79 cities](/data/cities/ve) | | Vietnam | [186 cities](/data/cities/vn) | | Wallis and Futuna | [1 cities](/data/cities/wf) | | Yemen | [4 cities](/data/cities/ye) | | Zambia | [1 cities](/data/cities/zm) | | Zimbabwe | [1 cities](/data/cities/zw) | # Country List Source: https://docs.2extract.com/data/countries Full list of countries available for geo-targeting, with the parameter value to use in the proxy connection username. Use the value from the **Parameter** column as the `[code]` in `-country-[code]` when building your proxy connection username. See [Geo Targeting](/proxy-products/configuration/geo-targeting) for the full parameter reference. | Country | Parameter (`-country-`) | | - | - | | Afghanistan | `af` | | Aland Islands | `ax` | | Albania | `al` | | Algeria | `dz` | | American Samoa | `as` | | Andorra | `ad` | | Angola | `ao` | | Anguilla | `ai` | | Antarctica | `aq` | | Antigua and Barbuda | `ag` | | Argentina | `ar` | | Armenia | `am` | | Aruba | `aw` | | Australia | `au` | | Austria | `at` | | Azerbaijan | `az` | | Bahrain | `bh` | | Bangladesh | `bd` | | Barbados | `bb` | | Belarus | `by` | | Belgium | `be` | | Belize | `bz` | | Benin | `bj` | | Bermuda | `bm` | | Bhutan | `bt` | | Bolivia | `bo` | | Bosnia and Herzegovina | `ba` | | Botswana | `bw` | | Bouvet Island | `bv` | | Brazil | `br` | | British Indian Ocean Territory | `io` | | British Virgin Islands | `vg` | | Brunei | `bn` | | Bulgaria | `bg` | | Burkina Faso | `bf` | | Burundi | `bi` | | Cambodia | `kh` | | Cameroon | `cm` | | Canada | `ca` | | Cape Verde | `cv` | | Caribbean Netherlands | `bq` | | Cayman Islands | `ky` | | Central African Republic | `cf` | | Chad | `td` | | Chile | `cl` | | China | `cn` | | Christmas Island | `cx` | | Cocos (Keeling) Islands | `cc` | | Colombia | `co` | | Comoros | `km` | | Cook Islands | `ck` | | Costa Rica | `cr` | | Cote d'Ivoire | `ci` | | Croatia | `hr` | | Cuba | `cu` | | Curacao | `cw` | | Cyprus | `cy` | | Czechia | `cz` | | Democratic Republic of the Congo | `cd` | | Denmark | `dk` | | Djibouti | `dj` | | Dominica | `dm` | | Dominican Republic | `do` | | Ecuador | `ec` | | Egypt | `eg` | | El Salvador | `sv` | | England | `en` | | Equatorial Guinea | `gq` | | Eritrea | `er` | | Estonia | `ee` | | Eswatini | `sz` | | Ethiopia | `et` | | Falkland Islands (Islas Malvinas) | `fk` | | Faroe Islands | `fo` | | Fiji | `fj` | | Finland | `fi` | | France | `fr` | | French Guiana | `gf` | | French Polynesia | `pf` | | French Southern and Antarctic Lands | `tf` | | Gabon | `ga` | | Georgia | `ge` | | Germany | `de` | | Ghana | `gh` | | Gibraltar | `gi` | | Greece | `gr` | | Greenland | `gl` | | Grenada | `gd` | | Guadeloupe | `gp` | | Guam | `gu` | | Guatemala | `gt` | | Guernsey | `gg` | | Guinea | `gn` | | Guinea-Bissau | `gw` | | Guyana | `gy` | | Haiti | `ht` | | Heard Island and McDonald Islands | `hm` | | Honduras | `hn` | | Hong Kong | `hk` | | Hungary | `hu` | | Iceland | `is` | | India | `in` | | Indonesia | `id` | | Iran | `ir` | | Iraq | `iq` | | Ireland | `ie` | | Isle of Man | `im` | | Israel | `il` | | Italy | `it` | | Jamaica | `jm` | | Japan | `jp` | | Jersey | `je` | | Jordan | `jo` | | Kazakhstan | `kz` | | Kenya | `ke` | | Kiribati | `ki` | | Kosovo | `xk` | | Kuwait | `kw` | | Kyrgyzstan | `kg` | | Laos | `la` | | Latvia | `lv` | | Lebanon | `lb` | | Lesotho | `ls` | | Liberia | `lr` | | Libya | `ly` | | Liechtenstein | `li` | | Lithuania | `lt` | | Luxembourg | `lu` | | Macao | `mo` | | Madagascar | `mg` | | Malawi | `mw` | | Malaysia | `my` | | Maldives | `mv` | | Mali | `ml` | | Malta | `mt` | | Marshall Islands | `mh` | | Martinique | `mq` | | Mauritania | `mr` | | Mauritius | `mu` | | Mayotte | `yt` | | Mexico | `mx` | | Micronesia | `fm` | | Moldova | `md` | | Monaco | `mc` | | Mongolia | `mn` | | Montenegro | `me` | | Montserrat | `ms` | | Morocco | `ma` | | Mozambique | `mz` | | Myanmar (Burma) | `mm` | | Namibia | `na` | | Nauru | `nr` | | Nepal | `np` | | Netherlands | `nl` | | New Caledonia | `nc` | | New Zealand | `nz` | | Nicaragua | `ni` | | Niger | `ne` | | Nigeria | `ng` | | Niue | `nu` | | Norfolk Island | `nf` | | North Korea | `kp` | | North Macedonia | `mk` | | Northern Mariana Islands | `mp` | | Norway | `no` | | Oman | `om` | | Pakistan | `pk` | | Palau | `pw` | | Palestine | `ps` | | Panama | `pa` | | Papua New Guinea | `pg` | | Paraguay | `py` | | Peru | `pe` | | Philippines | `ph` | | Pitcairn Islands | `pn` | | Poland | `pl` | | Portugal | `pt` | | Puerto Rico | `pr` | | Qatar | `qa` | | Republic of the Congo | `cg` | | Reunion | `re` | | Romania | `ro` | | Russia | `ru` | | Rwanda | `rw` | | Saint Barthelemy | `bl` | | Saint Kitts and Nevis | `kn` | | Saint Lucia | `lc` | | Saint Martin | `mf` | | Saint Pierre and Miquelon | `pm` | | Saint Vincent and the Grenadines | `vc` | | Samoa | `ws` | | San Marino | `sm` | | Sao Tome and Principe | `st` | | Saudi Arabia | `sa` | | Senegal | `sn` | | Serbia | `rs` | | Seychelles | `sc` | | Sierra Leone | `sl` | | Singapore | `sg` | | Sint Maarten | `sx` | | Slovakia | `sk` | | Slovenia | `si` | | Solomon Islands | `sb` | | Somalia | `so` | | South Africa | `za` | | South Georgia and the South Sandwich Islands | `gs` | | South Korea | `kr` | | South Sudan | `ss` | | Spain | `es` | | Sri Lanka | `lk` | | Sudan | `sd` | | Suriname | `sr` | | Svalbard and Jan Mayen | `sj` | | Sweden | `se` | | Switzerland | `ch` | | Syria | `sy` | | Tadjikistan | `tj` | | Taiwan | `tw` | | Tanzania | `tz` | | Thailand | `th` | | The Bahamas | `bs` | | The Gambia | `gm` | | Timor-Leste | `tl` | | Togo | `tg` | | Tokelau | `tk` | | Tonga | `to` | | Trinidad and Tobago | `tt` | | Tunisia | `tn` | | Turkey | `tr` | | Turkmenistan | `tm` | | Turks and Caicos Islands | `tc` | | Tuvalu | `tv` | | U.S. Virgin Islands | `vi` | | Uganda | `ug` | | Ukraine | `ua` | | United Arab Emirates | `ae` | | United Kingdom | `gb` | | United States | `us` | | Uruguay | `uy` | | Uzbekistan | `uz` | | Vanuatu | `vu` | | Vatican City | `va` | | Venezuela | `ve` | | Vietnam | `vn` | | Wallis and Futuna | `wf` | | Western Sahara | `eh` | | Yemen | `ye` | | Zambia | `zm` | | Zimbabwe | `zw` | # ISP List Source: https://docs.2extract.com/data/isp Mobile ISP/carrier catalog for -isp- targeting (mobile proxies only). Browse alphabetically. ISP targeting (`-isp-[code]`) selects a specific mobile carrier network. Available on **mobile proxies only**, and mutually exclusive with all geographic parameters (`-country`, `-state`, `-city`, `-zip`). See [Geo Targeting](/proxy-products/configuration/geo-targeting) for the full parameter reference. | Group | Entries | | - | - | | A | [9348 entries](/data/isp/a) | | B | [4841 entries](/data/isp/b) | | C | [9570 entries](/data/isp/c) | | D | [4575 entries](/data/isp/d) | | E | [4052 entries](/data/isp/e) | | F | [4221 entries](/data/isp/f) | | G | [4193 entries](/data/isp/g) | | H | [3063 entries](/data/isp/h) | | I | [6463 entries](/data/isp/i) | | J | [2054 entries](/data/isp/j) | | K | [2579 entries](/data/isp/k) | | L | [4328 entries](/data/isp/l) | | M | [6797 entries](/data/isp/m) | | N | [6061 entries](/data/isp/n) | | O | [2842 entries](/data/isp/o) | | P | [7605 entries](/data/isp/p) | | Q | [483 entries](/data/isp/q) | | R | [3916 entries](/data/isp/r) | | S | [10781 entries](/data/isp/s) | | T | [6786 entries](/data/isp/t) | | U | [2920 entries](/data/isp/u) | | V | [3192 entries](/data/isp/v) | | W | [3081 entries](/data/isp/w) | | X | [446 entries](/data/isp/x) | | Y | [543 entries](/data/isp/y) | | Z | [893 entries](/data/isp/z) | | 0-9 | [818 entries](/data/isp/0-9) | | Other | [55 entries](/data/isp/other) | # State List Source: https://docs.2extract.com/data/states Countries with region/state-level targeting available. Select a country to view its full list of regions and parameter values. Region/state targeting (`-state-[slug]`) is available for the countries below. Requires `-country-[code]` in the same username. See [Geo Targeting](/proxy-products/configuration/geo-targeting) for the full parameter reference. | Country | Regions | | - | - | | Afghanistan | [6 region(s)](/data/regions/af) | | Albania | [12 region(s)](/data/regions/al) | | Algeria | [42 region(s)](/data/regions/dz) | | American Samoa | [2 region(s)](/data/regions/as) | | Andorra | [2 region(s)](/data/regions/ad) | | Angola | [8 region(s)](/data/regions/ao) | | Antigua and Barbuda | [1 region(s)](/data/regions/ag) | | Argentina | [24 region(s)](/data/regions/ar) | | Armenia | [8 region(s)](/data/regions/am) | | Australia | [8 region(s)](/data/regions/au) | | Austria | [9 region(s)](/data/regions/at) | | Azerbaijan | [6 region(s)](/data/regions/az) | | Bahrain | [4 region(s)](/data/regions/bh) | | Bangladesh | [8 region(s)](/data/regions/bd) | | Barbados | [3 region(s)](/data/regions/bb) | | Belarus | [7 region(s)](/data/regions/by) | | Belgium | [3 region(s)](/data/regions/be) | | Belize | [5 region(s)](/data/regions/bz) | | Benin | [4 region(s)](/data/regions/bj) | | Bermuda | [7 region(s)](/data/regions/bm) | | Bhutan | [2 region(s)](/data/regions/bt) | | Bolivia | [9 region(s)](/data/regions/bo) | | Bosnia and Herzegovina | [3 region(s)](/data/regions/ba) | | Botswana | [3 region(s)](/data/regions/bw) | | Brazil | [27 region(s)](/data/regions/br) | | Brunei | [2 region(s)](/data/regions/bn) | | Bulgaria | [28 region(s)](/data/regions/bg) | | Burkina Faso | [2 region(s)](/data/regions/bf) | | Burundi | [2 region(s)](/data/regions/bi) | | Cambodia | [4 region(s)](/data/regions/kh) | | Cameroon | [2 region(s)](/data/regions/cm) | | Canada | [13 region(s)](/data/regions/ca) | | Cape Verde | [7 region(s)](/data/regions/cv) | | Caribbean Netherlands | [3 region(s)](/data/regions/bq) | | Central African Republic | [1 region(s)](/data/regions/cf) | | Chad | [1 region(s)](/data/regions/td) | | Chile | [16 region(s)](/data/regions/cl) | | China | [31 region(s)](/data/regions/cn) | | Colombia | [30 region(s)](/data/regions/co) | | Comoros | [1 region(s)](/data/regions/km) | | Costa Rica | [6 region(s)](/data/regions/cr) | | Cote d'Ivoire | [3 region(s)](/data/regions/ci) | | Croatia | [20 region(s)](/data/regions/hr) | | Cuba | [5 region(s)](/data/regions/cu) | | Cyprus | [5 region(s)](/data/regions/cy) | | Czechia | [14 region(s)](/data/regions/cz) | | Democratic Republic of the Congo | [4 region(s)](/data/regions/cd) | | Denmark | [5 region(s)](/data/regions/dk) | | Djibouti | [3 region(s)](/data/regions/dj) | | Dominica | [3 region(s)](/data/regions/dm) | | Dominican Republic | [28 region(s)](/data/regions/do) | | Ecuador | [24 region(s)](/data/regions/ec) | | Egypt | [25 region(s)](/data/regions/eg) | | El Salvador | [6 region(s)](/data/regions/sv) | | Equatorial Guinea | [3 region(s)](/data/regions/gq) | | Eritrea | [1 region(s)](/data/regions/er) | | Estonia | [15 region(s)](/data/regions/ee) | | Eswatini | [3 region(s)](/data/regions/sz) | | Ethiopia | [9 region(s)](/data/regions/et) | | Fiji | [2 region(s)](/data/regions/fj) | | Finland | [18 region(s)](/data/regions/fi) | | France | [13 region(s)](/data/regions/fr) | | French Polynesia | [1 region(s)](/data/regions/pf) | | Gabon | [1 region(s)](/data/regions/ga) | | Georgia | [9 region(s)](/data/regions/ge) | | Germany | [16 region(s)](/data/regions/de) | | Ghana | [4 region(s)](/data/regions/gh) | | Greece | [13 region(s)](/data/regions/gr) | | Greenland | [1 region(s)](/data/regions/gl) | | Grenada | [5 region(s)](/data/regions/gd) | | Guatemala | [8 region(s)](/data/regions/gt) | | Guinea | [1 region(s)](/data/regions/gn) | | Guinea-Bissau | [1 region(s)](/data/regions/gw) | | Guyana | [3 region(s)](/data/regions/gy) | | Haiti | [2 region(s)](/data/regions/ht) | | Honduras | [13 region(s)](/data/regions/hn) | | Hong Kong | [18 region(s)](/data/regions/hk) | | Hungary | [20 region(s)](/data/regions/hu) | | Iceland | [5 region(s)](/data/regions/is) | | India | [35 region(s)](/data/regions/in) | | Indonesia | [34 region(s)](/data/regions/id) | | Iran | [23 region(s)](/data/regions/ir) | | Iraq | [18 region(s)](/data/regions/iq) | | Ireland | [4 region(s)](/data/regions/ie) | | Israel | [6 region(s)](/data/regions/il) | | Italy | [20 region(s)](/data/regions/it) | | Jamaica | [11 region(s)](/data/regions/jm) | | Japan | [47 region(s)](/data/regions/jp) | | Jordan | [7 region(s)](/data/regions/jo) | | Kazakhstan | [20 region(s)](/data/regions/kz) | | Kenya | [17 region(s)](/data/regions/ke) | | Kiribati | [1 region(s)](/data/regions/ki) | | Kuwait | [4 region(s)](/data/regions/kw) | | Kyrgyzstan | [6 region(s)](/data/regions/kg) | | Laos | [6 region(s)](/data/regions/la) | | Latvia | [28 region(s)](/data/regions/lv) | | Lebanon | [7 region(s)](/data/regions/lb) | | Lesotho | [1 region(s)](/data/regions/ls) | | Liberia | [1 region(s)](/data/regions/lr) | | Libya | [5 region(s)](/data/regions/ly) | | Liechtenstein | [2 region(s)](/data/regions/li) | | Lithuania | [10 region(s)](/data/regions/lt) | | Luxembourg | [4 region(s)](/data/regions/lu) | | Malawi | [2 region(s)](/data/regions/mw) | | Malaysia | [16 region(s)](/data/regions/my) | | Maldives | [3 region(s)](/data/regions/mv) | | Mali | [2 region(s)](/data/regions/ml) | | Malta | [47 region(s)](/data/regions/mt) | | Marshall Islands | [1 region(s)](/data/regions/mh) | | Mauritania | [1 region(s)](/data/regions/mr) | | Mauritius | [10 region(s)](/data/regions/mu) | | Mexico | [32 region(s)](/data/regions/mx) | | Moldova | [37 region(s)](/data/regions/md) | | Mongolia | [2 region(s)](/data/regions/mn) | | Montenegro | [12 region(s)](/data/regions/me) | | Morocco | [8 region(s)](/data/regions/ma) | | Mozambique | [8 region(s)](/data/regions/mz) | | Myanmar (Burma) | [7 region(s)](/data/regions/mm) | | Namibia | [6 region(s)](/data/regions/na) | | Nauru | [1 region(s)](/data/regions/nr) | | Nepal | [7 region(s)](/data/regions/np) | | Netherlands | [12 region(s)](/data/regions/nl) | | New Caledonia | [2 region(s)](/data/regions/nc) | | New Zealand | [15 region(s)](/data/regions/nz) | | Nicaragua | [5 region(s)](/data/regions/ni) | | Niger | [2 region(s)](/data/regions/ne) | | Nigeria | [10 region(s)](/data/regions/ng) | | North Macedonia | [31 region(s)](/data/regions/mk) | | Northern Mariana Islands | [1 region(s)](/data/regions/mp) | | Norway | [15 region(s)](/data/regions/no) | | Oman | [5 region(s)](/data/regions/om) | | Pakistan | [7 region(s)](/data/regions/pk) | | Palau | [3 region(s)](/data/regions/pw) | | Palestine | [9 region(s)](/data/regions/ps) | | Panama | [2 region(s)](/data/regions/pa) | | Papua New Guinea | [1 region(s)](/data/regions/pg) | | Paraguay | [12 region(s)](/data/regions/py) | | Peru | [25 region(s)](/data/regions/pe) | | Philippines | [17 region(s)](/data/regions/ph) | | Poland | [16 region(s)](/data/regions/pl) | | Portugal | [20 region(s)](/data/regions/pt) | | Qatar | [2 region(s)](/data/regions/qa) | | Republic of the Congo | [5 region(s)](/data/regions/cg) | | Romania | [42 region(s)](/data/regions/ro) | | Russia | [82 region(s)](/data/regions/ru) | | Rwanda | [2 region(s)](/data/regions/rw) | | Saint Kitts and Nevis | [3 region(s)](/data/regions/kn) | | Saint Lucia | [4 region(s)](/data/regions/lc) | | Saint Pierre and Miquelon | [1 region(s)](/data/regions/pm) | | Saint Vincent and the Grenadines | [1 region(s)](/data/regions/vc) | | Samoa | [1 region(s)](/data/regions/ws) | | San Marino | [2 region(s)](/data/regions/sm) | | Sao Tome and Principe | [1 region(s)](/data/regions/st) | | Saudi Arabia | [12 region(s)](/data/regions/sa) | | Senegal | [2 region(s)](/data/regions/sn) | | Serbia | [19 region(s)](/data/regions/rs) | | Seychelles | [1 region(s)](/data/regions/sc) | | Sierra Leone | [1 region(s)](/data/regions/sl) | | Slovakia | [8 region(s)](/data/regions/sk) | | Slovenia | [71 region(s)](/data/regions/si) | | Solomon Islands | [1 region(s)](/data/regions/sb) | | Somalia | [6 region(s)](/data/regions/so) | | South Africa | [9 region(s)](/data/regions/za) | | South Korea | [17 region(s)](/data/regions/kr) | | South Sudan | [3 region(s)](/data/regions/ss) | | Spain | [19 region(s)](/data/regions/es) | | Sri Lanka | [6 region(s)](/data/regions/lk) | | Sudan | [2 region(s)](/data/regions/sd) | | Suriname | [4 region(s)](/data/regions/sr) | | Sweden | [21 region(s)](/data/regions/se) | | Switzerland | [21 region(s)](/data/regions/ch) | | Syria | [5 region(s)](/data/regions/sy) | | Tadjikistan | [4 region(s)](/data/regions/tj) | | Taiwan | [21 region(s)](/data/regions/tw) | | Tanzania | [12 region(s)](/data/regions/tz) | | Thailand | [75 region(s)](/data/regions/th) | | The Bahamas | [7 region(s)](/data/regions/bs) | | The Gambia | [2 region(s)](/data/regions/gm) | | Timor-Leste | [1 region(s)](/data/regions/tl) | | Togo | [2 region(s)](/data/regions/tg) | | Tonga | [1 region(s)](/data/regions/to) | | Trinidad and Tobago | [15 region(s)](/data/regions/tt) | | Tunisia | [22 region(s)](/data/regions/tn) | | Turkey | [79 region(s)](/data/regions/tr) | | Turkmenistan | [3 region(s)](/data/regions/tm) | | U.S. Virgin Islands | [2 region(s)](/data/regions/vi) | | Uganda | [1 region(s)](/data/regions/ug) | | Ukraine | [27 region(s)](/data/regions/ua) | | United Arab Emirates | [7 region(s)](/data/regions/ae) | | United Kingdom | [4 region(s)](/data/regions/gb) | | United States | [51 region(s)](/data/regions/us) | | Uruguay | [12 region(s)](/data/regions/uy) | | Uzbekistan | [8 region(s)](/data/regions/uz) | | Vanuatu | [1 region(s)](/data/regions/vu) | | Venezuela | [23 region(s)](/data/regions/ve) | | Vietnam | [60 region(s)](/data/regions/vn) | | Wallis and Futuna | [1 region(s)](/data/regions/wf) | | Yemen | [4 region(s)](/data/regions/ye) | | Zambia | [1 region(s)](/data/regions/zm) | | Zimbabwe | [1 region(s)](/data/regions/zw) | # ZIP Code List Source: https://docs.2extract.com/data/zips Countries with ZIP/postal code targeting available. Select a country to view its codes. ZIP targeting (`-zip-[code]`) is available for the countries below. Requires `-country-[code]` in the same username. Large countries link to the live lookup API instead of a static table. See [Geo Targeting](/proxy-products/configuration/geo-targeting) for the full parameter reference. | Country | ZIP Codes | | - | - | | Afghanistan | [12 codes](/data/zips/af) | | Aland Islands | [2 codes](/data/zips/ax) | | Albania | [42 codes](/data/zips/al) | | Algeria | [832 — via API](/data/zips/dz) | | American Samoa | [2 codes](/data/zips/as) | | Andorra | [3 codes](/data/zips/ad) | | Angola | [3 codes](/data/zips/ao) | | Argentina | [2,576 — via API](/data/zips/ar) | | Armenia | [50 codes](/data/zips/am) | | Australia | [8,608 — via API](/data/zips/au) | | Austria | [4,824 — via API](/data/zips/at) | | Azerbaijan | [64 codes](/data/zips/az) | | Bahrain | [4 codes](/data/zips/bh) | | Bangladesh | [665 — via API](/data/zips/bd) | | Barbados | [2 codes](/data/zips/bb) | | Belarus | [288 codes](/data/zips/by) | | Belgium | [3,390 — via API](/data/zips/be) | | Belize | [2 codes](/data/zips/bz) | | Bermuda | [8 codes](/data/zips/bm) | | Bhutan | [2 codes](/data/zips/bt) | | Bolivia | [12 codes](/data/zips/bo) | | Bosnia and Herzegovina | [36 codes](/data/zips/ba) | | Brazil | [9,792 — via API](/data/zips/br) | | British Indian Ocean Territory | [1 codes](/data/zips/io) | | British Virgin Islands | [2 codes](/data/zips/vg) | | Brunei | [7 codes](/data/zips/bn) | | Bulgaria | [1,504 — via API](/data/zips/bg) | | Cambodia | [28 codes](/data/zips/kh) | | Cameroon | [1 codes](/data/zips/cm) | | Canada | [7,727 — via API](/data/zips/ca) | | Cape Verde | [1 codes](/data/zips/cv) | | Cayman Islands | [8 codes](/data/zips/ky) | | Chile | [130 codes](/data/zips/cl) | | China | [160 codes](/data/zips/cn) | | Colombia | [2,789 — via API](/data/zips/co) | | Cook Islands | [1 codes](/data/zips/ck) | | Costa Rica | [657 — via API](/data/zips/cr) | | Cote d'Ivoire | [3 codes](/data/zips/ci) | | Croatia | [1,020 — via API](/data/zips/hr) | | Cuba | [2 codes](/data/zips/cu) | | Curacao | [1 codes](/data/zips/cw) | | Cyprus | [40 codes](/data/zips/cy) | | Czechia | [6,331 — via API](/data/zips/cz) | | Democratic Republic of the Congo | [5 codes](/data/zips/cd) | | Denmark | [1,446 — via API](/data/zips/dk) | | Djibouti | [2 codes](/data/zips/dj) | | Dominica | [2 codes](/data/zips/dm) | | Dominican Republic | [436 codes](/data/zips/do) | | Ecuador | [336 codes](/data/zips/ec) | | Egypt | [28 codes](/data/zips/eg) | | El Salvador | [17 codes](/data/zips/sv) | | Eritrea | [1 codes](/data/zips/er) | | Estonia | [42 codes](/data/zips/ee) | | Eswatini | [1 codes](/data/zips/sz) | | Ethiopia | [2 codes](/data/zips/et) | | Faroe Islands | [4 codes](/data/zips/fo) | | Fiji | [3 codes](/data/zips/fj) | | Finland | [2,470 — via API](/data/zips/fi) | | France | [42,986 — via API](/data/zips/fr) | | French Guiana | [18 codes](/data/zips/gf) | | French Polynesia | [1 codes](/data/zips/pf) | | Gabon | [1 codes](/data/zips/ga) | | Georgia | [28 codes](/data/zips/ge) | | Germany | [17,042 — via API](/data/zips/de) | | Ghana | [7 codes](/data/zips/gh) | | Gibraltar | [6 codes](/data/zips/gi) | | Greece | [130 codes](/data/zips/gr) | | Greenland | [2 codes](/data/zips/gl) | | Guadeloupe | [48 codes](/data/zips/gp) | | Guam | [28 codes](/data/zips/gu) | | Guatemala | [139 codes](/data/zips/gt) | | Guernsey | [7 codes](/data/zips/gg) | | Guinea | [1 codes](/data/zips/gn) | | Guyana | [1 codes](/data/zips/gy) | | Haiti | [2 codes](/data/zips/ht) | | Honduras | [36 codes](/data/zips/hn) | | Hong Kong | [93 codes](/data/zips/hk) | | Hungary | [2,973 — via API](/data/zips/hu) | | Iceland | [177 codes](/data/zips/is) | | India | [13,420 — via API](/data/zips/in) | | Indonesia | [4,527 — via API](/data/zips/id) | | Iran | [59 codes](/data/zips/ir) | | Iraq | [72 codes](/data/zips/iq) | | Ireland | [1,614 — via API](/data/zips/ie) | | Isle of Man | [8 codes](/data/zips/im) | | Israel | [179 codes](/data/zips/il) | | Italy | [13,641 — via API](/data/zips/it) | | Jamaica | [5 codes](/data/zips/jm) | | Japan | [16,750 — via API](/data/zips/jp) | | Jersey | [13 codes](/data/zips/je) | | Jordan | [23 codes](/data/zips/jo) | | Kazakhstan | [107 codes](/data/zips/kz) | | Kenya | [44 codes](/data/zips/ke) | | Kosovo | [11 codes](/data/zips/xk) | | Kuwait | [4 codes](/data/zips/kw) | | Kyrgyzstan | [26 codes](/data/zips/kg) | | Laos | [8 codes](/data/zips/la) | | Latvia | [501 — via API](/data/zips/lv) | | Lebanon | [33 codes](/data/zips/lb) | | Lesotho | [1 codes](/data/zips/ls) | | Liberia | [2 codes](/data/zips/lr) | | Libya | [8 codes](/data/zips/ly) | | Liechtenstein | [20 codes](/data/zips/li) | | Lithuania | [959 — via API](/data/zips/lt) | | Luxembourg | [369 codes](/data/zips/lu) | | Macao | [8 codes](/data/zips/mo) | | Madagascar | [1 codes](/data/zips/mg) | | Malawi | [3 codes](/data/zips/mw) | | Malaysia | [1,493 — via API](/data/zips/my) | | Maldives | [3 codes](/data/zips/mv) | | Mali | [1 codes](/data/zips/ml) | | Malta | [122 codes](/data/zips/mt) | | Marshall Islands | [2 codes](/data/zips/mh) | | Martinique | [44 codes](/data/zips/mq) | | Mauritania | [1 codes](/data/zips/mr) | | Mauritius | [9 codes](/data/zips/mu) | | Mayotte | [40 codes](/data/zips/yt) | | Mexico | [19,579 — via API](/data/zips/mx) | | Micronesia | [1 codes](/data/zips/fm) | | Moldova | [461 codes](/data/zips/md) | | Monaco | [2 codes](/data/zips/mc) | | Mongolia | [9 codes](/data/zips/mn) | | Montenegro | [3 codes](/data/zips/me) | | Morocco | [20 codes](/data/zips/ma) | | Mozambique | [6 codes](/data/zips/mz) | | Myanmar (Burma) | [34 codes](/data/zips/mm) | | Namibia | [2 codes](/data/zips/na) | | Nepal | [17 codes](/data/zips/np) | | Netherlands | [4,643 — via API](/data/zips/nl) | | New Caledonia | [41 codes](/data/zips/nc) | | New Zealand | [2,973 — via API](/data/zips/nz) | | Nicaragua | [7 codes](/data/zips/ni) | | Nigeria | [33 codes](/data/zips/ng) | | North Korea | [3 codes](/data/zips/kp) | | North Macedonia | [140 codes](/data/zips/mk) | | Northern Mariana Islands | [1 codes](/data/zips/mp) | | Norway | [5,377 — via API](/data/zips/no) | | Oman | [13 codes](/data/zips/om) | | Pakistan | [832 — via API](/data/zips/pk) | | Palau | [1 codes](/data/zips/pw) | | Palestine | [11 codes](/data/zips/ps) | | Panama | [25 codes](/data/zips/pa) | | Papua New Guinea | [5 codes](/data/zips/pg) | | Paraguay | [56 codes](/data/zips/py) | | Peru | [326 codes](/data/zips/pe) | | Philippines | [2,280 — via API](/data/zips/ph) | | Poland | [21,342 — via API](/data/zips/pl) | | Portugal | [47,433 — via API](/data/zips/pt) | | Puerto Rico | [183 codes](/data/zips/pr) | | Qatar | [9 codes](/data/zips/qa) | | Republic of the Congo | [1 codes](/data/zips/cg) | | Reunion | [67 codes](/data/zips/re) | | Romania | [13,623 — via API](/data/zips/ro) | | Russia | [10,009 — via API](/data/zips/ru) | | Rwanda | [2 codes](/data/zips/rw) | | Saint Barthelemy | [1 codes](/data/zips/bl) | | Saint Kitts and Nevis | [4 codes](/data/zips/kn) | | Saint Martin | [3 codes](/data/zips/mf) | | Saint Pierre and Miquelon | [3 codes](/data/zips/pm) | | San Marino | [6 codes](/data/zips/sm) | | Sao Tome and Principe | [2 codes](/data/zips/st) | | Saudi Arabia | [56 codes](/data/zips/sa) | | Senegal | [5 codes](/data/zips/sn) | | Serbia | [44 codes](/data/zips/rs) | | Seychelles | [4 codes](/data/zips/sc) | | Singapore | [159 codes](/data/zips/sg) | | Slovakia | [2,736 — via API](/data/zips/sk) | | Slovenia | [1,449 — via API](/data/zips/si) | | Solomon Islands | [1 codes](/data/zips/sb) | | Somalia | [5 codes](/data/zips/so) | | South Africa | [3,672 — via API](/data/zips/za) | | South Korea | [1,576 — via API](/data/zips/kr) | | South Sudan | [2 codes](/data/zips/ss) | | Spain | [11,707 — via API](/data/zips/es) | | Sri Lanka | [572 — via API](/data/zips/lk) | | Sudan | [2 codes](/data/zips/sd) | | Svalbard and Jan Mayen | [2 codes](/data/zips/sj) | | Sweden | [14,738 — via API](/data/zips/se) | | Switzerland | [4,493 — via API](/data/zips/ch) | | Syria | [7 codes](/data/zips/sy) | | Tadjikistan | [12 codes](/data/zips/tj) | | Taiwan | [122 codes](/data/zips/tw) | | Tanzania | [6 codes](/data/zips/tz) | | Thailand | [1,402 — via API](/data/zips/th) | | The Bahamas | [1 codes](/data/zips/bs) | | Tonga | [1 codes](/data/zips/to) | | Tunisia | [22 codes](/data/zips/tn) | | Turkey | [2,900 — via API](/data/zips/tr) | | Turkmenistan | [3 codes](/data/zips/tm) | | Tuvalu | [1 codes](/data/zips/tv) | | U.S. Virgin Islands | [2 codes](/data/zips/vi) | | Uganda | [7 codes](/data/zips/ug) | | Ukraine | [3,841 — via API](/data/zips/ua) | | United Arab Emirates | [32 codes](/data/zips/ae) | | United Kingdom | [17,950 — via API](/data/zips/gb) | | United States | [42,043 — via API](/data/zips/us) | | Uruguay | [311 codes](/data/zips/uy) | | Uzbekistan | [34 codes](/data/zips/uz) | | Vanuatu | [2 codes](/data/zips/vu) | | Venezuela | [165 codes](/data/zips/ve) | | Vietnam | [957 — via API](/data/zips/vn) | | Wallis and Futuna | [7 codes](/data/zips/wf) | | Yemen | [1 codes](/data/zips/ye) | | Zambia | [4 codes](/data/zips/zm) | | Zimbabwe | [5 codes](/data/zips/zw) | # Dashboard Overview Source: https://docs.2extract.com/getting-started/dashboard-overview A guided tour of your main dashboard, the central hub for managing your 2extract.com account and proxies. The Dashboard is the first screen you see after logging in. It's designed to give you a high-level overview of your account's status, recent activity, and quick access to the most common actions. Let's break down each section. ![](https://mintcdn.com/2extract/czMMSEnEIK6HnBXV/images/dashboard.png?fit=max\&auto=format\&n=czMMSEnEIK6HnBXV\&q=85\&s=79e2035d795762066cc480faaddfb8e8) The main view of the 2extract.com Dashboard. *** ## 1. Header Zone The top section of the dashboard provides a welcome message and your primary Call-to-Action (CTA). * **Primary CTA Button:** This button is smart! It changes based on your account's status: * If your balance is sufficient, it will show **`+ Create Proxy`** to get you started quickly * If your balance is low or zero, it will change to **`Top Up Balance`**, guiding you to the billing step *** ## 2. Workspace Zone This is the main area where you'll find your key metrics and activity summaries. ### Account Status This block gives you an instant snapshot of your account's most important numbers. Each metric is a clickable link that takes you to the relevant management page. > [card] Current Balance > > Shows your available funds for Pay-As-You-Go proxies. Click to go to the **Billing** page. > [card] Active Proxies > > The total number of proxies currently active on your account. Click to go to the **My Proxies** page. > [card] Traffic (Last 30d) > > Your total data usage across all proxies in the last 30 days. Click to scroll down to the detailed chart. ### Usage Overview Chart This chart visualizes your consumption over time. ![](https://mintcdn.com/2extract/czMMSEnEIK6HnBXV/images/usage_overview.png?fit=max\&auto=format\&n=czMMSEnEIK6HnBXV\&q=85\&s=13ea05af935d5a02cc842e42bd7b8e62) The Usage Overview chart with period and metric selectors. * **Metric Selector:** Switch the view between `Traffic (GB)` and total `Requests` * **Period Selector:** Adjust the time range to see data for the `Last 7 Days`, `Last 30 Days`, or `Last 90 Days` * **Info Tooltip:** Hover over the `(i)` icon for a reminder that this chart shows total usage. For a per-proxy breakdown, you'll need to view the statistics on the individual proxy's settings page. ### My Recent Proxies This table provides quick access to your most recently used proxies, so you don't have to search through the full list. * **Columns:** Shows the proxy `Name`, `Status`, and `Traffic Used` in the last 24 hours * **Link:** Use the `View All Proxies →` link to navigate to the main "My Proxies" page ### Quick Start & Integration This block is designed to help you integrate our proxies into your tools as quickly as possible. * **Links:** Direct links to our **Quick Start Guide** and this **Documentation** * **Interactive Snippet:** A ready-to-use code example for one of your active proxies. You can switch between languages like `cURL`, `Python`, and `Node.js`, and copy the code with a single click # Quick Start: Your First Request in 2 Minutes Source: https://docs.2extract.com/getting-started/quick-start Follow these 4 simple steps to go from a new account to a successful proxy request in under two minutes. This guide will walk you through the entire process of setting up your account and making your first successful request through our proxy network. Let's get started! **1. Step 1: Top Up Your Balance** Before you can create a proxy, you need to add funds to your account. All Pay-As-You-Go proxies use this central balance. 1. Navigate to the **[Billing](https://2extract.com/app/billing)** page from the sidebar menu 2. Select a top-up amount or enter a custom one. The minimum is \$10 3. Click the **Top Up** button and complete the payment process via Stripe Once your payment is successful, you'll see your updated balance on the Billing page and in your dashboard. ![](https://mintcdn.com/2extract/W_xaaJYeE5Ij4Xlo/images/billing.png?fit=max\&auto=format\&n=W_xaaJYeE5Ij4Xlo\&q=85\&s=a9f0550913523c226a9b8b0e4a14fc78) The Billing screen where you can top up your account balance. **2. Step 2: Create Your First Proxy** A proxy is your configurable gateway to our network. Let's create one. 1. Navigate to the **[My Proxies](https://2extract.com/app/proxies)** page 2. Click the **+ Create Proxy** button 3. On the proxy creation pop-up: * Give your proxy a memorable **Name**, like `myfirstscraper` * For now, you can leave all other settings at their defaults 4. Click **Create Proxy** > [!WARNING] > > Choose your proxy name carefully. It **cannot be changed** after creation. You will be redirected to the settings page for your newly created proxy. ![](https://mintcdn.com/2extract/W_xaaJYeE5Ij4Xlo/images/create_new_proxy.png?fit=max\&auto=format\&n=W_xaaJYeE5Ij4Xlo\&q=85\&s=da02a6eaeec53d89ab8d2ed664cc9b36) The "Create New Proxy" screen with the name field filled in. **3. Step 3: Get Your Credentials** On your new proxy's settings page, you'll find the "Connection Details" block. The easiest way to get your credentials is to use the **Copy Credentials** button. 1. Click the **Copy Credentials** button 2. A dropdown menu will appear with different formats 3. Click the "Copy" icon next to the `username:password@host:port` format You can also copy each part individually if you prefer. > [!NOTE] > > For security, your password is only shown here. We will never email it to you. ![](https://mintcdn.com/2extract/W_xaaJYeE5Ij4Xlo/images/proxy_settings.png?fit=max\&auto=format\&n=W_xaaJYeE5Ij4Xlo\&q=85\&s=410dd08cffa65cb8594a911f3dae1909) The "Connection Details" block showing the host, port, username, and password. **4. Step 4: Make Your First Request!** Now you're ready to test your connection. The easiest way is with a `cURL` command in your terminal. This command will ask for your real IP address through the proxy. 1. Open your terminal (on macOS, Linux, or Windows) 2. Copy the command below and **replace** `PROXY_USERNAME` and `PROXY_PASSWORD` with the credentials you copied in the previous step ```bash cURL theme={null} curl --proxy "https://PROXY_USERNAME:PROXY_PASSWORD@proxy.2extract.net:5555" "https://api.ipify.org" ``` ```python ip_check.py theme={null} import requests proxy_user = 'PROXY_USERNAME' proxy_pass = 'PROXY_PASSWORD' proxy_host = 'proxy.2extract.net' proxy_port = '5555' proxies = { 'http': f'https://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}', 'https': f'https://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}', } response = requests.get('https://api.ipify.org?format=json', proxies=proxies) print(response.json()) ``` Press Enter. If everything is correct, you will see a response like this, showing a residential IP address: ```json theme={null} {"ip":"123.45.67.89"} ``` **5. Congratulations!** You've just made your first successful request through the 2extract network. You're now ready to integrate our proxies into any of your projects. ## Next Steps > [card] [Configuration Guide](../proxy-products/configuration/geo-targeting) > > Learn how to control geo-targeting and sessions. > [card] [All Integration Guides](../integrations/introduction) > > Find examples for Puppeteer, Scrapy, and more. # Account Management Source: https://docs.2extract.com/guides/account-management Learn how to manage your personal information, security settings, API tokens, and monitor account activity. The **Settings** screen is your central hub for managing all aspects of your 2extract.com account. Here you can update your personal details, enhance your account's security, and track important events. ## Profile & Personal Information This section allows you to manage your basic profile details. * **Account ID:** Your unique account identifier. Please provide this when contacting support * **Full Name:** Your full name * **Company Name:** The name of your company (optional) * **Country of Residence:** Your country of residence, used for compliance and billing purposes * **Email Address:** Your login email. This field cannot be changed > [accordion] Security Settings > > Security is a top priority. This section provides tools to keep your account secure. > > #### Change Password > > You can change your password at any time. You will be required to enter your current password to set a new one. > > #### Two-Factor Authentication (2FA) (Coming Soon) > > Add an extra layer of security to your account. When enabled, you'll be required to enter a code from your authenticator app upon login. > [accordion] Event Log (Coming Soon) > > The Event Log provides a complete, filterable history of all significant actions that have occurred in your account. This is a powerful tool for security auditing and debugging. > > You will be able to track events such as: > > * User logins (successful and failed attempts) > * Proxy creation, updates, and deletion > * Billing events like top-ups and failed payments > * Security changes like password updates or API token creation > > Each event includes the action performed, the time it occurred, the actor (you, an API token, or the system), and the associated IP address. > [accordion] Delete Account > > This is a "danger zone" action and should be used with caution. > > If you choose to delete your account, all your active proxies will be immediately deactivated. You will lose access to your remaining account balance, and it will not be refunded. In accordance with our Privacy Policy, your account data will be scheduled for permanent deletion. This action is irreversible. You will be asked to confirm this action by entering your password. > > You can find the option to delete your account at the bottom of your **[Profile Settings](https://2extract.com/settings)** page. *** ## Account Verification (KYC) #### Why We Ask for Verification At 2extract.com, our commitment to maintaining an **ethical and secure proxy network** is our highest priority. To achieve this, we need to ensure our platform is used responsibly and prevent fraudulent or illicit activities. The Know Your Customer (KYC) process is a standard security measure that helps us do just that. #### Benefits of a Verified Account Unverified accounts may have certain initial limitations. By completing verification, you will: * **Remove usage and spending limits,** allowing you to scale your operations without restrictions * **Gain access to our full range of proxy pools,** including certain high-trust networks * **Enhance the overall security** of your account #### Our Trusted Partner: Didit.me To ensure your data is handled with the utmost security and privacy, we have partnered with **[Didit.me](https://didit.me/)**. The entire verification process is handled securely on their platform. 2extract.com does not store your sensitive identity documents on our servers. > [card] [Start Your Verification](https://2extract.com/settings) > > The process is fast and usually takes only a few minutes to complete. # Billing & Usage Source: https://docs.2extract.com/guides/billing-usage Understand how our pricing works, from the central account balance and Pay-As-You-Go plan to future subscription models. > [!WARNING] > > To unlock deposits over \$50, verify your identity. At 2extract.com, we believe in transparent and predictable pricing. This guide explains our billing model, how to manage your funds, and how to track your usage. ## How Our Billing Works: Balance vs. Subscriptions Our billing system is designed for flexibility, combining a central account balance with per-proxy plans. > [card] Account Balance (Your Wallet) > > Think of this as your central wallet for all Pay-As-You-Go (PAYG) activity. You top up this balance with funds, and your PAYG proxies consume traffic by deducting costs from it. This balance is shared across all your PAYG proxies. > [card] Subscriptions (Coming Soon) > > For predictable, high-volume needs, you will be able to assign a monthly subscription plan to a specific proxy. This will give the proxy a dedicated traffic allowance for a fixed monthly fee. This feature is not yet available. > [!NOTE] > > **Key takeaway:** Your **Account Balance** is for flexible, on-demand usage (PAYG). Subscription plans for predictable, recurring needs are coming soon. ## Topping Up Your Balance (Pay-As-You-Go) The Pay-As-You-Go (PAYG) plan is the default for all new proxies and offers maximum flexibility. 1. **Navigate to the [Billing](https://2extract.com/billing) page.** Here you'll see your current balance 2. **Choose an amount.** You can select a predefined amount or enter a custom one 3. **Complete the payment.** You will be redirected to our secure payment partner, Stripe, to complete the transaction Your funds will be added to your account balance immediately after the payment is confirmed. This balance never expires as long as your account is active. *** ## Setting Up Auto Top-Up (Coming Soon) To ensure your PAYG proxies run without interruption, you will be able to enable Auto Top-Up. * **How it will work:** When your account balance falls below a threshold you set (e.g., $10), we will automatically charge your saved payment method for a predefined amount (e.g., $50). * **Control:** You will have full control over the thresholds, amounts, and the payment method used. This feature is perfect for mission-critical tasks where downtime is not an option. *** ## Understanding Your Usage Statistics We provide detailed statistics so you always know where your traffic is going. * **Dashboard:** The main dashboard gives you a high-level overview of your **total** traffic consumption across all proxies. * **"My Proxies" Page:** This screen shows the traffic used and cost incurred for **each individual proxy** in the current billing period. * **Proxy Settings Page:** For the most detailed breakdown, navigate to a specific proxy's settings page. Here you'll find a chart visualizing its daily usage of both traffic and requests. *** ## Understanding Your Billing Page The **Billing** page is your central hub for managing your account's finances. It shows you the "big picture" — all the **transactions** that add or remove funds from your main account balance. This includes events like: * Manual Top-ups * Automatic Top-ups (in the future) * Subscription payments (in the future) * Refunds or credit adjustments #### Where to Find Pay-As-You-Go Spending Details? The Transaction History on the Billing page **does not** show every small deduction for Pay-As-You-Go traffic. This is done intentionally to keep your history clean and readable. ![](https://mintcdn.com/2extract/czMMSEnEIK6HnBXV/images/proxy_settings_usage.png?fit=max\&auto=format\&n=czMMSEnEIK6HnBXV\&q=85\&s=176cf444e54b563f02aa8217aa5473c7) Detailed traffic and cost breakdown for a specific proxy can be found in the 'Usage Statistics' block on its settings page. To see a detailed breakdown of how much a **specific proxy** has spent from your balance: 1. Navigate to the **[My Proxies](https://2extract.com/proxies)** page 2. Click on the name of the proxy you want to inspect 3. On the **Proxy Settings** page, you will find the **Usage Statistics** block, which shows the exact traffic consumed and the corresponding cost for that specific proxy This approach allows you to see both your overall account funding history (on the Billing page) and the specific operational costs of each project (on the Proxy Settings page). *** ## Accessing Invoices For your accounting needs, all your payment history and official invoices are available directly from our secure payment partner. 1. Navigate to the **[Billing](https://2extract.com/billing)** page. 2. Click the **"View Full History & Invoices"** button. 3. You will be securely redirected to your personal **Stripe Customer Portal**. In the portal, you can view all past transactions, download PDF invoices, and manage your saved payment methods. # Identity Verification (KYC) Source: https://docs.2extract.com/guides/kyc How to verify your account to unlock higher deposit limits. To ensure the security of our platform and comply with financial regulations, 2extract requires users to complete a Know Your Customer (KYC) verification process to access full billing features. > [!WARNING] > > **Deposit Limit:** Unverified accounts have a cumulative lifetime deposit limit of **\$50**. To deposit more funds, you must complete identity verification. ## Why is verification required? We implement identity verification to prevent fraud, ensure compliance with international laws, and maintain a high-quality network for all our users. Once you are verified, you will unlock: * **Unlimited deposits:** Remove the \$50 cap on your balance top-ups. * **Trust status:** Reduced risk of automated security flags on your account. ## Our Partner: Didit We value your privacy and data security. That is why we do not store your personal identity documents on our servers. We partner with **[Didit](https://didit.me/)**, a specialized and GDPR-compliant identity verification provider. Didit handles the secure processing and validation of your documents. 2extract only receives the confirmation status (Verified/Rejected). ## How to Verify Your Account The verification process is fast and usually takes less than 5 minutes. You will need a valid government-issued ID (Passport, Driver's License, or National ID Card). **1. Start Verification** You don't have to wait until you hit the deposit limit. You can verify your account voluntarily at any time: 1. Navigate to the **[Profile](https://2extract.com/app/profile)** page. 2. Locate the **Verification** section. 3. Click the **Start Verification** button. **2. Scan QR Code** The Didit interface will open directly in the same window. To ensure the best image quality, the process is designed to be completed on a mobile device. **Scan the QR code** displayed on your screen using your smartphone's camera and follow the instructions on your phone. **3. Capture Documents & Selfie** On your mobile device, you will be asked to: 1. Take a photo of your **government-issued ID** (Passport, Driver's License, etc.). 2. Take a **selfie** to prove that you are the owner of the document. **4. Automatic Approval** The system will automatically validate the authenticity of your documents and verify your identity. Upon success, your account status will instantly change to **Verified**, and all deposit restrictions will be removed. You will see a confirmation in your profile. ![](https://mintcdn.com/2extract/Plcd-HhYRE53grgG/images/kyc-verified.png?fit=max\&auto=format\&n=Plcd-HhYRE53grgG\&q=85\&s=eca93c74182db90be35cf4160a6cd17e) Profile page showing Verified status. ## Document Requirements To ensure your verification is approved on the first try, please follow these guidelines: * **Validity:** The document must be valid and not expired. * **Quality:** Photos must be in color and high resolution. * **Condition:** The document should not be physically damaged. ## Troubleshooting If your verification was declined, Didit usually provides a reason. Common reasons include: * **Blurry Image:** The camera failed to focus. Please retake the photo in better lighting. * **Glare:** Flash or overhead lights made parts of the ID unreadable. * **Cut-off corners:** All four corners of the document must be visible in the frame. * **Unsupported Document:** You used a student ID, library card, or bank card instead of a government ID. > [!NOTE] > > If you believe your document was rejected in error, or if you encounter technical issues during the process, please contact us [support@2extract.com](mailto:support@2extract.com). # My proxy is not connecting (407 Error) Source: https://docs.2extract.com/help/common-problems/407-proxy-authentication-required A step-by-step checklist to diagnose and fix the most common connection error, the 407 error. The `407 Proxy Authentication Required` error is the most common issue you might encounter. The good news is that it's almost always easy to fix. This error means our gateway is rejecting your connection request, and it's always due to one of the four reasons below. Follow this checklist step-by-step to solve the problem. ### Step 1: Check Your Proxy Credentials The most common cause is a simple typo in your username or password. 1. Navigate to the **[My Proxies](https://2extract.com/app/proxies)** page and click on the proxy you are using. 2. In the **Connection Details** block, carefully copy the `Username` and `Password` again. 3. Paste them directly into your script or tool, ensuring there are no extra spaces or characters. ![](https://mintcdn.com/2extract/czMMSEnEIK6HnBXV/images/proxy_settings_credentials.png?fit=max\&auto=format\&n=czMMSEnEIK6HnBXV\&q=85\&s=8c61927e3cea4d227aeb79df70ae09e6) Double-check your credentials in the proxy's settings. ### Step 2: Verify Your IP Whitelist If you are using IP whitelisting, your current IP address must be in the `Authorized IPs` list for that specific proxy. 1. Find your current IP address. A simple way is to google "what is my IP". 2. Go to your proxy's settings page and find the **Advanced Security** section. 3. Check the **Authorized IPs** list. Does it contain your current IP address? ![](https://mintcdn.com/2extract/czMMSEnEIK6HnBXV/images/proxy_settings_authorized_ip.png?fit=max\&auto=format\&n=czMMSEnEIK6HnBXV\&q=85\&s=27c6337594dd0a27729da615564f2829) Ensure your current IP is listed in the Authorized IPs for your proxy. > [!NOTE] > > Authorized IPs are set per proxy. When the list is empty, the proxy accepts connections from any IP. ### Step 3: Check Your Account Balance Our Pay-As-You-Go proxies stop working the moment your account balance reaches zero. 1. Navigate to the **[Billing](https://2extract.com/app/billing)** page. 2. Check your **Current Balance**. If it is \$0.00 or less, your proxies have been automatically suspended. 3. **Solution:** Simply top up your balance to reactivate them instantly. ### Step 4: Check The Proxy Status Ensure the proxy you are trying to use is active. 1. Navigate to the **[My Proxies](https://2extract.com/app/proxies)** page. 2. Find your proxy in the list and check its **Status** badge. 3. If the status is `Inactive` or `Suspended`, your proxy will not accept connections. You can reactivate an `Inactive` proxy from the "Actions" menu. If it's `Suspended`, check your balance or usage limits. # Why was my account/proxy suspended? Source: https://docs.2extract.com/help/common-problems/account-or-proxy-suspended The main reasons for service suspension and how to resolve them. If your proxies stop working and you see a `Suspended` status, it's always for a clear reason. Here are the possible causes. ### Cause 1: Zero Account Balance (Most Common) This is the most frequent reason for suspension. * **What happened:** Your Pay-As-You-Go proxies have consumed all the funds in your main account balance. * **How to check:** Go to your **[Billing](https://2extract.com/app/billing)** page. If your balance is \$0.00 or less, this is the cause. * **Solution:** Simply **top up your balance**. All your proxies will be reactivated automatically and instantly upon successful payment. ### Cause 2: Proxy Usage Limit Reached You may have set a specific traffic limit for one of your proxies. * **What happened:** A specific proxy has reached its daily or monthly traffic limit. * **How to check:** Go to the **[My Proxies](https://2extract.com/app/proxies)** page. The suspended proxy will show its usage as `10 / 10 GB`, for example. * **Solution:** Edit the proxy's settings and **increase or remove its usage limit**. ### Cause 3: Violation of Terms of Service In rare cases, we may suspend an account or proxy if our monitoring systems detect activity that violates our **[Acceptable Use Policy](/legal/acceptable-use-policy)**. This includes activities like spam, fraud, or launching attacks. * **What happened:** Our security system has flagged your activity. * **Solution:** If you believe this is an error, please **contact our [Support Team](mailto:support@2extract.com)** immediately. We will investigate the issue with you. # My requests are being blocked or I see CAPTCHA Source: https://docs.2extract.com/help/common-problems/blocked-or-captcha Strategies to handle blocks from target websites and improve your scraping success rate. If you're getting blocked, seeing CAPTCHAs, or receiving error codes like `403 Forbidden` or `429 Too Many Requests`, congratulations – **our proxy is working perfectly!** The issue is not with our service, but with the anti-bot defenses of the website you are targeting. Here are the most effective strategies to overcome these blocks. ### Strategy 1: Use Sticky Sessions Sending every request from a new IP is highly suspicious for many websites. Mimic a real user by maintaining the same IP for a sequence of actions. * **How:** Add the `-session-[your_id]` parameter to your proxy username. * **When:** Essential for logging in, navigating through multiple pages, or any multi-step process. * **Learn more:** [Session Control Guide](/proxy-products/configuration/session) ### Strategy 2: Rotate Your Geo-Location Some websites are less strict with traffic from certain countries. Experiment with different locations. * **How:** Use the `-country-[code]` parameter. Try targeting a country close to the target website's servers. * **When:** Useful if you notice that blocks are specific to your default location. ### Strategy 3: Perfect Your HTTP Headers The `User-Agent` is the most common fingerprint websites check. * **How:** Ensure your scraper is sending a modern, realistic browser `User-Agent` (e.g., a recent Chrome or Firefox version). Do not use the default `python-requests` User-Agent. * **Best Practice:** Create a list of 5-10 real User-Agents and rotate them randomly for each request. Also, consider mimicking other headers like `Accept-Language` and `Referer`. ### Strategy 4: Slow Down and Be Human Bots are fast. Humans are not. A high request rate is the easiest way to get blocked. * **How:** Add a random delay (e.g., between 2 to 5 seconds) between your requests. Never scrape as fast as you can. * **When:** Always. This is the single most important principle of ethical and successful web scraping. ### Strategy 5: Consider Mobile Proxies (For the Toughest Targets) For highly protected targets like social media or flight aggregators, even residential proxies can be blocked. Mobile IPs have the highest trust level. * **How:** [Create a Mobile Proxy](/proxy-products/mobile/introduction-use-cases) and use it for these specific tasks. * **When:** When all other strategies fail on a particularly difficult website. # How do I use your proxies with Puppeteer/Scrapy/Selenium? Source: https://docs.2extract.com/help/common-problems/how-to-with-frameworks Find direct links to our detailed integration guides for the most popular scraping frameworks and tools. Integrating our proxies into your favorite tools is straightforward. While the exact implementation varies, the core principle is always the same: you need to configure your tool's HTTP client to route its requests through our gateway using your credentials. We have created detailed, copy-paste ready guides for the most popular tools in our **Integrations** section. ### Scraping Frameworks & Libraries * **[Python: Requests Integration](/integrations/scraping-frameworks/python-requests)** * **[Python: Scrapy Integration](/integrations/scraping-frameworks/python-scrapy)** * **[Node.js: Puppeteer Integration](/integrations/scraping-frameworks/nodejs-puppeteer)** * **[Node.js: Playwright Integration](/integrations/scraping-frameworks/nodejs-playwright)** * **[Node.js: Axios Integration](/integrations/scraping-frameworks/nodejs-axios)** ### Browser Automation * **[Selenium Integration (All Languages)](/integrations/scraping-frameworks/selenium)** ### Other Tools * **[Anti-Detect Browsers (e.g., AdsPower, Dolphin)](/integrations/anti-detect-browsers)** * **[Browser Extensions (e.g., FoxyProxy)](/integrations/proxy-managers)** > [!NOTE] > > Can't find your tool? Our general connection format (`username:pass@host:port`) is compatible with almost any application that supports HTTP/SOCKS5 proxies. If you need help, don't hesitate to **[contact support](mailto:support@2extract.com)**. # My IP location is incorrect Source: https://docs.2extract.com/help/common-problems/ip-location-incorrect Why the location of your proxy IP might differ from the location you targeted, or from what other checking tools report. You may notice that when you check your proxy's IP address on different websites, they sometimes report different locations (especially the city). This is a normal and expected phenomenon in the geolocation industry. There is one case, however, where the location really is not what you asked for - and it has a definite cause. Start there. ### I Changed the Targeting but Still Get the Old Location If you changed the targeting in your username and still get IPs from the **previous** location, you are almost certainly reusing a sticky session ID. This is not a geolocation database issue. A session ID binds the configuration it was first used with. Every request that reuses the same `-session` value keeps the original location until the session expires, even if the username now says otherwise: ``` ...-proxy-my_scraper-country-ua-session-a1b2c3 -> Ukraine ...-proxy-my_scraper-country-us-session-a1b2c3 -> still Ukraine ...-proxy-my_scraper-country-us-session-f9e8d7 -> United States ``` **Fix:** change the `-session` value together with the targeting, or drop `-session` entirely if you do not need a sticky IP. See [Session Control Parameters](/proxy-products/configuration/session). If your username has no `-session` parameter, read on - the mismatch is most likely a difference between geolocation databases. ### Why Do Location Mismatches Happen? There is no single, central database for IP geolocation. Every IP checking service (including us) subscribes to a data provider, such as MaxMind or DB-IP. These providers constantly update their databases, but they don't all update at the same time. This can lead to temporary discrepancies: * **Provider A** might have updated its database yesterday, correctly identifying an IP as being in Berlin. * **Provider B** might be using a database from last week, which still lists that same IP as being in Munich. ### What 2extract.com Guarantees While the city-level accuracy can vary slightly, we guarantee the following: 1. **Country-Level Accuracy:** When you request a proxy from a specific country (e.g., `-country-de`), the IP address will **always** belong to that country. 2. **Data Source:** Our targeting is based on data from leading industry providers to ensure the highest possible accuracy. ### How to Verify Your Location If you need a consistent point of reference, we recommend using a well-regarded checker like [IPinfo.io](https://ipinfo.io/) to verify the location of your IP address. > [!NOTE] > > If you consistently receive IPs from a country different from the one you targeted, this is not a database issue. Check that you are not reusing a sticky session ID (see above), then double-check your username parameters or contact our **[Support Team](mailto:support@2extract.com)**. # My connection is slow Source: https://docs.2extract.com/help/common-problems/slow-connection Learn why your proxy connection might be slow and how to optimize it for better performance. The speed of a proxy connection depends on multiple factors. If you are experiencing slow response times, here is a checklist to help you diagnose the cause. ### Factor 1: The "Speed of Light" (Geography) The physical distance between your server, our proxy, and the target website is the most significant factor. * **Scenario:** Your scraping server is in New York, your proxy is in Australia, and the target website is in London. Your data has to travel around the world and back. * **Solution: Co-location.** Try to choose a proxy geo-location that is physically close to either **your server** or the **target website**. * If the target server is fast, choose a proxy **close to your server**. * If the target server is slow, choose a proxy **close to the target**. ### Factor 2: The Target Website's Performance Often, the bottleneck is not the proxy, but the website you are scraping. * **How to Test:** Try making the same request to a known fast website (like `google.com`) through the same proxy. * **If the request to Google is fast:** The problem is with your original target website, not our proxy. * **If the request to Google is also slow:** The problem might be with the proxy connection. ### Factor 3: The Specific Residential IP Residential and mobile IPs are real devices, and their connection speeds can vary. Occasionally, you may be assigned an IP on a slower network. * **Solution: Rotate the IP.** Simply make your next request with a new session ID (or no session ID) to get a new IP address from our pool. The vast majority of IPs in our network are on high-speed connections. ### Factor 4: Your Own Network Connection Ensure that the network connection of your own server is not the bottleneck. Run a speed test from your server to a nearby location to check its baseline performance. # My proxy is not connecting (Timeout / Connection Refused) Source: https://docs.2extract.com/help/common-problems/timeout-connection-refused What to do when you can't establish a connection to our proxy gateway. Connection Timeouts or "Connection Refused" errors typically indicate a network-level issue between your machine and our proxy gateway. Here’s how to troubleshoot it. ### Step 1: Verify Host and Port First, ensure you are using the correct host and port number for your proxy. * **Host:** `proxy.2extract.net` * **Port:** `5555` A common mistake is using the wrong port number or misspelling the host. ### Step 2: Check Your Firewall Your local machine, server, or cloud provider (like AWS or Google Cloud) may have a firewall that blocks outgoing connections to specific ports. 1. **Check your local firewall rules** (e.g., Windows Firewall, `ufw` on Linux). 2. **Check your cloud provider's security group rules.** Make sure that outgoing (egress) traffic is allowed to the TCP port your proxy uses. ### Step 3: Use a Network Diagnostic Tool You can use a built-in tool from your command line to check for basic connectivity. ```bash macOS / Linux theme={null} nc -zv proxy.2extract.net 5555 ``` ```powershell Windows (PowerShell) theme={null} Test-NetConnection -ComputerName proxy.2extract.net -Port 5555 ``` * If the connection succeeds (`nc` shows `succeeded`, PowerShell shows `TcpTestSucceeded: True`): your network path is fine. The problem is likely in your script's configuration. * If the command hangs or reports a failure: there is a network block somewhere between you and our gateway. Re-check your firewall rules. > [!NOTE] > > If you've checked all of the above and the issue persists, please contact our **[Support Team](mailto:support@2extract.com)** and provide them with the output of your diagnostic tests. # I've reached my traffic limit, what happens now? Source: https://docs.2extract.com/help/common-problems/traffic-limit-reached What happens when your proxy reaches its configured traffic limit and how to get it working again. Setting a usage limit on your proxies is a great way to control your spending. Here’s what happens when that limit is reached. ### 1. The Proxy is Automatically Suspended When a proxy's consumed traffic (for the current day or month) equals or exceeds the limit you've set, its status will automatically change to **`Suspended`**. * **What this means:** The proxy will immediately stop accepting new connection requests. Any script or tool using it will receive a connection error (typically a `407` error). * **Where to check:** You will see the `Suspended` status badge next to the proxy name on your **[My Proxies](https://2extract.com/app/proxies)** dashboard. ### 2. The Limit Resets Automatically Your usage limit is not permanent. It will automatically reset at the beginning of the next usage period. * **If you set a `daily` limit:** The counter resets to zero at 00:00 UTC every day. * **If you set a `monthly` limit:** The counter resets to zero at 00:00 UTC on the first day of each calendar month. Once the period resets, the proxy's status will automatically return to **`Active`**, and it will start working again (provided your account balance is positive). ### How to Reactivate a Suspended Proxy Immediately If you don't want to wait for the automatic reset, you have two options: 1. **Increase the Limit:** Navigate to the proxy's settings page and increase the `Usage Limit` to a higher value. 2. **Remove the Limit:** Set the limit to be unlimited. After saving the changes, the proxy's status will immediately update to `Active`. ![](https://mintcdn.com/2extract/czMMSEnEIK6HnBXV/images/proxy_settings_usage_limit.png?fit=max\&auto=format\&n=czMMSEnEIK6HnBXV\&q=85\&s=d2f14b6ae07264e6c920b55efb470a39) You can edit the usage limit at any time in the proxy's settings. # Billing Questions Source: https://docs.2extract.com/help/faq/billing Answers to common questions about payments, balance, plans, and refunds. > [accordion] What payment methods do you accept? > > We accept credit and debit cards (Visa, MasterCard, American Express), processed securely by our payment partner Stripe, and cryptocurrency. PayPal is not supported. > [accordion] How does the Pay-As-You-Go (PAYG) plan work? > > With PAYG, you simply top up your account balance. As your proxies consume traffic, the cost is automatically deducted from this balance based on the per-GB rate for your chosen proxy type. You can learn more in our **[How Billing Works](/guides/billing-usage)** guide. > [accordion] Does my balance expire? > > No. Your account balance does not expire as long as your account remains active. However, we reserve the right to close accounts that have been inactive for over 12 months, as stated in our **[Terms of Service](/legal/terms)**. > [accordion] How can I see my payment history and get invoices? > > You can access your complete payment history, download invoices, and manage your payment methods at any time via the Stripe Customer Portal. You can find a secure link to it on your **[Billing](https://2extract.com/app/billing)** page. > [accordion] Can I set a budget or limit on my spending? > > Yes! For every proxy you create, you can set a daily or monthly **Usage Limit**. This is a powerful tool to control your costs and prevent unexpected spending. You can configure this on the proxy's settings page. > [accordion] Do you offer refunds? > > As a general rule, all purchases are final and non-refundable. However, we may offer a refund in the case of a technical failure on our side, provided it is reported within 48 hours. Please see our **[Terms of Service](/legal/terms)** for the full policy. > [accordion] Why can't I deposit more than \$50? > > You need to complete identity verification. See our **[Account Verification guide](/guides/account-management#account-verification-kyc)**. # General Questions Source: https://docs.2extract.com/help/faq/general Find answers to the most common questions about 2extract.com, our services, and our policies. > [accordion] What is 2extract.com? > > 2extract.com is a proxy service provider focused on offering high-quality, ethically sourced residential and mobile proxies. We provide developers and businesses with the tools they need to reliably collect public web data at scale. > [accordion] What makes 2extract.com different? > > We are built on three core principles: > > 1. **100% Ethical Sourcing:** Every IP in our network comes from a real, informed user who has given their explicit consent. > 2. **Developer-First Experience:** We provide a powerful API, an intuitive dashboard, and clear documentation to make integration as seamless as possible. > 3. **Transparent Pricing:** Our pricing models are simple and predictable, with no hidden fees. > [accordion] What types of proxies do you offer? > > We offer two proxy types, both billed per GB on Pay-As-You-Go: > > * **[Residential Proxies](/proxy-products/residential/introduction-use-cases)** - real desktop devices on home ISP connections. > * **[Mobile Proxies](/proxy-products/mobile/introduction-use-cases)** - real devices on 4G/5G mobile networks, with targeting by mobile operator. > > We do not offer static residential (ISP), datacenter or dedicated IP proxies. > [accordion] Is your service legal? > > Yes. Using proxies to access public web data is legal. However, you are solely responsible for ensuring that your specific data collection activities comply with all applicable laws (like GDPR and CCPA) and the terms of service of the websites you are targeting. For more details, please see our **[Terms of Service](/legal/terms)**. > [accordion] Can I get a free trial? > > We do not offer a traditional free trial. Instead, we have a very low entry barrier with our Pay-As-You-Go plan, allowing you to test our service with a minimal commitment (a \$10 top-up). We may also offer free test traffic to qualified users who schedule a product demo. > [accordion] Do you have a referral or affiliate program? > > Yes. Every account has a personal referral link on the **Referral Program** page, available from the account menu in your dashboard. You can customize the link. > > * You earn **10% of every deposit** made by users who sign up through your link. > * The bonus is added to your balance automatically. There is no cap on earnings and no expiration. > * The referral cookie lasts **10 days**: anyone who clicks your link and registers within 10 days becomes your referral, even if they make their first deposit later. > > Bonuses appear on the **[Billing](https://2extract.com/app/billing)** page in Transaction History as **Referral Bonus**. > [accordion] What countries do you have IPs in? > > Our network covers over 195 countries worldwide. You can see a full list of available countries and apply targeting using the methods described in our **[Geo-Targeting Guide](/proxy-products/configuration/geo-targeting)**. # Proxy & Connection Issues Source: https://docs.2extract.com/help/faq/proxy-connection Find answers to the most common technical questions about connecting to and using our proxies. > [accordion] What is the difference between HTTP and SOCKS5 protocols? > > Both are protocols used to route your traffic. > > * **HTTP/S** is the most common and is supported by virtually all tools. It's ideal for web scraping. > * **SOCKS5** is a more versatile, lower-level protocol that can handle different types of traffic beyond just web browsing. > For most web scraping tasks, **HTTP is the recommended choice**. You can learn more in our **[Protocols Guide](/proxy-products/configuration/protocols)**. > [accordion] What is the difference between Rotating and Sticky sessions? > > * **Rotating Sessions (Default):** You get a new IP address for every single request you make. This is best for maximum anonymity and scraping many simple pages. > * **Sticky Sessions:** You keep the same IP address for a set period (10 minutes). This is essential for tasks that require multiple steps, like logging into an account or completing a checkout process. > For a detailed comparison, see our **[Session Control Guide](/proxy-products/configuration/session)**. > [accordion] Why am I getting a 407 Proxy Authentication Required error? > > This error means there's a problem with your access credentials or permissions. It is almost always caused by one of these issues: > > 1. **Incorrect Username or Password:** Double-check your proxy credentials. > 2. **IP Not Whitelisted:** Your server's IP address is not in the `Authorized IPs` list for that specific proxy. > 3. **Zero Balance:** Your account balance has run out. Please top up on the **[Billing](https://2extract.com/app/billing)** page. > 4. **Proxy is Inactive/Suspended:** Check the proxy's status on the **[My Proxies](https://2extract.com/app/proxies)** page. > [accordion] Why are my requests getting blocked or showing a CAPTCHA? > > This is usually a sign that the **target website** has detected scraping activity. Our proxies are working, but the target is fighting back. Here are some things to try: > > * **Use a Sticky Session:** A constantly changing IP can be suspicious. Try using a sticky session to mimic a real user. > * **Change Your Geo-Location:** The target may be less strict for traffic from a different country. > * **Check Your Headers:** Ensure you are sending realistic `User-Agent` and other HTTP headers. > * **Slow Down:** A high request rate is a major red flag. Add delays between your requests. > [accordion] My proxy IP's location doesn't match what another service shows. Why? > > IP geolocation is not an exact science, and different providers use different databases that update at different times. We rely on industry-standard databases to provide the most accurate targeting possible. A slight mismatch in the reported city is normal, but the country should always be correct. # Glossary Source: https://docs.2extract.com/help/glossary Understand the key terms and concepts used across the 2extract.com platform and documentation. Welcome to the 2extract.com glossary. This page provides definitions for the common terms you will encounter while using our services. Click on any term to expand its definition. > [accordion] Actor > > The entity that performs an action within your account. An actor can be a registered user (e.g., `you@example.com`), an API Token (e.g., `API Token: "My Scraper"`), or the `System` itself (for automated actions). You can see the actor for each event in your **[Event Log](https://2extract.com/app/profile)**. > [accordion] ASN (Autonomous System Number) > > A unique number assigned to an Internet Service Provider (ISP). Targeting by ASN (`-asn-[number]`) allows you to get IP addresses from a specific network provider, such as Comcast or AT\&T. > [accordion] Authorized IPs (IP Whitelist) > > A security feature that restricts proxy access to a list of pre-approved IP addresses. Requests from IPs not on this list will be rejected, even with valid credentials. This can be configured for each individual **Proxy**. > [accordion] Balance > > Your central account wallet in USD. Funds are added via top-ups and are used to pay for **Pay-As-You-Go** traffic and any overage from subscription plans. You can manage it on your **[Billing](https://2extract.com/app/billing)** page. > [accordion] Carrier > > A mobile network operator (e.g., T-Mobile, Verizon, Vodafone). Carrier targeting (`-carrier-[name]`) is a feature exclusive to **Mobile Proxies**. > [accordion] Mobile Proxy > > An IP address from a real mobile device on a 4G or 5G cellular network. Mobile proxies offer the highest level of trust and are ideal for targeting mobile-first websites and social media. > [accordion] Pay-As-You-Go (PAYG) > > A flexible billing plan where you are charged only for the traffic you consume. The cost is deducted from your main account **Balance**. > [accordion] Proxy > > Your personal, configurable gateway to our network. Each proxy you create has its own unique credentials, plan, security settings, and usage statistics. This allows you to manage different projects independently. > [accordion] Residential Proxy > > An IP address from a real desktop or laptop device connected to a genuine home Wi-Fi or cable network (ISP). These proxies are highly trusted and excellent for most web scraping tasks. > [accordion] Rotation > > The process of changing the IP address used for your requests. > > * **Per-Request Rotation (Default):** You get a new IP for every request. > * **Sticky Session:** You keep the same IP for multiple requests. > [accordion] Session > > A series of requests made from the same IP address. You can create a **Sticky Session** using the `-session-[id]` parameter. > [accordion] Status > > The current state of your proxy: > > * **Active:** The proxy is running and ready to use. > * **Inactive:** The proxy has been manually paused by you and will not accept connections. > * **Suspended:** The proxy has been automatically stopped, either due to reaching a usage limit or a zero account balance. > [accordion] Subscription > > A recurring billing plan (e.g., "Starter 30GB") that provides a set amount of traffic for a fixed monthly fee. Subscription plans will be available in a future update. > [accordion] Target Whitelist > > A security feature for a specific **Proxy** that allows it to connect only to a predefined list of domains or hostnames (e.g., `google.com`, `*.wikipedia.org`). > [accordion] Username Parameters > > Special suffixes (like `-country-de` or `-session-user123`) that you can add to your proxy's username to control its behavior (e.g., geo-targeting, session type) in real-time for each request. # Welcome to 2extract Documentation Source: https://docs.2extract.com/index Start here to understand what 2extract offers and how to get productive quickly. This is your central hub for integrating and mastering our ethically sourced residential proxy network. Whether you're making your first request or building a large-scale data extraction pipeline, you'll find everything you need right here. > [card] [Start here](/getting-started/quick-start) > > Go from zero to your first successful request in under 2 minutes. ## Our Philosophy We built 2extract.com on two core principles. > [accordion] 1. An unmatched developer experience > > We believe a proxy service should be a tool, not an obstacle. That's why we've built a clear, predictable API, an intuitive dashboard, and this comprehensive documentation. Our goal is to help you spend less time debugging and more time getting the data you need. > [accordion] 2. A commitment to ethics > > Every IP in our network is 100% ethically sourced from real users who have given their explicit consent. We provide our peers with full transparency and control. When you scrape with 2extract, you're using a network you can trust. ## Key Concepts To get the most out of 2extract, it's helpful to understand these core concepts. ### Proxy Your configurable gateway to our network. Each proxy has its own credentials, plan, and security settings, allowing you to manage different projects independently. ### Balance Your central account wallet. You top up this balance to pay for your Pay-As-You-Go proxies. ### Proxy Gateway The system that receives your requests. You control its behavior in real-time by adding parameters (like `-country-de`) to your proxy's username. ## Dive Right In > [card] [Proxy Gateway Configuration](/proxy-products/configuration) > > Learn how to control geo-targeting, sessions, and rotation by adding parameters to your username. > [card] Management API Reference (Coming Soon) > > Explore all endpoints to programmatically manage your proxies, account, and billing. > [card] [Integration Guides](/integrations/frameworks/python-requests) > > Find copy-paste ready examples for your favorite tools like Python, Puppeteer, and Scrapy. ## Need Help? Can't find what you're looking for? We're here to help. > [card] [Common Problems](https://help.2extract.com) > > Find quick solutions to the most frequently asked questions. > [card] [Contact Support](mailto:support@2extract.com) > > Our team of engineers is ready to assist you with any issue. > [card] [See Our Pricing](https://2extract.com) > > View our transparent, pay-as-you-go pricing with no hidden fees. # 0detect Source: https://docs.2extract.com/integrations/antidetect/0detect Configure 0detect with 2extract proxies. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly. 1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network". 2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol. 3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details: * **Host/IP:** `proxy.2extract.net` * **Port:** `5555` * **Login/Username:** Your proxy `Username` * **Password:** Your proxy `Password` 4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy. 5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile. > [!WARNING] > > If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network. # ADBLogin Source: https://docs.2extract.com/integrations/antidetect/adblogin Use ADBLogin with 2extract proxies. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly. 1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network". 2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol. 3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details: * **Host/IP:** `proxy.2extract.net` * **Port:** `5555` * **Login/Username:** Your proxy `Username` * **Password:** Your proxy `Password` 4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy. 5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile. > [!WARNING] > > If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network. # AdsPower Source: https://docs.2extract.com/integrations/antidetect/adspower Use 2extract proxies in AdsPower. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. 1. **Open Profile Management:** Launch AdsPower and go to "Profile Management". 2. **Create or Edit Profile:** Click **Create** or edit an existing profile. 3. **Set Proxy Information:** In the "Proxy" section, select the proxy type as **HTTP**. 4. **Enter Credentials:** * **Proxy Host:** `proxy.2extract.net` * **Proxy Port:** `5555` * **Proxy Account:** Your proxy `Username` * **Proxy Password:** Your proxy `Password` 5. **Verify:** Click **Check Proxy** to test the connection. 6. **Confirm:** Click **OK** to save the proxy settings for the profile. # BitBrowser Source: https://docs.2extract.com/integrations/antidetect/bitbrowser Configure BitBrowser with 2extract proxies. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly. 1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network". 2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol. 3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details: * **Host/IP:** `proxy.2extract.net` * **Port:** `5555` * **Login/Username:** Your proxy `Username` * **Password:** Your proxy `Password` 4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy. 5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile. > [!WARNING] > > If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network. # Camoufox Source: https://docs.2extract.com/integrations/antidetect/camoufox Use 2extract proxies in Camoufox. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly. 1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network". 2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol. 3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details: * **Host/IP:** `proxy.2extract.net` * **Port:** `5555` * **Login/Username:** Your proxy `Username` * **Password:** Your proxy `Password` 4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy. 5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile. > [!WARNING] > > If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network. # ChromePowerApp Source: https://docs.2extract.com/integrations/antidetect/chromepowerapp Use 2extract proxies with ChromePowerApp. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly. 1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network". 2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol. 3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details: * **Host/IP:** `proxy.2extract.net` * **Port:** `5555` * **Login/Username:** Your proxy `Username` * **Password:** Your proxy `Password` 4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy. 5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile. > [!WARNING] > > If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network. # DisCloak Source: https://docs.2extract.com/integrations/antidetect/discloak Configure DisCloak with 2extract proxies. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly. 1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network". 2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol. 3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details: * **Host/IP:** `proxy.2extract.net` * **Port:** `5555` * **Login/Username:** Your proxy `Username` * **Password:** Your proxy `Password` 4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy. 5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile. > [!WARNING] > > If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network. # Dolphin-anty Source: https://docs.2extract.com/integrations/antidetect/dolphin-anty Configure Dolphin-anty profiles to use 2extract proxies. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. 1. **Go to the Proxies Section:** In the Dolphin Anty main menu, click on "Proxies". 2. **Create a New Proxy:** Click the **+ Create Proxy** button. 3. **Enter Proxy String:** In the popup window, paste your proxy credentials in the following format: `http://USERNAME:PASSWORD@proxy.2extract.net:5555` (Replace with your actual username, password, and port) 4. **Name and Verify:** Give your proxy a name and click **Add**. Dolphin will check the connection. 5. **Assign to Profile:** Now, go to the **Browsers** section, create a new profile or edit an existing one, and select your newly added proxy from the dropdown list. 6. **Save:** Save the browser profile to apply the settings. # GhostBrowser Source: https://docs.2extract.com/integrations/antidetect/ghostbrowser Configure GhostBrowser with 2extract proxies. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly. 1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network". 2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol. 3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details: * **Host/IP:** `proxy.2extract.net` * **Port:** `5555` * **Login/Username:** Your proxy `Username` * **Password:** Your proxy `Password` 4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy. 5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile. > [!WARNING] > > If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network. # Gologin Source: https://docs.2extract.com/integrations/antidetect/gologin Configure Gologin profiles to use 2extract proxies. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. 1. **Create a New Profile:** In the Gologin dashboard, click on **New profile**. 2. **Go to the Proxy Tab:** In the profile configuration menu, select the **Proxy** tab. 3. **Choose Your Proxy Type:** Select **HTTP Proxy** from the connection type list. 4. **Fill in the Details:** Enter your 2extract.com credentials: * **Host or IP:** `proxy.2extract.net` * **Port:** `5555` * **Username:** Your proxy `Username` * **Password:** Your proxy `Password` 5. **Check Connection:** Use the **Check Proxy** button to confirm that the connection is working. 6. **Create Profile:** Click **Create Profile**. # Gpmlogin Source: https://docs.2extract.com/integrations/antidetect/gpmlogin Configure Gpmlogin with 2extract proxies. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly. 1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network". 2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol. 3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details: * **Host/IP:** `proxy.2extract.net` * **Port:** `5555` * **Login/Username:** Your proxy `Username` * **Password:** Your proxy `Password` 4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy. 5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile. > [!WARNING] > > If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network. # Incogniton Source: https://docs.2extract.com/integrations/antidetect/incogniton Set up Incogniton with 2extract proxies. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. 1. **Start a New Profile:** In the Incogniton dashboard, click \*\*New profile&&. 2. **Go to Proxy Settings:** Navigate to the "Proxy" section. 3. **Select Connection Type:** Choose **HTTP proxy**. 4. **Enter Credentials:** Fill in your 2extract.com proxy details in the provided fields (Host, Port, Username, Password). 5. **Check and Save:** Click **Check proxy** to verify the connection, then save the profile. # Indigo Source: https://docs.2extract.com/integrations/antidetect/indigo Use 2extract proxies in Indigo Browser. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. 1. **Create a New Profile:** Click **New browser profile** in the main dashboard. 2. **Proxy Settings:** In the "Proxy" section, click **New proxy**. 3. **Enter Details:** * Select the proxy type: **HTTP Proxy**. * Fill in the `IP address` (e.g., `proxy.2extract.net`), `Port`, `Login`, and `Password`. 4. **Check and Create:** Click **Check proxy** to test it, then **Create profile**. # ixBrowser Source: https://docs.2extract.com/integrations/antidetect/ixbrowser Use 2extract in ixBrowser profiles. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly. 1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network". 2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol. 3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details: * **Host/IP:** `proxy.2extract.net` * **Port:** `5555` * **Login/Username:** Your proxy `Username` * **Password:** Your proxy `Password` 4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy. 5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile. > [!WARNING] > > If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network. # Kameleo Source: https://docs.2extract.com/integrations/antidetect/kameleo Configure Kameleo profiles to use 2extract. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. 1. **New Profile:** In the Kameleo dashboard, create a new profile. 2. **Proxy Settings:** In the "Connection" section, select "Proxy" and choose **HTTP** as the type. 3. **Enter Credentials:** Fill in the Host, Port, Username, and Password fields with your 2extract.com details. 4. **Test and Save:** Test the connection using the provided button and then save the profile. # LightPanda Source: https://docs.2extract.com/integrations/antidetect/lightpanda Configure LightPanda with 2extract proxies. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly. 1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network". 2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol. 3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details: * **Host/IP:** `proxy.2extract.net` * **Port:** `5555` * **Login/Username:** Your proxy `Username` * **Password:** Your proxy `Password` 4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy. 5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile. > [!WARNING] > > If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network. # LinkenSphere Source: https://docs.2extract.com/integrations/antidetect/linkensphere Configure LinkenSphere with 2extract proxies. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. 1. **Create a New Session:** In the Session Manager, click **New Session**. 2. **Go to Proxy Settings:** Click the **Set proxy** button or navigate to the proxy tab. 3. **Select Protocol:** Choose **HTTP** (or HTTPS). 4. **Enter Credentials:** Input your proxy details in the format `login:password@host:port`. `PROXY_USERNAME:PROXY_PASSWORD@proxy.2extract.net:5555` 5. **Save:** Save the proxy settings and then save the session. # Morelogin Source: https://docs.2extract.com/integrations/antidetect/morelogin Set up Morelogin with 2extract proxies. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly. 1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network". 2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol. 3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details: * **Host/IP:** `proxy.2extract.net` * **Port:** `5555` * **Login/Username:** Your proxy `Username` * **Password:** Your proxy `Password` 4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy. 5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile. > [!WARNING] > > If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network. # Multilogin Source: https://docs.2extract.com/integrations/antidetect/multilogin Configure Multilogin to use 2extract proxies. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. 1. **Create or Edit a Profile:** Open the Multilogin app and either create a new browser profile or click to edit an existing one. 2. **Navigate to Proxy Settings:** In the profile settings window, go to the "Proxy" tab. 3. **Select Connection Type:** Choose HTTP proxy as the connection type. 4. **Enter Credentials:** Fill in the fields with your 2extract.com proxy details: * **Address:** proxy.2extract.net:5555 (replace with your host & port) * **Login:** Your proxy Username * **Password:** Your proxy Password 5. **Check Proxy:** Click the **Check proxy** button to verify the connection. You should see your proxy's IP address and location. 6. **Save Profile:** Save your profile settings. All traffic within this profile will now be routed through your 2extract.com proxy. # NSTBrowser Source: https://docs.2extract.com/integrations/antidetect/nstbrowser Configure NSTBrowser with 2extract proxies. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly. 1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network". 2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol. 3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details: * **Host/IP:** `proxy.2extract.net` * **Port:** `5555` * **Login/Username:** Your proxy `Username` * **Password:** Your proxy `Password` 4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy. 5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile. > [!WARNING] > > If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network. # Octo Browser Source: https://docs.2extract.com/integrations/antidetect/octo-browser Configure Octo Browser with 2extract proxies. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. 1. **Create a New Profile:** In the Octo Browser dashboard, click **+ Create Profile**. 2. **Set Connection Type:** In the "Connection" section, select "Proxy". 3. **Choose Protocol:** Select **HTTP** as the protocol. 4. **Enter Proxy String:** Paste your proxy credentials in the `host:port:login:password` format, like this: `proxy.2extract.net:5555:PROXY_USERNAME:PROXY_PASSWORD` 5. **Check and Save:** Click **Check proxy** to validate, then **Create Profile** to save. # Overview Source: https://docs.2extract.com/integrations/antidetect/overview Connect 2extract proxies to any anti-detect browser and rotate the exit IP on demand with the IP Change URL. Anti-detect browsers all handle proxies the same way: you fill in four values, the browser routes the profile through your proxy, and an optional link lets you swap the exit IP without touching anything else. This page covers the whole flow in a browser-agnostic way. Looking for click-by-click steps in a specific app? Pick it from the **Anti-Detect Browsers** list in the sidebar - Multilogin, Dolphin Anty, GoLogin, AdsPower, Octo Browser and two dozen more. > [!NOTE] > > **Before you start:** have your proxy credentials ready. You will find them on your proxy's page in the [2extract.com Dashboard](https://2extract.com/app/proxies): > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) *** ## Where to find your values Everything you need to paste into a browser profile lives on one screen: open your proxy in the [Dashboard](https://2extract.com/app/proxies) and go to the **Integration** tab. The **Verify & Connect** block holds the ready-made connection string and, for sticky sessions, the **IP Change URL**. Below it, **Generate List** exports many connection strings at once for tools that import proxies in bulk - the whole tab is covered in [Connection Builder](/proxy-products/configuration/endpoint-generator). ![](https://mintcdn.com/2extract/Bx7DQVB7uqxpIsDt/images/proxy_settings_ip_change_url.png?fit=max\&auto=format\&n=Bx7DQVB7uqxpIsDt\&q=85\&s=7201056d065dc1a7b8569bb38b8a4ed8) The Verify & Connect block on the Integration tab. The IP Change URL appears under the code snippet when Session Type is set to Sticky. *** ## Connecting the proxy **1. Open the proxy settings of your profile** Create a new browser profile or edit an existing one and find the section named **Proxy**, **Connection** or **Network**. Some browsers keep a separate proxy library instead - in that case add the proxy there first, then assign it to the profile. **2. Choose the protocol** Pick **HTTP** or **HTTPS**. Both are supported on the same port. Choose **SOCKS5** only if your workflow specifically needs it - see [Connection Protocols](/proxy-products/configuration/protocols). **3. Fill in the four values** | Field in the browser | What to enter | | :- | :- | | Host / IP / Server / Address | `proxy.2extract.net` | | Port | `5555` | | Login / Username / User | Your proxy **Username** (the long `2xt-customer-...` string) | | Password | Your proxy **Password** | Field names differ between apps, the values do not. If the browser asks for a single line instead of separate fields, paste the connection string from **Verify & Connect**: ``` https://USERNAME:PASSWORD@proxy.2extract.net:5555 ``` > [!TIP] > > **Setting up more than one profile? Use Generate List instead.** The **Generate List** card at the bottom of the same tab exports ready lines in the layout your browser expects - `host:port:user:pass`, `user:pass@host:port` or `host,port,user,pass` - so you paste them straight into the import field instead of assembling anything by hand. Set the quantity, pick the format, press **Generate**, then **Copy All** or download a `.txt` / `.csv`. Every line carries its own session ID, so each profile gets an independent sticky IP. **4. Test the connection** Use the **Check Proxy** or **Test Connection** button that almost every anti-detect browser provides. A working setup returns the exit IP and its location. If it fails, start with [407 Proxy Authentication Required](/help/common-problems/407-proxy-authentication-required). **5. Save the profile** Save the settings. All traffic inside that profile now goes through your proxy. > [!WARNING] > > Copy the username straight from the dashboard. It carries your geo-targeting and session parameters inside the string, so an edited or truncated username changes the behavior of the proxy or breaks authentication outright. *** ## Pick the right session type first The username you copy already contains the session parameters, so decide this before you paste it anywhere. > [card] Sticky - use this for browser profiles > > The profile keeps one exit IP across requests, which is what a browser profile needs to stay consistent. Set **Session Type** to **Sticky** on the Integration tab before copying the username. > [card] Rotating > > Every request gets a different IP. Fine for scraping, wrong for a browser profile: pages would load assets through several IPs at once and sites will treat the session as suspicious. Full details on session IDs, lifetime and the `-const` flag are in [Session Control Parameters](/proxy-products/configuration/session). *** ## The IP Change URL Most anti-detect browsers have a field called **IP change link**, **Change IP URL**, **Rotation URL** or **Link to change IP** next to the proxy settings. The browser stores the URL and calls it when you press the **Change IP** button in its interface. That is all the field does: it fires an HTTP request to the address you saved. For a sticky session, 2extract gives you that address ready to use: ``` https://USERNAME:PASSWORD@proxy.2extract.net:5555/change_ip ``` It is the same credentials and the same host as your connection string, with `/change_ip` on the end. No separate token to manage. The scheme follows the protocol you selected for the proxy, so copy the URL from the dashboard rather than typing it out. > [!NOTE] > > The field is shown only when **Session Type** is **Sticky**. A rotating proxy already changes its IP on every request, so there is nothing to trigger. ### Setting it up 1. Copy the **IP Change URL** from the **Verify & Connect** block with the copy button. 2. Paste it into the IP change field of your browser profile. 3. Save the profile. The **Change IP** button in the browser is now live. ### One profile, one URL The URL works on the session ID carried inside the username it contains, so it rotates that one session and nothing else. Pressing **Change IP** in one profile never touches the others. This matters when your profiles come from **Generate List**, because every generated line has its own session ID. The IP Change URL shown in **Verify & Connect** belongs to the string displayed right above it, not to the generated lines - pasting it into all your profiles would point them at a session none of them use. Build each profile's URL from the credentials of the line that profile runs on: ``` {scheme}://USERNAME:PASSWORD@proxy.2extract.net:5555/change_ip ``` Take `USERNAME` and `PASSWORD` from that line, keep the host and port unchanged, and use the same scheme as the profile's proxy (`http` or `https`). Generating the list in the `user:pass@host:port` format makes this mechanical: add the scheme in front and `/change_ip` at the end. > [!WARNING] > > **Copy the connection string and the IP Change URL as a pair.** Both carry the same session ID. Whenever you change targeting - country, region, city, ZIP or ASN - the dashboard generates a new session ID, so the two strings you copied earlier both go stale. Re-copy both into the profile. ### What happens when you press "Change IP" 1. The browser sends a request to the URL you saved. 2. We release the exit IP currently pinned to that session ID. 3. **The new IP is assigned on the next request through the proxy**, not at the moment you click. So the click itself looks like nothing happened: there is no page reload, no popup, no visible change in the browser. Reload the page, or open an IP checker inside the profile, and you will see the new address. Everything else stays exactly as it was - your username, password, session ID and geo-targeting are untouched. You do not need to edit the profile or re-copy anything after a rotation. > [!TIP] > > Rotation works even with the `-const` flag set. `-const` exists to stop *silent* automatic rotation when a peer goes offline; pressing Change IP is a deliberate action, so it goes through. ### What it does to your browser profile Nothing in the profile itself changes. Fingerprint, User-Agent, cookies, localStorage, saved logins and open tabs all survive the rotation - the only thing that changes is the address the site sees. That is still a visible event for the site you are on: * **You may get logged out or asked to verify again.** Plenty of sites bind a session to an IP. A mid-session IP change can log you out, trigger a confirmation email or raise a captcha. Rotate between tasks rather than in the middle of a checkout or a login flow. * **The new IP comes from the same targeting, not the same place.** If your proxy is targeted at a country only, the next IP can be a different city, a different region and a different ISP within that country. For profiles that must look stable, target a city or a ZIP code - see [Geo-Targeting](/proxy-products/configuration/geo-targeting). * **Keep the profile's timezone and locale aligned.** If the browser profile pins a timezone manually, a new IP in another region of the same country can put the two out of sync. Either let the browser derive timezone from the proxy, or pin your targeting tightly enough that it cannot drift. *** ## Troubleshooting > [accordion] I pressed Change IP but the IP is the same > > The new IP is handed out on the next request, so check after a page reload rather than straight away. Also make sure the page you are checking is not served from the browser cache - open a fresh tab with an IP checker instead of reloading a cached one. > [accordion] There is no IP Change URL on the Integration tab > > The proxy is in rotating mode. Switch **Session Type** to **Sticky** in the Configuration block and the field appears under the code snippet. Remember to re-copy the connection string as well, since switching to sticky generates a session ID. > [accordion] The browser reports an error when calling the URL > > A `404` means the credentials in the URL did not match an active proxy: the username or password is wrong, was edited by hand, or the proxy has been deleted. Re-copy the URL from the dashboard. If the proxy still exists and the copied URL fails, contact [support@2extract.com](mailto:support@2extract.com). > [accordion] I changed the targeting and the profile stopped working > > Changing targeting produces a new session ID, which invalidates both strings you pasted into the profile earlier. Copy the connection string and the IP Change URL again and replace both. > [accordion] The exit IP changed on its own, without me pressing anything > > Sticky sessions are best-effort: residential peers go offline, and when yours does we assign a replacement IP so your work continues. If you would rather have the request fail than silently move to another IP, use the `-const` flag described in [Session Control Parameters](/proxy-products/configuration/session). *** ## Next steps > [card] [Session Control](/proxy-products/configuration/session) > > Session IDs, lifetime, and strict mode. > [card] [Geo-Targeting](/proxy-products/configuration/geo-targeting) > > Pin your profile to a country, city, ZIP or ASN. > [card] [Your browser](/integrations/antidetect/multilogin) > > Step-by-step guides for 27 anti-detect browsers. # PotaBrowser Source: https://docs.2extract.com/integrations/antidetect/potabrowser Configure PotaBrowser with 2extract proxies. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly. 1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network". 2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol. 3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details: * **Host/IP:** `proxy.2extract.net` * **Port:** `5555` * **Login/Username:** Your proxy `Username` * **Password:** Your proxy `Password` 4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy. 5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile. > [!WARNING] > > If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network. # Undetectable Source: https://docs.2extract.com/integrations/antidetect/undetectable Configure Undetectable with 2extract proxies. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. 1. **Create a New Profile:** From the main screen, click **New Profile**. 2. **Navigate to the Proxy Tab:** Go to the "Proxy" tab in the new profile settings. 3. **Add a New Proxy:** Click **New Proxy**. 4. **Enter Details:** Select **HTTP** as the protocol and enter your proxy `Host`, `Port`, `Login`, and `Password`. 5. **Check and Assign:** Check the proxy connection. If successful, assign it to the profile and save. # VektorT13 Source: https://docs.2extract.com/integrations/antidetect/vektort13 Use VektorT13 with 2extract proxies. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly. 1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network". 2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol. 3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details: * **Host/IP:** `proxy.2extract.net` * **Port:** `5555` * **Login/Username:** Your proxy `Username` * **Password:** Your proxy `Password` 4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy. 5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile. > [!WARNING] > > If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network. # Vmlogin Source: https://docs.2extract.com/integrations/antidetect/vmlogin Use 2extract with Vmlogin. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly. 1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network". 2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol. 3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details: * **Host/IP:** `proxy.2extract.net` * **Port:** `5555` * **Login/Username:** Your proxy `Username` * **Password:** Your proxy `Password` 4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy. 5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile. > [!WARNING] > > If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network. # Wade Source: https://docs.2extract.com/integrations/antidetect/wade Configure Wade browser with 2extract proxies. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly. 1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network". 2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol. 3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details: * **Host/IP:** `proxy.2extract.net` * **Port:** `5555` * **Login/Username:** Your proxy `Username` * **Password:** Your proxy `Password` 4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy. 5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile. > [!WARNING] > > If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network. # Whologin Source: https://docs.2extract.com/integrations/antidetect/whologin Use Whologin with 2extract proxies. > [!NOTE] > > **Before you start:** Make sure you have your proxy credentials ready. You can find them in your proxy's settings page in the [2extract.com Dashboard](https://2extract.com/app/proxies). You will need: > > * **Host:** `proxy.2extract.net` > * **Port:** `5555` > * **Username:** (e.g., `2xt-customer-...`) > * **Password:** (Your proxy's password) > > Setting up a browser profile for the first time, or want to rotate the exit IP from the browser? Start with **[Anti-Detect Browsers](/integrations/antidetect/overview)**. The process for setting up a proxy in virtually all anti-detect browsers is highly standardized. Please follow these general steps, as the specific field names may vary slightly. 1. **Find Proxy Settings:** When creating or editing a new browser profile, locate the section or tab named **"Proxy"**, "Connection", or "Network". 2. **Select Protocol:** Choose **HTTP** or **HTTPS** as the proxy type/protocol. 3. **Enter Your Credentials:** You will see fields for the following information. Fill them out with your 2extract.com details: * **Host/IP:** `proxy.2extract.net` * **Port:** `5555` * **Login/Username:** Your proxy `Username` * **Password:** Your proxy `Password` 4. **Check the Connection:** Almost all browsers have a **Check Proxy** or **Test Connection** button. Use it to ensure your settings are correct. You should see a success message with the IP address of your proxy. 5. **Save the Profile:** Save the settings to apply them to your new or existing browser profile. > [!WARNING] > > If a specific browser does not offer its own internal proxy settings, it will rely on your system's proxy configuration. In this case, we recommend using a system-wide tool like **[Proxifier](/integrations/tools/proxifier)** to route the browser's traffic through our network. # Go: net/http Source: https://docs.2extract.com/integrations/frameworks/go-net-http Learn how to integrate 2extract.com proxies into your Go applications using the standard `net/http` package for high-performance web scraping. Go is a fantastic choice for building high-performance, concurrent web scrapers. Integrating 2extract.com proxies is straightforward using the standard library's `net/http` package by configuring a custom `http.Transport`. ### Basic Setup The key to using a proxy with authentication in Go is to create a custom `http.Client` with a `Transport` that has its `Proxy` field set. ```go basic_setup.go icon="golang" lines wrap theme={null} package main import ( "fmt" "io/ioutil" "log" "net/http" "net/url" ) func main() { // 1. Get these from your proxy's "Connection Details" page proxyHost := "proxy.2extract.net" proxyPort := 5555 proxyUser := "PROXY_USERNAME" proxyPass := "PROXY_PASSWORD" // 2. Construct the proxy URL with credentials proxyURLString := fmt.Sprintf("http://%s:%s@%s:%d", proxyUser, proxyPass, proxyHost, proxyPort) proxyURL, err := url.Parse(proxyURLString) if err != nil { log.Fatalf("Failed to parse proxy URL: %v", err) } // 3. Create a custom HTTP transport and set the Proxy transport := &http.Transport{ Proxy: http.ProxyURL(proxyURL), } // 4. Create a custom HTTP client using the transport client := &http.Client{ Transport: transport, } // 5. Make your request! fmt.Println("Making request to IP checker...") resp, err := client.Get("https://api.ipify.org?format=json") if err != nil { log.Fatalf("Failed to make request: %v", err) } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatalf("Failed to read response body: %v", err) } fmt.Printf("Success! Your proxy IP is: %s\n", string(body)) } ``` ### Real-World Example: Scraping Hacker News Headlines Let's build a simple but efficient Go application to scrape the titles of the top stories from the Hacker News homepage (`news.ycombinator.com`). This is a classic scraping target. This example demonstrates how to create a reusable function to perform the scraping, making it easy to adapt for other targets. We will target Hacker News as if we were in the **United Kingdom (GB)**. > [!NOTE] > > This example uses the `goquery` package for easy HTML parsing, similar to jQuery. Install it with: > `go get github.com/PuerkitoBio/goquery` ```go hn_scraper.go icon="golang" lines wrap theme={null} package main import ( "fmt" "log" "net/http" "net/url" "github.com/PuerkitoBio/goquery" ) // --- Your Base Credentials --- const ( BASE_USERNAME = "PROXY_USERNAME" PASSWORD = "PROXY_PASSWORD" PROXY_HOST = "proxy.2extract.net" PROXY_PORT = 5555 ) // createProxyClient creates and returns an http.Client configured with our proxy. func createProxyClient(region string) (*http.Client, error) { // Dynamically construct the username for the target region proxyUser := fmt.Sprintf("%s-country-%s", BASE_USERNAME, region) proxyURLString := fmt.Sprintf("http://%s:%s@%s:%d", proxyUser, PASSWORD, PROXY_HOST, PROXY_PORT) proxyURL, err := url.Parse(proxyURLString) if err != nil { return nil, fmt.Errorf("failed to parse proxy URL: %w", err) } transport := &http.Transport{ Proxy: http.ProxyURL(proxyURL), } client := &http.Client{ Transport: transport, } return client, nil } func main() { targetRegion := "gb" // Great Britain fmt.Printf("--- Scraping Hacker News from %s ---\n", targetRegion) // Create our custom, proxy-enabled HTTP client client, err := createProxyClient(targetRegion) if err != nil { log.Fatal(err) } // Make the request to Hacker News resp, err := client.Get("https://news.ycombinator.com") if err != nil { log.Fatalf("Failed to scrape Hacker News: %v", err) } defer resp.Body.Close() if resp.StatusCode != 200 { log.Fatalf("Hacker News returned a non-200 status code: %d %s", resp.StatusCode, resp.Status) } // Load the HTML document into goquery doc, err := goquery.NewDocumentFromReader(resp.Body) if err != nil { log.Fatalf("Failed to parse HTML: %v", err) } fmt.Println("Top 5 Headlines:") // Find the story links and print their titles doc.Find("tr.athing .titleline > a").Each(func(i int, s *goquery.Selection) { if i < 5 { // Limit to the top 5 for this example title := s.Text() fmt.Printf("%d. %s\n", i+1, title) } }) } ``` ### How to Run 1. Make sure you have Go installed. 2. Install the `goquery` package: `go get github.com/PuerkitoBio/goquery` 3. Save the code as `hn_scraper.go`. 4. Run from your terminal: `go run hn_scraper.go` ### Expected Output ```bash Terminal icon="terminal" theme={null} --- Scraping Hacker News from gb --- Top 5 Headlines: 1. Show HN: I built a terminal UI for ChatGPT 2. The unreasonable effectiveness of just showing up everyday 3. Why are manhole covers round? 4. A 16-bit virtual machine from scratch 5. SQLite is not a toy database ``` This example shows how to structure a Go scraping application cleanly, separating the proxy client creation from the main scraping logic. This pattern can be easily extended for concurrent scraping using goroutines. # Node.js: Axios Source: https://docs.2extract.com/integrations/frameworks/node-axios Learn how to use 2extract.com proxies with Axios, the most popular HTTP client for Node.js. Includes a real-world example of scraping structured JSON data. [Axios](https://axios-http.com/) is a promise-based HTTP client for Node.js and the browser. Integrating 2extract.com proxies is simple and requires passing a `proxy` configuration object with your request. ### Basic Setup To route your requests through our gateway, you need to provide the `host`, `port`, and `auth` details in the `proxy` object. > [!NOTE] > > You'll need to have `axios` installed in your project: `npm install axios` ```javascript basic_setup.js icon="js" lines wrap theme={null} const axios = require('axios'); // 1. Get these from your proxy's "Connection Details" page const proxyHost = "proxy.2extract.net"; const proxyPort = 5555; const proxyUser = "PROXY_USERNAME"; const proxyPass = "PROXY_PASSWORD"; // 2. Configure the Axios request const axiosConfig = { // 3. Set up the proxy object proxy: { protocol: 'https', host: proxyHost, port: proxyPort, auth: { username: proxyUser, password: proxyPass } }, timeout: 10000 // 10 seconds }; // 4. Make your request! async function checkIp() { try { const response = await axios.get("https://api.ipify.org?format=json", axiosConfig); console.log("Success! Your proxy IP is:", response.data.ip); } catch (error) { if (error.response) { console.error(`Error making request: Status ${error.response.status}`); } else { console.error(`Error making request: ${error.message}`); } } } checkIp(); ``` ### Real-World Example: Scraping Reddit API for subreddit data A common task is to collect structured data from public APIs. Let's use Axios to scrape data from Reddit's JSON API for a highly relevant subreddit: **/r/webscraping**. Reddit, like many sites, may serve different content or ads based on geography. We'll check the "hot" posts from both the US and Great Britain (GB) to demonstrate this capability. This example shows how to create a reusable function to dynamically change the proxy's country for each request. ```javascript reddit_scraper.js icon="js" lines wrap theme={null} const axios = require('axios'); // --- Your Base Credentials --- const BASE_USERNAME = "PROXY_USERNAME"; const PASSWORD = "PROXY_PASSWORD"; const PROXY_HOST = "proxy.2extract.net"; const PROXY_PORT = 5555; // --- Target Information --- const SUBREDDIT = "webscraping"; const TARGET_URL = `https://www.reddit.com/r/${SUBREDDIT}/hot.json`; const REGIONS = ["us", "gb"]; // USA and Great Britain // --- Reusable Scraper Function --- async function scrapeSubreddit(region) { console.log(`--- Scraping /r/${SUBREDDIT} from ${region.toUpperCase()} ---`); // Dynamically construct the username for the target region const proxyUsername = `${BASE_USERNAME}-country-${region}`; const axiosConfig = { proxy: { protocol: 'https', host: PROXY_HOST, port: PROXY_PORT, auth: { username: proxyUsername, password: PASSWORD } }, // Reddit API requires a custom User-Agent headers: { 'User-Agent': '2extract.com Docs Scraper/1.0' }, timeout: 15000 }; try { const response = await axios.get(TARGET_URL, axiosConfig); // The actual posts are in response.data.data.children const posts = response.data.data.children; console.log(`Success! Found ${posts.length} posts.`); // Print the title of the first post if (posts.length > 0) { console.log(`Top post title: "${posts[0].data.title}"`); } } catch (error) { if (error.response) { // Handle errors from the target or the proxy console.error(`Request failed with status ${error.response.status}.`); // The X-Proxy-Error header will be in error.response.headers if (error.response.headers['x-proxy-error']) { console.error(`--> Gateway Error: ${error.response.headers['x-proxy-error']}`); } } else { console.error(`An unexpected error occurred: ${error.message}`); } } finally { console.log("-" * (30 + SUBREDDIT.length + region.length)); } } // --- Main Execution Logic --- async function run() { for (const region of REGIONS) { await scrapeSubreddit(region); // Optional: add a small delay between requests to different regions await new Promise(resolve => setTimeout(resolve, 2000)); } } run(); ``` ### Expected Output Running this script will produce an output similar to this: ```bash Terminal icon="terminal" theme={null} --- Scraping /r/webscraping from US --- Success! Found 25 posts. Top post title: "Looking for advice on scraping dynamic JS-heavy sites" ----------------------------------------- --- Scraping /r/webscraping from GB --- Success! Found 25 posts. Top post title: "Looking for advice on scraping dynamic JS-heavy sites" ----------------------------------------- ``` *(Note: Reddit's content may not vary significantly between US/GB, but this demonstrates the technical capability)* This example shows how to build a flexible scraper with Axios and 2extract.com, allowing you to reuse your scraping logic while dynamically changing proxy parameters for each targeted request. # Node.js: Playwright Source: https://docs.2extract.com/integrations/frameworks/node-playwright Integrate 2extract.com proxies with Playwright for powerful, cross-browser automation and scraping of modern web applications. [Playwright](https://playwright.dev/) is a modern Node.js library for browser automation that supports Chromium, Firefox, and WebKit. Its robust feature set and simple API make it an excellent choice for scraping complex, interactive websites. Integrating 2extract.com proxies with Playwright is done by passing proxy settings directly to the `browser.newContext()` or `browser.newPage()` method. ### Basic Setup Here’s how to launch a Playwright browser instance that routes all traffic through our proxy gateway. > [!NOTE] > > You'll need `playwright` installed in your project: `npm install playwright` ```javascript basic_setup.js icon="js" lines wrap theme={null} const { chromium } = require('playwright'); // 1. Get these from your proxy's "Connection Details" page const proxyHost = "proxy.2extract.net"; const proxyPort = 5555; const proxyUser = "PROXY_USERNAME"; const proxyPass = "PROXY_PASSWORD"; (async () => { console.log('Launching browser with proxy...'); const browser = await chromium.launch({ // 2. Pass proxy settings directly to the launch options proxy: { server: `http://${proxyHost}:${proxyPort}`, username: proxyUser, password: proxyPass }, headless: false // Set to true for production }); const context = await browser.newContext(); const page = await context.newPage(); console.log('Navigating to IP checker...'); await page.goto('https://api.ipify.org?format=json'); // 3. Get the content and verify the IP const content = await page.textContent('body'); console.log('Success! Your proxy IP is:', JSON.parse(content).ip); await browser.close(); })(); ``` > [!NOTE] > > In Playwright, proxy credentials are set at the browser or context level. All new pages within that context will automatically use the same proxy settings, which is simpler than Puppeteer's per-page authentication. ### Real-World Example: Checking Flight Prices on Google Flights Flight prices are a classic example of geo-dependent data. Let's build a script to check the price of a one-way flight from Berlin to London on a specific date, making the request appear as if it's coming from **Germany (DE)**. ```javascript flights_scraper.js icon="js" lines wrap theme={null} const { chromium } = require('playwright'); // --- Your Base Credentials --- const BASE_USERNAME = "PROXY_USERNAME"; const PASSWORD = "PROXY_PASSWORD"; const PROXY_HOST = "proxy.2extract.net"; const PROXY_PORT = 5555; // --- Target Information --- const DEPARTURE_AIRPORT = "BER"; // Berlin const ARRIVAL_AIRPORT = "LHR"; // London Heathrow const DEPARTURE_DATE = "2025-11-07"; // YYYY-MM-DD format const TARGET_URL = `https://www.google.com/travel/flights/search?tfs=CBwQAhoeEgoyMDI1LTExLTA3agcIARIDQkVScgcIARIDTEhSQAFIAXABggELCP___________wGYAQI`; // Note: This is a complex, pre-generated URL for BER-LHR on 2025-08-15 const REGION = "de"; // Germany (async () => { // Dynamically construct the username for the target region const proxyUsername = `${BASE_USERNAME}-country-${REGION}`; console.log("Launching Playwright browser..."); const browser = await chromium.launch({ proxy: { server: `http://${PROXY_HOST}:${PROXY_PORT}`, username: proxyUsername, password: PASSWORD } }); const context = await browser.newContext({ // Set a realistic User-Agent and viewport userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36', viewport: { width: 1920, height: 1080 }, }); const page = await context.newPage(); console.log(`Navigating to Google Flights via a ${REGION.toUpperCase()} proxy...`); try { // Navigate and wait for the results to load await page.goto(TARGET_URL, { waitUntil: 'load', timeout: 60000 }); // Selector to find the price of the first non-stop flight // This is a complex selector that may change! const priceSelector = 'div[role="main"] li[role="listitem"] .YMlIz > div > div:last-child'; // Wait for the price element to be visible await page.waitForSelector(priceSelector, { timeout: 20000 }); const price = await page.locator(priceSelector).first().textContent(); console.log(`Success! The cheapest non-stop flight price found is: ${price}`); await page.screenshot({ path: `google_flights_${REGION}.png` }); console.log(`Screenshot saved as 'google_flights_${REGION}.png'`); } catch (error) { console.error(`An error occurred: ${error.message}`); await page.screenshot({ path: 'error_flights.png' }); console.log("Saved an error screenshot to error_flights.png for debugging."); } finally { await browser.close(); console.log("Browser closed."); } })(); ``` > [!WARNING] > > **Google is a highly sophisticated target!** The URL structure and CSS selectors on Google Flights are complex and change frequently. This script demonstrates the technical integration, but for reliable, large-scale scraping of Google, you will need to build very robust error handling and adapt your selectors regularly. ### What This Example Demonstrates * **Cross-Browser Automation:** How to use Playwright's powerful API to control a browser. * **Simplified Proxy Setup in Playwright:** Shows the modern approach of setting proxy credentials at the browser-launch level. * **Scraping Dynamic Content:** How to wait for specific elements (`page.waitForSelector`) to appear on a JavaScript-heavy page before trying to extract data. * **Advanced Locators:** Uses Playwright's `locator` API for more resilient element selection. # Node.js: Puppeteer Source: https://docs.2extract.com/integrations/frameworks/node-puppeteer Learn how to integrate 2extract.com proxies with Puppeteer to scrape dynamic, JavaScript-heavy websites that require a real browser environment. [Puppeteer](https://pptr.dev/) is a Node.js library that provides a high-level API to control headless Chrome or Chromium. It's essential for scraping modern, JavaScript-driven websites (Single Page Applications). Integrating 2extract.com proxies with Puppeteer requires passing a special `--proxy-server` argument when launching the browser. ### Basic Setup Here’s how to launch a Puppeteer instance that routes all its traffic through our proxy gateway. > [!NOTE] > > You'll need `puppeteer` installed in your project: `npm install puppeteer` ```javascript basic_setup.js icon="js" lines wrap theme={null} const puppeteer = require('puppeteer'); // 1. Get these from your proxy's "Connection Details" page const proxyHost = "proxy.2extract.net"; const proxyPort = 5555; const proxyUser = "PROXY_USERNAME"; const proxyPass = "PROXY_PASSWORD"; const proxyServer = `http://${proxyHost}:${proxyPort}`; (async () => { console.log('Launching browser with proxy...'); const browser = await puppeteer.launch({ headless: false, // Set to true for production, false for debugging // 2. Pass the proxy server URL as an argument args: [`--proxy-server=${proxyServer}`] }); const page = await browser.newPage(); // 3. Authenticate the proxy for this page await page.authenticate({ username: proxyUser, password: proxyPass }); console.log('Navigating to IP checker...'); await page.goto('https://api.ipify.org?format=json', { waitUntil: 'networkidle0' }); // 4. Get the content and verify the IP const content = await page.evaluate(() => document.body.textContent); console.log('Success! Your proxy IP is:', JSON.parse(content).ip); await browser.close(); })(); ``` > [!WARNING] > > **Important:** Puppeteer requires you to authenticate on a per-page basis using `page.authenticate()`. You must call this method for every new page (`browser.newPage()`) you open. ### Real-World Example: Taking a Screenshot of Amazon Search Results A common use case for Puppeteer is to render a full page with dynamic content and take a screenshot, for example, to monitor product rankings or search results on a major eCommerce site like Amazon. Let's take a screenshot of the search results for **"web scraping books"** on `amazon.com`, making the request appear as if it's coming from the **United States**. ```javascript amazon_scraper.js icon="js" lines wrap theme={null} const puppeteer = require('puppeteer'); // --- Your Base Credentials --- const BASE_USERNAME = "PROXY_USERNAME"; const PASSWORD = "PROXY_PASSWORD"; const PROXY_HOST = "proxy.2extract.net"; const PROXY_PORT = 5555; const proxyServer = `http://${PROXY_HOST}:${PROXY_PORT}`; // --- Target Information --- const SEARCH_QUERY = "web scraping books"; const TARGET_URL = `https://www.amazon.com/s?k=${encodeURIComponent(SEARCH_QUERY)}`; const REGION = "us"; // United States (async () => { console.log("Launching Puppeteer browser..."); const browser = await puppeteer.launch({ headless: true, // Use true for automated scripts args: [`--proxy-server=${proxyServer}`] }); const page = await browser.newPage(); // Dynamically construct the username for the target region const proxyUsername = `${BASE_USERNAME}-country-${REGION}`; // Authenticate using the dynamically created username await page.authenticate({ username: proxyUsername, password: PASSWORD }); // Set a realistic viewport and user agent to mimic a real user await page.setViewport({ width: 1920, height: 1080 }); await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'); console.log(`Navigating to Amazon search results for "${SEARCH_QUERY}" via a ${REGION.toUpperCase()} proxy...`); try { // Navigate to the page and wait for the network to be mostly idle await page.goto(TARGET_URL, { waitUntil: 'networkidle2', timeout: 60000 }); // (Optional) A small delay to ensure all dynamic content loads await new Promise(resolve => setTimeout(resolve, 2000)); // Take a screenshot and save it await page.screenshot({ path: `amazon_search_${REGION}.png`, fullPage: true }); console.log(`Success! Screenshot saved as 'amazon_search_${REGION}.png'`); } catch (error) { console.error(`An error occurred: ${error.message}`); // In case of an error, it's useful to save the HTML for debugging const errorHtml = await page.content(); require('fs').writeFileSync('error.html', errorHtml); console.log("Saved the page's HTML to error.html for debugging."); } finally { await browser.close(); console.log("Browser closed."); } })(); ``` > [!WARNING] > > **Amazon is a challenging target!** They employ sophisticated anti-bot measures. While this script works, you may need to implement more advanced techniques for large-scale scraping, such as rotating User-Agents, handling CAPTCHAs, and mimicking human-like browsing behavior (e.g., random delays, mouse movements). ### What This Example Demonstrates * **Scraping a Real, Complex Website:** How to approach a major target like Amazon. * **Proxy Authentication in Puppeteer:** The correct two-step process of setting `--proxy-server` and using `page.authenticate()`. * **Dynamic Geo-Targeting:** Shows how to change your perceived location by modifying the username. * **Mimicking a Real User:** Demonstrates best practices like setting a realistic viewport and `User-Agent` to reduce the chance of being detected by anti-bot systems. * **Error Handling:** Includes a `try...catch` block and saves the page's HTML on failure, which is a crucial technique for debugging scraping issues. # Python: Requests Source: https://docs.2extract.com/integrations/frameworks/python-requests Learn how to use 2extract.com proxies with the popular Python Requests library to scrape data from a real-world target like the Steam store. The `requests` library is the most popular way to make HTTP requests in Python. Integrating 2extract.com proxies is incredibly simple. ### Basic Setup To use our proxies, you just need to construct a `proxies` dictionary and pass it to your request. The dictionary should contain both `http` and `https` keys. ```python basic_setup.py icon="python" lines wrap theme={null} import requests # 1. Get these from your proxy's "Connection Details" page proxy_host = "proxy.2extract.net" proxy_port = 5555 proxy_user = "PROXY_USERNAME" proxy_pass = "PROXY_PASSWORD" # 2. Construct the proxy URL proxy_url = f"https://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}" # 3. Set up the proxies dictionary proxies = { "http": proxy_url, "https": proxy_url, } # 4. Make your request! try: response = requests.get("https://api.ipify.org?format=json", proxies=proxies, timeout=10) response.raise_for_status() # Raise an exception for bad status codes (4xx or 5xx) print("Success! Your proxy IP is:", response.json()['ip']) except requests.exceptions.RequestException as e: print(f"Error making request: {e}") ``` ### Real-World Example: Scraping Steam Game Prices Let's solve a real problem: checking the price of a popular game, like Counter-Strike 2, in different regions. Many online stores have regional pricing, and using proxies is the only way to see what local users see. In this example, we'll check the price in the USA and Turkey by dynamically changing the -country parameter in the username. > [!NOTE] > > This example requires `requests` and `BeautifulSoup4`. Install them with `pip install requests beautifulsoup4`. ```python steam_scraper.py icon="python" lines wrap theme={null} import requests from bs4 import BeautifulSoup # --- Your Base Credentials --- BASE_USERNAME = "PROXY_USERNAME" PASSWORD = "PROXY_PASSWORD" PROXY_HOST_PORT = "proxy.2extract.net:5555" # --- Target Information --- GAME_APP_ID = "730" # Counter-Strike 2 AppID TARGET_URL = f"https://store.steampowered.com/app/{GAME_APP_ID}/" REGIONS = ["us", "tr"] # USA and Turkey # --- Main Scraper Logic --- for region in REGIONS: print(f"--- Checking price in {region.upper()} ---") # Dynamically construct the username for each region proxy_username = f"{BASE_USERNAME}-country-{region}" proxies = { "http": f"https://{proxy_username}:{PASSWORD}@{PROXY_HOST_PORT}", "https": f"https://{proxy_username}:{PASSWORD}@{PROXY_HOST_PORT}", } # We must also pass the region code to Steam to get the correct store page # and cookies to bypass the age gate check. params = {'cc': region} cookies = {'birthtime': '568022401', 'wants_mature_content': '1'} headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'} try: response = requests.get( TARGET_URL, proxies=proxies, params=params, cookies=cookies, headers=headers, timeout=15 ) response.raise_for_status() # Parse the HTML to find the price soup = BeautifulSoup(response.text, 'html.parser') price_element = soup.find('div', class_='game_purchase_price') if price_element: print(f"Success! Price found: {price_element.get_text(strip=True)}") else: # Maybe it's on sale? discount_price_element = soup.find('div', class_='discount_final_price') if discount_price_element: print(f"Success! Discount price found: {discount_price_element.get_text(strip=True)}") else: print("Could not find the price element on the page.") except requests.exceptions.ProxyError as e: print(f"Proxy Error! Check your credentials or balance. Details: {e}") except requests.exceptions.HTTPError as e: print(f"HTTP Error! The target website blocked us. Status code: {e.response.status_code}") except requests.exceptions.RequestException as e: print(f"An unexpected error occurred: {e}") print("-" * (25 + len(region))) ``` #### Expected Output Running this script will produce an output similar to this: ```bash Terminal icon="terminal" theme={null} --- Checking price in US --- Success! Price found: $14.99 -------------------------- --- Checking price in TR --- Success! Discount price found: ₺265,50 -------------------------- ``` This example demonstrates the power of dynamically controlling your proxy's location directly from your code, allowing you to build powerful, scalable data collection applications. # Python: Scrapy Source: https://docs.2extract.com/integrations/frameworks/python-scrapy Integrate 2extract.com proxies into your Scrapy projects for robust, large-scale web scraping. Learn best practices with a real-world example. [Scrapy](https://scrapy.org/) is a powerful framework for large-scale web scraping. The best way to manage proxies in Scrapy is by using a custom **Downloader Middleware**. This allows you to centralize your proxy logic and keep your spiders clean. ### Step 1: Create the Proxy Middleware First, let's create a middleware that will attach our proxy credentials to every request. 1. In your Scrapy project, open the `middlewares.py` file. 2. Add the following class. It reads credentials from your `settings.py` and can be easily extended to handle dynamic parameters. ```python middlewares.py icon="python" lines wrap theme={null} # my_project/middlewares.py import base64 class Scrapy2extractProxyMiddleware: def process_request(self, request, spider): # By default, use the static proxy settings proxy_user = spider.settings.get('PROXY_USER') proxy_pass = spider.settings.get('PROXY_PASS') # Allow spiders to dynamically override proxy settings per-request if 'proxy_username_params' in request.meta: params = request.meta['proxy_username_params'] proxy_user = f"{spider.settings.get('PROXY_USER')}{params}" # Set the proxy for the request request.meta['proxy'] = f"http://{spider.settings.get('PROXY_HOST')}:{spider.settings.get('PROXY_PORT')}" # Set the Proxy-Authorization header for authentication proxy_auth = f"{proxy_user}:{proxy_pass}" auth_header = 'Basic ' + base64.b64encode(proxy_auth.encode()).decode() request.headers['Proxy-Authorization'] = auth_header spider.logger.info(f"Using proxy user: {proxy_user} for {request.url}") ``` > [!NOTE] > > This advanced middleware allows you to pass dynamic parameters (like `-country-de`) from your spider to the middleware using `request.meta['proxy_username_params']`. ### Step 2: Configure `settings.py` Now, let's enable the middleware and add your credentials. 1. Open your `settings.py` file. 2. Add your base proxy credentials. 3. Enable the `Scrapy2extractProxyMiddleware` in `DOWNLOADER_MIDDLEWARES`. ```python settings.py icon="python" lines wrap theme={null} # my_project/settings.py # --- 2extract.com Proxy Credentials --- PROXY_HOST = "proxy.2extract.net" PROXY_PORT = 5555 PROXY_USER = "PROXY_USERNAME" # Without any parameters PROXY_PASS = "PROXY_PASSWORD" # --- Enable the Middleware --- # The number (e.g., 610) should be high enough to run after default middlewares, # but before any middlewares that might depend on the proxy. DOWNLOADER_MIDDLEWARES = { 'my_project.middlewares.Scrapy2extractProxyMiddleware': 610, } ``` **Your basic setup is now complete!** Any request from any spider in your project will now automatically use your 2extract.com proxy. ### Real-World Example: Scraping Steam Specials Now, let's use the middleware we just created to scrape all discounted games from the Steam store. This spider is now much cleaner because all the proxy logic lives in the middleware. ### The Spider (`steam_specials_spider.py`) Notice how clean this spider is. It only focuses on scraping logic and passing dynamic parameters to the middleware. ```python spiders/steam_specials_spider.py icon="python" lines wrap theme={null} import scrapy import random class SteamSpecialsSpider(scrapy.Spider): name = "steam_specials" start_urls = ["https://store.steampowered.com/specials"] def start_requests(self): # Create a unique session ID for this job session_id = f"steam-special-{random.randint(1000, 9999)}" # Define the parameters we want to pass to our middleware # We will use the same sticky session for all pages proxy_params = f"-country-us-session-{session_id}" cookies = {'birthtime': '568022401', 'wants_mature_content': '1', 'steamCountry': 'US|...'} for url in self.start_urls: yield scrapy.Request( url, callback=self.parse, # Pass our dynamic parameters to the middleware meta={'proxy_username_params': proxy_params}, cookies=cookies, headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36' } ) def parse(self, response): # Extract data from the current page games = response.css('a.salepreviewwidgets_SaleItemBrowserRow_y9MSd') if not games: self.logger.warning("No games found on page. The CSS selector might be outdated.") return for game in games: yield { 'title': game.css('div.salepreviewwidgets_StoreSaleWidgetTitle_3jI46::text').get(), 'original_price': game.css('div.salepreviewwidgets_StoreOriginalPrice_2e_2G::text').get(), 'discount_price': game.css('div.salepreviewwidgets_StoreSalePriceBox_Wh0L8::text').get(), } # Find and follow the "Next" page link next_page_link = response.css('a.paging_Arrow_2JZe3[href*="specials?page="]:last-of-type').get() if next_page_link: # Scrapy automatically carries over the `meta` dictionary, # so our middleware will continue to use the same session! yield response.follow(next_page_link, callback=self.parse) else: self.logger.info("Last page reached. Finishing crawl.") ``` > [!WARNING] > > **CSS Selectors change!** Websites like Steam frequently update their design. The CSS selectors in this example are correct at the time of writing but may need to be updated in the future. ### What This Example Demonstrates * **Best Practice:** The spider is clean and focused on **what** to scrape. The middleware handles **how** to connect. This is a robust and scalable approach. * **Dynamic Control:** The spider can easily change its geo-location or session for any request by simply changing the `proxy_username_params` value in the `meta` dictionary. * **Code Reusability:** The `Scrapy2extractProxyMiddleware` can now be reused by **all spiders** in your project without duplicating code. # Introduction Source: https://docs.2extract.com/integrations/introduction Learn how to integrate 2extract.com proxies with your favorite scraping frameworks, anti-detect browsers, and proxy management tools. ## Integrate 2extract in Minutes Welcome to the integration hub! Our goal is to make connecting to the 2extract.com network as seamless and fast as possible, no matter what tool you use. Our proxies are designed to be compatible with any application that supports standard **HTTP/S** or **SOCKS5** protocols. Whether you're building a custom scraper, managing profiles in an anti-detect browser, or just need to route your traffic, we've got you covered. ### Find Your Tool This section provides step-by-step, copy-paste ready guides for the most popular tools in the data collection ecosystem. Choose your category to get started: > [card] [Scraping Frameworks](/integrations/frameworks/python-requests) > > Get code examples for integrating with popular libraries and frameworks like Python Requests, Scrapy, Puppeteer, and Playwright. > [card] [Anti-Detect Browsers](/integrations/antidetect/multilogin) > > Find step-by-step visual guides on how to configure our proxies in browsers like AdsPower, Dolphin Anty, and Multilogin. > [card] [Proxy Managers & Tools](/integrations/tools/foxyproxy) > > Learn how to set up our proxies in system-level tools like FoxyProxy, SwitchyOmega, and Proxifier for easy browser or application-wide routing. *** ### The Core Principle: `username:password@host:port` No matter which tool you use, the integration always comes down to providing these four pieces of information, which you can find in your proxy's settings: 1. **Host:** `proxy.2extract.net` 2. **Port:** `5555` 3. **Username:** (Your proxy's username, e.g., `2xt-customer-...`) 4. **Password:** (Your proxy's password) > [!NOTE] > > **Don't forget the power of parameters!** You can add geo-targeting and session control parameters directly to your `username` to change the proxy's behavior on the fly. Learn more in the **[Configuration Guide](/proxy-products/configuration/authentication)**. ```bash cURL (Example) theme={null} curl --proxy "https://PROXY_USERNAME:PROXY_PASSWORD@proxy.2extract.net:5555" "https://ipinfo.io/country" ``` # FoxyProxy (Browser Extension) Source: https://docs.2extract.com/integrations/tools/foxyproxy Learn how to easily set up and manage your 2extract.com proxies directly in your browser using the FoxyProxy extension. FoxyProxy is a popular browser extension for Chrome and Firefox that allows you to manage and switch between multiple proxies quickly. It's a great tool for manual testing or browsing from a specific location. ### Step 1: Install FoxyProxy If you haven't already, install the FoxyProxy Standard extension from your browser's official store: * **[FoxyProxy for Chrome](https://chrome.google.com/webstore/detail/foxyproxy-standard/gcknhkkoolaabfmlnjonogaaifnjlfnp)** * **[FoxyProxy for Firefox](https://addons.mozilla.org/en-US/addon/foxyproxy-standard/)** ### Step 2: Open FoxyProxy Options Once installed, click the FoxyProxy icon in your browser's toolbar and select **Options**. ![](https://mintcdn.com/2extract/-xVI7Shq3VFy6OOt/images/hero-dark.png?fit=max\&auto=format\&n=-xVI7Shq3VFy6OOt\&q=85\&s=56d8e73a1c187b6bb4cb8b9b153a847b) Access the FoxyProxy settings from the extension menu. ### Step 3: Add a New Proxy In the FoxyProxy options page, click the **Add New Proxy** button on the left sidebar. ### Step 4: Configure Your 2extract.com Proxy Now, fill in the proxy details. 1. **Proxy Type:** Select **HTTP**. 2. **Title:** Give your proxy a descriptive name, e.g., `2extract - US Residential`. 3. **Proxy IP Address:** Enter `proxy.2extract.net`. 4. **Port:** Enter your proxy's specific port number (e.g., `5555`). 5. **Username:** Enter your proxy's `Username`. 6. **Password:** Enter your proxy's `Password`. ![](https://mintcdn.com/2extract/-xVI7Shq3VFy6OOt/images/hero-dark.png?fit=max\&auto=format\&n=-xVI7Shq3VFy6OOt\&q=85\&s=56d8e73a1c187b6bb4cb8b9b153a847b) Fill in all the required fields with your 2extract.com credentials. > [!NOTE] > > **Want to target a specific country?** Just add the `-country-[code]` parameter to your `Username` right here in the FoxyProxy settings. For example: `PROXY_USERNAME-country-de`. 7. Click **Save**. ### Step 5: Activate and Use Your Proxy Now you can easily switch to your 2extract.com proxy. 1. Click the FoxyProxy icon in your browser's toolbar. 2. Select the proxy profile you just created (e.g., `2extract - US Residential`). 3. The extension icon will change color, indicating that the proxy is active. ![](https://mintcdn.com/2extract/-xVI7Shq3VFy6OOt/images/hero-dark.png?fit=max\&auto=format\&n=-xVI7Shq3VFy6OOt\&q=85\&s=56d8e73a1c187b6bb4cb8b9b153a847b) Select your created proxy from the main menu to activate it. To verify it's working, visit a site like [IPinfo.io](https://ipinfo.io/what-is-my-ip). You should see the IP address and location of your proxy, not your own. To stop using the proxy, simply click the FoxyProxy icon again and select **Turn Off**. # Proxifier (Proxy Manager) Source: https://docs.2extract.com/integrations/tools/proxifier Route traffic from any application on your Windows or macOS system through 2extract.com using Proxifier. Proxifier is a powerful application that allows you to redirect the network connections of any application through a proxy server. This is extremely useful for applications that do not have their own internal proxy settings. ### Step 1: Open Proxy Server Settings First, launch Proxifier. * On **Windows**, go to `Profile -> Proxy Servers...` * On **macOS**, go to `Proxies` in the main configuration window. Click the **Add...** button. ![](https://mintcdn.com/2extract/-xVI7Shq3VFy6OOt/images/hero-dark.png?fit=max\&auto=format\&n=-xVI7Shq3VFy6OOt\&q=85\&s=56d8e73a1c187b6bb4cb8b9b153a847b) Access the Proxy Servers settings to add a new proxy. ### Step 2: Enter Server Address and Port In the new window, enter your proxy's host and port: 1. **Address:** `proxy.2extract.net` 2. **Port:** Enter your proxy's specific port number (e.g., `5555`). 3. **Protocol:** Select **HTTPS** from the protocol list. ![](https://mintcdn.com/2extract/-xVI7Shq3VFy6OOt/images/hero-dark.png?fit=max\&auto=format\&n=-xVI7Shq3VFy6OOt\&q=85\&s=56d8e73a1c187b6bb4cb8b9b153a847b) Enter the server address, port, and select the HTTPS protocol. ### Step 3: Enable Authentication Now, enable authentication and enter your credentials: 1. Check the **Enable** box in the "Authentication" section. 2. **Username:** Enter your proxy's `Username`. 3. **Password:** Enter your proxy's `Password`. 4. Click **OK**. ![](https://mintcdn.com/2extract/-xVI7Shq3VFy6OOt/images/hero-dark.png?fit=max\&auto=format\&n=-xVI7Shq3VFy6OOt\&q=85\&s=56d8e73a1c187b6bb4cb8b9b153a847b) Enable authentication and input your proxy username and password. > [!NOTE] > > **Using Geo-Targeting:** You can add parameters like `-country-de` directly to your username in this field to control your location. ### Step 4: Confirm and Create a Proxification Rule Proxifier will ask if you want to use this proxy for all traffic by default. It's better to create a specific rule. 1. Click **No** in the confirmation dialog. This will open the "Proxification Rules" editor. 2. Click **Add...** to create a new rule. 3. **Name:** Give your rule a name (e.g., `Chrome via 2extract`). 4. **Applications:** Click "Browse..." and select the application you want to route through the proxy (e.g., `chrome.exe`). 5. **Action:** In the "Action" dropdown, select your newly created proxy (e.g., `Proxy HTTPS proxy.2extract.net`). 6. Click **OK** to save the rule. ![](https://mintcdn.com/2extract/-xVI7Shq3VFy6OOt/images/hero-dark.png?fit=max\&auto=format\&n=-xVI7Shq3VFy6OOt\&q=85\&s=56d8e73a1c187b6bb4cb8b9b153a847b) Create a specific rule to route traffic from a particular application through your new proxy. ### Step 5: Verify the Connection Your setup is complete. Now, when you use the application you selected (e.g., Chrome), all its traffic will be routed through your 2extract.com proxy. You can verify this by: * **Watching the Proxifier main window:** You will see live connection logs for your application. * **Visiting an IP checker website** (like [IPinfo.io](https://ipinfo.io/what-is-my-ip)) within the proxified application. You should see the IP of your proxy, not your own. # Shadowrocket (Proxy Manager) Source: https://docs.2extract.com/integrations/tools/shadowrocket Learn how to configure 2extract.com proxies in Shadowrocket for system-wide proxying on your iOS or macOS device. Shadowrocket is a powerful, rule-based proxy utility client for iOS and macOS. It allows you to route all your device's traffic, or just specific apps, through a proxy. ### Step 1: Add a New Proxy 1. Open the Shadowrocket app. 2. On the main "Home" tab, tap **Add Server**. ![](https://mintcdn.com/2extract/-xVI7Shq3VFy6OOt/images/hero-dark.png?fit=max\&auto=format\&n=-xVI7Shq3VFy6OOt\&q=85\&s=56d8e73a1c187b6bb4cb8b9b153a847b) Tap 'Add Server' on the main screen to begin. ### Step 2: Select Proxy Type In the "Add Server" screen, you need to specify the connection type. 1. Tap on **Type**. 2. Scroll through the list and select **HTTP**. ![](https://mintcdn.com/2extract/-xVI7Shq3VFy6OOt/images/hero-dark.png?fit=max\&auto=format\&n=-xVI7Shq3VFy6OOt\&q=85\&s=56d8e73a1c187b6bb4cb8b9b153a847b) Choose HTTP as the server type. ### Step 3: Enter Server and Authentication Details Now, fill in all the necessary credentials for your 2extract.com proxy. 1. **Host:** Enter `proxy.2extract.net`. 2. **Port:** Enter your proxy's specific port number (e.g., `5555`). 3. **User:** Enter your proxy's `Username`. 4. **Password:** Enter your proxy's `Password`. 5. **Remark (Optional):** Give your proxy a descriptive name, like `2extract US Residential`. ![](https://mintcdn.com/2extract/-xVI7Shq3VFy6OOt/images/hero-dark.png?fit=max\&auto=format\&n=-xVI7Shq3VFy6OOt\&q=85\&s=56d8e73a1c187b6bb4cb8b9b153a847b) Fill in the host, port, user, and password fields with your credentials. > [!NOTE] > > **Geo-Targeting Tip:** To target a specific country, add the `-country-[code]` parameter directly to your username in the `User` field. For example: `PROXY_USERNAME-country-de`. 6. Tap **"Done"** in the top right corner to save the server. ### Step 4: Connect to the Proxy You're now ready to start routing your traffic. 1. Back on the "Home" tab, you will see your newly added proxy profile. 2. Tap the **toggle switch** at the top of the screen (next to "Not Connected"). 3. If it's your first time, iOS/macOS will ask for permission to add a VPN configuration. Tap **Allow** and confirm with your device's passcode or Touch/Face ID. The status will change to "Connected", and the toggle switch will turn green. All your device's traffic is now being routed through your 2extract.com proxy. ![](https://mintcdn.com/2extract/-xVI7Shq3VFy6OOt/images/hero-dark.png?fit=max\&auto=format\&n=-xVI7Shq3VFy6OOt\&q=85\&s=56d8e73a1c187b6bb4cb8b9b153a847b) Tap the main toggle switch to activate the proxy connection. To verify, open a browser and visit an IP checker website like [IPinfo.io](https://ipinfo.io/what-is-my-ip). You should see the IP and location of your proxy. To disconnect, simply tap the toggle switch again. # ZeroOmega (ex-SwitchyOmega) (Browser Extension) Source: https://docs.2extract.com/integrations/tools/switchyomega Set up and manage your 2extract.com proxies with fine-grained control using the powerful ZeroOmega browser extension. ZeroOmega (ex-SwitchyOmega) is an advanced proxy management extension for Chrome and Firefox. It's perfect for developers who need to create custom rules for when and how to use a proxy. ### Step 1: Install ZeroOmega First, install the ZeroOmega extension from your browser's official store: * **[ZeroOmega for Chrome](https://chromewebstore.google.com/detail/pfnededegaaopdmhkdmcofjmoldfiped)** ### Step 2: Create a New Profile After installation, the ZeroOmega options page will open automatically. 1. Click **New profile...** in the left sidebar. 2. In the popup window: * **Profile name:** Give it a clear name, like `2extract Residential`. * **Profile type:** Select **Proxy Profile**. * Click **Create**. ![](https://mintcdn.com/2extract/-xVI7Shq3VFy6OOt/images/hero-dark.png?fit=max\&auto=format\&n=-xVI7Shq3VFy6OOt\&q=85\&s=56d8e73a1c187b6bb4cb8b9b153a847b) Create a new proxy profile to store your 2extract.com settings. ### Step 3: Configure the Proxy Server Now, you'll configure the new profile to use your 2extract.com proxy. 1. **Protocol:** Select **HTTP** from the dropdown menu. 2. **Server:** Enter `proxy.2extract.net`. 3. **Port:** Enter your proxy's specific port number (e.g., `5555`). ![](https://mintcdn.com/2extract/-xVI7Shq3VFy6OOt/images/hero-dark.png?fit=max\&auto=format\&n=-xVI7Shq3VFy6OOt\&q=85\&s=56d8e73a1c187b6bb4cb8b9b153a847b) Enter the protocol, server, and port for your proxy. ### Step 4: Add Authentication Since our proxies require authentication, you need to add your credentials. 1. Click the **lock icon** next to the port number. 2. A new window will pop up. Enter your `Username` and `Password`. 3. Click **Save changes**. ![](https://mintcdn.com/2extract/-xVI7Shq3VFy6OOt/images/hero-dark.png?fit=max\&auto=format\&n=-xVI7Shq3VFy6OOt\&q=85\&s=56d8e73a1c187b6bb4cb8b9b153a847b) Click the lock icon to add your username and password. > [!NOTE] > > **Tip for Geo-Targeting:** You can easily switch countries by creating multiple profiles in ZeroOmega, each with a different geo-targeting parameter in the username (e.g., `PROXY_USERNAME-country-de` for Germany, `PROXY_USERNAME-country-fr` for France). ### Step 5: Apply Changes and Activate Finally, save your configuration and start using the proxy. 1. Click the green **Apply changes** button in the left sidebar to save all your settings. 2. Click the ZeroOmega icon in your browser's toolbar. 3. Select the profile you just created (`2extract Residential`). ![](https://mintcdn.com/2extract/-xVI7Shq3VFy6OOt/images/hero-dark.png?fit=max\&auto=format\&n=-xVI7Shq3VFy6OOt\&q=85\&s=56d8e73a1c187b6bb4cb8b9b153a847b) Select your new profile from the extension's popup menu to activate it. Your browser traffic is now routed through your 2extract.com proxy. You can verify this by visiting an IP checker website like [IPinfo.io](https://ipinfo.io/what-is-my-ip). To disconnect, select **Direct Connection** from the ZeroOmega menu. # Acceptable Use Policy (AUP) Source: https://docs.2extract.com/legal/acceptable-use-policy Our commitment to maintaining a secure, ethical, and responsible proxy network. Read the rules of the road for using 2extract.com. This Acceptable Use Policy ("AUP") is an integral part of our **[Terms of Service](/legal/terms)** and governs your use of all services provided by 2extract.com ("Services"). Its purpose is to protect the integrity, security, and reputation of the 2extract.com network, our users, and the internet community as a whole. By using our Services, you agree to comply with this AUP. We may modify this policy at any time, and your continued use of the Services constitutes acceptance of the modified policy. ### 1. General Principles You agree not to use the Services for any purpose that is illegal, unethical, or harmful. You are solely responsible for the legality and appropriateness of your actions while using our network. This includes, but is not limited to, the following principles: * You must not violate any applicable laws or regulations. * You must not infringe on the rights of any third party (intellectual property, privacy, etc.). * You must not take any action that harms our Services, network, reputation, or other users. ### 2. Specifically Prohibited Activities The following is a non-exhaustive list of activities that are **strictly prohibited**. Engaging in any of these will result in immediate suspension or termination of your account without refund. > [accordion] Illegal and Malicious Activities > > * **Hacking and Unauthorized Access:** Accessing any computer system, network, or data without authorization. This includes port scanning, vulnerability scanning, and any form of penetration testing against third-party systems. > * **Distribution of Malicious Software:** Transmitting or distributing any form of malware, viruses, worms, trojans, spyware, or any other malicious code. > * **Phishing and Fraud:** Creating phishing websites, engaging in identity theft, credit card fraud (carding), or any other fraudulent financial activity. > [accordion] Network and Service Abuse > > * **Spamming:** Sending any form of unsolicited bulk email (spam). > * **Denial-of-Service (DoS) Attacks:** Launching DoS, DDoS, or any other type of attack designed to disrupt service availability. > * **Peer-to-Peer (P2P) File Sharing:** Using our network for torrenting or other P2P activities. > * **Cryptocurrency Mining:** Using our resources for any form of cryptocurrency mining. > [accordion] Unethical or Deceptive Practices > > * **Ad Fraud:** Engaging in fraudulent ad clicking or impression fraud. > * **Account Creation Abuse:** Creating fake accounts on social media or other platforms in a manner that violates their terms of service. > * **Scalping:** Using automated bots for ticket scalping or purchasing limited-edition goods (e.g., sneaker bots). > * **Deceptive Marketing:** Engaging in any form of false advertising or deceptive practices. ### 3. Content Restrictions You may not use our Services to access, transmit, or distribute any of the following content: > [!WARNING] > > **Zero-Tolerance Policy:** We have a zero-tolerance policy for any activity related to **Child Sexual Abuse Material (CSAM)**. Any such activity will be immediately reported to law enforcement authorities. * **Hate Speech:** Content that is defamatory, harassing, abusive, or promotes violence or hatred. * **Obscene or Illegal Content:** Any other content that is illegal or obscene under applicable law. ### 4. Enforcement and Consequences We reserve the right to investigate any suspected violation of this AUP. If we determine a violation has occurred, we may take any or all of the following actions, without prior notice: * Issue a warning. * Immediately **suspend** your access to the Services. * Immediately **terminate** your account. * Block access to certain target domains from our network. > [!NOTE] > > Violations of this AUP will result in the forfeiture of any right to a refund. We reserve the right to cooperate fully with law enforcement authorities or court orders requesting us to disclose the identity of anyone engaging in prohibited activities. ### 5. Reporting Abuse If you become aware of or suspect that the 2extract.com network is being used for any purpose that violates this AUP, please contact us immediately. > [card] [Report Abuse](mailto:support@2extract.com) > > Email us at **[support@2extract.com](mailto:support@2extract.com)**. Please provide as much detail as possible to assist in our investigation. # Privacy Policy Source: https://docs.2extract.com/legal/privacy How we collect, use, and protect your data. ### Last Updated: 15.07.2025 ### 1. Introduction Welcome to 2extract.com. Your privacy is critically important to us. This Privacy Policy explains how **POLYDAN PTE. LTD.** (“2extract”, “we”, “us”, or “our”) collects, uses, shares, and protects your personal information when you use our website, [https://2extract.com](https://2extract.com) (the “Site”), and our proxy services (collectively, the “Services”). This policy is a legally binding agreement. By creating an account or using our Services, you agree to the terms outlined in this document. #### In Short: What You Need to Know * **Who is in charge of your data?** POLYDAN PTE. LTD., a Singaporean company, is the Data Controller for your information. * **Why do we process your data?** Primarily to provide, secure, and improve our Services, process your payments, and communicate with you. * **What are your rights?** You have the right to access, correct, delete, and restrict the processing of your data, among others. You can exercise these rights by contacting us. * **Do we use cookies?** Yes, we use necessary and analytical cookies to make our Site work and to improve it. You can manage your preferences at any time. For a detailed explanation, please read the full policy below. ### 2. Who We Are and How to Contact Us The data controller for your personal information is: **POLYDAN PTE. LTD.** 68 Circular Road, #02-01, Singapore (049422) If you have any questions about this Privacy Policy or wish to exercise your data rights, please contact our data privacy team at: [support@2extract.com](mailto:support@2extract.com). 3. What Information We Collect We collect information to provide and improve our Services. This data can be grouped as follows: * **Identity & Contact Data:** Your full name (optional), email address, and password (which we store in an encrypted format). * **Financial Data:** We do not store your full credit card details. When you pay, this information is processed directly by our payment partner (Stripe). We only store transaction history, payment method type, and the last four digits of your card for reference. * **Technical Data:** Your IP address, browser type and version, operating system, and device type. We collect this for security, fraud prevention, and to improve our service. * **Usage Data:** Information about how you use our Services, such as traffic consumed by your proxies, API requests made, and features you interact with in your dashboard. This includes server logs. 4. How and Why We Use Your Data (Purpose and Legal Basis) We only use your personal data when the law allows us to. Here’s a breakdown of our data processing activities, based on the principles of GDPR: | Purpose of Processing | Data Types Used | Legal Basis for Processing | | - | - | - | | **To register you and create your account** | Identity & Contact | Performance of a contract with you. | | **To provide and manage the Service** | Identity, Contact, Financial, Technical, Usage | Performance of a contract with you. | | **To process your payments and manage billing** | Identity, Financial | Performance of a contract with you. | | **To manage our relationship with you (e.g., sending service notifications, updates to terms)** | Identity, Contact | Performance of a contract; Necessary for our legitimate interests (to keep you informed). | | **To secure our platform and prevent fraud** | Identity, Technical, Usage | Necessary for our legitimate interests (to protect our business and users). | | **To improve our Site and Services** | Technical, Usage (Aggregated) | Necessary for our legitimate interests (to develop our product). | | **To comply with legal obligations** | All relevant data | Necessary to comply with a legal obligation. | | **To send marketing communications (if you opt-in)** | Contact | Your explicit consent. | ### 5. Who We Share Your Information With We do not sell your personal data. We only share it with trusted third-party service providers (sub-processors) to the extent necessary to provide our Services. These include: * **Payment Processors:** Such as Stripe, to securely handle your payments. * **Cloud & Hosting Providers:** To host our application and store data. * **Customer Support Platforms:** Such as Intercom or Help Scout, to manage our communication with you. * **Analytics Services:** Such as Google Analytics, to help us understand how our Site is used. * **Email Service Providers:** To send you transactional and marketing emails. We may also disclose your data if required by law, court order, or governmental request to protect our rights or the safety of others. ### 6. International Data Transfers Our company is based in Singapore. Some of our service providers may be located outside of your jurisdiction. When we transfer your data internationally, we ensure it is protected by implementing appropriate safeguards, such as using Standard Contractual Clauses (SCCs) approved by relevant authorities, to ensure your data is treated securely and in accordance with this Privacy Policy. ### 7. Data Retention We retain your personal data only for as long as necessary to fulfill the purposes for which it was collected. * **Account Data:** We retain your profile and usage data as long as your account is active. * **Inactive Accounts:** If your account remains inactive for 12 months, we reserve the right to close it and schedule your personal data for deletion. * **Legal Obligations:** We may retain certain financial and transactional data for longer periods (e.g., 5-7 years) to comply with tax and accounting laws. ### 8. Your Data Protection Rights Depending on your location (especially if you are in the European Economic Area), you have the following rights regarding your personal data: * **Right to Access:** You can request a copy of the personal data we hold about you. * **Right to Rectification:** You can request to correct any inaccurate or incomplete data. * **Right to Erasure (“Right to be Forgotten”):** You can request that we delete your personal data. * **Right to Restrict Processing:** You can request that we limit the processing of your data. * **Right to Data Portability:** You can request to receive your data in a machine-readable format. * **Right to Object:** You can object to us processing your data for certain purposes (like direct marketing). * **Right to Withdraw Consent:** If we process data based on your consent, you can withdraw it at any time. To exercise any of these rights, please contact us at [support@2extract.com](mailto:support@2extract.com). ### 9. Cookie Policy We use cookies to make our Site and Services functional and to improve your experience. * What are cookies? Small text files stored on your device when you visit a website. * How we use them: | Cookie Category | Purpose | Examples | | - | - | - | | Essential Cookies | Necessary for core website functions like logging you in and maintaining your session. Our Site cannot work without them. | session\_id, auth\_token | | Analytics Cookies | Help us understand how visitors interact with our Site by collecting anonymous information. | Google Analytics (\_ga, \_gid) | | Functional Cookies | Used by third-party tools we integrate, such as our live chat support. | Intercom, Help Scout | * Your Choices: When you first visit our Site, you will be asked to consent to our use of non-essential cookies via a cookie banner. You can manage your preferences at any time. For more information, visit allaboutcookies.org. ### 10. Specific Notices for Residents of Certain Regions * **For Residents of the European Economic Area (EEA):** We process your data in accordance with the General Data Protection Regulation (GDPR). All rights listed in Section 8 are fully applicable. * **For Residents of California (CCPA):** This notice supplements the information in our Privacy Policy. We collect categories of personal information as described in Section 3. We do not "sell" your personal information as defined by the CCPA. You have the right to know what data we collect, to request its deletion, and to not be discriminated against for exercising your rights. To make a request, please contact us. ### 11. Changes to This Privacy Policy We may update this Privacy Policy from time to time. We will notify you of any material changes by posting the new policy on this page and, if the changes are significant, by sending you an email notification. ### 12. Children's Privacy Our Services are not intended for use by individuals under the age of 18. We do not knowingly collect personal data from children. If you believe we have done so, please contact us immediately. # Terms of Service Source: https://docs.2extract.com/legal/terms Check out our Terms of Service to know the rules while using our platform. ### Last Updated: 15.07.2025 This Terms of Service Agreement (the “Agreement”) is a legally binding agreement between you or the entity you represent (“Client”, “you”, or “your”) and **POLYDAN PTE. LTD**, a company registered in **Singapore** with address at **68 Circular Road, #02-01** (“2extract”, “we”, “us”, or “our”). This Agreement governs your access to and use of the 2extract.com website (the “Site”), our proxy network, and any related services, applications, and features (collectively, the “Services”). This Agreement takes effect when you create an account on our Site or, if earlier, when you first access or use our Services (the “Effective Date”). If you are using the Services on behalf of an entity, you represent and warrant that you have the legal authority to bind that entity to this Agreement. **PLEASE READ THIS AGREEMENT CAREFULLY. BY CREATING AN ACCOUNT OR USING OUR SERVICES, YOU ACKNOWLEDGE THAT YOU HAVE READ, UNDERSTOOD, AND AGREE TO BE BOUND BY THESE TERMS.** ### 1. Account Registration and Security 1.1. **Eligibility.** To use the Services, you must be at least 18 years old and of legal age to form a binding contract in your jurisdiction. You must provide accurate, current, and complete information during the registration process. 1.2. **Account Security.** You are solely responsible for maintaining the confidentiality of your account credentials (password, API tokens) and for all activities that occur under your account. You agree to notify us immediately of any unauthorized use of your account. Sharing account privileges is strictly prohibited and may result in account suspension. 1.3. **Compliance and Verification.** We reserve the right to perform compliance reviews, including Know Your Client (KYC) verification, to prevent fraud and misuse. You agree to cooperate and provide any information reasonably required for this process. 1.4. **Sanctions and Prohibited Persons.** You represent and warrant that you are not on any government Sanctions List (e.g., U.S. OFAC, UK Sanctions List) and are not located in a jurisdiction subject to comprehensive trade sanctions. You agree not to use the Services in or for the benefit of any sanctioned country or person. ### 2. The Services 2.1. **License.** Subject to your compliance with this Agreement, we grant you a limited, non-exclusive, non-transferable, and revocable license to access and use our proxy network and management dashboard solely for your internal business operations or personal use, in accordance with your selected plan. 2.2. **Service Types.** We offer access to different types of proxies, including but not limited to Residential and Mobile proxies. The specific features, performance characteristics, and pricing for each type are described on our Site. 2.3. **Modifications.** We reserve the right to modify, update, or discontinue any part of the Services at any time. We will provide reasonable notice for any material changes that may adversely affect your use of the Services. ### 3. Client Responsibilities and Acceptable Use 3.1. **Lawful Use.** You agree to use the Services only for lawful purposes and in compliance with all applicable local, state, national, and international laws and regulations. You are solely responsible for any data you access or transmit through our Services. 3.2. **Prohibited Activities.** You shall not, and shall not permit any third party to, use the Services to: a. Engage in any illegal, fraudulent, or malicious activities, including distributing malware, viruses, spyware, or engaging in phishing. b. Send spam, unsolicited bulk emails, or any form of abusive messaging. c. Launch Denial-of-Service (DoS) or Distributed Denial-of-Service (DDoS) attacks or cause any disruption to any network or service. d. Access or attempt to access computer systems without authorization. e. Infringe upon the intellectual property, privacy, or other rights of any third party. f. Resell, sublicense, or otherwise distribute the Services without our prior written consent. g. Reverse engineer, decompile, or attempt to derive the source code of our systems. 3.3. **Internal Blacklist.** To protect our network integrity and comply with legal requirements, we maintain an internal blacklist of sensitive domains (e.g., government, military, and financial institutions). Access to these domains via our Services may be restricted. ### 4. Payments, Billing, and Refunds 4.1. **Pricing.** The fees for our Services are specified on our Site and within your user dashboard. Prices are subject to change, and we will provide reasonable notice of any pricing modifications. 4.2. **Pay-As-You-Go (PAYG).** Our PAYG plan allows you to purchase traffic that is deducted from your main account balance. a. You must top up your account balance before using PAYG proxies. b. Unused PAYG traffic or balance does not expire, provided your account remains active. We reserve the right to close inactive accounts and void any remaining balance after 12 months of inactivity. 4.3. **Auto Top-Up.** If you enable the Auto Top-Up feature, you authorize us to automatically charge your designated payment method for a pre-selected amount when your account balance falls below a specified threshold. 4.4. **Payments and Taxes.** All payments are processed through our third-party payment partners (e.g., Stripe). Prices are exclusive of any applicable taxes (such as VAT or sales tax), which are your sole responsibility. 4.5. **Refund Policy.** All purchases are final and non-refundable, except at our sole discretion or where required by law. If you believe you have been charged in error, you must contact us within 30 days of the charge. We may offer a refund for technical failures on our side if reported within 48 hours of the incident. ### 5. Suspension and Termination 5.1. **Suspension.** We may suspend your access to the Services immediately and without prior notice if we determine, in our sole discretion, that: a. Your use of the Services poses a security risk to our platform or other clients. b. You are delinquent on your payment obligations or your account balance is zero. c. You are in breach of this Agreement, particularly the Acceptable Use Policy. d. Your use of the Services may subject us to legal liability. 5.2. **Termination by You.** You may terminate this Agreement at any time by deleting your account from your profile settings. 5.3. **Termination by Us.** We may terminate this Agreement for cause if you materially breach these terms. We also reserve the right to terminate this Agreement for convenience with reasonable notice. 5.4. **Effect of Termination.** Upon termination, your right to use the Services ceases immediately. You are still obligated to pay any outstanding fees. To ensure data integrity, we perform a "soft delete" of your account and proxies. Your resources will be deactivated, but historical data related to usage and billing will be retained in accordance with our Privacy Policy. ### 6. Confidentiality 6.1. Both parties agree to protect the other's Confidential Information with a reasonable degree of care. "Confidential Information" includes any non-public technical, business, or financial information. Your proxy credentials and API tokens are considered your Confidential Information. ### 7. Disclaimer of Warranties THE SERVICES ARE PROVIDED "AS IS" AND "AS AVAILABLE". 2EXTRACT EXPRESSLY DISCLAIMS ALL WARRANTIES OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. WE DO NOT WARRANT THAT THE SERVICES WILL BE UNINTERRUPTED, ERROR-FREE, OR COMPLETELY SECURE. ### 8. Limitation of Liability TO THE FULLEST EXTENT PERMITTED BY LAW, IN NO EVENT WILL 2EXTRACT, ITS AFFILIATES, OR ITS SUPPLIERS BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES, OR ANY LOSS OF PROFITS OR REVENUES, WHETHER INCURRED DIRECTLY OR INDIRECTLY. OUR TOTAL AGGREGATE LIABILITY IN ANY MATTER ARISING OUT OF OR RELATED TO THIS AGREEMENT IS LIMITED TO THE GREATER OF (A) THE AMOUNT YOU PAID TO US IN THE 1 MONTH PRECEDING THE EVENT GIVING RISE TO THE LIABILITY, OR (B) ONE HUNDRED U.S. DOLLARS (\$100.00). ### 9. Indemnification You agree to indemnify, defend, and hold harmless 2extract and its affiliates, officers, and employees from any claim, demand, or damage, including reasonable attorneys' fees, arising out of your use of the Services or your breach of this Agreement. ### 10. Miscellaneous 10.1. **Governing Law.** This Agreement shall be governed by the laws of the Republic of Singapore, without regard to its conflict of law principles. 10.2. **Dispute Resolution.** The parties agree to first attempt to resolve any dispute informally. If a dispute is not resolved within 30 days, it shall be settled in the courts of Singapore. 10.3. **Modification of Terms.** We reserve the right to modify this Agreement at any time. We will notify you of material changes by posting the updated version on our Site or via email. Your continued use of the Services after such changes constitutes your acceptance. 10.4. **Entire Agreement.** This Agreement, together with our Privacy Policy and any other referenced documents, constitutes the entire agreement between you and 2extract. ### 11. Contact Information If you have any questions about these Terms of Service, please contact us at: * For general and legal inquiries: [support@2extract.com](mailto:support@2extract.com) # Authentication Methods Source: https://docs.2extract.com/proxy-products/configuration/authentication How to authenticate requests to the 2extract proxy gateway with username and password, and how to restrict a proxy to your own IP addresses. To use our proxy network, every request you send to the proxy gateway must be authenticated. This ensures that only authorized users can access the service and that we can correctly attribute traffic usage to your account. > [card] Username & Password > > Required for every request. You include your proxy's unique credentials in the connection string. > [card] Authorized IPs (optional) > > Extra protection. Only the IP addresses you list can use the proxy, and they still have to send the credentials. *** ## 1. Username & Password Authentication This is the standard and most flexible authentication method. Each proxy you create in your dashboard has its own unique username and password. ### How it Works You need to include these credentials in your proxy connection string in the following format: `protocol://username:password@host:port` Use `https` as the protocol. It encrypts the link between your program and our gateway, so your proxy password is never sent in readable form. See [HTTPS vs. HTTP](/proxy-products/configuration/protocols#https-vs-http-encrypting-the-link-to-our-gateway) for the details and for the short list of tools that cannot do this. ### Example Let's say your credentials are: * **Username:** `2xt-customer-a1b2-proxy-steam` * **Password:** `a_very_secure_password` * **Host & Port:** `proxy.2extract.net:5555` Your connection string would look like this: ``` https://2xt-customer-a1b2-proxy-steam:a_very_secure_password@proxy.2extract.net:5555 ``` ```bash cURL theme={null} # Using the credentials with cURL curl "https://api.ipify.org" \ --proxy "https://2xt-customer-a1b2-proxy-steam:a_very_secure_password@proxy.2extract.net:5555" ``` ```python Python (Requests) theme={null} # Using the credentials with Python's Requests library import requests proxy = "https://2xt-customer-a1b2-proxy-steam:a_very_secure_password@proxy.2extract.net:5555" proxies = { "http": proxy, "https": proxy, } response = requests.get("https://api.ipify.org", proxies=proxies) print(response.text) ``` ```javascript Node.js (Axios) theme={null} // Using the credentials with Axios const axios = require('axios'); const { data } = await axios.get("https://api.ipify.org", { proxy: { protocol: 'https', host: 'proxy.2extract.net', port: 5555, auth: { username: '2xt-customer-a1b2-proxy-steam', password: 'a_very_secure_password', }, }, }); console.log(data); ``` > [!NOTE] > > Remember, you can dynamically add parameters like `-country-de` to your username to control the proxy's behavior. Learn more in the [Geo-Targeting Parameters](/proxy-products/configuration/geo-targeting) guide. ### Passwords with Special Characters If your proxy password contains `@`, `:`, `#`, `/` or `?`, putting it directly into the connection string breaks URL parsing and the request fails with a misleading error. Pass the credentials separately instead: ```bash theme={null} curl "https://api.ipify.org" \ --proxy "https://proxy.2extract.net:5555" \ --proxy-user "2xt-customer-a1b2-proxy-steam:a_very_secure_password" ``` Most libraries offer an equivalent: a dedicated auth argument, or percent-encoding the password before building the URL (`urllib.parse.quote` in Python, `encodeURIComponent` in JavaScript). *** ## 2. Authorized IPs (IP Whitelist) Authorized IPs is an optional security layer on top of username and password. It does not replace them: requests must always carry valid credentials. When the list is filled in, the gateway accepts connections to this proxy only from the listed IP addresses. A request from any other IP is rejected with `407`, even with the correct username and password. When the list is empty, the proxy accepts connections from any IP. Use it to make leaked credentials useless outside your own servers. ### How to Set It Up 1. Open the proxy in **[My Proxies](https://2extract.com/app/proxies)**. 2. Add your server's IP addresses to the **Authorized IPs** list and save. You can also manage the list through the [Public API](/public-api/proxies) or the [MCP server](/ai/mcp-server/tools). > [!WARNING] > > If your outgoing IP changes - a home connection, a VPN, a cloud instance without a fixed IP - requests will start failing with `407`. Update the list or clear it. *** ## 3. Troubleshooting When the gateway rejects a connection it returns an `X-Proxy-Error` header explaining exactly why. Run your request with verbose output and read that header before changing anything else: ```bash theme={null} curl -v "https://api.ipify.org?format=json" \ --proxy "https://proxy.2extract.net:5555" \ --proxy-user "YOUR_USERNAME:YOUR_PASSWORD" ``` | What you see | What it means | | :- | :- | | `407` with `X-Proxy-Error: all parameters missing` | No credentials reached the gateway. Check that your client actually sends proxy authentication. | | `X-Proxy-Error: invalid password` or `proxy '[name]' not found` | The password or the proxy name in your username is wrong. Copy both again from Connection Details. | | `X-Proxy-Error: invalid parameter` or `unknown parameter` | A targeting parameter in your username is missing, malformed or misspelled. See [Geo-Targeting Parameters](/proxy-products/configuration/geo-targeting). | | `X-Proxy-Error: dependency missing` | A parameter requires another one. For example, `city` requires `country`. | | `X-Proxy-Error: parameter conflict` | Two parameters cannot be combined. For example, `asn` cannot be used with `country`. | | A TLS or protocol error immediately after connecting | Your client does not support HTTPS proxies. Switch the protocol to `HTTP` - see [HTTPS vs. HTTP](/proxy-products/configuration/protocols#https-vs-http-encrypting-the-link-to-our-gateway). | | The request times out with no response at all | Outbound traffic to the port is blocked by your network. See [Timeouts and Connection Refused](/help/common-problems/timeout-connection-refused). | If requests succeed for some targets but fail for others, check the **Authorized hosts** and **Authorized IPs** lists on the proxy: when either one is filled in, everything outside it is rejected. # Connection Builder (Integration Tab) Source: https://docs.2extract.com/proxy-products/configuration/endpoint-generator A beginner-friendly guide to the Integration tab: what it is, why it exists, and how to build a working proxy connection string without memorizing any syntax. Every proxy you create has a settings page with three tabs: **Overview**, **Settings**, and **Integration**. This guide is about the **Integration** tab - the place where you turn your proxy into a ready-to-paste connection string or a working code snippet. If you have never used a proxy before, read this page carefully. You do not need to know what "ASN" or "sticky session" means yet - everything is explained along the way. ![](https://mintlify.s3.us-west-1.amazonaws.com/2extract/images/integration_tab_overview.png) The Integration tab on a proxy settings page. *** ## Why This Tab Exists To use a proxy, your program needs four things: | Part | Example | | :- | :- | | Host | `proxy.2extract.net` | | Port | `5555` | | Username | `2xt-customer-a1b2-proxy-my_scraper` | | Password | `a_very_secure_password` | Host, port and password never change. The **username is the interesting one**, because with 2extract the username is not just an identifier - it is also the **instruction sheet for the request**. Everything you want to control - which country the IP comes from, whether the IP stays the same between requests, how long it stays the same - is written into the username as a chain of parameters: ``` 2xt-customer-a1b2-proxy-my_scraper-country-de-state-bavaria-session-a1b2c3-time-30 └─────────── your proxy ─────────┘└── where ──┘└──── what kind of session ────┘ ``` This design is what makes 2extract flexible: one single proxy can send traffic through Germany, then through Japan, then through a fixed New York IP - all at the same time, from the same program, just by changing the username string. The trade-off is that the string has rules. Parameters must be in the right order, city names must be lowercase without spaces, ZIP code cannot be combined with a city, and so on. One typo and you either get an error or - worse - traffic silently routed through the wrong place. > [!NOTE] > > **The Integration tab is the tool that writes that string for you.** You click a few dropdowns, and it produces a correct username plus a complete, copy-pasteable code snippet for your language. You never have to memorize the syntax. *** ## The One Thing People Get Wrong It is worth spelling out how the settings of the proxy itself differ from what you do on the Integration tab. > [card] Settings tab = saved > > What you configure on the **Settings** tab (default location, traffic limits) is **saved to your proxy**. It applies to every request you make, forever, until you change it. > [card] Integration tab = not saved > > What you configure on the **Integration** tab is **not saved anywhere**. It only builds a text string for you to copy. Closing the page throws the selection away. Think of the Integration tab as a calculator, not a form. A calculator does not "remember" that you typed `2 + 2` - it just hands you the `4`. In the same way, the Integration tab hands you a username and forgets about it. **Why this is convenient:** you can generate as many different configurations as you want from a single proxy. Ten countries, fifty sessions - all valid at the same time, no extra proxies needed, nothing to save or switch between. > [!WARNING] > > There is no "Save" button on the Integration tab, and that is intentional. If you want to change the **default** behaviour of the proxy itself, use the **Settings** tab instead. *** ## What You See When You Open the Tab The tab is made of three cards, stacked top to bottom. **1. Configuration - you make choices here** Protocol, location, session behaviour, plus one-click presets. **2. Verify & Connect - the result appears here** A ready code snippet in cURL, Python, Node.js or Go, updating live as you change anything above. **3. Generate List - bulk output** Produces many connection strings at once, each with its own session (when the session type is Sticky), for tools that expect a proxy list file. When you first open the tab, the fields are pre-filled with your proxy's **default location** (the one from the Settings tab), protocol `HTTPS`, and session type `Rotating`. No preset is highlighted. This is deliberate - it shows you the configuration you would get if you did nothing at all. *** ## Walkthrough: Your First Connection String Let's do a real example from start to finish. **The goal:** check prices on a German online store, from a German IP address, using Python. **1. Open the Integration tab** Go to **[My Proxies](https://2extract.com/app/proxies)**, click your proxy, then click the **Integration** tab. ![](https://mintlify.s3.us-west-1.amazonaws.com/2extract/images/integration_tab_location.png) The Integration tab is the third tab on the proxy settings page. **2. Pick a protocol** Under **Protocol** you will see three options: `HTTP`, `HTTPS`, `SOCKS5`. If you do not know which one you need, **choose HTTPS**. It encrypts the connection between your computer and our gateway, so nobody on your network can read your proxy password. * **HTTPS** - the safe default. Works with almost everything. * **HTTP** - same thing, but the connection to the gateway is not encrypted. Only pick this if a tool specifically demands it. * **SOCKS5** - a different, lower-level protocol. Needed by some desktop apps, game clients and anti-detect browsers. > [!TIP] > > Choosing HTTPS here does **not** stop you from visiting `http://` websites. This setting is only about the link between your program and our gateway. **3. Choose where the IP should be** Under **Targeting Mode**, leave the default **Location** selected. (The other option, **ASN**, is for advanced users - see below.) Below it are four dropdowns: **Country**, **Region / State**, **City**, **ZIP Code**. For our example, open **Country** and select **Germany**. Leave the rest empty. The rules the interface enforces for you: * You cannot pick a Region, City or ZIP until you have picked a Country. * Picking a **Region or City** disables **ZIP Code**, and vice versa. These two ways of narrowing down a location cannot be combined. * Every field you leave empty simply means "anywhere" - an empty City means any city in Germany. ![](https://mintlify.s3.us-west-1.amazonaws.com/2extract/images/integration_geo_targeting.png) Selecting Germany as the target country. Region, City and ZIP stay empty. **4. Choose how the IP behaves** Under **Session Control**, the **Session Type** dropdown has two values: * **Rotating** - you get a **different IP on every request**. Best for collecting many pages, because the target site sees a crowd of visitors rather than one persistent user. * **Sticky** - you keep **the same IP** for a while. Necessary when your steps depend on each other: log in, add to cart, check out. With a rotating IP, the site would see a different visitor at every step and log you out. For price checking, keep **Rotating**. The two fields next to it - **Session Time (min)** and the **Force Constant IP** toggle under **Strict Mode** - stay greyed out, because they only make sense for sticky sessions. ![](https://mintlify.s3.us-west-1.amazonaws.com/2extract/images/integration_session_control.png) Session Control with Rotating selected - the sticky-only fields are disabled. **5. Copy the result** Scroll down to the **Verify & Connect** card. It already contains a finished snippet built from your choices. Use the dropdown in the top-right corner of that card to switch language: **cURL**, **Python**, **Node.js**, **Go**. Pick **Python**, then click the copy button on the code block. You now have working code: ```python theme={null} import requests # Connection string proxy = "https://2xt-customer-a1b2-proxy-my_scraper-country-de:a_very_secure_password@proxy.2extract.net:5555" # Configure both protocols to use the proxy proxies = { "http": proxy, "https": proxy } response = requests.get("https://api.ipify.org", proxies=proxies) print(response.text) ``` Notice the `-country-de` that appeared in the username. That is the whole point of the tab: you clicked "Germany" in a dropdown, and it wrote the parameter for you. ![](https://mintlify.s3.us-west-1.amazonaws.com/2extract/images/integration_verify_connect.png) The Verify & Connect card. The snippet rebuilds itself every time you change a setting above. **6. Run it** Paste the snippet into your project and run it. It requests `https://api.ipify.org`, a free service that simply reports the IP address it sees. If the printed IP is a German one, everything works. This is the fastest way to confirm your setup before pointing the code at a real target. *** ## Quick Presets In the top-right corner of the Configuration card there are four buttons: **E-Commerce**, **Web Scraping**, **SMM & Accounts**, **Local SEO**. Each one fills in every field at once with a combination that suits that kind of work. They exist to show you what a sensible configuration looks like - if you are unsure what to pick, click the closest one and adjust from there. | | E-Commerce | Web Scraping | SMM & Accounts | Local SEO | | :- | :- | :- | :- | :- | | Protocol | HTTPS | HTTP | SOCKS5 | HTTPS | | Targeting Mode | Location | Location | Location | Location | | Country | US | - | US | US | | Region | California | - | Florida | - | | City | - | - | Miami | - | | ZIP | - | - | - | 11368 | | Session Type | Rotating | Rotating | Sticky | Sticky | | Session Time | - | - | 30 min | 15 min | | Force Constant IP | off | off | on | on | Clicking a preset **overwrites everything you had selected**, including your country. As soon as you edit any field afterwards, the preset stops being highlighted - because the configuration is no longer that preset. ![](https://mintlify.s3.us-west-1.amazonaws.com/2extract/images/integration_quick_presets.png) Quick Presets. The active preset is highlighted; editing any field clears the highlight. *** ## Sticky Sessions in Detail Switch **Session Type** to **Sticky** and three things happen. **1. A session ID is generated.** A short random code such as `a1b2c3` is added to your username as `-session-a1b2c3`. That code *is* the session: every request you send with the same code goes through the same IP. Send a different code and you get a different IP. Your program can generate as many codes as it likes - one per user account, one per browser profile, one per task. **2. Session Time becomes editable.** This is how long, in minutes, the IP should stay yours. It appears in the username as `-time-30`. **3. Force Constant IP becomes available.** This is a strict mode toggle, and it deserves an explanation. Our IPs come from real residential and mobile devices, and a real device can go offline at any moment - someone closes a laptop, someone leaves a Wi-Fi zone. If that happens to your session: * **Force Constant IP off** (default) - we quietly give you a replacement IP so your program keeps running. * **Force Constant IP on** - we do *not* substitute. Your request fails with an error instead. Turn it **on** only when a changing IP would be worse than a failure - for example when managing a sensitive account where a sudden IP change would trigger a security alert. For ordinary data collection, leave it **off**. *** ## Targeting by Network Instead of Location The second **Targeting Mode** option replaces the location dropdowns with a network selector. Use it when you care about *which provider* the IP belongs to rather than where it is. * **Residential proxies - ASN.** Enter an Autonomous System Number, the ID of an internet provider's network (for example `7922` for Comcast). You get an IP inside that provider's network. * **Mobile proxies - ISP.** Choose a mobile operator such as T-Mobile or Vodafone from the list. You get an IP on that carrier's mobile network. > [!WARNING] > > Network targeting and location targeting **cannot be combined**. Choosing ASN or ISP removes the country, region, city and ZIP parameters from the username entirely. This is why switching Targeting Mode hides the location fields instead of merely disabling them. If you have no specific reason to target a provider, stay on **Location**. *** ## Generating a List of Proxies Some tools - anti-detect browsers, multi-account managers, scraping frameworks - do not want a single proxy. They want a file with dozens of lines, one proxy per line. The **Generate List** card at the bottom of the tab does that: 1. Set **Quantity** - how many lines you need. 2. Set **Format** - the layout the receiving tool expects: `host:port:user:pass`, `user:pass@host:port`, or `host,port,user,pass`. 3. Click **Generate**. 4. Take the contents of the **Output** field: **Copy All**, or download it as **.txt** or **.csv**. Every line uses the configuration you built above, but with **its own unique session ID**. So a list of 50 gives you 50 independent sticky sessions - which is exactly what you want when running 50 browser profiles that must not share an IP. ![](https://mintlify.s3.us-west-1.amazonaws.com/2extract/images/integration_generate_list.png) Generate List produces bulk credentials, each line carrying its own session ID. *** ## Common Questions > [accordion] I changed something on this tab. Do I need to save it? > > No. There is nothing to save. The tab only produces text. What matters is the string you copied - once it is in your code, the tab has done its job. > [accordion] I closed the page and my configuration is gone. Did I lose anything? > > No. Rebuild it in a few clicks, or better, keep the copied connection string in your project. If you want a configuration to be permanent, set it as the proxy's default on the **Settings** tab. > [accordion] Can I use several different configurations at the same time? > > Yes, and this is the main advantage of the design. One proxy, many usernames. Nothing is locked, nothing conflicts, and you are not charged extra for it - billing is based on the traffic you use, not on how many configurations you generate. > [accordion] Why is the ZIP Code field greyed out? > > Because you have selected a Region or a City. ZIP and Region/City are two competing ways of narrowing down a location and cannot be used together. Clear the Region and City fields and ZIP becomes available again. > [accordion] Why does my username look different from the examples in the docs? > > Because it contains your own client ID and proxy name. The parameter part after them follows exactly the same rules described in [Geo-Targeting Parameters](/proxy-products/configuration/geo-targeting) and [Session Control Parameters](/proxy-products/configuration/session). > [accordion] Can I write the username by hand instead? > > Yes. The tab is a convenience, not a requirement - anything it generates you can type yourself, and anything you type correctly will work. The parameter reference is in [Geo-Targeting Parameters](/proxy-products/configuration/geo-targeting). Most people use the builder because it removes the typo risk. > [accordion] The generated code returns an error. What now? > > First run the snippet unchanged against `https://api.ipify.org` - that isolates whether the problem is the proxy or your target site. If it still fails, check the [Error Codes](/proxy-products/configuration/errors) page, and make sure your account balance is positive. *** ## Where to Go Next > [card] [Geo-Targeting Parameters](/proxy-products/configuration/geo-targeting) > > The full reference for every location parameter the builder can produce. > [card] [Session Control Parameters](/proxy-products/configuration/session) > > How rotating and sticky sessions behave under the hood. > [card] [Protocols](/proxy-products/configuration/protocols) > > HTTP, HTTPS and SOCKS5 compared in detail. > [card] [Authentication](/proxy-products/configuration/authentication) > > Username and password authentication, and restricting a proxy to Authorized IPs. # Error Handling & Response Codes Source: https://docs.2extract.com/proxy-products/configuration/errors Understand the different HTTP response codes our proxy gateway can return and learn how to debug common issues. When you make a request through the 2extract.com proxy gateway, there are two potential sources of errors: 1. **Our Gateway:** Errors related to your account, authentication, or proxy configuration. 2. **The Target Website:** Errors returned by the website you are trying to scrape. To help you instantly distinguish between these, our gateway adds a special HTTP header to any error it generates: `X-Proxy-Error: [A human-readable error description]` **Rule of thumb: If you see the `X-Proxy-Error` header, the problem is related to your proxy setup. If you don't, the problem is on the target website's side.** To see the header, run your request with verbose output: ```bash theme={null} curl -v "https://api.ipify.org" --proxy "https://USERNAME:PASSWORD@proxy.2extract.net:5555" ``` *** ## Gateway Errors (4xx & 5xx Codes) These are errors generated by our system. Always check the `X-Proxy-Error` header for specific details. ### 400 Bad Request A targeting parameter in your username is wrong. Fix the username and retry. | `X-Proxy-Error` Message | Meaning & How to Fix | | :- | :- | | `unknown parameter: '[param]'` | The parameter does not exist. Check the spelling in [Geo-Targeting](/proxy-products/configuration/geo-targeting) and [Session Control](/proxy-products/configuration/session). | | `invalid parameter: '[param]'` | The value is in the wrong format, e.g. `-country-usa` instead of `-country-us`. | | `dependency missing: parameter 'state', 'city', 'zip' requires 'country'` | Add `-country-[code]` before state, city or ZIP. | | `dependency missing: parameter 'time', 'const' requires 'session'` | `-time` and `-const` work only together with `-session-[id]`. | | `parameter conflict: parameter 'asn' cannot be used with 'country', 'state', 'city', 'zip'` | Network targeting (`-asn`, `-isp`) and geo targeting are mutually exclusive. Choose one. | | `city '[city]' not found for country '[code]'` | The city is not in our list for this country. Check the spelling in the [City List](/data/cities). | ### 407 Proxy Authentication Required The gateway did not accept your credentials, or the proxy is not allowed to work right now. | `X-Proxy-Error` Message | Meaning & How to Fix | | :- | :- | | `all parameters missing` | No credentials reached the gateway. Check that your client sends the proxy username and password. | | `invalid password` | The password is wrong. Copy it again from the proxy's Connection Details, or regenerate it. | | `proxy '[name]' not found` | The proxy name in your username does not exist in your account. Copy the username again from Connection Details. | | `parameter missing: '2xt-customer'` | The username does not start with your account prefix. Copy the full username from Connection Details. | | `proxy '[name]' inactive` | The proxy is switched off. Activate it in [My Proxies](https://2extract.com/app/proxies). | A `407` **without** an `X-Proxy-Error` header means your IP is not in the proxy's **Authorized IPs** list. Add your current IP, or clear the list. A `407` is also returned when your account balance has run out - [**top up your balance**](https://2extract.com/app/billing) - or when the proxy is `Suspended` after reaching its usage limit - raise or remove the limit in the proxy settings. ### 500 Internal Server Error The gateway accepted your credentials but could not complete the request through an exit IP. The `X-Proxy-Error` header carries a numeric code: | `X-Proxy-Error` Code | Meaning & How to Fix | | :- | :- | | `220`, `225` - `231` | No IP matches your targeting right now (e.g. a rare ZIP, city or ASN). Broaden the targeting, or retry later. | | `242` | The IP of your strict (`-const`) sticky session went offline. Start a new session ID. | | `211`, `212`, `213`, `221`, `224` | The exit IP went offline or dropped the connection. **Retry** - you will get another IP. | | `203`, `36` - `41` | Timeout or connection error between the gateway and the exit IP. **Retry.** | | `216` | The target domain could not be resolved. Check the hostname in your URL. | | `214` | The target hostname is malformed. Check your URL. | | `217`, `218` | The exit IP could not connect to the target. The target may be down or refusing connections - retry later. | | `209` | The target host is not allowed: private and reserved IP ranges, and restricted destinations. | | `210` | The target port is not allowed. Sending email is not supported: SMTP ports 25, 465 and 587 are blocked. | | `202` | The request parameters were rejected. Check your session parameters, e.g. an excessive `-time` value. | IPv6 targets are not supported - use the IPv4 address or the hostname. *** ## Target Website Errors If you receive an error code **without** an `X-Proxy-Error` header, it means our proxy successfully connected to the target, but the target itself rejected your request. Here are the most common ones you'll encounter while scraping: | HTTP Status | Name | Why it Happens & How to Fix | | :- | :- | :- | | **403 Forbidden** | Forbidden | The target website has identified your request as non-human and blocked your IP address. **Action: Rotate your IP immediately.** | | **429 Too Many Requests** | Rate Limited | You are sending requests too quickly. **Action: Slow down your scraper** (increase delays) and rotate your IP. | | **500 Internal Server Error** | Server Error | The target website's server has an internal problem. **Action: Retry the request after a short delay.** | | **503 Service Unavailable** | Service Unavailable | The target website is overloaded or down for maintenance. **Action: Retry the request after a longer delay (e.g., 15-30 minutes).** | # Geo-Targeting Parameters Source: https://docs.2extract.com/proxy-products/configuration/geo-targeting Learn how to target specific countries, states, cities, ZIP codes, and ASNs by adding parameters to your proxy username. Geo-targeting allows you to control the geographic location of the exit IP address for your requests. This is essential for accessing geo-restricted content, collecting localized data, and ad verification. You can control geo-targeting by appending special parameters directly to your proxy's **username**. **Base Username:** `2xt-customer-a1b2-proxy-my_scraper` **Username with Geo-Targeting:** `2xt-customer-a1b2-proxy-my_scraper-country-de-city-berlin` *** ## Targeting Logic Our gateway processes geo-parameters with the following rules: * **Specificity Wins:** The most specific parameter is always used. For example, if you provide both `-city` and `-country`, the city will be prioritized. * **Dependencies:** Some parameters require others. For example, you cannot target a city without specifying a country. * **Mutual Exclusivity:** You can either target by **geography** (`country`, `state`, `city`, `zip`) OR by **network** (`asn`, `isp`). You cannot use both in the same request. * **Sticky Sessions Freeze Targeting:** If your username contains a `-session` parameter, the targeting is bound to that session ID at its first request. Changing the targeting while reusing the same session ID has no effect until the session expires - generate a new session ID instead. See [Session Control Parameters](/proxy-products/configuration/session). *** ## Geographic Targeting Parameters These parameters control the physical location of the proxy. ### Country (`-country`) This is the most common targeting parameter. It allows you to select an IP from a specific country. > [accordion] Parameter Details > > * **Format:** `-country-[code]` > * **Value:** A 2-letter ISO 3166-1 alpha-2 country code (e.g., `us`, `de`, `gb`). > * **Dependencies:** None. > * **Example Username:** `...-my_scraper-country-de` > * **Result:** Your request will be routed through a random IP in Germany. > * **[View full list of supported countries](/data/countries)** ### State / Region (`-state`) Target a specific state or region within the selected country. > [accordion] Parameter Details > > * **Format:** `-state-[code]` > * **Value:** A state or region name (e.g., `california` for California, `newyork` for New York). > * **Dependencies:** Requires `-country` to be present in the username. > * **Example Username:** `...-my_scraper-country-us-state-california` > * **Result:** Your request will be routed through an IP in California. > * **[View the full list of regions/states](/data/states)** ### City (`-city`) Target a specific city. > [accordion] Parameter Details > > * **Format:** `-city-[name]` > * **Value:** The name of the city in lowercase, with spaces removed (e.g., `newyork`, `sanfrancisco`). > * **Dependencies:** Requires a `-country` parameter. Can be combined with `-state` for disambiguation. > * **Example (Simple):** `...-my_scraper-country-fr-city-paris` > * **Example (With State):** `...-my_scraper-country-us-state-il-city-springfield` > * **Result:** Your request will be routed through an IP in the specified city. > * **Note on Ambiguity:** If a country has multiple cities with the same name, add `-state` to pick the right one. Without it, you may get an IP from another city with the same name. > * **[View the full list of cities](/data/cities)** ### ZIP Code (`-zip`) Target a specific ZIP code. Ideal for hyper-local data collection. > [accordion] Parameter Details > > * **Format:** `-zip-[code]` > * **Value:** A ZIP code. > * **Dependencies:** Requires `-country`. Can be combined with `-state` and `-city` for more precise targeting. > * **Example Username:** `...-my_scraper-country-us-zip-90210` > * **Result:** Your request will be routed through an IP in the Beverly Hills area. > * **[View the full list of ZIP codes](/data/zips)** *** ## Network Targeting Parameters These parameters control the network origin of the proxy. They are mutually exclusive with all geographic parameters. ### ASN (`-asn`) Target a specific Internet Service Provider (ISP) by its Autonomous System Number (ASN). > [accordion] Parameter Details > > * **Format:** `-asn-[number]` > * **Value:** The numerical ASN of the provider (e.g., `7922` for Comcast). > * **Dependencies:** Mutually exclusive with all geographic parameters (`-country`, `-state`, `-city`, `-zip`). > * **Example Username:** `...-my_scraper-asn-7922` > * **Result:** Your request will be routed through an IP belonging to the Comcast network. > * **Tip:** You can find ASN numbers for major providers on sites like [ipinfo.io](https://ipinfo.io/AS24940?lookup_source=search-bar). ### ISP (`-isp`) - Mobile Proxies Only Target a specific mobile network operator by its numeric ISP code. Available for mobile proxies only. > [accordion] Parameter Details > > * **Format:** `-isp-[code]` > * **Value:** The numeric code of the mobile operator as provided in the ISP reference list (e.g., `310260` for T-Mobile US). > * **Dependencies:** Mutually exclusive with all geographic parameters (`-country`, `-state`, `-city`, `-zip`). Available on mobile proxies only. > * **Example Username:** `...-my_scraper-isp-310260` > * **Result:** Your request will be routed through an IP on the T-Mobile US network. > * **Note:** The ISP code is a numeric identifier, not a name slug. Use the code from the ISP selector in your proxy dashboard. > * **[View the full list of ISPs](/data/isp)** # Understanding Protocols (HTTP vs. SOCKS5) Source: https://docs.2extract.com/proxy-products/configuration/protocols Learn the difference between HTTP(S) and SOCKS5 protocols and choose the right one for your use case. When you create a proxy in your 2extract.com dashboard, you can choose the protocol it will use: **HTTP(S)** or **SOCKS5**. While both allow you to route your traffic through our network, they work at different levels and are suited for different tasks. ## Quick Comparison | Feature | HTTP(S) Proxy | SOCKS5 Proxy | | :- | :- | :- | | **Traffic Type** | Only HTTP & HTTPS (web traffic) | TCP and UDP traffic | | **Anonymity** | Good (can see/modify headers) | **Excellent** (works at a lower level) | | **Speed** | Generally faster | Slightly slower due to overhead | | **Common Use Case** | Web Scraping, Browser Automation | Non-HTTP apps, UDP (HTTP/3, QUIC, WebRTC) | | **Our Recommendation** | **Use HTTP(S) for 99% of web scraping tasks.** | Use SOCKS5 only if you have a specific need for non-web traffic. | *** ## HTTP(S) Proxies The HTTP(S) protocol is the foundation of the web. An HTTP proxy is specifically designed to understand and handle web traffic (the requests your browser or scraper sends to websites). ### Key Characteristics: * **Application-Level:** It operates at Layer 7 of the OSI model. This means it "understands" the content of your web requests and can interact with them (e.g., add or modify headers). * **Optimized for Web:** Because it's specialized for web traffic, it's often faster and more efficient for tasks like web scraping. * **Easy to Use:** Supported by virtually every web scraping library (`requests`, `Puppeteer`, `Scrapy`) and tool out of the box. > [!NOTE] > > **For web scraping and browser automation, HTTP(S) is almost always the right choice.** It's simpler, faster, and fully supported by our entire feature set, including the Proxy Gateway parameters. ### When to use HTTP(S): * Scraping websites * Automating tasks in a browser * Verifying ads on web pages * Accessing web-based APIs *** ## HTTPS vs. HTTP: Encrypting the Link to Our Gateway `HTTP` and `HTTPS` are not two different proxy products. They are the same proxy, reached over the same host and port - the only difference is whether the connection between **your program and our gateway** is encrypted. | Protocol | Link to our gateway | When to use it | | :- | :- | :- | | **HTTPS** | Encrypted | **The default.** Use it unless your tool refuses to work with it. | | **HTTP** | Not encrypted | Only when a tool does not support HTTPS proxies. | | **SOCKS5** | Not encrypted | Only when you need a non-web protocol - see the section below. | > [!TIP] > > Choosing `HTTPS` does **not** stop you from visiting `http://` websites, and it does not add a second layer of encryption to `https://` ones. Requests to `https://` sites are tunnelled through the gateway with `CONNECT`, so their encryption is always end-to-end between your program and the target site, whichever protocol you pick. This setting is only about the first hop. ### Why HTTPS is the Default Over `HTTP`, your proxy credentials are sent to the gateway as `Proxy-Authorization: Basic base64(username:password)`. Base64 is an encoding, not encryption - it is trivially reversible. SOCKS5 username/password authentication is plain text. Anyone able to observe that first hop can read both values: a shared Wi-Fi network, your internet provider, a corporate inspection appliance, a compromised router. Your proxy username is not just an identifier either. It carries your account ID, the proxy name and every targeting parameter attached to it, so an observer also learns which countries, cities or sessions you are working with. `HTTPS` closes that gap. Your credentials travel inside a TLS session terminated by our gateway, whose certificate your client verifies the same way it verifies any website. > [!WARNING] > > If you have been connecting over `HTTP` or `SOCKS5` from a network you do not control, treat the proxy password as exposed. Open the proxy in **[My Proxies](https://2extract.com/app/proxies)**, regenerate the password, and switch the protocol to `HTTPS`. ### Client Support Speaking TLS to a proxy is a separate capability from speaking TLS to a website, and not every client has it. These are the ones we test: | Client | HTTPS proxy | | :- | :- | | cURL | Supported | | Python `requests` / `urllib3` | Supported | | Node.js `axios`, and any library built on `https-proxy-agent` | Supported | | Scrapy | **Not supported.** Fails with `NotImplementedError: HTTPS proxies for HTTPS destinations are not supported`. Use `HTTP`. | If your tool is not on this list, try `HTTPS` first. A client that cannot do it fails immediately with a TLS or protocol error rather than hanging - in that case fall back to `HTTP`, and prefer running that tool from a network you control. If credentials cannot be protected on the wire at all, authenticate by [Authorized IP](/proxy-products/configuration/authentication#2-ip-whitelisting-authorized-ips-coming-soon) instead, so that nothing is transmitted in the first place. *** ## SOCKS5 Proxies SOCKS5 is a more versatile and lower-level protocol. Unlike an HTTP proxy, it doesn't understand the traffic passing through it; it simply creates a "tunnel" and passes along any TCP/IP traffic. ### Key Characteristics: * **Transport-Level:** It operates at Layer 5 of the OSI model. It doesn't inspect or modify your traffic, making it more anonymous. * **Protocol-Agnostic:** It can handle traffic beyond web pages, including file transfers (FTP), other non-HTTP TCP protocols, and UDP. * **DNS Resolution:** SOCKS5 can handle DNS requests on the proxy server's side, which can prevent DNS leaks and enhance privacy. > [!NOTE] > > **UDP is supported over SOCKS5** on all proxies, with no extra setup. Protocols that rely on UDP - such as HTTP/3 (QUIC), DNS over UDP and WebRTC media - work through our SOCKS5 proxies, provided your client supports SOCKS5 UDP. HTTP(S) proxies carry TCP traffic only. > [!WARNING] > > **Sending email is not supported.** SMTP ports 25, 465 and 587 are blocked on all proxies, regardless of protocol. ### When to use SOCKS5: * When your application is **not** using the HTTP protocol (e.g., FTP or other TCP-based tools). * When you need UDP: HTTP/3 (QUIC), WebRTC, DNS over UDP. * For tasks requiring the highest level of anonymity where you don't want the proxy to interact with your traffic at all. * For applications requiring higher anonymity where you don't want the proxy inspecting your traffic. ## How to Choose in Your Dashboard You can select your preferred protocol when creating or editing a proxy in the "Connection Helper" section of your **[Proxy Settings](https://2extract.com/app/proxy)** page. ![](https://mintcdn.com/2extract/czMMSEnEIK6HnBXV/images/proxy_settings_protocol.png?fit=max\&auto=format\&n=czMMSEnEIK6HnBXV\&q=85\&s=362e242669d76260cb75499f72b2d2b9) Selecting the protocol in the proxy configuration screen. # Session Control Parameters Source: https://docs.2extract.com/proxy-products/configuration/session Learn how to manage IP rotation and create sticky sessions with custom durations using session control parameters. Session control allows you to manage the lifecycle of your proxy's IP address. By default, every request you make gets a new, random IP address from our pool (per-request rotation). However, for many tasks, you need to maintain the same IP across multiple requests. This is called a "sticky session". You control this behavior by adding session parameters to your proxy's **username**. *** ## Session Types > [card] Rotating IP (Default) > > **Behavior:** You get a new IP address on every single request.\\ > > **Use Case:** Ideal for large-scale scraping tasks where you need maximum diversity of IPs to avoid rate limits and blocks.\\ > > **How to use:** Send requests with your base username, without any session parameters. > [card] Sticky IP (Sticky Session) > > **Behavior:** You get a single IP address and can reuse it for a specific period.\\ > > **Use Case:** Essential for any multi-step workflow on a website, such as logging in, adding items to a cart, or navigating through paginated results.\\ > > **How to use:** Add the `-session` parameter to your username. *** ## Session Control Parameters These parameters work together to give you full control over your sticky sessions. ### Session ID (`-session`) This is the primary parameter for enabling a sticky session. > [accordion] Parameter Details > > * **Format:** `-session-[id]` > * **Value:** Any alphanumeric string you choose. This string is your unique identifier for a session. > * **Dependencies:** None. Note the reverse dependency, though: `-time`, `-const` and the targeting parameters you send are all bound to the session ID at the moment the session starts (see the warning below). > * **How it works:** All requests sent with the same session ID will be routed through the same exit IP for the duration of the session. To get a new IP **or a new configuration**, change the session ID. > * **Example Usernames:** > * `...-my_scraper-session-user123` (gets IP **A**) > * `...-my_scraper-session-user123` (still gets IP **A**) > * `...-my_scraper-session-user456` (gets a new IP, IP **B**) > [!WARNING] > > **Targeting is locked when the session starts.** > > A session ID does not just pin an IP - it pins the entire configuration it was first used with. If you change `-country`, `-state`, `-city`, `-zip`, `-asn` or any other targeting parameter but keep the same `-session` value, your requests keep coming from the original location until the session expires. > > **Rule: new targeting, new session ID.** Generate a fresh session ID every time your targeting changes. ### Session Time (`-time`) By default, a sticky session lasts for **10 minutes**. The `-time` parameter allows you to change this duration. > [accordion] Parameter Details > > * **Format:** `-time-[minutes]` > * **Value:** A whole number. > * **Dependencies:** **Must** be used together with a `-session` parameter. > * **Example Username:** `...-my_scraper-session-user123-time-30` > * **Result:** The sticky session for `user123` will now last for **30 minutes** instead of the default 10. > * **Error Case:** Using `-time-30` without `-session` will result in an error. > [!WARNING] > > **Important Note on Session Reliability:** > The session duration is a request, not a 100% guarantee. Due to the dynamic nature of residential networks, a peer device can go offline at any time. If the IP for your session becomes unavailable, our system will automatically assign you a **new IP** on your next request with the same session ID. ### Strict Session (`-const`) This parameter changes the behavior of the gateway when a session IP goes offline. > [accordion] Parameter Details > > * **Format:** `-const` (this is a flag, it has no value). > * **Dependencies:** **Must** be used together with a `-session` parameter. > * **Default Behavior (without `-const`):** If your session IP goes offline, we automatically assign a new IP to your session. This ensures your scraper continues working. > * **Behavior with `-const`:** If your session IP goes offline, we **do not** assign a replacement. Instead, your request will fail with `500` and `X-Proxy-Error: 242`. > * **Use Case:** Use this only when your workflow is critically dependent on using the **exact same IP** from start to finish, and you would rather have the process fail than continue with a new IP. > * **Example Username:** `...-my_scraper-session-user123-time-60-const` ### Forcing a New IP (`/change_ip`) Sometimes you need a fresh exit IP without waiting for the session to expire and without changing the session ID - typically when driving a browser profile by hand. > [accordion] Parameter Details > > * **Format:** an HTTP request to `{scheme}://{username}:{password}@proxy.2extract.net:5555/change_ip`, where `{scheme}` matches the protocol your proxy is configured with (`http` or `https`) > * **Dependencies:** only meaningful for a username that carries a `-session` parameter. A rotating proxy already changes IP on every request. > * **How it works:** the request releases the exit IP pinned to that session ID. The replacement IP is assigned on your **next request** through the proxy, not at the moment you call the URL. > * **What stays the same:** username, password, session ID and all targeting parameters. The new IP is drawn from the same targeting you already set. > * **Works with `-const`:** yes. `-const` prevents silent automatic rotation, while calling `/change_ip` is a deliberate action. > [!NOTE] > > Anti-detect browsers expose this as an **IP change link** field on the proxy profile, and the ready-made URL is shown in the **Verify & Connect** block of the Integration tab. See **[Anti-Detect Browsers](/integrations/antidetect/overview)** for the full walkthrough. *** ### Which Session Type Should I Use? Choose the best session type for your specific task. All parameters can be combined with any valid geo-targeting. | If your goal is... | Recommended Parameter(s) | Example Username | Why it works | | :- | :- | :- | :- | | **Maximum Anonymity & Scraping Simple Pages** (e.g., collecting product prices from multiple pages) | (None - use default behavior) | `...-proxy-myproject-country-de` | By default, you get a **new IP for every single request**. This makes it extremely difficult for the target website to track you as a single user. | | **Multi-Step Actions & Logins** (e.g., logging into an account, filling a form, navigating a cart) | `-session-[your_id]` | `...-proxy-myproject-session-user123` | Using a `session` ID guarantees that you will **keep the same IP address** for a sequence of requests, making you look like a regular user navigating the site. | | **Long-Term Data Collection from a Single IP** (e.g., monitoring a specific social media profile for an hour) | `-session-[your_id] -time-[minutes]` | `...-proxy-myproject-session-task456-time-60` | Adding the `-time` parameter extends the default 10-minute session lifetime. | | **High-Security Tasks Where IP Change is Unacceptable** (e.g., managing a sensitive online account where a sudden IP change could trigger a security alert) | `-session-[your_id] -const` | `...-proxy-myproject-session-secure-const` | The `-const` flag ensures that if your assigned session IP goes offline, your request will **fail with an error** instead of automatically getting a new IP. This prevents accidental IP exposure. | # Mobile Proxies: Introduction & Use Cases Source: https://docs.2extract.com/proxy-products/mobile/introduction-use-cases Discover the power of Mobile Proxies and when to use them for your data collection needs. ## What Are Mobile Proxies? **Mobile Proxies** from 2extract.com are IP addresses assigned to real mobile devices (phones and tablets) connected to 4G and 5G cellular networks. When you use a mobile proxy, your request appears to come from a genuine mobile user on a carrier network like AT\&T, T-Mobile, or Vodafone. This makes mobile proxies the most powerful and resilient type of proxy available, as they are almost impossible for target websites to distinguish from real mobile user traffic. > [!NOTE] > > **Key takeaway:** Mobile proxies make you look like a real person browsing on their phone. ## Common Use Cases Mobile proxies are essential for the most challenging targets and mobile-first platforms. > [card] Social Media Automation > > Manage multiple social media accounts, scrape user-generated content, and analyze trends on platforms like Instagram, TikTok, and Facebook without triggering security alerts. > [card] Mobile App & Ad Verification > > Test your mobile applications and verify that mobile ads are being displayed correctly to users on specific carrier networks and operating systems (iOS/Android). > [card] Highly Protected Targets > > Bypass the most advanced anti-bot systems on eCommerce and travel websites that are particularly sensitive to scraper traffic. > [card] Mobile User Experience Testing > > See your website or application exactly as a mobile user in a specific country and on a specific carrier network would see it. # Mobile Proxies: Quick Start Source: https://docs.2extract.com/proxy-products/mobile/quick-start A step-by-step example to get you started with our Mobile Proxies in minutes. This guide assumes you have already [created your first Mobile Proxy](/getting-started/quick-start). The process is very similar to using Residential proxies, but with additional targeting capabilities. ### Your Connection Credentials Navigate to your proxy's settings page in the [**My Proxies**](https://2extract.com/app/proxies) dashboard to get your Host, Port, Username, and Password. ### Example: Getting an IP from a Specific ISP Let's make a request through T-Mobile US. ISP targeting uses a numeric operator code and is mutually exclusive with geographic parameters — you cannot combine `-isp` with `-country`, `-state`, or `-city`. ```bash cURL theme={null} # Replace with your actual credentials # -isp-310260 = T-Mobile US USERNAME="PROXY_USERNAME-isp-310260" PASSWORD="PROXY_PASSWORD" HOST="proxy.2extract.net:5555" curl "https://api.ipify.org?format=json" \ --proxy "https://${USERNAME}:${PASSWORD}@${HOST}" ``` ```python Python theme={null} import requests # Replace with your actual credentials # -isp-310260 = T-Mobile US proxy_details = { "username": "PROXY_USERNAME-isp-310260", "password": "PROXY_PASSWORD", "host": "proxy.2extract.net", "port": 5555, } proxies = { "http": f"https://{proxy_details['username']}:{proxy_details['password']}@{proxy_details['host']}:{proxy_details['port']}", "https": f"https://{proxy_details['username']}:{proxy_details['password']}@{proxy_details['host']}:{proxy_details['port']}", } response = requests.get('https://api.ipify.org?format=json', proxies=proxies) print(response.json()) ``` > [!TIP] > > The `https://` in front of your credentials describes the link to our gateway, not the site you are visiting. It keeps your proxy password encrypted on the way to us, and works for `http://` and `https://` targets alike. See [HTTPS vs. HTTP](/proxy-products/configuration/protocols#https-vs-http-encrypting-the-link-to-our-gateway). The response will be a JSON object containing an IP address from the T-Mobile US network. > [!TIP] > > You've now mastered the basics of mobile targeting! For a full list of parameters, check out our **[Geo-Targeting guide](/proxy-products/configuration/geo-targeting)**. # Mobile Proxies: Specifics & Limitations Source: https://docs.2extract.com/proxy-products/mobile/specifics-limitations Key characteristics and best practices for using our powerful Mobile Proxy network. Mobile proxies are our premium offering. Understanding their unique nature is key to maximizing their effectiveness. ### IP Pool Characteristics * **Source:** Our Mobile pool consists of IP addresses from real mobile devices on 4G and 5G networks. These are the highest-quality, most trusted IPs available. * **IP Rotation:** Mobile IPs are naturally more dynamic than residential ones. An IP can change as a device moves between cell towers. Our system leverages this natural rotation. ### Unique Targeting Capabilities The primary advantage of Mobile proxies is the ability to target by: * **ISP (`-isp-{code}`):** Target specific mobile network operators by their numeric ISP code (e.g. `-isp-310260` for T-Mobile US). ISP targeting is mutually exclusive with geo parameters - selecting ISP mode disables country, state, city, and ZIP targeting. ### Session Stability * **Sticky Sessions:** While sticky sessions are fully supported, their stability is **inherently lower** than with Residential proxies due to the nature of cellular networks. A session may be interrupted if the device loses signal or switches networks. * **Best Practice:** For mobile proxies, it is **critically important** to build robust retry logic into your application to handle potential session interruptions gracefully. ### Recommended Use Cases * **The Most Challenging Targets:** Social media platforms, flight aggregators, and limited-edition product sites. * **Mobile-First Platforms:** Scraping data from mobile apps or verifying content on mobile versions of websites. * **Any task requiring the highest level of trust and anonymity.** # Residential Proxies: Introduction & Use Cases Source: https://docs.2extract.com/proxy-products/residential/introduction-use-cases Understand what Residential Proxies are and how they can solve your most common data collection challenges. ## What Are Residential Proxies? **Residential Proxies** from 2extract.com are IP addresses provided by real desktop and laptop devices connected to genuine home Wi-Fi networks. When you use a residential proxy, your requests to any website appear as if they are coming from a regular, local user. This makes them the ideal tool for a wide range of data collection tasks, as they are far less likely to be blocked or served misleading information compared to datacenter proxies. > [!NOTE] > > **Key takeaway:** Residential proxies make you look like a real person, not a bot. ## Common Use Cases Residential proxies are the perfect solution when you need high anonymity and a low block rate. Here are some of the most popular applications: > [card] eCommerce & Price Monitoring > > Scrape product details, pricing, and stock levels from any eCommerce site without getting blocked. Aggregate competitor data to optimize your own pricing strategy. > [card] Ad Verification > > Verify that your ads are being displayed correctly in different geographical locations and to the right audience. Check for unauthorized ad placements and protect your brand. > [card] SEO & SERP Analysis > > Track your keyword rankings from any search engine in any country. Analyze Search Engine Results Pages (SERPs) as a local user would see them. > [card] Market Research > > Collect public data to analyze market trends, review sentiment, and gather business intelligence at scale. # Residential Proxies: Quick Start Source: https://docs.2extract.com/proxy-products/residential/quick-start A step-by-step example to get you started with our Residential Proxies in minutes. This guide assumes you have already [created your first Residential Proxy](/getting-started/quick-start). Here, we'll focus on how to use it with a simple example. ### Your Connection Credentials First, navigate to your proxy's settings page in the [**My Proxies**](https://2extract.com/app/proxies) dashboard. You will need the following from the "Connection Details" block: * **Host:** `proxy.2extract.net` * **Port:** (e.g., `5555`) * **Username:** (e.g., `2xt-customer-...-proxy-my_scraper`) * **Password:** (Click "Show" to reveal) ### Example: Getting an IP from Germany Let's make a request to get an IP address from Germany. We will do this by adding the `-country-de` parameter to your username. ```bash cURL theme={null} # Replace with your actual credentials USERNAME="PROXY_USERNAME-country-de" PASSWORD="PROXY_PASSWORD" HOST="proxy.2extract.net:5555" curl "https://api.ipify.org?format=json" \ --proxy "https://${USERNAME}:${PASSWORD}@${HOST}" ``` ```python Python theme={null} import requests # Replace with your actual credentials proxy_details = { "username": "PROXY_USERNAME-country-de", "password": "PROXY_PASSWORD", "host": "proxy.2extract.net", "port": 5555, } proxies = { "http": f"https://{proxy_details['username']}:{proxy_details['password']}@{proxy_details['host']}:{proxy_details['port']}", "https": f"https://{proxy_details['username']}:{proxy_details['password']}@{proxy_details['host']}:{proxy_details['port']}", } response = requests.get('https://api.ipify.org?format=json', proxies=proxies) print(response.json()) ``` > [!TIP] > > The `https://` in front of your credentials describes the link to our gateway, not the site you are visiting. It keeps your proxy password encrypted on the way to us, and works for `http://` and `https://` targets alike. See [HTTPS vs. HTTP](/proxy-products/configuration/protocols#https-vs-http-encrypting-the-link-to-our-gateway). If successful, the response will be a JSON object containing an IP address located in Germany. > [!TIP] > > That's it! You can now use this logic to target any country or configure sessions. For a full list of possibilities, check out our **[Configuration Guide](/proxy-products/configuration/authentication)**. # Residential Proxies: Specifics & Limitations Source: https://docs.2extract.com/proxy-products/residential/specifics-limitations Understand the unique characteristics and best practices for using Residential Proxies. While Residential Proxies are incredibly powerful, it's important to understand their specific characteristics to get the best results. ### IP Pool Characteristics * **Source:** Our Residential pool consists of millions of real IP addresses from desktop and laptop devices connected to genuine Internet Service Providers (ISPs) like Comcast, Verizon, and Deutsche Telekom. * **Rotation:** The pool is dynamic. IPs can go online and offline as users connect and disconnect their devices. Our system automatically filters out offline IPs to ensure a high success rate. ### Session Stability * **Sticky Sessions:** Residential proxies offer **high session stability**. A sticky session created with the `-session` parameter will typically remain stable for its entire duration (default 10 minutes, or up to 24 hours with `-time`). * **Best Practice:** For critical, multi-step tasks, always build retry logic into your scraper. While rare, an IP can go offline unexpectedly. ### Recommended Use Cases * **High-Anonymity Tasks:** Perfect for any target that employs sophisticated anti-bot measures. * **Geo-Targeted Content:** Ideal for scraping content that changes based on the user's country, state, or city. * **NOT Recommended for:** * Tasks requiring extremely low latency (e.g., high-frequency trading). For this, Datacenter proxies are a better fit. * Sending emails or activities that could be flagged as spam. This is a violation of our Terms of Service. # API Keys Source: https://docs.2extract.com/public-api/api-keys Create, scope, and revoke API keys from the dashboard to control programmatic access to your account. API keys let you authenticate requests to the 2extract Public API without using your account password. You can create multiple keys with different permissions - for example, a read-only key for a monitoring script and a write key for a provisioning pipeline. All key management happens on the **API Keys** page in the sidebar of your dashboard: **[Dashboard](https://2extract.com/app) → API Keys** ![API Keys page in the 2extract dashboard](https://mintcdn.com/2extract/mGX3CuPD-QxJ6VkS/images/api-keys-dashboard.png?fit=max\&auto=format\&n=mGX3CuPD-QxJ6VkS\&q=85\&s=5e2c0dd4a5d57dc69f5d2609ccbfadc3) *** ## Creating a key Click **Create API Key** to open the creation dialog. Fill in three fields: **Name** - a descriptive label so you can identify the key later (e.g. `Automation script`, `CI pipeline`). **Permissions** - select the access scopes the key needs. Permissions are grouped by area: > [accordion] Proxies > > | Permission | What it allows | > | :- | :- | > | `proxies:read` | List and retrieve proxy details and configuration | > | `proxies:write` | Create, update, and delete proxies; manage limits and whitelists | > | `geo:read` | Access geo directory (countries, states, cities, ZIP codes) | > [accordion] Statistics > > | Permission | What it allows | > | :- | :- | > | `stats:read` | View traffic statistics and export usage reports | > [accordion] Account & Billing > > | Permission | What it allows | > | :- | :- | > | `balance:read` | View account balance, transaction history, and available plans | `proxies:write` does **not** include `proxies:read` - assign both if your integration needs to both create and read proxies. **Expiration** - choose how long the key stays valid: | Option | Duration | | :- | :- | | 30 days | Key expires in 30 days | | 90 days | Key expires in 90 days | | 6 months | Key expires in 6 months | | 1 year | Key expires in 1 year | | No expiration | Key is valid indefinitely | Click **Create API Key** to generate the key. *** ## Saving the key After creation, the **Your New API Key** dialog appears with the full key value and a **Copy** button. > [!WARNING] > > This API key will not be shown again. Copy it and store it in a safe place, such as a password manager or a secrets vault. If you lose it, revoke the key and create a new one. Click **Done** to close the dialog. From this point, only the key prefix (e.g. `2xt_20fe...`) is visible in the table. *** ## Viewing and managing keys The API Keys page lists all active keys in a table with the following columns: | Column | Description | | :- | :- | | **Name** | The label you set at creation | | **Key** | Truncated key prefix (e.g. `2xt_20fe...`) | | **Permissions** | Scopes granted to this key | | **Last used** | When the key last authenticated a request | | **Expires** | Expiration date, or empty if no expiration was set | | **Created** | When the key was generated | Use the search field to filter keys by name. Columns can be sorted by clicking the column header. > [!NOTE] > > You can have up to **10 API keys** per account. To create a new one when at the limit, revoke an existing key first. *** ## Revoking a key Click **Revoke** next to any key to open the confirmation dialog. Confirm by clicking **Revoke** in the **Revoke API Key** dialog. Revocation is immediate - any requests using the key will start returning `401 Unauthorized` instantly. This action is irreversible. Revoke a key immediately if: * It was accidentally committed to a repository * A team member who had access has left * You suspect it was leaked or compromised *** ## Security best practices > [card] One key per integration > > Each script or service should have its own key. This way you can revoke a single key without affecting other integrations. > [card] Minimal permissions > > A monitoring script only needs `stats:read`. A provisioning pipeline needs `proxies:write`. Never grant more than required. > [card] Use environment variables > > Never hardcode keys in source code. Store them in environment variables or a secrets manager (Vault, AWS Secrets Manager, etc.). > [card] Set an expiration > > Prefer keys with an expiration date over indefinite ones. Rotate before expiry by creating a replacement key, updating your integration, then revoking the old one. # Balance & Plans Source: https://docs.2extract.com/public-api/balance Check your account balance, view transaction history, and retrieve available tariff plans. Required scope: balance:read. > [!NOTE] > > See the [Swagger UI](https://api.2extract.com/swagger/index.html) for live request/response schemas and to try endpoints directly in your browser. *** ## Get balance Returns the current spendable balance of the authenticated user's account in USD. ```http theme={null} GET /v1/user/balance ``` **Scope:** `balance:read` ```bash cURL theme={null} curl https://api.2extract.com/v1/user/balance \ -H "X-API-Key: 2xt_YOUR_API_KEY" ``` ```python Python theme={null} import requests r = requests.get( "https://api.2extract.com/v1/user/balance", headers={"X-API-Key": "2xt_YOUR_API_KEY"} ) print(r.json()) ``` **Example response** ```json theme={null} { "result": true, "data": { "funds_available": 42.50 } } ``` *** ## Get balance history Returns a paginated list of balance transactions (top-ups and charges) for a given date range. ```http theme={null} GET /v1/user/balance-history ``` **Query parameters** | Parameter | Type | Required | Description | | :- | :- | :- | :- | | `date_from` | string | Yes | Start date in `YYYY-MM-DD` format | | `date_to` | string | Yes | End date in `YYYY-MM-DD` format | | `limit` | integer | No | Items per page. Default: `100` | | `page` | integer | No | Page number starting from `0`. Default: `0` | | `order` | string | No | Sort direction: `asc` or `desc`. Default: `desc` | **Scope:** `balance:read` ```bash cURL theme={null} curl "https://api.2extract.com/v1/user/balance-history?date_from=2026-01-01&date_to=2026-12-31" \ -H "X-API-Key: 2xt_YOUR_API_KEY" ``` ```python Python theme={null} import requests r = requests.get( "https://api.2extract.com/v1/user/balance-history", headers={"X-API-Key": "2xt_YOUR_API_KEY"}, params={"date_from": "2026-01-01", "date_to": "2026-12-31", "limit": 50} ) print(r.json()) ``` **Example response** ```json theme={null} { "result": true, "data": [ { "id": 1234567, "tx_id": 1234567, "type": "Top-up", "source": "payment", "amount": 100.00, "currency": "USD", "description": "Manual Top-up via Visa ****4242", "created_at": "2026-01-15T10:30:00Z" } ] } ``` *** ## Get plans Returns the list of available tariff plans. Use the `id` from this response as `tariff_id` when creating a proxy. ```http theme={null} GET /v1/plans ``` **Query parameters** | Parameter | Type | Required | Description | | :- | :- | :- | :- | | `proxy_type` | string | Yes | `residential` or `mobile` | | `enabled` | boolean | No | Filter to only active plans | | `popular` | boolean | No | Filter to only featured plans | **Scope:** `proxies:read` or `proxies:write` ```bash cURL theme={null} curl "https://api.2extract.com/v1/plans?proxy_type=residential" \ -H "X-API-Key: 2xt_YOUR_API_KEY" ``` ```python Python theme={null} import requests r = requests.get( "https://api.2extract.com/v1/plans", headers={"X-API-Key": "2xt_YOUR_API_KEY"}, params={"proxy_type": "residential"} ) print(r.json()) ``` **Example response** ```json theme={null} { "result": true, "data": [ { "id": 1, "title": "Residential 1GB", "description": "Pay-as-you-go residential proxy traffic", "amount": 4.50, "currency": "USD", "traffic_available": 1000000000, "traffic_type": "package" } ] } ``` # Geo Reference Source: https://docs.2extract.com/public-api/geo Look up countries, states, cities, and ZIP codes to use as targeting parameters when creating proxies. Required scope: geo:read. > [!NOTE] > > See the [Swagger UI](https://api.2extract.com/swagger/index.html) for live request/response schemas and to try endpoints directly in your browser. The geo endpoints return the IDs and codes you need to set geo-targeting on your proxies. The typical lookup flow is: 1. **Countries** - get a country `id` (integer) and `code` (string) 2. **States** - use `code` to get states for that country 3. **Cities** - filter by country and optionally state 4. **ZIP codes** - filter by country and city Pass country `id` values in the `countries` array when creating or updating a proxy. Use `code` and `extract_parameter` values in proxy username parameters for connection-level geo-targeting. *** ## Get countries Returns all available countries with their numeric IDs and ISO codes. ```http theme={null} GET /v1/geo/countries ``` **Query parameters** | Parameter | Type | Required | Description | | :- | :- | :- | :- | | `search` | string | No | Filter by country name (partial match) | **Scope:** `geo:read` ```bash cURL theme={null} curl https://api.2extract.com/v1/geo/countries \ -H "X-API-Key: 2xt_YOUR_API_KEY" ``` ```bash cURL (with search) theme={null} curl "https://api.2extract.com/v1/geo/countries?search=United" \ -H "X-API-Key: 2xt_YOUR_API_KEY" ``` ```python Python theme={null} import requests r = requests.get( "https://api.2extract.com/v1/geo/countries", headers={"X-API-Key": "2xt_YOUR_API_KEY"} ) print(r.json()) ``` **Example response** ```json theme={null} { "result": true, "data": [ { "id": 84, "code": "US", "name": "United States" }, { "id": 225, "code": "RU", "name": "Russia" }, { "id": 82, "code": "GB", "name": "United Kingdom" } ] } ``` *** ## Get states Returns states or regions for a given country. ```http theme={null} GET /v1/geo/states ``` **Query parameters** | Parameter | Type | Required | Description | | :- | :- | :- | :- | | `country_code` | string | Yes | ISO country code, e.g. `US` | | `search` | string | No | Filter by region name | **Scope:** `geo:read` ```bash cURL theme={null} curl "https://api.2extract.com/v1/geo/states?country_code=US" \ -H "X-API-Key: 2xt_YOUR_API_KEY" ``` ```python Python theme={null} import requests r = requests.get( "https://api.2extract.com/v1/geo/states", headers={"X-API-Key": "2xt_YOUR_API_KEY"}, params={"country_code": "US"} ) print(r.json()) ``` **Example response** ```json theme={null} { "result": true, "data": [ { "id": 1, "code": 77, "name": "California", "extract_parameter": "california" } ] } ``` *** ## Get cities Returns cities for a given country, optionally filtered by state. ```http theme={null} GET /v1/geo/cities ``` **Query parameters** | Parameter | Type | Required | Description | | :- | :- | :- | :- | | `country_code` | string | Yes | ISO country code, e.g. `US` | | `region` | string | No | Region name to filter by, e.g. `California` | | `search` | string | No | Filter by city name | **Scope:** `geo:read` ```bash cURL theme={null} curl "https://api.2extract.com/v1/geo/cities?country_code=US®ion=California" \ -H "X-API-Key: 2xt_YOUR_API_KEY" ``` ```python Python theme={null} import requests r = requests.get( "https://api.2extract.com/v1/geo/cities", headers={"X-API-Key": "2xt_YOUR_API_KEY"}, params={"country_code": "US", "region": "California"} ) print(r.json()) ``` **Example response** ```json theme={null} { "result": true, "data": [ { "id": 32706, "name": "Los Angeles", "extract_parameter": "losangeles", "country_id": 84, "region_code": 443 } ] } ``` *** ## Get ZIP codes Returns ZIP codes for a city within a country. ```http theme={null} GET /v1/geo/zip ``` **Query parameters** | Parameter | Type | Required | Description | | :- | :- | :- | :- | | `country_code` | string | Yes | ISO country code, e.g. `US` | | `city` | string | Yes | City name, e.g. `Los Angeles` | **Scope:** `geo:read` ```bash cURL theme={null} curl "https://api.2extract.com/v1/geo/zip?country_code=US&city=Los+Angeles" \ -H "X-API-Key: 2xt_YOUR_API_KEY" ``` ```python Python theme={null} import requests r = requests.get( "https://api.2extract.com/v1/geo/zip", headers={"X-API-Key": "2xt_YOUR_API_KEY"}, params={"country_code": "US", "city": "Los Angeles"} ) print(r.json()) ``` **Example response** ```json theme={null} { "result": true, "data": [ { "zip": "90001" }, { "zip": "90002" }, { "zip": "90003" } ] } ``` # Public API Source: https://docs.2extract.com/public-api/introduction Automate proxy management, monitor traffic, and query geo data with the 2extract REST API. The 2extract Public API gives you programmatic access to everything you can do in the dashboard: create and configure proxies, track usage, manage your balance, and look up geo data - all over HTTPS with JSON. > [card] [Interactive Swagger UI](https://api.2extract.com/swagger/index.html) > > Explore and test every endpoint directly in your browser. > [card] [Postman Collection](/downloads/2extract-public-api.postman_collection.json) > > Import the ready-made collection and start making requests in minutes. *** ## Base URL All API requests go to: ``` https://api.2extract.com ``` *** ## Authentication The API uses **API keys** passed in a request header. Every request must include: ```http theme={null} X-API-Key: 2xt_YOUR_API_KEY ``` **Getting an API key:** 1. Open the [Dashboard](https://2extract.com/app) and go to **API Keys** in the sidebar. 2. Click **Create API Key** and select the permissions you need. 3. Copy the key - it is shown only once. > [!WARNING] > > API keys are secrets. Do not commit them to version control or expose them in client-side code. Rotate a key immediately if it is ever leaked. ### Scopes Each API key carries one or more scopes that gate access to endpoint groups. Request only the scopes your integration needs. | Scope | Grants access to | | :- | :- | | `proxies:read` | List and retrieve proxy details | | `proxies:write` | Create, update, and delete proxies | | `stats:read` | Traffic statistics and usage export | | `balance:read` | Account balance and balance history | | `geo:read` | Country, state, city, and ZIP lookup | `proxies:write` does **not** include `proxies:read` - the scopes are independent. *** ## Request Format For endpoints that accept a body (`POST`, `PUT`), send JSON and set the `Content-Type` header: ```http theme={null} Content-Type: application/json ``` *** ## Response Format All responses are JSON wrapped in a standard envelope: ```json theme={null} { "result": true, "data": { ... }, "error": "", "error_type": "", "meta": {} } ``` | Field | Type | Description | | :- | :- | :- | | `result` | boolean | `true` on success, `false` on error | | `data` | object / array | The response payload | | `error` | string | Human-readable error message (empty on success) | | `error_type` | string | Machine-readable error code (empty on success) | | `meta` | object | Pagination or other metadata where applicable | *** ## Error Handling Error responses use standard HTTP status codes alongside the envelope: ```json theme={null} { "result": false, "error": "API key not found or expired", "error_type": "unauthorized" } ``` | HTTP Status | Meaning | | :- | :- | | `400 Bad Request` | Invalid input - check the request body or query parameters | | `401 Unauthorized` | Missing or invalid API key | | `403 Forbidden` | Valid key, but insufficient scope for this endpoint | | `404 Not Found` | The requested resource does not exist | *** ## Quick Example Retrieve all your proxies with a single `curl` call: ```bash theme={null} curl https://api.2extract.com/v1/proxy \ -H "X-API-Key: 2xt_YOUR_API_KEY" ``` See the [Swagger UI](https://api.2extract.com/swagger/index.html) for a full interactive reference of every endpoint, including request schemas and live response examples. # Proxies Source: https://docs.2extract.com/public-api/proxies Create, configure, and delete proxy lists. Required scopes: proxies:read and/or proxies:write. > [!NOTE] > > See the [Swagger UI](https://api.2extract.com/swagger/index.html) for live request/response schemas and to try endpoints directly in your browser. *** ## List proxies Returns all proxy lists owned by the authenticated user with full details: tariff, limits, traffic usage, and settings. ```http theme={null} GET /v1/proxy ``` **Query parameters** | Parameter | Type | Required | Description | | :- | :- | :- | :- | | `status` | string | No | Filter by status. Comma-separated: `active,pending` | | `search` | string | No | Partial name match (case-insensitive) | | `limit` | integer | No | Items per page. Default: `100` | | `page` | integer | No | Page number starting from `0`. Default: `0` | | `order` | string | No | Sort direction: `asc` or `desc`. Default: `desc` | | `order_by` | string | No | Sort field: `name`, `status`, `tariff.name`, `traffic_used.total_used`, `total_spent`, `created_at` | | `statistic_from` | string | No | Start date for traffic statistics period (`YYYY-MM-DD`) | | `statistic_to` | string | No | End date for traffic statistics period (`YYYY-MM-DD`) | **Scope:** `proxies:read` ```bash cURL theme={null} curl https://api.2extract.com/v1/proxy \ -H "X-API-Key: 2xt_YOUR_API_KEY" ``` ```python Python theme={null} import requests r = requests.get( "https://api.2extract.com/v1/proxy", headers={"X-API-Key": "2xt_YOUR_API_KEY"} ) print(r.json()) ``` *** ## Create proxy Provisions a new proxy list. ```http theme={null} POST /v1/proxy ``` **Request body** | Field | Type | Required | Description | | :- | :- | :- | :- | | `name` | string | Yes | Proxy name. Lowercase letters, digits, and underscores only. Immutable after creation. | | `proxy_type` | string | Yes | `residential` or `mobile` | | `tariff_id` | integer | Yes | Plan ID. Get available plans from [GET /v1/plans](/public-api/balance#get-plans). | | `countries` | integer\[] | No | List of country IDs to target. Get IDs from [GET /v1/geo/countries](/public-api/geo#get-countries). | | `description` | string | No | Human-readable label | | `ip_whitelist` | string\[] | No | IP addresses allowed to connect to this proxy | | `limits` | object | No | Spending or traffic limits (see below) | | `limits.limit_type` | string | No | `money` or `traffic` | | `limits.time_period` | string | No | `daily` or `monthly` | | `limits.total_limit` | number | No | Limit value. For `money` - USD. For `traffic` - bytes. | **Scope:** `proxies:write` ```bash cURL theme={null} curl -X POST https://api.2extract.com/v1/proxy \ -H "X-API-Key: 2xt_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "myproxylist01", "proxy_type": "residential", "tariff_id": 1, "countries": [84], "description": "My personal proxy list", "ip_whitelist": ["192.168.1.1"], "limits": { "limit_type": "money", "time_period": "monthly", "total_limit": 100 } }' ``` ```python Python theme={null} import requests r = requests.post( "https://api.2extract.com/v1/proxy", headers={"X-API-Key": "2xt_YOUR_API_KEY"}, json={ "name": "myproxylist01", "proxy_type": "residential", "tariff_id": 1, "countries": [84], "description": "My personal proxy list" } ) print(r.json()) ``` **Example response** ```json theme={null} { "result": true, "data": { "id": "86Rf07", "name": "myproxylist01", "description": "My personal proxy list", "host": "proxy.2extract.net", "port": 5555, "password": "1jw9j7zwwur", "status": "active", "type": "residential", "user_id": 123, "created_at": "2026-01-01T10:00:00Z", "updated_at": "2026-01-01T10:00:00Z" } } ``` *** ## Get proxy Returns full details for a single proxy list. ```http theme={null} GET /v1/proxy/{id} ``` **Path parameters** | Parameter | Type | Description | | :- | :- | :- | | `id` | string | Proxy list ID (e.g. `86Rf07`) | **Scope:** `proxies:read` ```bash cURL theme={null} curl https://api.2extract.com/v1/proxy/86Rf07 \ -H "X-API-Key: 2xt_YOUR_API_KEY" ``` ```python Python theme={null} import requests r = requests.get( "https://api.2extract.com/v1/proxy/86Rf07", headers={"X-API-Key": "2xt_YOUR_API_KEY"} ) print(r.json()) ``` *** ## Update proxy Updates settings for an existing proxy list. Only fields included in the request body are changed. ```http theme={null} PUT /v1/proxy/{id} ``` **Path parameters** | Parameter | Type | Description | | :- | :- | :- | | `id` | string | Proxy list ID | **Request body** | Field | Type | Description | | :- | :- | :- | | `countries` | integer\[] | Replace the country targeting list | | `description` | string | Update the description | | `status` | string | Proxy status, e.g. `active` | | `ip_whitelist` | string\[] | Replace the IP whitelist | | `limits` | object | Update spending or traffic limits | **Scope:** `proxies:write` ```bash cURL theme={null} curl -X PUT https://api.2extract.com/v1/proxy/86Rf07 \ -H "X-API-Key: 2xt_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "countries": [84], "description": "Updated description", "status": "active" }' ``` ```python Python theme={null} import requests r = requests.put( "https://api.2extract.com/v1/proxy/86Rf07", headers={"X-API-Key": "2xt_YOUR_API_KEY"}, json={"description": "Updated description", "status": "active"} ) print(r.json()) ``` *** ## Delete proxy Soft-deletes a proxy list. The proxy stops accepting connections immediately. ```http theme={null} DELETE /v1/proxy/{id} ``` **Path parameters** | Parameter | Type | Description | | :- | :- | :- | | `id` | string | Proxy list ID | **Scope:** `proxies:write` ```bash theme={null} curl -X DELETE https://api.2extract.com/v1/proxy/86Rf07 \ -H "X-API-Key: 2xt_YOUR_API_KEY" ``` *** ## Update proxy limits Sets or replaces the spending or traffic limit for a proxy list. ```http theme={null} PUT /v1/proxy/{id}/limits ``` **Path parameters** | Parameter | Type | Description | | :- | :- | :- | | `id` | string | Proxy list ID | **Request body** | Field | Type | Required | Description | | :- | :- | :- | :- | | `limit_type` | string | Yes | `money` (USD) or `traffic` (bytes) | | `time_period` | string | Yes | `daily` or `monthly` | | `total_limit` | number | Yes | The limit value | **Scope:** `proxies:write` ```bash theme={null} curl -X PUT https://api.2extract.com/v1/proxy/86Rf07/limits \ -H "X-API-Key: 2xt_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "limit_type": "money", "time_period": "monthly", "total_limit": 100 }' ``` *** ## Update IP whitelist Replaces the full IP whitelist for a proxy list. Only IPs on this list are allowed to connect. ```http theme={null} PUT /v1/proxy/{id}/whitelist ``` **Path parameters** | Parameter | Type | Description | | :- | :- | :- | | `id` | string | Proxy list ID | **Request body** | Field | Type | Required | Description | | :- | :- | :- | :- | | `ips` | string\[] | Yes | Full replacement list of authorized IPv4 addresses. Send an empty array to clear. | **Scope:** `proxies:write` ```bash theme={null} curl -X PUT https://api.2extract.com/v1/proxy/86Rf07/whitelist \ -H "X-API-Key: 2xt_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"ips": ["1.2.3.4"]}' ``` *** ## Get target hosts whitelist Returns the list of target hosts this proxy is allowed to connect to. An empty list means no restriction. ```http theme={null} GET /v1/proxy/{id}/target-hosts-whitelist ``` **Path parameters** | Parameter | Type | Description | | :- | :- | :- | | `id` | string | Proxy list ID | **Scope:** `proxies:read` ```bash theme={null} curl https://api.2extract.com/v1/proxy/86Rf07/target-hosts-whitelist \ -H "X-API-Key: 2xt_YOUR_API_KEY" ``` *** ## Set target hosts whitelist Replaces the target hosts whitelist. When set, the proxy will only forward traffic to the listed hosts. Supports wildcards (e.g. `*.example.com`). ```http theme={null} POST /v1/proxy/{id}/target-hosts-whitelist ``` **Path parameters** | Parameter | Type | Description | | :- | :- | :- | | `id` | string | Proxy list ID | **Request body** | Field | Type | Required | Description | | :- | :- | :- | :- | | `target_hosts` | string\[] | Yes | Full replacement list. Send an empty array to remove the restriction. | **Scope:** `proxies:write` ```bash theme={null} curl -X POST https://api.2extract.com/v1/proxy/86Rf07/target-hosts-whitelist \ -H "X-API-Key: 2xt_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"target_hosts": ["example.com"]}' ``` *** ## Regenerate password Generates a new password for a proxy list and invalidates the old one. All active connections using the old password will be dropped. ```http theme={null} POST /v1/proxy/{id}/password ``` **Path parameters** | Parameter | Type | Description | | :- | :- | :- | | `id` | string | Proxy list ID | **Scope:** `proxies:write` ```bash theme={null} curl -X POST https://api.2extract.com/v1/proxy/86Rf07/password \ -H "X-API-Key: 2xt_YOUR_API_KEY" ``` **Example response** ```json theme={null} { "result": true, "data": { "id": "86Rf07", "password": "newpassword123" } } ``` # Statistics Source: https://docs.2extract.com/public-api/statistics Query traffic usage across all your proxies. Required scope: stats:read. > [!NOTE] > > See the [Swagger UI](https://api.2extract.com/swagger/index.html) for live request/response schemas and to try endpoints directly in your browser. *** ## Get traffic stats Returns aggregated traffic usage for the authenticated user across all proxies for a given date range. ```http theme={null} GET /v1/user/traffic ``` **Query parameters** | Parameter | Type | Required | Description | | :- | :- | :- | :- | | `date_from` | string | Yes | Start date in `YYYY-MM-DD` format | | `date_to` | string | Yes | End date in `YYYY-MM-DD` format | **Scope:** `stats:read` ```bash cURL theme={null} curl "https://api.2extract.com/v1/user/traffic?date_from=2026-01-01&date_to=2026-12-31" \ -H "X-API-Key: 2xt_YOUR_API_KEY" ``` ```python Python theme={null} import requests r = requests.get( "https://api.2extract.com/v1/user/traffic", headers={"X-API-Key": "2xt_YOUR_API_KEY"}, params={"date_from": "2026-01-01", "date_to": "2026-12-31"} ) print(r.json()) ``` *** ## Export proxy usage (CSV) Downloads a CSV file with a per-day breakdown of traffic and spend for a specific proxy list. Useful for billing reconciliation and pipeline monitoring. ```http theme={null} GET /v1/proxy/{id}/usage/export ``` **Path parameters** | Parameter | Type | Description | | :- | :- | :- | | `id` | string | Proxy list ID (e.g. `86Rf07`) | **Query parameters** | Parameter | Type | Required | Description | | :- | :- | :- | :- | | `date_from` | string | Yes | Start date in `YYYY-MM-DD` format | | `date_to` | string | Yes | End date in `YYYY-MM-DD` format | **Response:** `text/csv` file download. **Scope:** `stats:read` ```bash theme={null} curl "https://api.2extract.com/v1/proxy/86Rf07/usage/export?date_from=2026-01-01&date_to=2026-12-31" \ -H "X-API-Key: 2xt_YOUR_API_KEY" \ -o proxy-usage-2026.csv ``` # Product Updates Source: https://docs.2extract.com/release-notes/product-updates Changelog of notable releases. **September 2026** v1.1.6 This release brings one-click IP rotation for anti-detect browser workflows, routes your traffic through the closest connection endpoint, and fixes several issues in the proxy connection builder. **🚀 New Features** * **IP Change URL for Anti-Detect Browsers:** Every sticky session now comes with a ready-to-use IP Change URL, available in the **Verify & Connect** block on the **Integration** tab of any proxy. Copy it into the "IP change link" field of your anti-detect browser profile (Dolphin Anty, AdsPower, GoLogin, Multilogin and others) and rotate the exit IP on demand straight from the browser - your session ID, credentials and targeting stay exactly as they are. No more assembling the URL by hand. The field appears automatically when Session Type is set to Sticky. **✨ Improvements** * **Closest Connection Endpoint:** Connection requests are now routed to the entry point nearest to you instead of a fixed one. Expect lower latency and faster time-to-first-byte, especially outside Europe. * **Proxy Creation Experience:** We polished the UI and UX of the proxy creation flow to make it faster and less cluttered to get a new proxy resource up and running. **🐛 Bug Fixes** * Fixed sticky Session ID not being regenerated when targeting changed. Previously, switching country, region, city, ZIP or ASN (or applying a Quick Preset) kept the same Session ID, so the copied connection string silently kept returning IPs for the old targeting. The Session ID is now regenerated on every targeting change, in the connection string and in all cURL / Python / Node.js / Go snippets. * Fixed the quick connect dialog not showing the proxy password. **August 2026** v1.1.5 This release introduces a powerful MCP server for programmatic proxy management, unified proxy creation rules across all screens, improved error localization, and several UI refinements. **🚀 New Features** * **MCP Server for Proxy Automation:** We've released a hosted Model Context Protocol (MCP) server that enables full programmatic proxy management through AI agents and development tools. Connect any MCP-compatible client (Claude Code, Claude Desktop, Cursor, MCP Inspector) with your API key and automate your entire proxy workflow - create, update, deactivate, and delete proxies; manage traffic limits and view your balance and usage history; configure IP whitelists and target hosts; search geo data (countries, regions, cities, ZIP codes, ISP/ASN); and retrieve available plans and tariffs. Access the server at `https://mcp.2extract.com/mcp` using your API key for per-connection authentication. Get started with Claude Code: ```bash theme={null} claude mcp add --transport http 2extract https://mcp.2extract.com/mcp --header "Authorization: Bearer YOUR_API_KEY" ``` Full documentation is available in the [MCP server guide](https://docs.2extract.com/ai/mcp-server/overview). **✨ Improvements** * **Consistent Proxy Creation Eligibility:** Proxy creation rules are now unified across all screens and contexts, eliminating edge cases where eligibility checks would differ depending on where you initiated proxy creation. * **Localization & Error Messages:** Backend error messages now display with proper localization. Validation errors now support dynamic parameters in translated strings, and missing translations have been added across the dashboard. * **Interface Refinements:** Destructive actions now require explicit confirmation dialogs for safety. The Getting Started widget now auto-collapses on target screens to reduce visual clutter. Newsletter consent preferences now save correctly. Live Chat is now accessible in mobile view. **🐛 Bug Fixes** * Fixed proxy deactivation dialog showing placeholder text `{name}` instead of the actual proxy name. **July 2026** v1.1.4 This release introduces a complete new user onboarding experience designed to get you productive with proxies faster, plus new export capabilities and several bug fixes across the dashboard. **🚀 New Features** * **Welcome Wizard:** An interactive modal that guides you through key setup steps after you sign up. * **Getting Started Checklist:** A floating progress widget that tracks your onboarding journey and keeps you on track. * **My Proxies CSV Export:** Export your proxy list directly to CSV from the My Proxies dashboard. **✨ Improvements** * **API Keys:** Added direct documentation links in the header and improved the empty state to help you get started faster. * **Integrations tab:** Improved initial state behavior for better clarity. **🐛 Bug Fixes** * Fixed validation preventing profile saves with an empty country field. * Fixed SMM & Accounts preset showing a numeric code instead of the selected city name. * Fixed negative dips appearing on the Usage Overview chart. * Added missing favicon. **July 2026** v1.1.3 This release brings a complete redesign of the billing experience, giving you more control over how you pay and making it easier to track your transaction history. **🚀 New Features** * **Multiple Payment Methods:** You can now choose to pay with either your bank card or cryptocurrency - select what works best for your workflow. **✨ Improvements** * **Redesigned Billing Screen:** The payment interface has been rebuilt for better clarity and faster top-ups. * **Transaction History Tab:** Your transaction history is now in a dedicated tab, making it easier to browse and track past activity without clutter. * **Balance After Column:** Each transaction now shows the balance after it was applied, giving you better visibility into your account state at each step. * **Deposit Validation:** Minimum deposit amounts are now validated to ensure your payment attempts succeed on the first try. **June 2026** v1.1.2 This release launches the public API with API key authentication, making it easy to integrate 2extract proxies into your applications and workflows. We've also improved session reliability and fixed several edge cases in balance management. **🚀 New Features** * **Public API:** The public API is now available and fully authenticated via API keys. Use it to programmatically create proxies, manage your account, check your balance, and retrieve traffic statistics. Perfect for automation and integration into your development pipelines. * **API Key Management:** A new section in your dashboard lets you create, copy, view, and revoke API keys with full control over your account access. **✨ Improvements** * **Sticky IP Mode (`-const`):** We improved the `-const` parameter behavior - it now guarantees your proxy IP will not change between requests. * **My Proxies Page:** The empty state now displays up-to-date pricing for both residential and mobile proxies, so you know the costs before creating your first proxy. Proxy creation is also protected by a balance check - you cannot create a proxy if you don't have sufficient funds. **🐛 Bug Fixes** * Fixed an edge case where balance top-ups failed to process correctly in certain scenarios. **June 2026** v1.1.1 This release adds promo codes and coupons to the billing page, along with several reliability and display fixes. **🚀 New Features** * **Promo Codes & Coupons:** A new section on the Billing page lets you redeem coupons (adds a fixed amount directly to your balance) or enter a promo code during top-up to get a percentage bonus on the current amount. **🐛 Bug Fixes** * Fixed an issue where proxy traffic wasn't immediately available after a successful balance top-up. * Fixed incorrect balance rounding in the dashboard display. * Fixed multiple error and validation message texts throughout the dashboard. * Various quality-of-life improvements across the platform. **April 2026** v1.1.0 This release introduces mobile proxy support, a fully redesigned proxy management interface, and ISP-level targeting. **🚀 New Features** * **Mobile Proxies:** Mobile proxies are now available in your dashboard. Create a mobile proxy, select Pay-As-You-Go pricing at \$4.99/GB, and manage it alongside your residential proxies. * **ISP Targeting:** Route your traffic through a specific Internet Service Provider. Select an ISP directly in the proxy Configuration block when setting up or editing a proxy. * **Proxy Settings Screen:** The proxy detail page has been fully redesigned with three tabs - Overview (traffic and status), Settings (geo, session, and rotation parameters), and Integration (connection constructor with ready-to-copy credentials). * **Quick Connect:** A new Quick Connect option on the My Proxies screen lets you grab connection credentials instantly without opening the full settings page. * **Antidetect Browser Import:** The Integration tab now includes a credential generator for Antidetect Browsers. Each connection line gets a unique session number, so you can import a ready-to-use proxy list directly into your browser profile manager. **✨ Improvements** * **My Proxies Screen:** Redesigned list layout with proxy limits now visible directly in the table and a Date Range filter for narrowing down traffic statistics. * **Create Proxy Screen:** The proxy creation flow has been reworked. A built-in name generator helps you create a valid proxy name in one click. * **Proxy Names:** Underscores (`_`) are now allowed in proxy names. * **Proxy Status Display:** Proxy statuses are now shown correctly across the My Proxies and Proxy Settings screens. * **Session Security:** Changing your password now immediately invalidates all active sessions on other devices. **🐛 Bug Fixes** * Fixed a connection drop occurring every 5 minutes when routing traffic through a proxy. * Fixed an error shown after clicking "Create Your First Proxy" when the proxy list was empty. * Fixed a database error during OAuth registration via Google or GitHub. **March 2026** v1.0.9 This release focuses on security controls, flexible billing capabilities for enterprise clients, and better communication regarding identity verification. **🔐 Security & Access** * **Password Regeneration:** You can now regenerate the password for any proxy instance directly from the dashboard. This is crucial for security rotation or if you suspect your credentials have been compromised. **💳 Billing & Enterprise Features** * **Credit Line Support:** Implemented logic to allow specific accounts to operate with a negative balance (post-payment model), ensuring uninterrupted service for trusted partners. * **Custom Pricing:** The system now fully supports and correctly displays personalized tariff rates assigned by our sales team, replacing the standard list prices where applicable. **🔔 Notifications** * **KYC Status Emails:** Automated email notifications are now sent immediately when your Identity Verification status changes (Approved or Declined), keeping you in the loop without needing to check the profile page. **February 2026** v1.0.8 This release introduces powerful ISP targeting via ASN, allowing you to route traffic through specific networks. **📡 ASN (ISP) Targeting** * **New Targeting Mode:** Added a dedicated toggle in **Proxy Settings** to switch between "Location" and "ASN" targeting modes. You can now configure your proxy to target specific Internet Service Providers (ISPs) directly from the dashboard. * **Gateway Support:** The proxy gateway now officially supports the **`-asn`** parameter in the connection string (e.g., `user...-asn-7922`), allowing for precise network selection at the request level. **February 2026** v1.0.7 This release unlocks granular targeting by ZIP code and polishes the connection string generator for a smoother integration experience. **📍 ZIP Code Targeting** * **Gateway Support:** The proxy gateway now supports the **`-zip`** parameter in the username string, allowing for ultra-precise geo-targeting. * **UI Integration:** The Proxy Settings interface now fully supports the ZIP code selector via the API, making it easy to generate the correct connection string within the Connection Helper. **🛠 Connection Helper Improvements** * **Smart Randomization:** When selecting "Sticky Session", the generator now automatically creates a **random Session ID**. You no longer need to manually invent a random string to test sticky sessions. * **Parameter Fixes:** Fixed an issue where the `-time` parameter was not correctly applied to the generated connection string. **✨ Interface & Clarity** * **Status Messages:** Improved the readability of the proxy status when a spending limit is reached. * **Copyright Update:** Updated email templates and footer information for 2026. **February 2026** v1.0.6 This update brings precision to your proxy targeting with City and State support, along with core stability improvements and interface refinements. **🌍 Advanced Geo-Targeting** * **State & City Support:** You can now target specific locations with greater precision. We have integrated comprehensive dictionaries for global **Regions (States)** and **Cities** directly into the Proxy Settings and connection string generator. * **Smart Routing:** The proxy gateway now officially supports `-state` and `-city` parameters for granular traffic routing. **✨ UI/UX Improvements** * **Spending Limits Visibility:** You can now see the set **USD (\$) limits** for each proxy directly in the "My Proxies" table, making budget monitoring faster. * **Input Validation:** Enforced integer-only input for the Session Time field to prevent configuration errors. **⚙️ Core & Stability** * **Proxy Name Parsing:** Completely refactored the username parsing logic on the gateway. This eliminates edge-case collisions between proxy names and configuration parameters. **January 2026** v1.0.5 This release introduces flexible sticky session timing, enhanced security with KYC limits, and a smoother proxy creation experience. **🚀 New Features** * **Sticky Session Duration:** Added support for the `-time-[minutes]` parameter. You can now define exactly how long an IP remains assigned during a sticky session directly in your connection string. * **KYC Deposit Limits:** To enhance platform security, we implemented a **\$50 cumulative deposit limit** for unverified accounts. * **Verification Flow:** Added a helpful popup that guides you through the Identity Verification (KYC) process immediately if you attempt to top up beyond the unverified limit. **✨ UX Improvements** * **Proxy Creation Experience:** Completely redesigned the "Create Proxy" interaction. The button now features a **progressive loader** showing real-time status steps and provides clearer error messages if resource allocation fails. **December 2025** v1.0.4 This update focuses on more reliable analytics, cleaner empty states across key pages, and multiple UX + billing fixes. **🚀 New Features** * **User Avatars:** Added a dynamic avatar generator for users in the sidebar. * **Proxy Settings Hint:** Added an **info (“i”) icon** with a hover tooltip next to the **Username** field for better guidance. **✨ Improvements** * **Dashboard Onboarding:** Improved empty states for the **new user Dashboard**, including a clearer “Getting started” experience. * **Recently Used Proxies Widget:** Updated the empty state logic to better reflect user progress and show more helpful guidance. * **Dashboard cURL Block:** Added an instructional placeholder in the cURL snippet area to reduce first-run confusion. * **Billing Empty State:** Added an empty state for the **Billing** screen and **Transaction History** table. * **My Proxies Sorting UI:** Added sorting direction indicators in table headers. **🐛 Bug Fixes** * Fixed an issue where the welcome email was not sent after signing up via OAuth. * Fixed placeholder behavior when searching proxy lists by name returns no results. * Fixed missing error highlighting when entering a top-up amount below **\$10**. * Addressed multiple issues and inconsistencies across the sign up / sign in forms. * Fixed various email template layout/rendering issues. **November 2025** v1.0.3 This release brings seamless social login, improved security measures, and data export capabilities. **🚀 New Features** * **OAuth Integration:** Added support for **Google** and **GitHub** login. You can now sign up or sign in with a single click. * **CSV Export:** Added a "Download CSV" button to the Usage Statistics section in Proxy Settings for offline analysis. * **Security:** Integrated reCAPTCHA protection for the login form to prevent automated attacks. **✨ Improvements** * **Authentication Flow:** Completely redesigned the registration and login screens for a better user experience. * **Password Policy:** Updated and simplified password complexity requirements for registration and password reset. * **OAuth Logic:** Improved handling of registration/authorization scenarios via OAuth for previously deleted accounts. **🐛 Bug Fixes** * Fixed an issue where the `+` symbol in emails was incorrectly replaced with a space. * Restored missing images in system emails and updated links. * Fixed default limit values when creating a proxy via API. * Resolved an issue where the user profile data was not refreshing after saving changes. * Fixed various UI glitches related to billing modals and proxy status display. **October 2025** v1.0.2 In this update, we focused on improving financial controls, enhancing navigation for large lists, and fixing critical bugs. **🚀 New Features & Improvements** * **Spending Limits (\$):** You can now set usage limits for proxies in USD. This makes budget control much easier. * **Billing Transparency:** Added `Type` and `Description` fields to the transaction history for better clarity. * **Real-time Data:** Traffic data on the "My Proxies" page now updates automatically—no page reload required. * **Pagination & Search:** Added pagination to lists and the ability to search for proxies by name. **🐛 Bug Fixes** * Fixed an issue where the "Delete" button was unresponsive on the proxy list page. * Fixed a bug where the account balance was not updating correctly after setting a monetary limit. **September 2025** v1.0.0 Our first public version of the accounts dashboard. * Released a first version of the product. * Features Residential proxies and Pas-As-You-Go billing model.