[cdpfleet](https://cdpfleet.com/) / [Functions](https://cdpfleet.com/functions) / Raw page

Free tool · Raw page

# See everything a page *loads*.

The HTML after JavaScript ran, the XHR and fetch calls with their responses, cookies and console output — as JSON. Free, no sign-up.

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

## Try it

Find the API a page gets its data from, debug what a single-page app fetches, or check which cookies a site sets on first visit.

## The same from code

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

 

```bash
curl -s https://cdpfleet.com/v1/functions/rawpage \
  -H "x-api-key: $CDPFLEET_API_KEY" -H "content-type: application/json" \
  -d '{"url":"https://example.com/","include":["html","requests","cookies"]}' -o page.json -D - | grep -i '^x-call-id'
```

```js
// Node.js 18+: save as rawpage.mjs, run node rawpage.mjs
const res = await fetch('https://cdpfleet.com/v1/functions/rawpage', {
  method: 'POST',
  headers: { 'x-api-key': process.env.CDPFLEET_API_KEY, 'content-type': 'application/json' },
  body: JSON.stringify({
    url: 'https://example.com/',
    include: ['html', 'requests', 'cookies'],
  }),
  signal: AbortSignal.timeout(30000),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`); // 429: wait Retry-After seconds
console.log(await res.text());
```

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

r = requests.post(
    "https://cdpfleet.com/v1/functions/rawpage",
    headers={"x-api-key": os.environ["CDPFLEET_API_KEY"]},
    json={
        "url": "https://example.com/",
        "include": ["html", "requests", "cookies"],
    },
    timeout=30,
)
if not r.ok:
    raise SystemExit(f"{r.status_code} {r.text}")  # 429: wait r.headers["Retry-After"] seconds
print(r.text)
```

