# Into The Darkweb (`olibai/into-the-darkweb`) Actor

Scrape and interact with darkweb .onion sites via Tor. Easy Access mode fetches any page in one call. Browser Experience mode runs full sessions — navigate, click, type, screenshot, extract data. All traffic
routed through Tor with unique exit IPs and randomized fingerprints.

- **URL**: https://apify.com/olibai/into-the-darkweb.md
- **Developed by:** [Olib AI](https://apify.com/olibai) (community)
- **Categories:** Automation, Developer tools, Integrations
- **Stats:** 18 total users, 3 monthly users, 70.8% runs succeeded, 3 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.00005 / actor start

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

## Into The Darkweb

Access .onion sites and the darkweb through the Tor network using [Owl Browser](https://www.owlbrowser.net).

[![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

---

### Overview

Into The Darkweb is an [Apify](https://apify.com) actor that provides programmatic access to the Tor network through Owl Browser's anti-detection browser infrastructure. It offers two modes of operation:

- **Easy Access** — Fetch any .onion page in a single call. Pass a URL, get back HTML. No context management needed.
- **Browser Experience** — Run a full interactive browsing session over Tor with a sequence of actions: navigate, click, type, take screenshots, extract data, and more.

All traffic is routed through Tor with unique exit node IPs per session. Browser fingerprints are randomized for each context.

---

### Quick Start

#### Easy Access — Fetch a page

```json
{
    "mode": "easy",
    "region": "US",
    "url": "http://2gzyxa5ihm7nsber64qvit6eraokhlmr6scarvb5xqi6hx4i7flrcbad.onion"
}
````

Returns the full HTML content of the page.

#### Browser Experience — Interactive session

```json
{
    "mode": "browser",
    "region": "EU",
    "os": "linux",
    "actions": [
        {"action": "navigate", "url": "http://2gzyxa5ihm7nsber64qvit6eraokhlmr6scarvb5xqi6hx4i7flrcbad.onion"},
        {"action": "wait_for_selector", "selector": "#content", "timeout": 15000},
        {"action": "screenshot"},
        {"action": "extract_text"},
        {"action": "get_html"}
    ]
}
```

Creates a Tor-enabled browser context, runs each action sequentially, collects all results, and auto-closes the context when done.

***

### Input Parameters

#### General Settings

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `mode` | string | Yes | `"easy"` | `"easy"` for one-shot page fetch, `"browser"` for interactive session |
| `region` | string | Yes | `"US"` | Browser instance region: `"US"` (United States) or `"EU"` (Europe) |
| `os` | string | No | — | OS fingerprint: `"windows"`, `"macos"`, or `"linux"` |

#### Easy Access Options

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `url` | string | Yes (easy mode) | — | The .onion URL or any URL to fetch |
| `outputFormat` | string | No | `"html"` | Output format: `"html"` (raw HTML), `"text"` (extracted plain text), `"markdown"` (markdown conversion) |
| `waitUntil` | string | No | — | When navigation is complete: `"load"`, `"domcontentloaded"`, `"networkidle"`, `"fullscroll"` |
| `timeout` | integer | No | `30000` | Navigation timeout in milliseconds (5000–120000) |

#### Browser Experience Options

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `timezone` | string | No | — | IANA timezone (e.g. `"America/New_York"`, `"Europe/London"`) |
| `actions` | array | Yes (browser mode) | — | Sequence of browser actions to execute |

***

### Available Browser Actions

Each action in the `actions` array is a JSON object with an `action` field and action-specific parameters. The browser context ID is injected automatically.

#### Navigation

| Action | Parameters | Description |
|--------|-----------|-------------|
| `navigate` | `url` (required), `wait_until`, `timeout` | Navigate to a URL |
| `reload` | `wait_until`, `timeout` | Reload the current page |
| `go_back` | `wait_until`, `timeout` | Navigate back in history |
| `go_forward` | `wait_until`, `timeout` | Navigate forward in history |

#### Interaction

| Action | Parameters | Description |
|--------|-----------|-------------|
| `click` | `selector` (required) | Click an element. Accepts CSS selectors, XY coordinates (`"100x200"`), or natural language (`"Login button"`) |
| `type` | `selector` (required), `text` (required) | Type text into an input field |
| `pick` | `selector` (required), `value` (required) | Select a dropdown option |
| `submit_form` | `selector` | Submit a form |

#### Data Extraction

| Action | Parameters | Description |
|--------|-----------|-------------|
| `extract_text` | `selector` | Extract text content from the page or a specific element |
| `get_html` | — | Get the full page HTML |
| `screenshot` | — | Take a screenshot (saved to key-value store as PNG) |
| `get_page_info` | — | Get current URL, title, and page metadata |
| `evaluate` | `script` (required) | Execute JavaScript and return the result |

#### Scrolling

| Action | Parameters | Description |
|--------|-----------|-------------|
| `scroll_by` | `x`, `y` | Scroll by pixel offset |
| `scroll_to_element` | `selector` (required) | Scroll to a specific element |
| `scroll_to_top` | — | Scroll to the top of the page |
| `scroll_to_bottom` | — | Scroll to the bottom of the page |

#### Waiting

| Action | Parameters | Description |
|--------|-----------|-------------|
| `wait_for_selector` | `selector` (required), `timeout` | Wait for an element to appear |

#### Cookies

| Action | Parameters | Description |
|--------|-----------|-------------|
| `get_cookies` | — | Get all cookies for the current page |
| `set_cookie` | `name` (required), `value` (required), `domain`, `path` | Set a cookie |
| `delete_cookies` | — | Delete all cookies |

***

### Output

#### Easy Access Output

```json
{
    "url": "http://example.onion",
    "content": "<!DOCTYPE html>...",
    "outputFormat": "html",
    "status": "success",
    "region": "US",
    "timestamp": "2025-01-15T12:00:00+00:00"
}
```

#### Browser Experience Output

```json
{
    "status": "success",
    "region": "EU",
    "contextId": "ctx_000001",
    "actionsTotal": 5,
    "actionsSucceeded": 5,
    "actionsFailed": 0,
    "results": [
        {
            "step": 1,
            "action": "navigate",
            "status": "success",
            "result": { "url": "http://example.onion", "title": "..." },
            "durationMs": 8500
        },
        {
            "step": 2,
            "action": "screenshot",
            "status": "success",
            "result": { "screenshotKey": "screenshot_1", "sizeBytes": 245760 },
            "durationMs": 1200
        }
    ],
    "timestamp": "2025-01-15T12:00:05+00:00"
}
```

Screenshots are stored in the Apify key-value store as PNG files, accessible via the `screenshotKey` in the results.

**Status values:** `"success"` (all actions passed), `"partial"` (some actions failed), `"error"` (all actions failed or actor-level error).

***

### Examples

#### Scrape an onion site

```json
{
    "mode": "easy",
    "region": "US",
    "url": "http://2gzyxa5ihm7nsber64qvit6eraokhlmr6scarvb5xqi6hx4i7flrcbad.onion",
    "waitUntil": "networkidle",
    "timeout": 60000
}
```

#### Login and extract data from a .onion site

```json
{
    "mode": "browser",
    "region": "EU",
    "os": "linux",
    "timezone": "Europe/Berlin",
    "actions": [
        {"action": "navigate", "url": "http://example.onion/login"},
        {"action": "type", "selector": "#username", "text": "myuser"},
        {"action": "type", "selector": "#password", "text": "mypass"},
        {"action": "click", "selector": "button[type='submit']"},
        {"action": "wait_for_selector", "selector": ".dashboard", "timeout": 15000},
        {"action": "screenshot"},
        {"action": "navigate", "url": "http://example.onion/data"},
        {"action": "extract_text", "selector": ".results"},
        {"action": "get_html"}
    ]
}
```

#### Take a screenshot of a darkweb page

```json
{
    "mode": "browser",
    "region": "US",
    "actions": [
        {"action": "navigate", "url": "http://2gzyxa5ihm7nsber64qvit6eraokhlmr6scarvb5xqi6hx4i7flrcbad.onion"},
        {"action": "wait_for_selector", "selector": "body", "timeout": 30000},
        {"action": "screenshot"},
        {"action": "get_page_info"}
    ]
}
```

***

### Environment Variables

These are configured in the Apify actor settings (not user input):

| Variable | Description |
|----------|-------------|
| `OWL_BROWSER_US_URL` | Owl Browser US region endpoint URL |
| `OWL_BROWSER_US_TOKEN` | Owl Browser US region API token |
| `OWL_BROWSER_EU_URL` | Owl Browser EU region endpoint URL |
| `OWL_BROWSER_EU_TOKEN` | Owl Browser EU region API token |

***

### How It Works

1. The actor reads user input and selects the Owl Browser instance for the chosen region (US or EU).
2. All connections are routed through the Tor network with unique exit node IPs per session.
3. Browser fingerprints (User-Agent, OS, WebGL, Canvas, etc.) are randomized using Owl Browser's anti-detection engine.

**Easy Access** uses the `browser_go` tool, which handles context creation, Tor-routed navigation, HTML extraction, and cleanup in a single call.

**Browser Experience** creates a dedicated Tor-enabled browser context with SOCKS5h proxy (`127.0.0.1:9050`) and Tor circuit isolation. Each action runs sequentially against this context. The context is always closed when the session ends, even if errors occur.

***

### Technology

Built with:

- **[Owl Browser](https://www.owlbrowser.net)** — Anti-detection browser with Tor integration, fingerprint spoofing, and remote automation APIs.
- **[Owl Browser Python SDK v2](https://www.owlbrowser.net)** — Async-first Python client for Owl Browser (`owl-browser` on PyPI).
- **[Apify SDK](https://apify.com)** — Actor runtime, dataset storage, and key-value store for screenshots.

***

### License

MIT License - see LICENSE file for details.

***

### Links

- **Owl Browser**: <https://www.owlbrowser.net>
- **Olib AI**: <https://www.olib.ai>
- **Owl Browser Docs**: <https://www.owlbrowser.net/docs>
- **Repository**: <https://github.com/Olib-AI/owl-projects>

***

### Keywords

darkweb, dark web, tor, tor browser, onion, .onion, hidden services, tor network, onion routing, darknet, deep web, anonymous browsing, tor proxy, socks5, onion scraper, darkweb scraper, tor scraping, onion crawler, darkweb crawler, darkweb monitoring, threat intelligence, OSINT, open source intelligence, darknet monitoring, tor automation, onion access, hidden service scraper, anti-detection browser, browser fingerprinting, fingerprint spoofing, stealth browser, web scraping, browser automation, headless browser, remote browser, apify actor, owl browser

# Actor input Schema

## `mode` (type: `string`):

Choose the operating mode. Easy Access fetches a single page and returns its HTML. Browser Experience gives you full control with a sequence of browser actions (navigate, click, type, screenshot, etc.).

## `region` (type: `string`):

Select the geographic region for the Owl Browser instance. Choose the region closest to your target for best performance.

## `os` (type: `string`):

Operating system fingerprint for the browser context. This affects the User-Agent string and other browser fingerprinting signals. Leave empty for the default.

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

The .onion URL (or any URL) to navigate to. Required for Easy Access mode. For Browser Experience mode, use the navigate action in the actions array instead.

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

Format of the returned page content. 'html' returns raw HTML, 'text' returns extracted plain text, 'markdown' returns markdown conversion.

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

When to consider the page navigation complete. 'load' waits for the load event, 'domcontentloaded' waits for DOMContentLoaded, 'networkidle' waits until no network connections for 500ms, 'fullscroll' scrolls the entire page first.

## `timeout` (type: `integer`):

Navigation timeout in milliseconds. Tor connections can be slow, so consider using a higher value (30000-60000ms). Default: 30000ms.

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

IANA timezone identifier for the browser context (e.g. 'America/New\_York', 'Europe/London', 'Asia/Tokyo'). Only used in Browser Experience mode.

## `actions` (type: `array`):

Array of browser actions to execute sequentially. Each action is an object with an 'action' field (the action name) and action-specific parameters.

Available actions:

- navigate: {action: 'navigate', url: '...', wait\_until: '...', timeout: 30000}
- reload: {action: 'reload', wait\_until: '...', timeout: 30000}
- go\_back / go\_forward: {action: 'go\_back'}
- click: {action: 'click', selector: '#btn or 100x200 or "Login button"'}
- type: {action: 'type', selector: '#input', text: 'hello'}
- pick: {action: 'pick', selector: '#dropdown', value: 'option1'}
- submit\_form: {action: 'submit\_form', selector: '#form'}
- extract\_text: {action: 'extract\_text', selector: '#content'}
- screenshot: {action: 'screenshot'}
- get\_html: {action: 'get\_html'}
- scroll\_by: {action: 'scroll\_by', x: 0, y: 500}
- scroll\_to\_element: {action: 'scroll\_to\_element', selector: '#footer'}
- scroll\_to\_top / scroll\_to\_bottom: {action: 'scroll\_to\_top'}
- wait\_for\_selector: {action: 'wait\_for\_selector', selector: '#loaded', timeout: 10000}
- get\_page\_info: {action: 'get\_page\_info'}
- get\_cookies / delete\_cookies: {action: 'get\_cookies'}
- set\_cookie: {action: 'set\_cookie', name: 'key', value: 'val', domain: '.example.onion'}
- evaluate: {action: 'evaluate', script: 'document.title'}

## Actor input object example

```json
{
  "mode": "easy",
  "region": "US",
  "url": "http://2gzyxa5ihm7nsber64qvit6eraokhlmr6scarvb5xqi6hx4i7flrcbad.onion",
  "outputFormat": "html",
  "timeout": 30000,
  "actions": [
    {
      "action": "navigate",
      "url": "http://2gzyxa5ihm7nsber64qvit6eraokhlmr6scarvb5xqi6hx4i7flrcbad.onion"
    },
    {
      "action": "wait_for_selector",
      "selector": "#content",
      "timeout": 15000
    },
    {
      "action": "screenshot"
    },
    {
      "action": "extract_text"
    },
    {
      "action": "get_html"
    }
  ]
}
```

# Actor output Schema

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

Complete results including status and page content in chosen format (Easy Access), or per-action results with timing (Browser Experience)

## `screenshot_1` (type: `string`):

First screenshot captured during a Browser Experience session

## `screenshot_2` (type: `string`):

Second screenshot captured during a Browser Experience session

## `screenshot_3` (type: `string`):

Third screenshot captured during a Browser Experience session

# 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": "http://2gzyxa5ihm7nsber64qvit6eraokhlmr6scarvb5xqi6hx4i7flrcbad.onion",
    "actions": [
        {
            "action": "navigate",
            "url": "http://2gzyxa5ihm7nsber64qvit6eraokhlmr6scarvb5xqi6hx4i7flrcbad.onion"
        },
        {
            "action": "wait_for_selector",
            "selector": "#content",
            "timeout": 15000
        },
        {
            "action": "screenshot"
        },
        {
            "action": "extract_text"
        },
        {
            "action": "get_html"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("olibai/into-the-darkweb").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": "http://2gzyxa5ihm7nsber64qvit6eraokhlmr6scarvb5xqi6hx4i7flrcbad.onion",
    "actions": [
        {
            "action": "navigate",
            "url": "http://2gzyxa5ihm7nsber64qvit6eraokhlmr6scarvb5xqi6hx4i7flrcbad.onion",
        },
        {
            "action": "wait_for_selector",
            "selector": "#content",
            "timeout": 15000,
        },
        { "action": "screenshot" },
        { "action": "extract_text" },
        { "action": "get_html" },
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("olibai/into-the-darkweb").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": "http://2gzyxa5ihm7nsber64qvit6eraokhlmr6scarvb5xqi6hx4i7flrcbad.onion",
  "actions": [
    {
      "action": "navigate",
      "url": "http://2gzyxa5ihm7nsber64qvit6eraokhlmr6scarvb5xqi6hx4i7flrcbad.onion"
    },
    {
      "action": "wait_for_selector",
      "selector": "#content",
      "timeout": 15000
    },
    {
      "action": "screenshot"
    },
    {
      "action": "extract_text"
    },
    {
      "action": "get_html"
    }
  ]
}' |
apify call olibai/into-the-darkweb --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Into The Darkweb",
        "description": "Scrape and interact with darkweb .onion sites via Tor. Easy Access mode fetches any page in one call. Browser Experience mode runs full sessions — navigate, click, type, screenshot, extract data. All traffic\n  routed through Tor with unique exit IPs and randomized fingerprints.",
        "version": "1.0",
        "x-build-id": "E46euS8A1GMDbTEPB"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/olibai~into-the-darkweb/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-olibai-into-the-darkweb",
                "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/olibai~into-the-darkweb/runs": {
            "post": {
                "operationId": "runs-sync-olibai-into-the-darkweb",
                "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/olibai~into-the-darkweb/run-sync": {
            "post": {
                "operationId": "run-sync-olibai-into-the-darkweb",
                "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",
                "required": [
                    "mode",
                    "region"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "easy",
                            "browser"
                        ],
                        "type": "string",
                        "description": "Choose the operating mode. Easy Access fetches a single page and returns its HTML. Browser Experience gives you full control with a sequence of browser actions (navigate, click, type, screenshot, etc.).",
                        "default": "easy"
                    },
                    "region": {
                        "title": "Region",
                        "enum": [
                            "US",
                            "EU"
                        ],
                        "type": "string",
                        "description": "Select the geographic region for the Owl Browser instance. Choose the region closest to your target for best performance.",
                        "default": "US"
                    },
                    "os": {
                        "title": "OS Fingerprint",
                        "enum": [
                            "windows",
                            "macos",
                            "linux"
                        ],
                        "type": "string",
                        "description": "Operating system fingerprint for the browser context. This affects the User-Agent string and other browser fingerprinting signals. Leave empty for the default."
                    },
                    "url": {
                        "title": "URL",
                        "type": "string",
                        "description": "The .onion URL (or any URL) to navigate to. Required for Easy Access mode. For Browser Experience mode, use the navigate action in the actions array instead."
                    },
                    "outputFormat": {
                        "title": "Output Format",
                        "enum": [
                            "html",
                            "text",
                            "markdown"
                        ],
                        "type": "string",
                        "description": "Format of the returned page content. 'html' returns raw HTML, 'text' returns extracted plain text, 'markdown' returns markdown conversion.",
                        "default": "html"
                    },
                    "waitUntil": {
                        "title": "Wait Until",
                        "enum": [
                            "",
                            "load",
                            "domcontentloaded",
                            "networkidle",
                            "fullscroll"
                        ],
                        "type": "string",
                        "description": "When to consider the page navigation complete. 'load' waits for the load event, 'domcontentloaded' waits for DOMContentLoaded, 'networkidle' waits until no network connections for 500ms, 'fullscroll' scrolls the entire page first."
                    },
                    "timeout": {
                        "title": "Timeout (ms)",
                        "minimum": 5000,
                        "maximum": 120000,
                        "type": "integer",
                        "description": "Navigation timeout in milliseconds. Tor connections can be slow, so consider using a higher value (30000-60000ms). Default: 30000ms.",
                        "default": 30000
                    },
                    "timezone": {
                        "title": "Timezone",
                        "type": "string",
                        "description": "IANA timezone identifier for the browser context (e.g. 'America/New_York', 'Europe/London', 'Asia/Tokyo'). Only used in Browser Experience mode."
                    },
                    "actions": {
                        "title": "Browser Actions",
                        "type": "array",
                        "description": "Array of browser actions to execute sequentially. Each action is an object with an 'action' field (the action name) and action-specific parameters.\n\nAvailable actions:\n- navigate: {action: 'navigate', url: '...', wait_until: '...', timeout: 30000}\n- reload: {action: 'reload', wait_until: '...', timeout: 30000}\n- go_back / go_forward: {action: 'go_back'}\n- click: {action: 'click', selector: '#btn or 100x200 or \"Login button\"'}\n- type: {action: 'type', selector: '#input', text: 'hello'}\n- pick: {action: 'pick', selector: '#dropdown', value: 'option1'}\n- submit_form: {action: 'submit_form', selector: '#form'}\n- extract_text: {action: 'extract_text', selector: '#content'}\n- screenshot: {action: 'screenshot'}\n- get_html: {action: 'get_html'}\n- scroll_by: {action: 'scroll_by', x: 0, y: 500}\n- scroll_to_element: {action: 'scroll_to_element', selector: '#footer'}\n- scroll_to_top / scroll_to_bottom: {action: 'scroll_to_top'}\n- wait_for_selector: {action: 'wait_for_selector', selector: '#loaded', timeout: 10000}\n- get_page_info: {action: 'get_page_info'}\n- get_cookies / delete_cookies: {action: 'get_cookies'}\n- set_cookie: {action: 'set_cookie', name: 'key', value: 'val', domain: '.example.onion'}\n- evaluate: {action: 'evaluate', script: 'document.title'}"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
