[cdpfleet](https://cdpfleet.com/) / [Functions](https://cdpfleet.com/functions) / Live tab

Free tool · Live tab

# Open a *remote browser tab*.

A real browser tab on the cdpfleet fleet, in the country you pick, that you use from this page with your mouse or finger — see a site as visitors elsewhere see it, without a VPN. Free for 3 minutes, no sign-up.

[Run it](#try)[API docs](https://cdpfleet.com/docs/functions/livetab)

## Try it

Check what a site shows in another country, test a page without exposing your own IP, or try cdpfleet's browsers by hand. With an API key the tab stays open longer, can be shared with someone by link, and hands its cookies back to your code.

## The same from code

`POST /v1/functions/livetab` with your API key returns `application/json` — more options than here, such as your own proxy or a browser of your choice. [All live tab fields](https://cdpfleet.com/docs/functions/livetab).

 

```bash
curl -s https://cdpfleet.com/v1/functions/livetab \
  -H "x-api-key: $CDPFLEET_API_KEY" -H "content-type: application/json" \
  -d '{"url":"https://example.com/","country":"de","max_duration":900}' -o livetab.json -D - | grep -i '^x-call-id'
```

```js
// Node.js 18+: save as livetab.mjs, run node livetab.mjs
const res = await fetch('https://cdpfleet.com/v1/functions/livetab', {
  method: 'POST',
  headers: { 'x-api-key': process.env.CDPFLEET_API_KEY, 'content-type': 'application/json' },
  body: JSON.stringify({
    url: 'https://example.com/',
    country: 'de',
    max_duration: 900,
  }),
  signal: AbortSignal.timeout(30000),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`); // 429: wait Retry-After seconds
const { live_url } = await res.json();
console.log(live_url); // open it in any browser: anyone with the link can use the tab
```

```python
# Python 3 with requests (pip install requests): save as livetab.py, run python livetab.py
import os
import requests

r = requests.post(
    "https://cdpfleet.com/v1/functions/livetab",
    headers={"x-api-key": os.environ["CDPFLEET_API_KEY"]},
    json={
        "url": "https://example.com/",
        "country": "de",
        "max_duration": 900,
    },
    timeout=30,
)
if not r.ok:
    raise SystemExit(f"{r.status_code} {r.text}")  # 429: wait r.headers["Retry-After"] seconds
print(r.json()["live_url"])  # open it in any browser: anyone with the link can use the tab
```

```java
// Java 17+: save as Main.java, run java -cp gson-2.11.0.jar Main.java (Gson: com.google.code.gson:gson)
import com.google.gson.JsonParser;
import java.net.URI;
import java.net.http.*;
import java.nio.charset.StandardCharsets;
import java.time.Duration;

public class Main {
  public static void main(String[] args) throws Exception {
    String body = """
        {
          "url": "https://example.com/",
          "country": "de",
          "max_duration": 900
        }
        """;
    HttpResponse<byte[]> res = HttpClient.newHttpClient().send(
        HttpRequest.newBuilder(URI.create("https://cdpfleet.com/v1/functions/livetab"))
            .header("x-api-key", System.getenv("CDPFLEET_API_KEY"))
            .header("content-type", "application/json")
            .timeout(Duration.ofSeconds(30))
            .POST(HttpRequest.BodyPublishers.ofString(body))
            .build(),
        HttpResponse.BodyHandlers.ofByteArray());
    if (res.statusCode() != 200) { // 429: wait Retry-After seconds
      throw new RuntimeException(res.statusCode() + " " + new String(res.body()));
    }
    String liveUrl = JsonParser.parseString(new String(res.body(), StandardCharsets.UTF_8)).getAsJsonObject().get("live_url").getAsString();
    System.out.println(liveUrl); // open it in any browser: anyone with the link can use the tab
  }
}
```

```csharp
// .NET 8+: dotnet new console, replace Program.cs with this, run dotnet run
using System.Text;
using System.Text.Json;

using var http = new HttpClient { Timeout = TimeSpan.FromSeconds(30) };
http.DefaultRequestHeaders.Add("x-api-key", Environment.GetEnvironmentVariable("CDPFLEET_API_KEY"));
var body = """
    {
      "url": "https://example.com/",
      "country": "de",
      "max_duration": 900
    }
    """;
var res = await http.PostAsync("https://cdpfleet.com/v1/functions/livetab",
    new StringContent(body, Encoding.UTF8, "application/json"));
if (!res.IsSuccessStatusCode) // 429: wait Retry-After seconds
    throw new Exception($"{(int)res.StatusCode} {await res.Content.ReadAsStringAsync()}");
using var json = JsonDocument.Parse(await res.Content.ReadAsStringAsync());
Console.WriteLine(json.RootElement.GetProperty("live_url").GetString()); // open it in any browser: anyone with the link can use the tab
```

```go
// Go 1.21+: save as main.go, run go run main.go
package main

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

func main() {
	body := `{
	  "url": "https://example.com/",
	  "country": "de",
	  "max_duration": 900
	}`
	req, _ := http.NewRequest("POST", "https://cdpfleet.com/v1/functions/livetab", strings.NewReader(body))
	req.Header.Set("x-api-key", os.Getenv("CDPFLEET_API_KEY"))
	req.Header.Set("content-type", "application/json")
	res, err := (&http.Client{Timeout: 30 * time.Second}).Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer res.Body.Close()
	data, err := io.ReadAll(res.Body)
	if err != nil {
		log.Fatal(err)
	}
	if res.StatusCode != http.StatusOK { // 429: wait Retry-After seconds
		log.Fatalf("%s %s", res.Status, data)
	}
	var tab struct {
		LiveURL string `json:"live_url"`
	}
	if err := json.Unmarshal(data, &tab); err != nil {
		log.Fatal(err)
	}
	fmt.Println(tab.LiveURL) // open it in any browser: anyone with the link can use the tab
}
```

## Free tool limits

-   **20 runs a day** and 2 at once per address, after a quick Cloudflare check.
-   Runs on a shared cdpfleet browser through the free [Community proxy](https://cdpfleet.com/community) in the country you pick; at busy times a run can take longer or ask you to retry.
-   Public pages only: private and local addresses are refused. Up to 60 seconds per page.
-   For more — your own threads, your own or residential proxies, any browser and phone devices — call the same functions with an API key; the [Community plan](https://cdpfleet.com/community) is free, and [paid plans](https://cdpfleet.com/upgrade) add more.

## Related

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

### Reference docs

The details, options and errors.

-   [Live tab function](https://cdpfleet.com/docs/functions/livetab)Every field and the response.
-   [Functions](https://cdpfleet.com/docs/functions)Billing, own browser, errors, countries.

### Cases 3

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

-   [Case 82: Kept downloads in practice: a person in Launch interactive and an AI agent over MCP](https://cdpfleet.com/docs/cases/downloads-in-practice)Files nobody's code was waiting for: a person pastes file links into a Launch interactive session, an AI agent clicks a download and opens a file link through the…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/82-downloads-in-practice)
-   [Case 58: Do it by hand in live view, then let your code finish in the same browser](https://cdpfleet.com/docs/cases/launch-interactive-to-code)Launch a browser with `start_url` and no client, drive it through a control-mode live link — address bar, Tab, typing — then connect your code: it finds the person's…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/58-launch-interactive-to-code)
-   [Case 27: Watch it live: streaming a remote browser to your code, frame by frame](https://cdpfleet.com/docs/cases/live-view)Playwright 1.60's page.screencast on Chromium and Firefox: how many frames arrive while a page loads, scrolls and sits still — and why the two engines behave nothing…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/27-live-view)

### Recipes 4

Complete programs for one setup each.

-   [Live view: stream the page to your code](https://cdpfleet.com/docs/examples#live-view)Watch the remote browser while your code drives it: `page.screencast` sends a JPEG frame whenever the page changes (Playwright 1.60+). See [Live view](https://cdpfleet.com/docs/live-view).[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/examples/recipes/live-view)
-   [Headless Chrome a person can watch and take over](https://cdpfleet.com/docs/examples#chrome-headless-live-view)Headful sessions are always watchable; a headless one needs `live_view: true` at launch. Then `POST /admin/session/live` on the session's router returns a screencast…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/examples/recipes/chrome-headless-live-view)
-   [Open a page on the server, take over in live view, then join from code](https://cdpfleet.com/docs/examples#start-url-live)`start_url` makes the server open the page itself, so no client has to connect. To click and type in it, get a `control` live link (\`POST https://<wsUrl…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/examples/recipes/start-url-live)
-   [Record a headless session and get the video](https://cdpfleet.com/docs/examples#headless-recording)`record` is on by default, but a headless session is only recorded with `"live_view": true` or `"cdp": true`, as here. Measured with this launch and about 20 s of…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/examples/recipes/headless-recording)

### Updates 3

Product news and browser releases.

-   [The live tab: a remote browser tab you share as a link](https://cdpfleet.com/docs/updates/live-tab)Open a real browser tab in another country and use it from any web browser — free on the site, longer from the dashboard or one API call, and a link you can hand to…
-   [Kept downloads: files from a session, fetched after it ends](https://cdpfleet.com/docs/updates/kept-downloads)Launch with "downloads": true and every file the browser downloads is kept for 2 days — including files a person clicked in live view or an AI agent fetched through…
-   [Launch interactive: try a browser by hand before you write the code](https://cdpfleet.com/docs/updates/launch-interactive)Pick a browser, proxy and options, open a start page and drive it yourself in live view. The code next to it launches exactly the same browser, and the API option is…

## Read next

[Functions →](https://cdpfleet.com/functions)[Screenshot →](https://cdpfleet.com/functions/screenshot)[PDF →](https://cdpfleet.com/functions/pdf)[Markdown →](https://cdpfleet.com/functions/markdown)[Raw page →](https://cdpfleet.com/functions/rawpage)[Community plan →](https://cdpfleet.com/community)

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