{
  "openapi": "3.0.1",
  "info": {
    "title": "Web Scraper API – Any URL, Anti-Bot Proxy, JS Render & AI",
    "description": "Free web scraper API for any website. Rotating anti-bot proxies in 220+ countries, JavaScript rendering, browser actions, screenshots, sticky sessions, CSS + AI extraction, plus ready-made Amazon, Google, YouTube & ChatGPT scrapers. Clean HTML, LLM-ready Markdown & structured JSON.",
    "version": "1.0",
    "x-build-id": "UYOEd1jX8fuwOMWfm"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fayoussef~universal-scraper-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fayoussef-universal-scraper-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/fayoussef~universal-scraper-api/runs": {
      "post": {
        "operationId": "runs-sync-fayoussef-universal-scraper-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/fayoussef~universal-scraper-api/run-sync": {
      "post": {
        "operationId": "run-sync-fayoussef-universal-scraper-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",
        "required": [
          "apiKey",
          "startUrls"
        ],
        "properties": {
          "apiKey": {
            "title": "Scraper API Token",
            "type": "string",
            "description": "Your personal Scraper API token — the underlying scraping requests are billed to your own scrape.do account (this Actor itself is free). 👉 Don't have one? **[Create a free account and get 1,000 free monthly credits](https://scrape.do/?fpr=automationbyexperts)** — no credit card required. Paste your token from the dashboard once you sign up."
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "List of URLs to scrape. Each URL is fetched through the Scraper API and pushed to the dataset as a structured record. Works on famous, heavily-protected sites — **Amazon, eBay, Walmart, Google, Google Maps, LinkedIn, Instagram, TikTok, Zillow, Yelp, Booking.com, Indeed, Crunchbase, Idealista** and thousands more. The defaults below are live Amazon and eBay search pages — swap in any product, search, profile, category, or listing URL you need. Tip: keep **Render JavaScript** ON for JS-heavy / protected sites.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "scraperApi": {
            "title": "Ready-made structured scraper",
            "enum": [
              "",
              "amazon-product",
              "amazon-search",
              "amazon-offers",
              "google-search",
              "google-maps",
              "google-shopping",
              "google-news",
              "youtube",
              "chatgpt"
            ],
            "type": "string",
            "description": "Optionally switch to one of scrape.do's **Ready APIs** — dedicated endpoints that return clean, already-parsed JSON for a specific target instead of raw HTML. When set, the Actor scrapes the entries in **Ready API inputs** below (not Start URLs). Leave on \"Off\" for normal URL scraping. Note: Ready APIs run one-at-a-time per token and cost more credits per call (Google/YouTube ≈ 10, ChatGPT ≈ 25).",
            "default": ""
          },
          "scraperApiQueries": {
            "title": "Ready API inputs",
            "type": "array",
            "description": "The inputs to run through the selected **Ready-made structured scraper** — one per line. What each line should contain depends on the mode: a product URL/ASIN (Amazon product/offers), a keyword or query (Amazon/Google/YouTube search), or a prompt (ChatGPT). Ignored when the mode is \"Off\".",
            "items": {
              "type": "string"
            }
          },
          "readyApiLanguage": {
            "title": "Ready API language",
            "type": "string",
            "description": "Interface / results language for the Ready API (ISO 639-1, e.g. `en`, `es`, `de`). Maps to `language` for Amazon and `hl` for Google/YouTube. Leave empty for the provider default. Ignored by ChatGPT."
          },
          "amazonZipcode": {
            "title": "Amazon ZIP / postal code",
            "type": "string",
            "description": "Amazon-only: a ZIP / postal code to get location-specific pricing, availability and delivery (Amazon Ready API `zipcode`, e.g. `90210`). Ignored by other modes."
          },
          "render": {
            "title": "Render JavaScript",
            "type": "boolean",
            "description": "Enable a real headless browser to execute JavaScript before returning HTML. Turn ON for SPAs / dynamic sites (React, Vue, Angular) and protected stores like Amazon, eBay, Walmart. ON by default so the example URLs work out of the box. If the render backend fails for a URL, the Actor automatically retries that URL once without rendering (many pages, e.g. Amazon search, are server-rendered and load fine). Costs more API credits per request — turn OFF for simple static pages to save credits.",
            "default": true
          },
          "geoCode": {
            "title": "Geo-targeting location",
            "enum": [
              "",
              "af",
              "al",
              "dz",
              "as",
              "ad",
              "ao",
              "ai",
              "ag",
              "ar",
              "am",
              "aw",
              "au",
              "at",
              "az",
              "bs",
              "bh",
              "bd",
              "bb",
              "by",
              "be",
              "bz",
              "bj",
              "bm",
              "bt",
              "bo",
              "ba",
              "bw",
              "br",
              "io",
              "vg",
              "bn",
              "bg",
              "bf",
              "bi",
              "kh",
              "cm",
              "ca",
              "cv",
              "ky",
              "cf",
              "td",
              "cl",
              "cn",
              "co",
              "km",
              "cg",
              "cd",
              "cr",
              "hr",
              "cu",
              "cw",
              "cy",
              "cz",
              "ci",
              "dk",
              "dj",
              "dm",
              "do",
              "ec",
              "eg",
              "sv",
              "gq",
              "er",
              "ee",
              "sz",
              "et",
              "fj",
              "fi",
              "fr",
              "gf",
              "pf",
              "ga",
              "gm",
              "ge",
              "de",
              "gh",
              "gi",
              "gr",
              "gl",
              "gd",
              "gp",
              "gu",
              "gt",
              "gg",
              "gn",
              "gw",
              "gy",
              "ht",
              "hn",
              "hk",
              "hu",
              "is",
              "in",
              "id",
              "ir",
              "iq",
              "ie",
              "im",
              "il",
              "it",
              "jm",
              "jp",
              "je",
              "jo",
              "kz",
              "ke",
              "ki",
              "kw",
              "kg",
              "la",
              "lv",
              "lb",
              "ls",
              "lr",
              "ly",
              "li",
              "lt",
              "lu",
              "mo",
              "mg",
              "mw",
              "my",
              "mv",
              "ml",
              "mt",
              "mh",
              "mq",
              "mr",
              "mu",
              "yt",
              "mx",
              "fm",
              "md",
              "mc",
              "mn",
              "me",
              "ms",
              "ma",
              "mz",
              "mm",
              "na",
              "nr",
              "np",
              "nl",
              "nc",
              "nz",
              "ni",
              "ne",
              "ng",
              "mk",
              "no",
              "om",
              "pk",
              "pw",
              "ps",
              "pa",
              "pg",
              "py",
              "pe",
              "ph",
              "pl",
              "pt",
              "pr",
              "qa",
              "ro",
              "ru",
              "rw",
              "re",
              "bl",
              "kn",
              "lc",
              "mf",
              "vc",
              "ws",
              "sm",
              "sa",
              "sn",
              "rs",
              "sc",
              "sl",
              "sg",
              "sx",
              "sk",
              "si",
              "sb",
              "so",
              "za",
              "kr",
              "ss",
              "es",
              "lk",
              "sd",
              "sr",
              "se",
              "ch",
              "sy",
              "st",
              "tw",
              "tj",
              "tz",
              "th",
              "tl",
              "tg",
              "to",
              "tt",
              "tn",
              "tm",
              "tc",
              "tv",
              "tr",
              "vi",
              "ug",
              "ua",
              "ae",
              "gb",
              "us",
              "uy",
              "uz",
              "vu",
              "va",
              "ve",
              "vn",
              "ye",
              "zm",
              "zw",
              "ax"
            ],
            "type": "string",
            "description": "Route the request through a proxy located in the selected country. Choose \"Worldwide\" for automatic selection.",
            "default": ""
          },
          "regionalGeoCode": {
            "title": "Geo-targeting continent",
            "enum": [
              "",
              "europe",
              "asia",
              "africa",
              "oceania",
              "northamerica",
              "southamerica"
            ],
            "type": "string",
            "description": "Route the request through a proxy located on the selected continent. A broader alternative to a specific country — leave on \"Any\" if you set a country above.",
            "default": ""
          },
          "superProxy": {
            "title": "Use residential / premium proxy",
            "type": "boolean",
            "description": "Route requests through the residential & mobile proxy pool (scrape.do `super`). Best for heavily protected targets like LinkedIn, Instagram, TikTok or Zillow. Costs more credits per request.",
            "default": false
          },
          "device": {
            "title": "Device profile",
            "enum": [
              "desktop",
              "mobile",
              "tablet"
            ],
            "type": "string",
            "description": "Which device the request should imitate — desktop, mobile, or tablet. Changes the User-Agent and viewport the target site sees. Useful for scraping mobile layouts.",
            "default": "desktop"
          },
          "sessionId": {
            "title": "Sticky session ID",
            "type": "string",
            "description": "Reuse the same exit IP across all requests that share this ID (scrape.do `sessionId`), for up to 5 minutes. Set any value (e.g. \"session-1\") when a target needs a stable IP across a multi-page flow such as login → listing. Leave empty to rotate IPs on every request."
          },
          "setCookies": {
            "title": "Cookies",
            "type": "string",
            "description": "Cookies to send to the target site, as a single `name=value; name2=value2` string (scrape.do `setCookies`). Handy for scraping pages behind a cookie consent or a logged-in session."
          },
          "disableRedirection": {
            "title": "Disable redirects",
            "type": "boolean",
            "description": "Return the first response without following 3xx redirects (scrape.do `disableRedirection`). Leave OFF for normal scraping.",
            "default": false
          },
          "forwardHeaders": {
            "title": "Forward my custom headers",
            "type": "boolean",
            "description": "Forward the headers you set in **Custom request headers** (Advanced) straight to the target site (scrape.do `forwardHeaders`) instead of letting the proxy manage them. Turn ON when a site needs a specific Authorization / Referer / Accept-Language you control.",
            "default": false
          },
          "extractRules": {
            "title": "Structured extraction rules (CSS)",
            "type": "object",
            "description": "Optional mapping of field name → CSS selector. For every record the Actor returns the text of the first element matching each selector under `extractedFields`. The default below pulls the price from Amazon product pages (`.a-price .a-offscreen`). Examples — Amazon product: {\"title\": \"#productTitle\", \"price\": \".a-price .a-offscreen\"}; eBay listing: {\"title\": \"h1.x-item-title__mainTitle\", \"price\": \".x-price-primary\"}."
          },
          "waitUntil": {
            "title": "Wait until (page load event)",
            "enum": [
              "",
              "domcontentloaded",
              "load",
              "networkidle0",
              "networkidle2"
            ],
            "type": "string",
            "description": "When the headless browser considers the page 'loaded' before returning HTML (scrape.do `waitUntil`). `domcontentloaded` is fastest; `networkidle0` waits for all network activity to settle (best for heavy SPAs). Only applies when **Render JavaScript** is ON.",
            "default": ""
          },
          "customWait": {
            "title": "Extra wait after load (ms)",
            "minimum": 0,
            "maximum": 35000,
            "type": "integer",
            "description": "Extra milliseconds to wait after the page loads before capturing it (scrape.do `customWait`) — lets late, JS-injected content (prices, reviews, lazy lists) settle. Only applies when **Render JavaScript** is ON.",
            "default": 0
          },
          "waitSelector": {
            "title": "Wait for CSS selector",
            "type": "string",
            "description": "Wait until this CSS selector appears in the DOM before returning (scrape.do `waitSelector`) — the most reliable way to ensure a specific element (e.g. `.product-price`) has rendered. Only applies when **Render JavaScript** is ON."
          },
          "blockResources": {
            "title": "Block images / CSS / fonts (faster)",
            "type": "boolean",
            "description": "Block images, CSS and fonts while rendering to load pages faster and cheaper (scrape.do `blockResources`, ON by default). Turn OFF if a site only works with assets loaded, or when taking screenshots you want fully styled. Only applies when **Render JavaScript** is ON.",
            "default": true
          },
          "viewportWidth": {
            "title": "Viewport width (px)",
            "minimum": 100,
            "maximum": 3840,
            "type": "integer",
            "description": "Browser viewport width in pixels while rendering (scrape.do `width`). Leave empty for the provider default (1920). Only applies when **Render JavaScript** is ON."
          },
          "viewportHeight": {
            "title": "Viewport height (px)",
            "minimum": 100,
            "maximum": 3840,
            "type": "integer",
            "description": "Browser viewport height in pixels while rendering (scrape.do `height`). Leave empty for the provider default (1080). Only applies when **Render JavaScript** is ON."
          },
          "playWithBrowser": {
            "title": "Browser actions (click, scroll, type, wait, JS)",
            "type": "array",
            "description": "Automate the headless browser before the page is captured (scrape.do `playWithBrowser`). A list of action steps run in order — click buttons, scroll infinite feeds, fill inputs, wait for elements, or execute JavaScript. Enabling this forces JavaScript rendering ON. Supported actions: `Click` (+`Selector`), `Wait` (+`Timeout` ms), `WaitSelector` (+`WaitSelector`,`Timeout`), `ScrollX`/`ScrollY` (+`Value`), `ScrollTo` (+`Selector`), `Fill` (+`Selector`,`Value`), `Execute` (+`Execute` JS). Leave empty unless you need interactions. Example — scroll an infinite feed, wait, then click 'load more': `[{\"Action\":\"ScrollY\",\"Value\":3000},{\"Action\":\"Wait\",\"Timeout\":2000},{\"Action\":\"Click\",\"Selector\":\"#load-more\"}]`"
          },
          "screenShot": {
            "title": "📸 Capture viewport screenshot",
            "type": "boolean",
            "description": "Return a screenshot of the visible viewport instead of HTML (scrape.do `screenShot`). The image is saved to the run's key-value store and the record gets `screenshotUrl` + `screenshotKey`. Forces JavaScript rendering ON.",
            "default": false
          },
          "fullScreenShot": {
            "title": "📸 Capture full-page screenshot",
            "type": "boolean",
            "description": "Return a full-page screenshot (the entire scrollable page, not just the viewport — scrape.do `fullScreenShot`). Saved to the key-value store with `screenshotUrl` + `screenshotKey`. Wins over the viewport screenshot if both are on. Forces JavaScript rendering ON.",
            "default": false
          },
          "llmEnabled": {
            "title": "🤖 Enable LLM processing",
            "type": "boolean",
            "description": "After scraping each page, run an LLM over its content (summarize, classify, or extract structured data with your own prompt). Powered by OpenRouter. Leave OFF to skip LLM processing entirely.",
            "default": false
          },
          "llmModel": {
            "title": "LLM model (cheapest → most capable)",
            "enum": [
              "anthropic/claude-opus-4.8-fast",
              "anthropic/claude-opus-4.8",
              "anthropic/claude-opus-4.7-fast",
              "anthropic/claude-opus-4.7",
              "anthropic/claude-sonnet-4.6",
              "anthropic/claude-opus-4.6",
              "anthropic/claude-opus-4.5",
              "anthropic/claude-haiku-4.5",
              "anthropic/claude-sonnet-4.5",
              "anthropic/claude-opus-4.1",
              "anthropic/claude-opus-4",
              "anthropic/claude-sonnet-4",
              "anthropic/claude-3-haiku",
              "anthropic/claude-fable-5",
              "google/gemini-3.1-flash-image",
              "google/gemini-3-pro-image",
              "google/gemini-3.5-flash",
              "google/gemini-3.1-flash-lite",
              "google/gemini-3.1-flash-lite-preview",
              "google/gemini-3.1-flash-image-preview",
              "google/gemini-3.1-pro-preview-customtools",
              "google/gemini-3.1-pro-preview",
              "google/gemini-3-flash-preview",
              "google/gemini-3-pro-image-preview",
              "google/gemini-2.5-flash-image",
              "google/gemini-2.5-flash-lite-preview-09-2025",
              "google/gemini-2.5-flash-lite",
              "google/gemini-2.5-flash",
              "google/gemini-2.5-pro",
              "google/gemini-2.5-pro-preview",
              "google/gemini-2.5-pro-preview-05-06",
              "google/gemma-4-26b-a4b-it",
              "google/gemma-4-31b-it",
              "google/lyria-3-pro-preview",
              "google/lyria-3-clip-preview",
              "google/gemma-3n-e4b-it",
              "google/gemma-3-4b-it",
              "google/gemma-3-12b-it",
              "google/gemma-3-27b-it",
              "google/gemma-2-27b-it",
              "google/gemma-4-26b-a4b-it:free",
              "google/gemma-4-31b-it:free",
              "openai/gpt-5.5-pro",
              "openai/gpt-5.5",
              "openai/gpt-5.4-image-2",
              "openai/gpt-5.4-nano",
              "openai/gpt-5.4-mini",
              "openai/gpt-5.4-pro",
              "openai/gpt-5.4",
              "openai/gpt-5.3-chat",
              "openai/gpt-5.3-codex",
              "openai/gpt-5.2-codex",
              "openai/gpt-5.2-chat",
              "openai/gpt-5.2-pro",
              "openai/gpt-5.2",
              "openai/gpt-5.1-codex-max",
              "openai/gpt-5.1",
              "openai/gpt-5.1-chat",
              "openai/gpt-5.1-codex",
              "openai/gpt-5.1-codex-mini",
              "openai/gpt-5-image-mini",
              "openai/gpt-5-image",
              "openai/o3-deep-research",
              "openai/o4-mini-deep-research",
              "openai/gpt-5-pro",
              "openai/gpt-5-codex",
              "openai/gpt-5-chat",
              "openai/gpt-5",
              "openai/gpt-5-mini",
              "openai/gpt-5-nano",
              "openai/o3-pro",
              "openai/o4-mini-high",
              "openai/o3",
              "openai/o4-mini",
              "openai/gpt-4.1",
              "openai/gpt-4.1-mini",
              "openai/gpt-4.1-nano",
              "openai/gpt-4o-mini-search-preview",
              "openai/gpt-4o-search-preview",
              "openai/o3-mini-high",
              "openai/o3-mini",
              "openai/gpt-4o-2024-11-20",
              "openai/gpt-4o-2024-08-06",
              "openai/gpt-4o-mini",
              "openai/gpt-4o-mini-2024-07-18",
              "openai/gpt-4o",
              "openai/gpt-4o-2024-05-13",
              "openai/gpt-4-turbo",
              "openai/gpt-4-turbo-preview",
              "openai/gpt-4",
              "openai/gpt-chat-latest",
              "openai/gpt-audio",
              "openai/gpt-audio-mini",
              "openai/gpt-oss-safeguard-20b",
              "openai/gpt-oss-120b",
              "openai/gpt-oss-20b",
              "openai/o1-pro",
              "openai/o1",
              "openai/gpt-3.5-turbo-0613",
              "openai/gpt-3.5-turbo-instruct",
              "openai/gpt-3.5-turbo-16k",
              "openai/gpt-3.5-turbo",
              "openai/gpt-oss-120b:free",
              "openai/gpt-oss-20b:free",
              "deepseek/deepseek-v3.2",
              "deepseek/deepseek-v3.2-exp",
              "deepseek/deepseek-v3.1-terminus",
              "deepseek/deepseek-chat-v3.1",
              "deepseek/deepseek-r1-0528",
              "deepseek/deepseek-chat-v3-0324",
              "deepseek/deepseek-r1-distill-llama-70b",
              "deepseek/deepseek-r1",
              "deepseek/deepseek-chat",
              "deepseek/deepseek-v4-pro",
              "deepseek/deepseek-v4-flash",
              "x-ai/grok-4.3",
              "x-ai/grok-4.20-multi-agent",
              "x-ai/grok-4.20",
              "x-ai/grok-build-0.1",
              "meta-llama/llama-4-maverick",
              "meta-llama/llama-4-scout",
              "meta-llama/llama-guard-4-12b",
              "meta-llama/llama-3.3-70b-instruct",
              "meta-llama/llama-3.2-11b-vision-instruct",
              "meta-llama/llama-3.2-1b-instruct",
              "meta-llama/llama-3.2-3b-instruct",
              "meta-llama/llama-3.1-70b-instruct",
              "meta-llama/llama-3.1-8b-instruct",
              "meta-llama/llama-3-8b-instruct",
              "meta-llama/llama-3.3-70b-instruct:free",
              "meta-llama/llama-3.2-3b-instruct:free",
              "qwen/qwen3.7-plus",
              "qwen/qwen3.7-max",
              "qwen/qwen3.5-plus-20260420",
              "qwen/qwen3.6-flash",
              "qwen/qwen3.6-35b-a3b",
              "qwen/qwen3.6-max-preview",
              "qwen/qwen3.6-27b",
              "qwen/qwen3.6-plus",
              "qwen/qwen3.5-9b",
              "qwen/qwen3.5-35b-a3b",
              "qwen/qwen3.5-27b",
              "qwen/qwen3.5-122b-a10b",
              "qwen/qwen3.5-flash-02-23",
              "qwen/qwen3.5-plus-02-15",
              "qwen/qwen3.5-397b-a17b",
              "qwen/qwen3-max-thinking",
              "qwen/qwen3-coder-next",
              "qwen/qwen3-vl-32b-instruct",
              "qwen/qwen3-vl-8b-thinking",
              "qwen/qwen3-vl-8b-instruct",
              "qwen/qwen3-vl-30b-a3b-thinking",
              "qwen/qwen3-vl-30b-a3b-instruct",
              "qwen/qwen3-vl-235b-a22b-thinking",
              "qwen/qwen3-vl-235b-a22b-instruct",
              "qwen/qwen3-max",
              "qwen/qwen3-coder-plus",
              "qwen/qwen3-coder-flash",
              "qwen/qwen3-next-80b-a3b-thinking",
              "qwen/qwen3-next-80b-a3b-instruct",
              "qwen/qwen3-30b-a3b-thinking-2507",
              "qwen/qwen3-coder-30b-a3b-instruct",
              "qwen/qwen3-30b-a3b-instruct-2507",
              "qwen/qwen3-235b-a22b-thinking-2507",
              "qwen/qwen3-coder",
              "qwen/qwen3-235b-a22b-2507",
              "qwen/qwen3-30b-a3b",
              "qwen/qwen3-8b",
              "qwen/qwen3-14b",
              "qwen/qwen3-32b",
              "qwen/qwen3-235b-a22b",
              "qwen/qwen-2.5-coder-32b-instruct",
              "qwen/qwen-2.5-7b-instruct",
              "qwen/qwen-2.5-72b-instruct",
              "qwen/qwen3-next-80b-a3b-instruct:free",
              "qwen/qwen3-coder:free",
              "qwen/qwen-plus-2025-07-28",
              "qwen/qwen-plus-2025-07-28:thinking",
              "qwen/qwen2.5-vl-72b-instruct",
              "qwen/qwen-plus",
              "mistralai/mistral-medium-3-5",
              "mistralai/mistral-small-2603",
              "mistralai/mistral-large-2512",
              "mistralai/mistral-medium-3.1",
              "mistralai/mistral-small-3.2-24b-instruct",
              "mistralai/mistral-medium-3",
              "mistralai/mistral-small-3.1-24b-instruct",
              "mistralai/mistral-small-24b-instruct-2501",
              "mistralai/mistral-large-2407",
              "mistralai/mistral-large",
              "mistralai/devstral-2512",
              "mistralai/ministral-14b-2512",
              "mistralai/ministral-8b-2512",
              "mistralai/ministral-3b-2512",
              "mistralai/voxtral-small-24b-2507",
              "mistralai/codestral-2508",
              "mistralai/mistral-saba",
              "mistralai/mistral-nemo",
              "mistralai/mixtral-8x22b-instruct",
              "moonshotai/kimi-k2.7-code",
              "moonshotai/kimi-k2.6",
              "moonshotai/kimi-k2.5",
              "moonshotai/kimi-k2-thinking",
              "moonshotai/kimi-k2-0905",
              "moonshotai/kimi-k2",
              "z-ai/glm-5.2",
              "z-ai/glm-5.1",
              "z-ai/glm-5v-turbo",
              "z-ai/glm-5-turbo",
              "z-ai/glm-5",
              "z-ai/glm-4.7-flash",
              "z-ai/glm-4.7",
              "z-ai/glm-4.6v",
              "z-ai/glm-4.6",
              "z-ai/glm-4.5v",
              "z-ai/glm-4.5",
              "z-ai/glm-4.5-air",
              "perplexity/sonar-pro-search",
              "perplexity/sonar-reasoning-pro",
              "perplexity/sonar-pro",
              "perplexity/sonar-deep-research",
              "perplexity/sonar",
              "cohere/command-a",
              "cohere/command-r7b-12-2024",
              "cohere/command-r-08-2024",
              "cohere/command-r-plus-08-2024",
              "cohere/north-mini-code:free",
              "amazon/nova-2-lite-v1",
              "amazon/nova-premier-v1",
              "amazon/nova-lite-v1",
              "amazon/nova-micro-v1",
              "amazon/nova-pro-v1",
              "nvidia/nemotron-3-ultra-550b-a55b",
              "nvidia/nemotron-3-super-120b-a12b",
              "nvidia/nemotron-3-nano-30b-a3b",
              "nvidia/llama-3.3-nemotron-super-49b-v1.5",
              "nvidia/nemotron-3.5-content-safety:free",
              "nvidia/nemotron-3-ultra-550b-a55b:free",
              "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free",
              "nvidia/nemotron-3-super-120b-a12b:free",
              "nvidia/nemotron-3-nano-30b-a3b:free",
              "nvidia/nemotron-nano-12b-v2-vl:free",
              "nvidia/nemotron-nano-9b-v2:free",
              "minimax/minimax-m3",
              "minimax/minimax-m2.7",
              "minimax/minimax-m2.5",
              "minimax/minimax-m2-her",
              "minimax/minimax-m2.1",
              "minimax/minimax-m2",
              "minimax/minimax-m1",
              "minimax/minimax-01",
              "ai21/jamba-large-1.7",
              "aion-labs/aion-2.0",
              "aion-labs/aion-1.0",
              "aion-labs/aion-1.0-mini",
              "aion-labs/aion-rp-llama-3.1-8b",
              "allenai/olmo-3-32b-think",
              "anthracite-org/magnum-v4-72b",
              "arcee-ai/trinity-large-thinking",
              "arcee-ai/trinity-mini",
              "arcee-ai/virtuoso-large",
              "arcee-ai/coder-large",
              "baidu/ernie-4.5-vl-424b-a47b",
              "bytedance/ui-tars-1.5-7b",
              "bytedance-seed/seed-2.0-lite",
              "bytedance-seed/seed-2.0-mini",
              "bytedance-seed/seed-1.6-flash",
              "bytedance-seed/seed-1.6",
              "cognitivecomputations/dolphin-mistral-24b-venice-edition:free",
              "deepcogito/cogito-v2.1-671b",
              "gryphe/mythomax-l2-13b",
              "ibm-granite/granite-4.1-8b",
              "ibm-granite/granite-4.0-h-micro",
              "inception/mercury-2",
              "inclusionai/ring-2.6-1t",
              "inclusionai/ling-2.6-1t",
              "inclusionai/ling-2.6-flash",
              "inflection/inflection-3-pi",
              "inflection/inflection-3-productivity",
              "kwaipilot/kat-coder-pro-v2",
              "liquid/lfm-2-24b-a2b",
              "liquid/lfm-2.5-1.2b-thinking:free",
              "liquid/lfm-2.5-1.2b-instruct:free",
              "mancer/weaver",
              "microsoft/phi-4-mini-instruct",
              "microsoft/phi-4",
              "microsoft/wizardlm-2-8x22b",
              "morph/morph-v3-large",
              "morph/morph-v3-fast",
              "nex-agi/nex-n2-pro",
              "nousresearch/hermes-4-70b",
              "nousresearch/hermes-4-405b",
              "nousresearch/hermes-3-llama-3.1-70b",
              "nousresearch/hermes-3-llama-3.1-405b",
              "nousresearch/hermes-3-llama-3.1-405b:free",
              "openrouter/fusion",
              "openrouter/owl-alpha",
              "openrouter/pareto-code",
              "openrouter/free",
              "openrouter/bodybuilder",
              "openrouter/auto",
              "perceptron/perceptron-mk1",
              "poolside/laguna-xs.2",
              "poolside/laguna-m.1",
              "poolside/laguna-xs.2:free",
              "poolside/laguna-m.1:free",
              "rekaai/reka-edge",
              "rekaai/reka-flash-3",
              "relace/relace-search",
              "relace/relace-apply-3",
              "sakana/fugu-ultra",
              "sao10k/l3.1-70b-hanami-x1",
              "sao10k/l3.3-euryale-70b",
              "sao10k/l3.1-euryale-70b",
              "sao10k/l3-lunaris-8b",
              "stepfun/step-3.7-flash",
              "stepfun/step-3.5-flash",
              "switchpoint/router",
              "tencent/hy3-preview",
              "tencent/hunyuan-a13b-instruct",
              "thedrummer/cydonia-24b-v4.1",
              "thedrummer/skyfall-36b-v2",
              "thedrummer/unslopnemo-12b",
              "thedrummer/rocinante-12b",
              "undi95/remm-slerp-l2-13b",
              "upstage/solar-pro-3",
              "writer/palmyra-x5",
              "xiaomi/mimo-v2.5-pro",
              "xiaomi/mimo-v2.5"
            ],
            "type": "string",
            "description": "OpenRouter model used to process each page, listed cheapest to most expensive. The flash / flash-lite models with 1M context are ideal for reading and extracting from long scraped pages at low cost. Need a model not listed here? Use \"Custom model slug\" below.",
            "default": "google/gemini-3.1-flash-lite"
          },
          "llmModelCustom": {
            "title": "Custom model slug (optional, overrides the dropdown)",
            "type": "string",
            "description": "Optional. Any OpenRouter model slug (e.g. \"anthropic/claude-opus-4.8\"). When set, this takes priority over the dropdown above — useful for models not in the list or newly released ones. See https://openrouter.ai/models for all slugs."
          },
          "llmPrompt": {
            "title": "LLM prompt / instruction",
            "type": "string",
            "description": "Instruction applied to each page's content. Examples: \"Summarize this page in 3 bullet points.\" or \"Extract the product name, price and availability.\" The scraped page text is appended automatically.",
            "default": "Summarize the key information on this page in 3-5 concise bullet points."
          },
          "llmJsonOutput": {
            "title": "Force JSON output",
            "type": "boolean",
            "description": "Ask the model to return a strict JSON object (sets response_format=json_object) and parse it into `llmResult`. Best paired with a prompt that describes the exact JSON fields you want.",
            "default": false
          },
          "llmMaxInputChars": {
            "title": "Max input characters sent to LLM",
            "minimum": 500,
            "maximum": 100000,
            "type": "integer",
            "description": "The page text is truncated to this many characters before being sent to the model, to control token cost. Increase for fuller context.",
            "default": 12000
          },
          "llmMaxTokens": {
            "title": "Max output tokens",
            "minimum": 1,
            "maximum": 16000,
            "type": "integer",
            "description": "Maximum number of tokens in the LLM response.",
            "default": 1024
          },
          "llmTemperature": {
            "title": "LLM temperature",
            "type": "string",
            "description": "Sampling temperature 0.0–2.0. Lower is more deterministic (good for extraction); higher is more creative. Leave empty for the model default."
          },
          "concurrencyPercentage": {
            "title": "Concurrency (% of your plan)",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How much of your plan's concurrent-request limit to use, as a percentage. The Actor reads your live plan limit from the API and scrapes with that percentage of your allowed concurrency. Example: a plan allowing 40 concurrent requests at 50% → 20 parallel requests. Default 100 = full speed (your entire plan limit).",
            "default": 100
          },
          "maxRetries": {
            "title": "Max retries per URL",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many times to retry a failing URL (on network errors, rate limits, or 5xx responses) with exponential backoff before giving up.",
            "default": 3
          },
          "requestTimeout": {
            "title": "Request timeout (seconds)",
            "minimum": 10,
            "maximum": 180,
            "type": "integer",
            "description": "Per-request timeout in seconds for the HTTP call to the Scraper API (client side).",
            "default": 60
          },
          "scrapeTimeout": {
            "title": "Scraper API timeout (ms)",
            "minimum": 5000,
            "maximum": 120000,
            "type": "integer",
            "description": "Max time the Scraper API itself will spend fetching/rendering a page before giving up (scrape.do `timeout`, milliseconds). Leave empty for the provider default (60000). Raise it for slow, render-heavy pages."
          },
          "customHeaders": {
            "title": "Custom request headers",
            "type": "object",
            "description": "Optional HTTP headers forwarded to the target site (e.g. a specific User-Agent or Accept-Language)."
          },
          "storeHtml": {
            "title": "Store raw HTML in dataset",
            "type": "boolean",
            "description": "Include the full raw HTML in each dataset record. Disable to keep datasets small when you only need cleaned text or extracted fields.",
            "default": true
          },
          "openRouterApiKey": {
            "title": "OpenRouter API key (optional)",
            "type": "string",
            "description": "Optional. Only used when LLM processing is enabled. Provide your own OpenRouter API key to be billed directly by OpenRouter at their rates. Leave EMPTY to use Apify's hosted OpenRouter (https://apify.com/apify/openrouter) and pay with your Apify credits instead — no extra signup needed. Get an OpenRouter key at https://openrouter.ai/keys."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}