[cdpfleet](https://cdpfleet.com/) / Residential proxy

Add-on · every plan

# Residential IPs, *priced by tier*.

No proxy of your own? Send a `cdpfleet-resi` token as `proxy` and pick the price tier, exit country, device OS and whether the IP stays the same. One prepaid USD balance pays for every tier — from $0.50 to $5 per GB — and every account starts with $5 free credit.

[Open in the dashboard](https://cdpfleet.com/app#proxies/cdpfleet)[Proxy docs](https://cdpfleet.com/docs/proxies)

-   **4**price tiers
-   **$0.50–$5**per GB
-   **$5**free credit
-   **Every plan**including Community

## Four tiers, one balance

| Tier | Token | Price per GB |
| --- | --- | --- |
| Tier 1 | `cdpfleet-resi…` (no tier) or `cdpfleet-resi-tier-1…` | $5 |
| Tier 2 | `cdpfleet-resi-tier-2…` | $2.50 |
| Tier 3 | `cdpfleet-resi-tier-3…` | $1 |
| Tier 4 | `cdpfleet-resi-tier-4…` | $0.50 |

Pick the tier per token. Use Tier 1 for the pages that matter and a cheaper tier for bulk traffic such as CDN assets; the pools behind each tier can differ and may change. Country and sticky sessions work on every tier; device OS on Tier 1 and 2.

Top-ups add US dollars to your balance — any whole amount from $10 to $5,000 — and traffic is deducted at the price of the tier that carried it (1 GB = 10⁹ bytes, uploaded and downloaded). The balance doesn't expire.

## Mix tiers per host

A session can send different hosts through different tiers with `proxy_rules`: pages on Tier 1, images, scripts and video from CDNs on Tier 4.

For example, 10 GB a month of which 8 GB is CDN assets costs $50 all on Tier 1, and $14 with the CDN hosts on Tier 4.

Per-host traffic in the dashboard shows which hosts carry the bytes, so you know what to move.

```json
{
  "proxy": "cdpfleet-resi-country-us",
  "proxy_rules": [
    {
      "hosts": [
        "*.cloudfront.net",
        "*.akamaized.net",
        "static.*"
      ],
      "proxy": "cdpfleet-resi-tier-4-country-us"
    }
  ]
}
```

## Targeting

| Part | Values | Meaning |
| --- | --- | --- |
| `-tier-N` | 1, 2, 3, 4 | Price tier; Tier 1 if omitted. |
| `-country-XX` | ISO two-letter code | Exit country; any if omitted. |
| `-os-…` | `windows`, `android`, `ios`, `mac` | The kind of device the residential IP belongs to. |
| `-session-ID` | 1–10 of `A-Z a-z 0-9 _` | Sticky: the same IP for every connection; reuse the name in later browsers to keep it. |
| `-lifetime-MIN` | 1–1440 | How long a sticky IP is kept, in minutes. |

The same German residential IP for up to 30 minutes

 

```node
// npm install playwright@1.60.0
// Browsers run on cdpfleet, so no `npx playwright install` is needed.
import { chromium } from 'playwright';

const KEY = process.env.CDPFLEET_API_KEY;

// 1. Launch the browser
const res = await fetch('https://starter.cdpfleet.com/chromium/session', {
  method: 'POST',
  headers: { 'x-api-key': KEY, 'content-type': 'application/json' },
  body: JSON.stringify({
    proxy: 'cdpfleet-resi-country-de-session-cart1-lifetime-30',
    headless: 'new',
  }),
});
if (!res.ok) throw new Error(`launch failed: ${res.status} ${await res.text()}`);
const { wsUrl } = await res.json();

// 2. Connect and drive it
const browser = await chromium.connect(wsUrl, { headers: { 'x-api-key': KEY } });
const page = await browser.newPage();
await page.goto('https://example.com');
console.log(await page.title());
await browser.close(); // ends the session and stops billing
```

```python
# pip install playwright==1.60.0 requests
# Browsers run on cdpfleet, so no `playwright install` is needed.
import os
import requests
from playwright.sync_api import sync_playwright

KEY = os.environ["CDPFLEET_API_KEY"]

# 1. Launch the browser
res = requests.post(
    "https://starter.cdpfleet.com/chromium/session",
    headers={"x-api-key": KEY},
    json={
        "proxy": "cdpfleet-resi-country-de-session-cart1-lifetime-30",
        "headless": "new",
    },
    timeout=60,
)
res.raise_for_status()
ws_url = res.json()["wsUrl"]

# 2. Connect and drive it
with sync_playwright() as p:
    browser = p.chromium.connect(ws_url, headers={"x-api-key": KEY})
    page = browser.new_page()
    page.goto("https://example.com")
    print(page.title())
    browser.close()  # ends the session and stops billing
```

```java
// Maven: com.microsoft.playwright:playwright:1.60.0  and  com.google.code.gson:gson:2.11.0
// Run with PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1: browsers run on cdpfleet.
import com.google.gson.JsonParser;
import com.microsoft.playwright.*;
import java.net.URI;
import java.net.http.*;
import java.util.Map;

public class Example {
  public static void main(String[] args) throws Exception {
    String key = System.getenv("CDPFLEET_API_KEY");

    // 1. Launch the browser
    String body = """
        {
          "proxy": "cdpfleet-resi-country-de-session-cart1-lifetime-30",
          "headless": "new"
        }
        """;
    HttpResponse<String> res = HttpClient.newHttpClient().send(
        HttpRequest.newBuilder(URI.create("https://starter.cdpfleet.com/chromium/session"))
            .header("x-api-key", key)
            .header("content-type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(body))
            .build(),
        HttpResponse.BodyHandlers.ofString());
    if (res.statusCode() != 200) {
      throw new RuntimeException("launch failed: " + res.statusCode() + " " + res.body());
    }
    String wsUrl = JsonParser.parseString(res.body()).getAsJsonObject().get("wsUrl").getAsString();

    // 2. Connect and drive it
    try (Playwright playwright = Playwright.create()) {
      Browser browser = playwright.chromium().connect(wsUrl,
          new BrowserType.ConnectOptions().setHeaders(Map.of("x-api-key", key)));
      Page page = browser.newPage();
      page.navigate("https://example.com");
      System.out.println(page.title());
      browser.close(); // ends the session and stops billing
    }
  }
}
```

```csharp
// dotnet add package Microsoft.Playwright --version 1.60.0
// Browsers run on cdpfleet, so no `playwright install` is needed.
using System.Net.Http.Json;
using System.Text;
using System.Text.Json;
using Microsoft.Playwright;

var key = Environment.GetEnvironmentVariable("CDPFLEET_API_KEY")!;

// 1. Launch the browser
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("x-api-key", key);
var body = """
    {
      "proxy": "cdpfleet-resi-country-de-session-cart1-lifetime-30",
      "headless": "new"
    }
    """;
var res = await http.PostAsync("https://starter.cdpfleet.com/chromium/session",
    new StringContent(body, Encoding.UTF8, "application/json"));
if (!res.IsSuccessStatusCode)
    throw new Exception($"launch failed: {(int)res.StatusCode} {await res.Content.ReadAsStringAsync()}");
var wsUrl = (await res.Content.ReadFromJsonAsync<JsonElement>()).GetProperty("wsUrl").GetString()!;

// 2. Connect and drive it
using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.ConnectAsync(wsUrl, new BrowserTypeConnectOptions
{
    Headers = new Dictionary<string, string> { ["x-api-key"] = key },
});
var page = await browser.NewPageAsync();
await page.GotoAsync("https://example.com");
Console.WriteLine(await page.TitleAsync());
await browser.CloseAsync(); // ends the session and stops billing
```

```go
// go get github.com/playwright-community/playwright-go@v0.6000.0
//
// One-time driver setup (needs Node.js 18+): playwright-go can no longer download the
// 1.60.0 driver itself, so build it from npm and point PLAYWRIGHT_DRIVER_PATH at it:
//   mkdir -p ~/.cache/pw-driver-1.60.0 && cd ~/.cache/pw-driver-1.60.0 &&
//     curl -sL https://registry.npmjs.org/playwright-core/-/playwright-core-1.60.0.tgz | tar xz &&
//     ln -sf "$(command -v node)" node
//   export PLAYWRIGHT_DRIVER_PATH=~/.cache/pw-driver-1.60.0
// Browsers run on cdpfleet, so no browsers are downloaded (SkipInstallBrowsers).
package main

import (
	"encoding/json"
	"fmt"
	"io"
	"log"
	"net/http"
	"os"
	"strings"

	"github.com/playwright-community/playwright-go"
)

func main() {
	key := os.Getenv("CDPFLEET_API_KEY")

	// 1. Launch the browser
	body := `{
	  "proxy": "cdpfleet-resi-country-de-session-cart1-lifetime-30",
	  "headless": "new"
	}`
	req, _ := http.NewRequest("POST", "https://starter.cdpfleet.com/chromium/session", strings.NewReader(body))
	req.Header.Set("x-api-key", key)
	req.Header.Set("content-type", "application/json")
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		msg, _ := io.ReadAll(res.Body)
		log.Fatalf("launch failed: %s %s", res.Status, msg)
	}
	var session struct {
		WsURL string `json:"wsUrl"`
	}
	if err := json.NewDecoder(res.Body).Decode(&session); err != nil {
		log.Fatal(err)
	}

	// 2. Connect and drive it (Install fetches only the Playwright driver, once)
	opts := &playwright.RunOptions{SkipInstallBrowsers: true}
	if err := playwright.Install(opts); err != nil {
		log.Fatal(err)
	}
	pw, err := playwright.Run(opts)
	if err != nil {
		log.Fatal(err)
	}
	defer pw.Stop()
	browser, err := pw.Chromium.Connect(session.WsURL, playwright.BrowserTypeConnectOptions{
		Headers: map[string]string{"x-api-key": key},
	})
	if err != nil {
		log.Fatal(err)
	}
	page, err := browser.NewPage()
	if err != nil {
		log.Fatal(err)
	}
	if _, err := page.Goto("https://example.com"); err != nil {
		log.Fatal(err)
	}
	title, _ := page.Title()
	fmt.Println(title)
	browser.Close() // ends the session and stops billing
}
```

## Good to know

-   The dashboard's **Proxies → cdpfleet proxy** page builds tokens, shows the balance and today's use per tier, and tops up through Stripe. The code generator offers the token too.
-   Traffic is metered about once a minute. With the balance used up, launches with a `cdpfleet-resi` token get `402 proxy_balance_exhausted`; a running session may go $0.50 past zero before it is ended.
-   Use a token as the whole `proxy` or as one rule's proxy in `proxy_rules` — not inside a list of proxies.
-   Your own proxies stay free on every plan; the residential proxy is optional.

## Related

Cases, recipes, posts and comparisons about this — updated as new ones are published.

### Reference docs

The details, options and errors.

-   [Proxies](https://cdpfleet.com/docs/proxies)Token grammar, rules, live swaps and errors.
-   [Plans & pricing](https://cdpfleet.com/docs/pricing)The residential proxy next to the plans.
-   [Account API](https://cdpfleet.com/docs/api)`GET /v1/me/proxy-balance` and the ledger.

### Cases 17

Real problems solved end to end, run on production in five languages.

-   [Case 84: Does the TLS fingerprint (JA4) explain which browsers got in? Twelve browsers against six vendors](https://cdpfleet.com/docs/cases/ja4-vs-vendor-verdicts)Each of the twelve browsers from the real-site lab week loads a TLS echo page once, so we know the JA4, peetprint and HTTP/2 fingerprint it sends. Grouped by…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/84-ja4-vs-vendor-verdicts)
-   [Case 81: Behaviour scoring: Camoufox humanize on and off vs plain Chrome clicks on a public bot-test form](https://cdpfleet.com/docs/cases/behaviour-scoring-humanize)A public behavioural bot-test page scores how a demo login form was filled in: clicks, keystrokes, timing. Camoufox with `humanize` off, on and slowed down, and…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/81-behaviour-scoring-humanize)
-   [Case 77: Kasada and AWS WAF on real sites: twelve browsers, four sites, one exit each](https://cdpfleet.com/docs/cases/kasada-and-aws-waf-by-browser)Two real sites behind Kasada and two behind AWS WAF, loaded once by each of twelve browsers and by a returning Camoufox profile, through one sticky residential exit…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/77-kasada-and-aws-waf-by-browser)
-   [Case 75: HUMAN on real sites: twelve browsers, three sites, one exit each](https://cdpfleet.com/docs/cases/human-real-sites-by-browser)Three real sites behind HUMAN (formerly PerimeterX), chosen from our sweep as easy, medium and hard, loaded once by each of twelve browsers and by a returning…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/75-human-real-sites-by-browser)
-   [Case 73: Akamai on real sites: twelve browsers, three sites, one exit each](https://cdpfleet.com/docs/cases/akamai-real-sites-by-browser)Three real sites behind Akamai Bot Manager, chosen from our sweep as easy, medium and hard, loaded once by each of twelve browsers and by a returning Camoufox…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/73-akamai-real-sites-by-browser)
-   [Case 74: Does the browser agree with its IP? Timezone, language and WebRTC through exits in three countries](https://cdpfleet.com/docs/cases/timezone-locale-ip-consistency)Five setups through residential exits in the US, Germany and Japan: which ones keep timezone, language, Accept-Language, Intl formats and the WebRTC address…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/74-timezone-locale-ip-consistency)
-   [Case 71: DataDome on real sites: twelve browsers, three sites, one exit each](https://cdpfleet.com/docs/cases/datadome-real-sites-by-browser)Three real sites behind DataDome, chosen from our sweep as easy, medium and hard, loaded once by each of twelve browsers and by a returning Camoufox profile, all…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/71-datadome-real-sites-by-browser)
-   [Case 70: Cloudflare on real sites: twelve browsers, three sites, one exit each](https://cdpfleet.com/docs/cases/cloudflare-real-sites-by-browser)Three real sites behind Cloudflare, chosen from our sweep as easy, medium and hard, loaded once by each of twelve browsers and by a returning Camoufox profile, all…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/70-cloudflare-real-sites-by-browser)

[All cases →](https://cdpfleet.com/docs/cases) 17 match this topic

### Recipes 5

Complete programs for one setup each.

-   [cdpfleet residential: one sticky US identity](https://cdpfleet.com/docs/examples#resi-sticky)No proxy of your own: a residential US IP that stays the same for 30 minutes — and across browser sessions that reuse the session name. Tier 1 ($5/GB) from your…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/examples/recipes/resi-sticky)
-   [Swap the proxy mid-session without restarting the browser](https://cdpfleet.com/docs/examples#live-proxy-swap)Launch as usual (every session can be swapped; `"proxy_updatable"` is no longer needed), then `POST /admin/session/proxy` with the session id and a new `proxy` (or…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/examples/recipes/live-proxy-swap)
-   [cdpfleet residential with VPN Tunnel: WebRTC and HTTP/3 on the same exit](https://cdpfleet.com/docs/examples#resi-vpn-tunnel)A sticky Tier 1 residential exit plus `"vpn_tunnel": true`: the browser's UDP leaves through the same exit as its HTTP, so WebRTC shows the exit IP instead of…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/examples/recipes/resi-vpn-tunnel)
-   [cdpfleet residential from Windows devices, with a matching persona](https://cdpfleet.com/docs/examples#resi-os-persona)`-os-windows` in a `cdpfleet-resi` token asks for a residential IP that belongs to a Windows device; Camoufox's `os: "windows"` makes the browser report Windows too,…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/examples/recipes/resi-os-persona)
-   [Residential IPs for one strict host, your own proxy for the rest](https://cdpfleet.com/docs/examples#resi-for-one-host)Keep your own proxy for everything, and send only the host that blocks it through the cdpfleet residential proxy, from the country you need. You then pay residential…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/examples/recipes/resi-for-one-host)

### Updates 1

Product news and browser releases.

-   [Residential proxy tiers: from $5 down to $0.50 per GB](https://cdpfleet.com/docs/updates/residential-tiers)The cdpfleet residential proxy now has four price tiers — $5, $2.50, $1 and $0.50 per GB — paid from one prepaid USD balance. Pick the tier per token, and mix tiers…

## Read next

[Geo testing →](https://cdpfleet.com/geo-testing)[Pricing →](https://cdpfleet.com/pricing)[Web scraping →](https://cdpfleet.com/web-scraping)[Community plan →](https://cdpfleet.com/community)[Browsers →](https://cdpfleet.com/browsers)[Launch interactive →](https://cdpfleet.com/launch-interactive)

---
Source: https://cdpfleet.com/residential-proxy · Markdown: https://cdpfleet.com/residential-proxy.md · All docs for AI tools: https://cdpfleet.com/llms.txt
