# CloakBrowser Scraper (`reinventingai/cloakbrowser-scraper`) Actor

CloakBrowser Stealth Scraper is an Apify Actor for stealth cloak web scraping on protected websites, with JSON, HTML, or Markdown output, screenshots, interaction steps like click and scroll, session reuse, cookies, robots bypass, and Standby mode for real-time scraping APIs. Scrape with confidence!

- **URL**: https://apify.com/reinventingai/cloakbrowser-scraper.md
- **Developed by:** [Mark Fulton](https://apify.com/reinventingai) (community)
- **Categories:** Social media, Lead generation, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.00 / 1,000 scrape events

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## CloakBrowser Stealth Scraper

A simple Apify Actor for scraping pages that often block ordinary browser automation.

Built on **CloakBrowser**, it helps you extract content, take screenshots, and handle lightweight interaction flows without building your own browser stack.

### What it does

- Scrape one URL or multiple URLs
- Return **markdown**, **html**, or structured **json**
- Run interaction steps before extraction, including:
  - `wait`
  - `waitForSelector`
  - `click`
  - `hover`
  - `type`
  - `press`
  - `select`
  - `scroll`
  - `goto`
  - `screenshot`
- Save screenshots to the Apify key-value store
- Reuse browser sessions with persistent profiles
- Import and export cookies or Playwright-style storage state
- Serve requests in **Apify Standby mode**

### Best for

- Protected article scraping
- Product page extraction on defended sites
- Flows that need a cookie click, search, login step, or wait before extraction
- Screenshot APIs for blocked pages
- Reusable browser sessions across multiple runs
- Real-time scraping endpoints with Standby mode

### Output formats

#### Markdown
Clean text output converted from the extracted HTML.

#### HTML
Raw page HTML, or the selected element HTML if you pass a CSS selector.

#### JSON
Structured content including:

- `title`
- `excerpt`
- `byline`
- `siteName`
- `lang`
- `text`
- `headings`
- `links`
- `images`

### Example input

```json
{
  "url": "https://example.com",
  "outputFormat": "json",
  "screenshot": true,
  "humanize": true,
  "usePersistentContext": true,
  "waitUntil": "load"
}
````

### Example interaction steps

```json
[
  { "action": "waitForSelector", "selector": "button.accept-cookies", "optional": true },
  { "action": "click", "selector": "button.accept-cookies", "optional": true },
  { "action": "type", "selector": "input[type=search]", "text": "running shoes", "delayMs": 80 },
  { "action": "press", "key": "Enter" },
  { "action": "wait", "ms": 2500 },
  { "action": "screenshot", "fullPage": false }
]
```

### Session support

You can keep or move session state in three ways:

#### Reuse a named browser profile

```json
{
  "usePersistentContext": true,
  "sessionProfileName": "my-shop-session"
}
```

#### Import an existing session

Load session state with `storageState`, `storageStateKey`, `cookies`, or `localStorage`.

```json
{
  "url": "https://example.com/account",
  "storageStateKey": "MY_LOGGED_IN_STATE",
  "outputFormat": "json"
}
```

#### Export a fresh session after the run

```json
{
  "exportStorageState": true,
  "exportStorageStateKey": "LATEST_STORAGE_STATE",
  "exportCookies": true,
  "exportCookiesKey": "LATEST_COOKIES"
}
```

### Standby mode

When started in Apify Standby mode, the Actor exposes:

- `GET /`
- `GET /scrape?url=https://example.com&outputFormat=markdown`
- `POST /scrape`

It also handles the Apify readiness probe automatically.

#### Example standby request

```bash
curl -X POST "https://your-standby-url/scrape" \
  -H "content-type: application/json" \
  -d '{
    "url": "https://example.com",
    "outputFormat": "json",
    "screenshot": true
  }'
```

### Example output

```json
{
  "requestedUrl": "https://example.com",
  "finalUrl": "https://example.com/",
  "title": "Example Domain",
  "outputFormat": "markdown",
  "selector": null,
  "session": {
    "profileName": "default",
    "importedStorageStateKey": null,
    "importedCookieCount": 0,
    "importedLocalStorageOriginCount": 0
  },
  "screenshot": {
    "key": "screenshots-example.com-1716161616161-a1b2c3d4.png",
    "contentType": "image/png"
  },
  "artifacts": [],
  "content": "## Example Domain\n\nThis domain is for use in documentation examples without needing permission.",
  "scrapedAt": "2026-05-19T23:53:11.140Z"
}
```

### Example input files

Ready-made examples live in [`examples/`](./examples):

- [`basic-markdown.json`](./examples/basic-markdown.json)
- [`interaction-search.json`](./examples/interaction-search.json)
- [`bot-hardened.json`](./examples/bot-hardened.json)
- [`standby-post-body.json`](./examples/standby-post-body.json)
- [`session-import-export.json`](./examples/session-import-export.json)

### Notes

- Hard targets usually work best with solid proxies.
- Geo-targeted proxies benefit from matching locale and timezone settings.
- Heavy JavaScript pages may need extra waits or interaction steps.

# Actor input Schema

## `url` (type: `string`):

A single page URL to scrape.

## `urls` (type: `array`):

Optional list of URLs to scrape in sequence.

## `outputFormat` (type: `string`):

Choose the main content format returned in the content field.

## `selector` (type: `string`):

Optional CSS selector to limit extraction to one element. If empty, the full page is used.

## `interactionSteps` (type: `array`):

Optional pre-extraction browser actions. Supported actions: wait, waitForSelector, click, hover, type, press, select, scroll, goto, screenshot. Use optional:true on cookie-banner or best-effort steps so the run can continue if the element is missing. Example: \[{"action":"click","selector":"button.accept-cookies","optional":true},{"action":"type","selector":"input\[name=q]","text":"apify cloakbrowser"},{"action":"press","key":"Enter"}]

## `waitUntil` (type: `string`):

Playwright waitUntil mode used for page.goto(). 'load' is the safest default for sites that keep background requests open.

## `waitForSelector` (type: `string`):

Optional selector that must appear before extraction starts.

## `waitForMs` (type: `integer`):

Optional extra delay after navigation, useful for JS-heavy pages.

## `scrollToBottom` (type: `boolean`):

Scroll down in steps to trigger lazy-loaded content.

## `maxScrollSteps` (type: `integer`):

How many scroll steps to take if scrollToBottom is enabled.

## `scrollDelayMs` (type: `integer`):

Delay between scroll steps.

## `screenshot` (type: `boolean`):

Store a screenshot in the Apify key-value store and return its key.

## `screenshotFullPage` (type: `boolean`):

Capture the whole page instead of just the viewport.

## `screenshotType` (type: `string`):

Image format used for stored screenshots.

## `headless` (type: `boolean`):

Run browser in headless mode.

## `geoip` (type: `boolean`):

Use CloakBrowser geoip mode to align browser timezone and locale with the proxy exit IP.

## `locale` (type: `string`):

Optional locale like en-US.

## `timezone` (type: `string`):

Optional IANA timezone like America/New\_York.

## `userAgent` (type: `string`):

Optional custom user agent passed into the browser context.

## `viewportWidth` (type: `integer`):

Optional viewport width override.

## `viewportHeight` (type: `integer`):

Optional viewport height override.

## `humanize` (type: `boolean`):

Enable CloakBrowser humanized scrolling, mouse, and keyboard behavior.

## `usePersistentContext` (type: `boolean`):

Use a real browser profile instead of an incognito context.

## `sessionProfileName` (type: `string`):

Named persistent profile folder. Reuse the same name to keep browser session state across runs.

## `storageStateKey` (type: `string`):

Optional key-value store key containing a Playwright storageState JSON object.

## `storageState` (type: `object`):

Optional inline Playwright storageState object for importing cookies and localStorage.

## `cookies` (type: `array`):

Optional array of Playwright cookie objects to seed into the browser context.

## `localStorage` (type: `object`):

Optional localStorage seed data. Use either an object keyed by origin or an array of { origin, items } entries.

## `proxyUrl` (type: `string`):

Optional HTTP or SOCKS5 proxy URL passed directly to CloakBrowser.

## `useApifyProxy` (type: `boolean`):

Ask Apify for a proxy URL and pass it into CloakBrowser.

## `apifyProxyGroups` (type: `array`):

Optional list of Apify proxy groups.

## `apifyProxyCountry` (type: `string`):

Optional 2-letter country code for Apify Proxy.

## `maxConcurrency` (type: `integer`):

How many pages to process in parallel in standard Actor mode.

## `requestTimeoutSecs` (type: `integer`):

Timeout for navigation and selector waits.

## `includeHtmlInJson` (type: `boolean`):

When outputFormat is json, also include the extracted HTML fragment.

## `exportStorageState` (type: `boolean`):

Save a Playwright storageState snapshot after the run.

## `exportStorageStateKey` (type: `string`):

Key-value store key used when exportStorageState is enabled.

## `exportCookies` (type: `boolean`):

Save cookies after the run as a JSON array.

## `exportCookiesKey` (type: `string`):

Key-value store key used when exportCookies is enabled.

## Actor input object example

```json
{
  "url": "https://example.com",
  "outputFormat": "markdown",
  "interactionSteps": [],
  "waitUntil": "load",
  "waitForMs": 0,
  "scrollToBottom": false,
  "maxScrollSteps": 8,
  "scrollDelayMs": 500,
  "screenshot": false,
  "screenshotFullPage": true,
  "screenshotType": "png",
  "headless": true,
  "geoip": false,
  "humanize": true,
  "usePersistentContext": true,
  "sessionProfileName": "default",
  "useApifyProxy": false,
  "maxConcurrency": 1,
  "requestTimeoutSecs": 90,
  "includeHtmlInJson": false,
  "exportStorageState": false,
  "exportStorageStateKey": "STORAGE_STATE",
  "exportCookies": false,
  "exportCookiesKey": "COOKIES"
}
```

# Actor output Schema

## `results` (type: `string`):

Structured scrape results returned by the actor. Each item includes request metadata, extracted content, screenshots, artifacts, and session metadata.

## `runSummary` (type: `string`):

Summary output stored under the OUTPUT record in the default key-value store for standard actor runs.

## `files` (type: `string`):

Key-value store keys for screenshots, exported cookies, exported storage state, and any other generated artifacts.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "url": "https://example.com",
    "interactionSteps": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("reinventingai/cloakbrowser-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "url": "https://example.com",
    "interactionSteps": [],
}

# Run the Actor and wait for it to finish
run = client.actor("reinventingai/cloakbrowser-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "url": "https://example.com",
  "interactionSteps": []
}' |
apify call reinventingai/cloakbrowser-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=reinventingai/cloakbrowser-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "CloakBrowser Scraper",
        "description": "CloakBrowser Stealth Scraper is an Apify Actor for stealth cloak web scraping on protected websites, with JSON, HTML, or Markdown output, screenshots, interaction steps like click and scroll, session reuse, cookies, robots bypass, and Standby mode for real-time scraping APIs. Scrape with confidence!",
        "version": "0.0",
        "x-build-id": "xEXubolKXoetL4fo0"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/reinventingai~cloakbrowser-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-reinventingai-cloakbrowser-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/reinventingai~cloakbrowser-scraper/runs": {
            "post": {
                "operationId": "runs-sync-reinventingai-cloakbrowser-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/reinventingai~cloakbrowser-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-reinventingai-cloakbrowser-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "url": {
                        "title": "Single URL",
                        "type": "string",
                        "description": "A single page URL to scrape."
                    },
                    "urls": {
                        "title": "Multiple URLs",
                        "type": "array",
                        "description": "Optional list of URLs to scrape in sequence.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "outputFormat": {
                        "title": "Output format",
                        "enum": [
                            "markdown",
                            "html",
                            "json"
                        ],
                        "type": "string",
                        "description": "Choose the main content format returned in the content field.",
                        "default": "markdown"
                    },
                    "selector": {
                        "title": "CSS selector",
                        "type": "string",
                        "description": "Optional CSS selector to limit extraction to one element. If empty, the full page is used."
                    },
                    "interactionSteps": {
                        "title": "Interaction steps",
                        "type": "array",
                        "description": "Optional pre-extraction browser actions. Supported actions: wait, waitForSelector, click, hover, type, press, select, scroll, goto, screenshot. Use optional:true on cookie-banner or best-effort steps so the run can continue if the element is missing. Example: [{\"action\":\"click\",\"selector\":\"button.accept-cookies\",\"optional\":true},{\"action\":\"type\",\"selector\":\"input[name=q]\",\"text\":\"apify cloakbrowser\"},{\"action\":\"press\",\"key\":\"Enter\"}]"
                    },
                    "waitUntil": {
                        "title": "Wait until",
                        "enum": [
                            "load",
                            "domcontentloaded",
                            "networkidle",
                            "commit"
                        ],
                        "type": "string",
                        "description": "Playwright waitUntil mode used for page.goto(). 'load' is the safest default for sites that keep background requests open.",
                        "default": "load"
                    },
                    "waitForSelector": {
                        "title": "Wait for selector",
                        "type": "string",
                        "description": "Optional selector that must appear before extraction starts."
                    },
                    "waitForMs": {
                        "title": "Extra wait after load (ms)",
                        "minimum": 0,
                        "maximum": 60000,
                        "type": "integer",
                        "description": "Optional extra delay after navigation, useful for JS-heavy pages.",
                        "default": 0
                    },
                    "scrollToBottom": {
                        "title": "Scroll to bottom",
                        "type": "boolean",
                        "description": "Scroll down in steps to trigger lazy-loaded content.",
                        "default": false
                    },
                    "maxScrollSteps": {
                        "title": "Max scroll steps",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "How many scroll steps to take if scrollToBottom is enabled.",
                        "default": 8
                    },
                    "scrollDelayMs": {
                        "title": "Scroll delay (ms)",
                        "minimum": 50,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Delay between scroll steps.",
                        "default": 500
                    },
                    "screenshot": {
                        "title": "Capture screenshot",
                        "type": "boolean",
                        "description": "Store a screenshot in the Apify key-value store and return its key.",
                        "default": false
                    },
                    "screenshotFullPage": {
                        "title": "Full-page screenshot",
                        "type": "boolean",
                        "description": "Capture the whole page instead of just the viewport.",
                        "default": true
                    },
                    "screenshotType": {
                        "title": "Screenshot type",
                        "enum": [
                            "png",
                            "jpeg",
                            "webp"
                        ],
                        "type": "string",
                        "description": "Image format used for stored screenshots.",
                        "default": "png"
                    },
                    "headless": {
                        "title": "Headless browser",
                        "type": "boolean",
                        "description": "Run browser in headless mode.",
                        "default": true
                    },
                    "geoip": {
                        "title": "Auto-match timezone and locale from proxy IP",
                        "type": "boolean",
                        "description": "Use CloakBrowser geoip mode to align browser timezone and locale with the proxy exit IP.",
                        "default": false
                    },
                    "locale": {
                        "title": "Browser locale",
                        "type": "string",
                        "description": "Optional locale like en-US."
                    },
                    "timezone": {
                        "title": "Browser timezone",
                        "type": "string",
                        "description": "Optional IANA timezone like America/New_York."
                    },
                    "userAgent": {
                        "title": "Custom user agent",
                        "type": "string",
                        "description": "Optional custom user agent passed into the browser context."
                    },
                    "viewportWidth": {
                        "title": "Viewport width",
                        "minimum": 320,
                        "maximum": 3840,
                        "type": "integer",
                        "description": "Optional viewport width override."
                    },
                    "viewportHeight": {
                        "title": "Viewport height",
                        "minimum": 320,
                        "maximum": 3840,
                        "type": "integer",
                        "description": "Optional viewport height override."
                    },
                    "humanize": {
                        "title": "Humanize interactions",
                        "type": "boolean",
                        "description": "Enable CloakBrowser humanized scrolling, mouse, and keyboard behavior.",
                        "default": true
                    },
                    "usePersistentContext": {
                        "title": "Use persistent context",
                        "type": "boolean",
                        "description": "Use a real browser profile instead of an incognito context.",
                        "default": true
                    },
                    "sessionProfileName": {
                        "title": "Session profile name",
                        "type": "string",
                        "description": "Named persistent profile folder. Reuse the same name to keep browser session state across runs.",
                        "default": "default"
                    },
                    "storageStateKey": {
                        "title": "Import storage state from key",
                        "type": "string",
                        "description": "Optional key-value store key containing a Playwright storageState JSON object."
                    },
                    "storageState": {
                        "title": "Inline storage state",
                        "type": "object",
                        "description": "Optional inline Playwright storageState object for importing cookies and localStorage."
                    },
                    "cookies": {
                        "title": "Inline cookies",
                        "type": "array",
                        "description": "Optional array of Playwright cookie objects to seed into the browser context."
                    },
                    "localStorage": {
                        "title": "Inline localStorage",
                        "type": "object",
                        "description": "Optional localStorage seed data. Use either an object keyed by origin or an array of { origin, items } entries."
                    },
                    "proxyUrl": {
                        "title": "Custom proxy URL",
                        "type": "string",
                        "description": "Optional HTTP or SOCKS5 proxy URL passed directly to CloakBrowser."
                    },
                    "useApifyProxy": {
                        "title": "Use Apify Proxy",
                        "type": "boolean",
                        "description": "Ask Apify for a proxy URL and pass it into CloakBrowser.",
                        "default": false
                    },
                    "apifyProxyGroups": {
                        "title": "Apify Proxy groups",
                        "type": "array",
                        "description": "Optional list of Apify proxy groups.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "apifyProxyCountry": {
                        "title": "Apify Proxy country code",
                        "type": "string",
                        "description": "Optional 2-letter country code for Apify Proxy."
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "How many pages to process in parallel in standard Actor mode.",
                        "default": 1
                    },
                    "requestTimeoutSecs": {
                        "title": "Request timeout (seconds)",
                        "minimum": 5,
                        "maximum": 300,
                        "type": "integer",
                        "description": "Timeout for navigation and selector waits.",
                        "default": 90
                    },
                    "includeHtmlInJson": {
                        "title": "Include HTML inside JSON output",
                        "type": "boolean",
                        "description": "When outputFormat is json, also include the extracted HTML fragment.",
                        "default": false
                    },
                    "exportStorageState": {
                        "title": "Export storage state",
                        "type": "boolean",
                        "description": "Save a Playwright storageState snapshot after the run.",
                        "default": false
                    },
                    "exportStorageStateKey": {
                        "title": "Storage state export key",
                        "type": "string",
                        "description": "Key-value store key used when exportStorageState is enabled.",
                        "default": "STORAGE_STATE"
                    },
                    "exportCookies": {
                        "title": "Export cookies",
                        "type": "boolean",
                        "description": "Save cookies after the run as a JSON array.",
                        "default": false
                    },
                    "exportCookiesKey": {
                        "title": "Cookies export key",
                        "type": "string",
                        "description": "Key-value store key used when exportCookies is enabled.",
                        "default": "COOKIES"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
