# Website Intelligence API (`ladra/website-intelligence-api`) Actor

Crawl any public website and turn it into AI-ready intelligence. Extract screenshots, Markdown, HTML, metadata, links, PDFs, compliance evidence, RAG chunks, and structured JSON for sales research, audits, website snapshots, and automation.

- **URL**: https://apify.com/ladra/website-intelligence-api.md
- **Developed by:** [Ladra Software](https://apify.com/ladra) (community)
- **Categories:** AI, Developer tools, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## Website Intelligence API

Turn any public website into structured, AI-ready intelligence.

Website Intelligence API crawls and renders public pages with Playwright, then returns clean website data for research, RAG pipelines, sales workflows, compliance checks, audits, screenshots, and automation.

### Quick start

Use a high-level `intent` instead of configuring dozens of crawler settings:

```json
{
  "url": "https://example.com",
  "intent": "sales_research"
}
````

For advanced control, override the preset:

```json
{
  "url": "https://example.com",
  "intent": "rag",
  "advanced": {
    "maxPages": 25,
    "includeScreenshots": false
  }
}
```

### Supported intents

| Intent | Use it for |
|---|---|
| `website_snapshot` | Screenshots, HTML, Markdown, metadata, PDFs, and page assets |
| `rag` | Markdown, chunks, headings, metadata, and internal links |
| `sales_research` | Company info, products, pricing pages, contact details, and socials |
| `documentation` | Docs pages, navigation, tutorials, code-oriented content, and search data |
| `ecommerce` | Product, category, pricing, review, and image discovery |
| `compliance` | Privacy, Terms, Cookie Policy, DPA, Subprocessors, Security, and Trust Center evidence |
| `website_clone` | Visual structure, colors, fonts, screenshots, layouts, navigation, and assets |

### What you get

- Structured `extract-result.json`
- Per-page dataset rows
- Markdown and optional rendered HTML
- Metadata, headings, links, CTAs, and page classifications
- Desktop, mobile, light mode, dark mode, and thumbnail screenshots
- Optional PDFs
- Optional RAG chunks
- Compliance evidence reports
- Snapshot report HTML
- Optional change detection and visual diff reports

### Example output

```json
{
  "company": {},
  "products": [],
  "pricing": [],
  "navigation": [],
  "pages": [],
  "faq": [],
  "contact": {},
  "socials": {},
  "metadata": {},
  "markdown": "",
  "screenshots": {},
  "screenshot": "",
  "pdf": "",
  "html": ""
}
```

### Common use cases

- Build a website knowledge base for RAG
- Research a company before a sales call
- Capture compliance evidence from public pages
- Export screenshots, PDFs, Markdown, and structured JSON
- Monitor public website changes
- Analyze site structure for redesign, migration, or clone workflows

### Advanced options

Most users only need `url` and `intent`.

Advanced users can control crawl size, screenshots, PDFs, Markdown, HTML, wait strategy, concurrency, resource profile, asset loading, visual diff, and change detection through the `advanced` object.

### Notes

This Actor is designed for public websites. It respects robots.txt by default and is intended for website research, public web intelligence, compliance preparation, and AI-ready data extraction workflows.

# Actor input Schema

## `startUrl` (type: `string`):

The website URL where crawling starts. Legacy alias for url.

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

Website URL for the v2 extract API shape. If startUrl is omitted, this value is used.

## `intent` (type: `string`):

High-level extraction intent. Existing low-level options can still override this preset.

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

Snapshot mode controls defaults and summary outputs.

## `qualityMode` (type: `string`):

Preset for speed and output depth. Fast favors text outputs, balanced captures desktop screenshots, complete enables richer report defaults.

## `crawlStrategy` (type: `string`):

Controls how URLs are selected. Compliance-first prioritizes legal, security, trust, status, contact, and support pages.

## `maxPages` (type: `integer`):

Maximum number of pages to capture.

## `crawlDepth` (type: `integer`):

Maximum link depth from the start URL.

## `sameDomainOnly` (type: `boolean`):

Only crawl URLs on the start URL hostname.

## `useSitemap` (type: `boolean`):

Seed the crawler with URLs from sitemap.xml when available.

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

Optional explicit URLs to capture in addition to the start URL. These bypass include URL patterns but still respect same-domain, asset, and robots filters.

## `respectRobotsTxt` (type: `boolean`):

Read robots.txt, use its sitemap declarations, and skip disallowed URLs.

## `maxSitemapUrls` (type: `integer`):

Maximum URLs to collect from sitemap files before applying max page limits.

## `includeUrlPatterns` (type: `array`):

Optional path or URL fragments that URLs must match.

## `excludeUrlPatterns` (type: `array`):

Optional path or URL fragments to skip.

## `includeScreenshots` (type: `boolean`):

Capture desktop full-page screenshots.

## `includeMobileScreenshots` (type: `boolean`):

Capture an additional mobile full-page screenshot.

## `includeLightModeScreenshots` (type: `boolean`):

Capture additional screenshots after forcing the page to light color scheme.

## `includeDarkModeScreenshots` (type: `boolean`):

Capture additional screenshots after forcing the page to dark color scheme.

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

Capture full-page screenshots. Disable to capture only the visible viewport.

## `includeScreenshotThumbnails` (type: `boolean`):

Create viewport thumbnail images for each captured screenshot variant.

## `includeHtml` (type: `boolean`):

Save rendered page HTML files.

## `includeMarkdown` (type: `boolean`):

Extract readable page content and save it as Markdown.

## `includePdf` (type: `boolean`):

Capture each page as a PDF when supported.

## `includeMetadata` (type: `boolean`):

Extract titles, descriptions, headings, links, CTAs, hashes, and page type.

## `includeRagChunks` (type: `boolean`):

Create simple AI-ready text chunks from Markdown.

## `enableAiAnalysis` (type: `boolean`):

Run optional AI-style page analysis tasks such as webpage summaries and CTA highlighting.

## `aiProvider` (type: `string`):

Choose heuristic local analysis or OpenAI Responses API analysis.

## `aiTasks` (type: `array`):

AI tasks to run. Supported values: summarize\_page, highlight\_cta.

## `aiPrompt` (type: `string`):

Optional natural-language prompt, for example: Highlight the CTA, or Summarize this webpage.

## `aiModel` (type: `string`):

OpenAI model used when AI provider is OpenAI.

## `openaiApiKey` (type: `string`):

Optional OpenAI API key. If omitted, the Actor uses the OPENAI\_API\_KEY environment variable.

## `aiMaxInputChars` (type: `integer`):

Maximum page text characters sent to the AI provider per page.

## `removeCookieBanners` (type: `boolean`):

Attempt to accept, reject, close, or remove common cookie consent overlays before capture.

## `removePopups` (type: `boolean`):

Attempt to close or remove common modal, popup, newsletter, and overlay elements before capture.

## `detectBrokenLinks` (type: `boolean`):

Check links found on captured pages and report failed or HTTP 4xx/5xx links.

## `checkExternalLinks` (type: `boolean`):

When broken-link detection is enabled, also check outbound external links.

## `maxLinksToCheckPerPage` (type: `integer`):

Caps broken-link checks per captured page.

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

Requested maximum pages to crawl at the same time. The resource profile controls how strictly this is capped.

## `resourceProfile` (type: `string`):

Controls how aggressively the Actor manages memory and concurrency. Safe caps heavy runs conservatively, speed allows more concurrency, and manual honors maxConcurrency with warnings.

## `assetLoading` (type: `string`):

Controls image, media, and font requests. Auto blocks heavy assets only for text-only runs, full loads all assets, and block heavy blocks them even if screenshots are enabled.

## `includeZipArchive` (type: `boolean`):

Create a ZIP archive containing generated screenshots, Markdown, JSON, CSV, and summary files.

## `enableChangeDetection` (type: `boolean`):

Compare this run against a previous snapshot provided as JSON input or URL.

## `previousSnapshot` (type: `object`):

Previous dataset export or object containing pages/items/capturedPages for hash-based comparison.

## `previousSnapshotUrl` (type: `string`):

Optional URL returning previous snapshot JSON for hash-based comparison.

## `webhookUrl` (type: `string`):

Optional endpoint that receives a POST when the snapshot completes.

## `enableVisualDiff` (type: `boolean`):

Compare current desktop screenshots against previous snapshot screenshot URLs.

## `visualDiffThreshold` (type: `number`):

Pixelmatch threshold from 0 to 1. Lower values are more sensitive.

## `includeAuditReport` (type: `boolean`):

Generate audit-report.html and audit-report.pdf summary files.

## `detectCompliancePages` (type: `boolean`):

Classify privacy, legal, security, trust, and related pages.

## `detectMissingPages` (type: `boolean`):

Create a missing-page checklist in compliance evidence mode.

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

Page load state to wait for before capture.

## `advanced` (type: `object`):

Optional lower-level overrides for intent presets, such as includePdf, includeScreenshots, waitUntil, resourceProfile, assetLoading, maxConcurrency, enableVisualDiff, and enableChangeDetection.

## Actor input object example

```json
{
  "startUrl": "https://example.com",
  "url": "https://example.com",
  "intent": "website_snapshot",
  "mode": "snapshot",
  "qualityMode": "balanced",
  "crawlStrategy": "auto",
  "maxPages": 1,
  "crawlDepth": 2,
  "sameDomainOnly": true,
  "useSitemap": true,
  "respectRobotsTxt": true,
  "maxSitemapUrls": 5000,
  "excludeUrlPatterns": [
    "/cart",
    "/checkout",
    "/account",
    "/wp-admin"
  ],
  "includeScreenshots": true,
  "includeMobileScreenshots": false,
  "includeLightModeScreenshots": false,
  "includeDarkModeScreenshots": false,
  "screenshotFullPage": true,
  "includeScreenshotThumbnails": false,
  "includeHtml": false,
  "includeMarkdown": true,
  "includePdf": false,
  "includeMetadata": true,
  "includeRagChunks": false,
  "enableAiAnalysis": false,
  "aiProvider": "heuristic",
  "aiTasks": [],
  "aiModel": "gpt-5.5",
  "aiMaxInputChars": 12000,
  "removeCookieBanners": true,
  "removePopups": true,
  "detectBrokenLinks": false,
  "checkExternalLinks": false,
  "maxLinksToCheckPerPage": 50,
  "maxConcurrency": 1,
  "resourceProfile": "safe",
  "assetLoading": "auto",
  "includeZipArchive": false,
  "enableChangeDetection": false,
  "enableVisualDiff": false,
  "visualDiffThreshold": 0.1,
  "includeAuditReport": false,
  "detectCompliancePages": true,
  "detectMissingPages": true,
  "waitUntil": "load"
}
```

# Actor output Schema

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

Default dataset rows, one per captured/analyzed webpage.

## `extractResult` (type: `string`):

Stable v2 structured JSON wrapper with company, pages, navigation, contact, socials, metadata, markdown, screenshots, and output links.

## `crawlSummary` (type: `string`):

Run summary with selected intent, resource plan, warning list, counts, evidence status, and report links.

## `snapshotReport` (type: `string`):

Browser-friendly HTML report with summary metrics, warnings, evidence status, screenshots, and page links.

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

All records generated in the default key-value store, including screenshots, Markdown, HTML, PDFs, CSV files, and reports.

# 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 = {
    "startUrl": "https://example.com",
    "url": "https://example.com",
    "intent": "website_snapshot",
    "maxPages": 1,
    "crawlDepth": 0,
    "useSitemap": false,
    "includeScreenshots": false,
    "includePdf": false,
    "includeZipArchive": false,
    "waitUntil": "load"
};

// Run the Actor and wait for it to finish
const run = await client.actor("ladra/website-intelligence-api").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 = {
    "startUrl": "https://example.com",
    "url": "https://example.com",
    "intent": "website_snapshot",
    "maxPages": 1,
    "crawlDepth": 0,
    "useSitemap": False,
    "includeScreenshots": False,
    "includePdf": False,
    "includeZipArchive": False,
    "waitUntil": "load",
}

# Run the Actor and wait for it to finish
run = client.actor("ladra/website-intelligence-api").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 '{
  "startUrl": "https://example.com",
  "url": "https://example.com",
  "intent": "website_snapshot",
  "maxPages": 1,
  "crawlDepth": 0,
  "useSitemap": false,
  "includeScreenshots": false,
  "includePdf": false,
  "includeZipArchive": false,
  "waitUntil": "load"
}' |
apify call ladra/website-intelligence-api --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Website Intelligence API",
        "description": "Crawl any public website and turn it into AI-ready intelligence. Extract screenshots, Markdown, HTML, metadata, links, PDFs, compliance evidence, RAG chunks, and structured JSON for sales research, audits, website snapshots, and automation.",
        "version": "0.0",
        "x-build-id": "cJ2iHjsBVrcxZgaAn"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ladra~website-intelligence-api/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ladra-website-intelligence-api",
                "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/ladra~website-intelligence-api/runs": {
            "post": {
                "operationId": "runs-sync-ladra-website-intelligence-api",
                "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/ladra~website-intelligence-api/run-sync": {
            "post": {
                "operationId": "run-sync-ladra-website-intelligence-api",
                "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": {
                    "startUrl": {
                        "title": "Start URL",
                        "type": "string",
                        "description": "The website URL where crawling starts. Legacy alias for url."
                    },
                    "url": {
                        "title": "URL",
                        "type": "string",
                        "description": "Website URL for the v2 extract API shape. If startUrl is omitted, this value is used."
                    },
                    "intent": {
                        "title": "Intent",
                        "enum": [
                            "website_snapshot",
                            "rag",
                            "sales_research",
                            "documentation",
                            "ecommerce",
                            "compliance",
                            "website_clone"
                        ],
                        "type": "string",
                        "description": "High-level extraction intent. Existing low-level options can still override this preset.",
                        "default": "website_snapshot"
                    },
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "snapshot",
                            "rag",
                            "ux_audit",
                            "compliance_evidence"
                        ],
                        "type": "string",
                        "description": "Snapshot mode controls defaults and summary outputs.",
                        "default": "snapshot"
                    },
                    "qualityMode": {
                        "title": "Quality mode",
                        "enum": [
                            "fast",
                            "balanced",
                            "complete"
                        ],
                        "type": "string",
                        "description": "Preset for speed and output depth. Fast favors text outputs, balanced captures desktop screenshots, complete enables richer report defaults.",
                        "default": "balanced"
                    },
                    "crawlStrategy": {
                        "title": "Crawl strategy",
                        "enum": [
                            "auto",
                            "sitemap",
                            "links",
                            "manual_only",
                            "compliance_first"
                        ],
                        "type": "string",
                        "description": "Controls how URLs are selected. Compliance-first prioritizes legal, security, trust, status, contact, and support pages.",
                        "default": "auto"
                    },
                    "maxPages": {
                        "title": "Max pages",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of pages to capture.",
                        "default": 25
                    },
                    "crawlDepth": {
                        "title": "Crawl depth",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Maximum link depth from the start URL.",
                        "default": 2
                    },
                    "sameDomainOnly": {
                        "title": "Same domain only",
                        "type": "boolean",
                        "description": "Only crawl URLs on the start URL hostname.",
                        "default": true
                    },
                    "useSitemap": {
                        "title": "Use sitemap",
                        "type": "boolean",
                        "description": "Seed the crawler with URLs from sitemap.xml when available.",
                        "default": true
                    },
                    "urls": {
                        "title": "Manual URLs",
                        "type": "array",
                        "description": "Optional explicit URLs to capture in addition to the start URL. These bypass include URL patterns but still respect same-domain, asset, and robots filters.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "respectRobotsTxt": {
                        "title": "Respect robots.txt",
                        "type": "boolean",
                        "description": "Read robots.txt, use its sitemap declarations, and skip disallowed URLs.",
                        "default": true
                    },
                    "maxSitemapUrls": {
                        "title": "Max sitemap URLs",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Maximum URLs to collect from sitemap files before applying max page limits.",
                        "default": 5000
                    },
                    "includeUrlPatterns": {
                        "title": "Include URL patterns",
                        "type": "array",
                        "description": "Optional path or URL fragments that URLs must match.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "excludeUrlPatterns": {
                        "title": "Exclude URL patterns",
                        "type": "array",
                        "description": "Optional path or URL fragments to skip.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "/cart",
                            "/checkout",
                            "/account",
                            "/wp-admin"
                        ]
                    },
                    "includeScreenshots": {
                        "title": "Include screenshots",
                        "type": "boolean",
                        "description": "Capture desktop full-page screenshots.",
                        "default": true
                    },
                    "includeMobileScreenshots": {
                        "title": "Include mobile screenshots",
                        "type": "boolean",
                        "description": "Capture an additional mobile full-page screenshot.",
                        "default": false
                    },
                    "includeLightModeScreenshots": {
                        "title": "Include light mode screenshots",
                        "type": "boolean",
                        "description": "Capture additional screenshots after forcing the page to light color scheme.",
                        "default": false
                    },
                    "includeDarkModeScreenshots": {
                        "title": "Include dark mode screenshots",
                        "type": "boolean",
                        "description": "Capture additional screenshots after forcing the page to dark color scheme.",
                        "default": false
                    },
                    "screenshotFullPage": {
                        "title": "Full-page screenshots",
                        "type": "boolean",
                        "description": "Capture full-page screenshots. Disable to capture only the visible viewport.",
                        "default": true
                    },
                    "includeScreenshotThumbnails": {
                        "title": "Include screenshot thumbnails",
                        "type": "boolean",
                        "description": "Create viewport thumbnail images for each captured screenshot variant.",
                        "default": false
                    },
                    "includeHtml": {
                        "title": "Include HTML",
                        "type": "boolean",
                        "description": "Save rendered page HTML files.",
                        "default": false
                    },
                    "includeMarkdown": {
                        "title": "Include Markdown",
                        "type": "boolean",
                        "description": "Extract readable page content and save it as Markdown.",
                        "default": true
                    },
                    "includePdf": {
                        "title": "Include PDF",
                        "type": "boolean",
                        "description": "Capture each page as a PDF when supported.",
                        "default": false
                    },
                    "includeMetadata": {
                        "title": "Include metadata",
                        "type": "boolean",
                        "description": "Extract titles, descriptions, headings, links, CTAs, hashes, and page type.",
                        "default": true
                    },
                    "includeRagChunks": {
                        "title": "Include RAG chunks",
                        "type": "boolean",
                        "description": "Create simple AI-ready text chunks from Markdown.",
                        "default": false
                    },
                    "enableAiAnalysis": {
                        "title": "Enable AI analysis",
                        "type": "boolean",
                        "description": "Run optional AI-style page analysis tasks such as webpage summaries and CTA highlighting.",
                        "default": false
                    },
                    "aiProvider": {
                        "title": "AI provider",
                        "enum": [
                            "heuristic",
                            "openai"
                        ],
                        "type": "string",
                        "description": "Choose heuristic local analysis or OpenAI Responses API analysis.",
                        "default": "heuristic"
                    },
                    "aiTasks": {
                        "title": "AI tasks",
                        "type": "array",
                        "description": "AI tasks to run. Supported values: summarize_page, highlight_cta.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "aiPrompt": {
                        "title": "AI prompt",
                        "type": "string",
                        "description": "Optional natural-language prompt, for example: Highlight the CTA, or Summarize this webpage."
                    },
                    "aiModel": {
                        "title": "OpenAI model",
                        "type": "string",
                        "description": "OpenAI model used when AI provider is OpenAI.",
                        "default": "gpt-5.5"
                    },
                    "openaiApiKey": {
                        "title": "OpenAI API key",
                        "type": "string",
                        "description": "Optional OpenAI API key. If omitted, the Actor uses the OPENAI_API_KEY environment variable."
                    },
                    "aiMaxInputChars": {
                        "title": "AI max input characters",
                        "minimum": 1000,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Maximum page text characters sent to the AI provider per page.",
                        "default": 12000
                    },
                    "removeCookieBanners": {
                        "title": "Remove cookie banners",
                        "type": "boolean",
                        "description": "Attempt to accept, reject, close, or remove common cookie consent overlays before capture.",
                        "default": true
                    },
                    "removePopups": {
                        "title": "Remove popups",
                        "type": "boolean",
                        "description": "Attempt to close or remove common modal, popup, newsletter, and overlay elements before capture.",
                        "default": true
                    },
                    "detectBrokenLinks": {
                        "title": "Detect broken links",
                        "type": "boolean",
                        "description": "Check links found on captured pages and report failed or HTTP 4xx/5xx links.",
                        "default": false
                    },
                    "checkExternalLinks": {
                        "title": "Check external links",
                        "type": "boolean",
                        "description": "When broken-link detection is enabled, also check outbound external links.",
                        "default": false
                    },
                    "maxLinksToCheckPerPage": {
                        "title": "Max links to check per page",
                        "minimum": 0,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Caps broken-link checks per captured page.",
                        "default": 50
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Requested maximum pages to crawl at the same time. The resource profile controls how strictly this is capped.",
                        "default": 1
                    },
                    "resourceProfile": {
                        "title": "Resource profile",
                        "enum": [
                            "safe",
                            "speed",
                            "manual"
                        ],
                        "type": "string",
                        "description": "Controls how aggressively the Actor manages memory and concurrency. Safe caps heavy runs conservatively, speed allows more concurrency, and manual honors maxConcurrency with warnings.",
                        "default": "safe"
                    },
                    "assetLoading": {
                        "title": "Asset loading",
                        "enum": [
                            "auto",
                            "full",
                            "block_heavy"
                        ],
                        "type": "string",
                        "description": "Controls image, media, and font requests. Auto blocks heavy assets only for text-only runs, full loads all assets, and block heavy blocks them even if screenshots are enabled.",
                        "default": "auto"
                    },
                    "includeZipArchive": {
                        "title": "Include ZIP archive",
                        "type": "boolean",
                        "description": "Create a ZIP archive containing generated screenshots, Markdown, JSON, CSV, and summary files.",
                        "default": false
                    },
                    "enableChangeDetection": {
                        "title": "Enable change detection",
                        "type": "boolean",
                        "description": "Compare this run against a previous snapshot provided as JSON input or URL.",
                        "default": false
                    },
                    "previousSnapshot": {
                        "title": "Previous snapshot JSON",
                        "type": "object",
                        "description": "Previous dataset export or object containing pages/items/capturedPages for hash-based comparison."
                    },
                    "previousSnapshotUrl": {
                        "title": "Previous snapshot URL",
                        "type": "string",
                        "description": "Optional URL returning previous snapshot JSON for hash-based comparison."
                    },
                    "webhookUrl": {
                        "title": "Webhook URL",
                        "type": "string",
                        "description": "Optional endpoint that receives a POST when the snapshot completes."
                    },
                    "enableVisualDiff": {
                        "title": "Enable visual diff",
                        "type": "boolean",
                        "description": "Compare current desktop screenshots against previous snapshot screenshot URLs.",
                        "default": false
                    },
                    "visualDiffThreshold": {
                        "title": "Visual diff threshold",
                        "minimum": 0,
                        "maximum": 1,
                        "type": "number",
                        "description": "Pixelmatch threshold from 0 to 1. Lower values are more sensitive.",
                        "default": 0.1
                    },
                    "includeAuditReport": {
                        "title": "Include audit PDF report",
                        "type": "boolean",
                        "description": "Generate audit-report.html and audit-report.pdf summary files.",
                        "default": false
                    },
                    "detectCompliancePages": {
                        "title": "Detect compliance pages",
                        "type": "boolean",
                        "description": "Classify privacy, legal, security, trust, and related pages.",
                        "default": true
                    },
                    "detectMissingPages": {
                        "title": "Detect missing recommended pages",
                        "type": "boolean",
                        "description": "Create a missing-page checklist in compliance evidence mode.",
                        "default": true
                    },
                    "waitUntil": {
                        "title": "Wait until",
                        "enum": [
                            "load",
                            "domcontentloaded",
                            "networkidle"
                        ],
                        "type": "string",
                        "description": "Page load state to wait for before capture.",
                        "default": "networkidle"
                    },
                    "advanced": {
                        "title": "Advanced options",
                        "type": "object",
                        "description": "Optional lower-level overrides for intent presets, such as includePdf, includeScreenshots, waitUntil, resourceProfile, assetLoading, maxConcurrency, enableVisualDiff, and enableChangeDetection."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