```java
// Java 17+: save as Main.java, run java Main.java
import java.net.URI;
import java.net.http.*;
import java.time.Duration;

public class Main {
  public static void main(String[] args) throws Exception {
    String body = """
        {
          "url": "https://example.com/",
          "include": ["html", "requests", "cookies"]
        }
        """;
    HttpResponse<byte[]> res = HttpClient.newHttpClient().send(
        HttpRequest.newBuilder(URI.create("https://cdpfleet.com/v1/functions/rawpage"))
            .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()));
    }
    System.out.writeBytes(res.body()); // UTF-8 as it came
    System.out.println();
  }
}
```

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

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/",
      "include": ["html", "requests", "cookies"]
    }
    """;
var res = await http.PostAsync("https://cdpfleet.com/v1/functions/rawpage",
    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()}");
Console.WriteLine(await res.Content.ReadAsStringAsync());
```

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

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

func main() {
	body := `{
	  "url": "https://example.com/",
	  "include": ["html", "requests", "cookies"]
	}`
	req, _ := http.NewRequest("POST", "https://cdpfleet.com/v1/functions/rawpage", 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)
	}
	fmt.Println(string(data))
}
```

## 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.

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

### Cases 39

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

-   [Case 89: Watch a page live: its XHR calls, DOM changes and WebSocket messages over SSE and a signed webhook](https://cdpfleet.com/docs/cases/watch-a-page-live)Keep a Chrome of yours on a page that updates itself (the ISS position, polled about once a second), and get every matching XHR response and every change to one…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/89-watch-a-page-live)
-   [Case 87: Geo compare: the same pages from five countries in one call, and reading the diff](https://cdpfleet.com/docs/cases/geo-compare)One `POST /v1/functions/geo` per page loads it from the US, Germany, the UK, Japan and Brazil at once and returns each country's Markdown and HTML plus a diff…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/87-geo-compare)
-   [Case 86: Crawl a whole site as a job: map, crawl, stop, resume, results, zip and a signed webhook](https://cdpfleet.com/docs/cases/crawl-a-site-as-a-job)Map books.toscrape.com, crawl 100 pages of it as a background job, stop it part-way and resume it, then read the results as JSON lines and as a zip archive, and…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/86-crawl-a-site-as-a-job)
-   [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 85: A Function or your own browser? Screenshot, PDF and Markdown of the same pages, timed and billed](https://cdpfleet.com/docs/cases/function-vs-your-own-browser)Three pages, three outputs, two ways: one POST to a Function, or launch a browser yourself, connect Playwright, capture and close. Wall time, the thread-seconds each…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/85-function-vs-your-own-browser)
-   [Case 83: Brave's fingerprint randomisation per site, per context and per launch, and what public fingerprint pages make of it](https://cdpfleet.com/docs/cases/brave-farbling)Brave adds noise to canvas, audio, cores, memory and the plugin list, keyed to the site and the session. One probe on two made-up sites, the same site again, a…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/83-brave-farbling)
-   [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 79: MCP in action: an MCP client drives a cloud browser through cdpfleet.com/mcp](https://cdpfleet.com/docs/cases/mcp-in-action)A script connects to the hosted MCP server with its API key and does what an AI assistant does: list the tools, launch a browser, open a page, read it as an…[Code on GitHub](https://github.com/cdpfleet/cdpfleet/tree/main/cases/79-mcp-in-action)

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

### Updates 13

Product news and browser releases.

-   [Opera 140: Chromium 157 underneath, HTTPS-First turned on (and off on cdpfleet)](https://cdpfleet.com/docs/updates/opera-140)Stable Opera on the fleet is now 140.0.6074.17, on Chromium 157: HTTPS-First mode (kept off on cdpfleet), Protected Audience gone, TLS unchanged.
-   [Brave 1.99: Chromium 157 underneath, Protected Audience gone, same TLS fingerprint](https://cdpfleet.com/docs/updates/brave-1-99)Stable Brave on the fleet is now 1.99.55, on Chromium 157: four new web features, Protected Audience gone, plain HTTP loads, TLS and HTTP/2 unchanged.
-   [Edge 157: Chromium 157, HTTPS-First kept off on cdpfleet, Protected Audience gone](https://cdpfleet.com/docs/updates/edge-157)Stable Edge on the fleet is now 157.0.4341.42, on Chromium 157: HTML streaming, Protected Audience gone, HTTPS-First kept off on cdpfleet, TLS unchanged.
-   [Whale 5.41: Chromium 150 to 156 in one step, and now Chrome's TLS fingerprint](https://cdpfleet.com/docs/updates/whale-5-41)Stable Whale on the fleet is now 5.41.429.3, on Chromium 156: six Chromium majors at once, Chrome's JA4, plain HTTP still loads, Shared Storage gone.
-   [Chrome 157: HTTPS-First turned on (and off on cdpfleet), Protected Audience gone, same TLS fingerprint](https://cdpfleet.com/docs/updates/chrome-157)Stable Chrome on the fleet is now 157.0.8103.38: HTTPS-First mode (kept off on cdpfleet), Protected Audience gone, TLS and HTTP/2 unchanged.
-   [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…
-   [50 tabs per session, memory as the ceiling, and the memory option](https://cdpfleet.com/docs/updates/tabs-and-memory)Every plan now allows 50 tabs in one session; what actually limits a session is its memory — 2, 4 or 6 GB by plan — and the new "memory" launch option buys 2–4 times…
-   [Opera 139: Chromium 155 underneath, four new CSS and policy features](https://cdpfleet.com/docs/updates/opera-139)Stable Opera on the fleet is now 139.0.6053.22, on Chromium 155. margin-trim, symbols() and two more arrive; TLS and HTTP/2 unchanged.

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

### Browser comparisons 6

Measured side by side on the fleet.

-   [Yandex Browser vs Chrome](https://cdpfleet.com/docs/compare/yandex-vs-chrome)Yandex Browser 26.8 runs on Chromium 150, six majors behind Chrome 156, names itself in the user agent and client hints, puts Russian first in navigator.languages…
-   [Camoufox vs Firefox, headless](https://cdpfleet.com/docs/compare/camoufox-vs-firefox-headless)Headless Firefox and headless Camoufox (both based on Firefox source; not affiliated with Mozilla) side by side: the headless tells a page can read, what Camoufox…
-   [Patchright vs Rebrowser](https://cdpfleet.com/docs/compare/patchright-vs-rebrowser)Two stealth-patched Chromium builds that look the same to a site — same TLS and HTTP/2 fingerprints, no webdriver, no Runtime.enable leak — but Patchright is…
-   [Chrome vs Chromium](https://cdpfleet.com/docs/compare/chrome-vs-chromium)Google's Chrome against the Chromium build Playwright ships: seven majors apart, one brand missing from the client hints, one TLS extension fewer — and, contrary to…
-   [Firefox vs Camoufox](https://cdpfleet.com/docs/compare/firefox-vs-camoufox)Playwright's Firefox build against the anti-detect fork built on it (both based on Firefox source; not affiliated with Mozilla): what Camoufox changes in what a site…
-   [Camoufox vs Patchright](https://cdpfleet.com/docs/compare/camoufox-vs-patchright)Two stealth browsers, two philosophies: a browser based on Firefox source (not affiliated with Mozilla) that spoofs the whole device at the C++ level, or a Chromium…

## 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)[Live tab →](https://cdpfleet.com/functions/livetab)[Community plan →](https://cdpfleet.com/community)

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