{
  "data": {
    "id": "gPqkQf6syKae3DRXC",
    "actId": "svDKrzKCcdfn7GHRJ",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-10-17T06:40:36.934Z",
    "finishedAt": "2026-10-17T06:41:24.890Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 47877,
      "runTimeSecs": 47.877,
      "computeUnits": 0.05319666666666667,
      "imageSizeBytes": 3149613056
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"RAG Web Browser Input\",\n  \"description\": \"Search the web with a query, fetch specific URLs, or crawl a site — and get clean, RAG-ready content (Markdown, text, links, and optional chunks) with citation metadata.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"query\": {\n      \"title\": \"Search query (or one URL)\",\n      \"type\": \"string\",\n      \"description\": \"What to look up, or a single web page URL to read. Examples: `vector database comparison`, `https://en.wikipedia.org/wiki/Retrieval-augmented_generation`. When `startUrls` or `queries` are also set, everything is processed in one run.\",\n      \"editor\": \"textfield\",\n      \"default\": \"what is retrieval augmented generation\",\n      \"prefill\": \"what is retrieval augmented generation\"\n    },\n    \"queries\": {\n      \"title\": \"More search queries\",\n      \"type\": \"array\",\n      \"description\": \"Additional queries for batch research runs. Each query is searched and its top results are fetched. A query that is itself a URL is fetched directly.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"startUrls\": {\n      \"title\": \"Start URLs\",\n      \"type\": \"array\",\n      \"description\": \"Pages to read directly. With `maxCrawlDepth` above 0, the actor walks links found on these pages within the same website instead.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"searchEngine\": {\n      \"title\": \"Search engine\",\n      \"type\": \"string\",\n      \"description\": \"Which search engine to use. `Automatic` tries Google first and silently falls back to Bing, then DuckDuckGo when an engine is blocked — recommended.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"auto\",\n        \"google\",\n        \"bing\",\n        \"duckduckgo\"\n      ],\n      \"enumTitles\": [\n        \"Automatic (recommended)\",\n        \"Google\",\n        \"Bing\",\n        \"DuckDuckGo\"\n      ],\n      \"default\": \"auto\",\n      \"prefill\": \"auto\"\n    },\n    \"searchLanguage\": {\n      \"title\": \"Search language\",\n      \"type\": \"string\",\n      \"description\": \"Language for search results. `Automatic` lets each engine choose based on the query.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"auto\",\n        \"en\",\n        \"de\",\n        \"fr\",\n        \"es\",\n        \"it\",\n        \"pt\",\n        \"nl\",\n        \"sv\",\n        \"da\",\n        \"fi\",\n        \"no\",\n        \"pl\",\n        \"cs\",\n        \"sk\",\n        \"hu\",\n        \"ro\",\n        \"bg\",\n        \"el\",\n        \"tr\",\n        \"ru\",\n        \"uk\",\n        \"ar\",\n        \"he\",\n        \"fa\",\n        \"hi\",\n        \"id\",\n        \"ms\",\n        \"th\",\n        \"vi\",\n        \"ja\",\n        \"ko\",\n        \"zh\"\n      ],\n      \"enumTitles\": [\n        \"Automatic (match the query language)\",\n        \"English\",\n        \"German\",\n        \"French\",\n        \"Spanish\",\n        \"Italian\",\n        \"Portuguese\",\n        \"Dutch\",\n        \"Swedish\",\n        \"Danish\",\n        \"Finnish\",\n        \"Norwegian\",\n        \"Polish\",\n        \"Czech\",\n        \"Slovak\",\n        \"Hungarian\",\n        \"Romanian\",\n        \"Bulgarian\",\n        \"Greek\",\n        \"Turkish\",\n        \"Russian\",\n        \"Ukrainian\",\n        \"Arabic\",\n        \"Hebrew\",\n        \"Persian\",\n        \"Hindi\",\n        \"Indonesian\",\n        \"Malay\",\n        \"Thai\",\n        \"Vietnamese\",\n        \"Japanese\",\n        \"Korean\",\n        \"Chinese\"\n      ],\n      \"default\": \"auto\",\n      \"prefill\": \"auto\"\n    },\n    \"searchCountry\": {\n      \"title\": \"Search country\",\n      \"type\": \"string\",\n      \"description\": \"Country bias for search results. `Automatic` means no country bias.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"auto\",\n        \"ad\",\n        \"ae\",\n        \"af\",\n        \"ag\",\n        \"ai\",\n        \"al\",\n        \"am\",\n        \"ao\",\n        \"aq\",\n        \"ar\",\n        \"as\",\n        \"at\",\n        \"au\",\n        \"aw\",\n        \"ax\",\n        \"az\",\n        \"ba\",\n        \"bb\",\n        \"bd\",\n        \"be\",\n        \"bf\",\n        \"bg\",\n        \"bh\",\n        \"bi\",\n        \"bj\",\n        \"bl\",\n        \"bm\",\n        \"bn\",\n        \"bo\",\n        \"bq\",\n        \"br\",\n        \"bs\",\n        \"bt\",\n        \"bv\",\n        \"bw\",\n        \"by\",\n        \"bz\",\n        \"ca\",\n        \"cc\",\n        \"cd\",\n        \"cf\",\n        \"cg\",\n        \"ch\",\n        \"ci\",\n        \"ck\",\n        \"cl\",\n        \"cm\",\n        \"cn\",\n        \"co\",\n        \"cr\",\n        \"cu\",\n        \"cv\",\n        \"cw\",\n        \"cx\",\n        \"cy\",\n        \"cz\",\n        \"de\",\n        \"dj\",\n        \"dk\",\n        \"dm\",\n        \"do\",\n        \"dz\",\n        \"ec\",\n        \"ee\",\n        \"eg\",\n        \"eh\",\n        \"er\",\n        \"es\",\n        \"et\",\n        \"fi\",\n        \"fj\",\n        \"fk\",\n        \"fm\",\n        \"fo\",\n        \"fr\",\n        \"ga\",\n        \"gb\",\n        \"gd\",\n        \"ge\",\n        \"gf\",\n        \"gg\",\n        \"gh\",\n        \"gi\",\n        \"gl\",\n        \"gm\",\n        \"gn\",\n        \"gp\",\n        \"gq\",\n        \"gr\",\n        \"gs\",\n        \"gt\",\n        \"gu\",\n        \"gw\",\n        \"gy\",\n        \"hk\",\n        \"hm\",\n        \"hn\",\n        \"hr\",\n        \"ht\",\n        \"hu\",\n        \"id\",\n        \"ie\",\n        \"il\",\n        \"im\",\n        \"in\",\n        \"io\",\n        \"iq\",\n        \"ir\",\n        \"is\",\n        \"it\",\n        \"je\",\n        \"jm\",\n        \"jo\",\n        \"jp\",\n        \"ke\",\n        \"kg\",\n        \"kh\",\n        \"ki\",\n        \"km\",\n        \"kn\",\n        \"kp\",\n        \"kr\",\n        \"kw\",\n        \"ky\",\n        \"kz\",\n        \"la\",\n        \"lb\",\n        \"lc\",\n        \"li\",\n        \"lk\",\n        \"lr\",\n        \"ls\",\n        \"lt\",\n        \"lu\",\n        \"lv\",\n        \"ly\",\n        \"ma\",\n        \"mc\",\n        \"md\",\n        \"me\",\n        \"mf\",\n        \"mg\",\n        \"mh\",\n        \"mk\",\n        \"ml\",\n        \"mm\",\n        \"mn\",\n        \"mo\",\n        \"mp\",\n        \"mq\",\n        \"mr\",\n        \"ms\",\n        \"mt\",\n        \"mu\",\n        \"mv\",\n        \"mw\",\n        \"mx\",\n        \"my\",\n        \"mz\",\n        \"na\",\n        \"nc\",\n        \"ne\",\n        \"nf\",\n        \"ng\",\n        \"ni\",\n        \"nl\",\n        \"no\",\n        \"np\",\n        \"nr\",\n        \"nu\",\n        \"nz\",\n        \"om\",\n        \"pa\",\n        \"pe\",\n        \"pf\",\n        \"pg\",\n        \"ph\",\n        \"pk\",\n        \"pl\",\n        \"pm\",\n        \"pn\",\n        \"pr\",\n        \"ps\",\n        \"pt\",\n        \"pw\",\n        \"py\",\n        \"qa\",\n        \"re\",\n        \"ro\",\n        \"rs\",\n        \"ru\",\n        \"rw\",\n        \"sa\",\n        \"sb\",\n        \"sc\",\n        \"sd\",\n        \"se\",\n        \"sg\",\n        \"sh\",\n        \"si\",\n        \"sj\",\n        \"sk\",\n        \"sl\",\n        \"sm\",\n        \"sn\",\n        \"so\",\n        \"sr\",\n        \"ss\",\n        \"st\",\n        \"sv\",\n        \"sx\",\n        \"sy\",\n        \"sz\",\n        \"tc\",\n        \"td\",\n        \"tf\",\n        \"tg\",\n        \"th\",\n        \"tj\",\n        \"tk\",\n        \"tl\",\n        \"tm\",\n        \"tn\",\n        \"to\",\n        \"tr\",\n        \"tt\",\n        \"tv\",\n        \"tw\",\n        \"tz\",\n        \"ua\",\n        \"ug\",\n        \"um\",\n        \"us\",\n        \"uy\",\n        \"uz\",\n        \"va\",\n        \"vc\",\n        \"ve\",\n        \"vg\",\n        \"vi\",\n        \"vn\",\n        \"vu\",\n        \"wf\",\n        \"ws\",\n        \"ye\",\n        \"yt\",\n        \"za\",\n        \"zm\",\n        \"zw\"\n      ],\n      \"enumTitles\": [\n        \"Automatic (no country bias)\",\n        \"Andorra\",\n        \"United Arab Emirates\",\n        \"Afghanistan\",\n        \"Antigua and Barbuda\",\n        \"Anguilla\",\n        \"Albania\",\n        \"Armenia\",\n        \"Angola\",\n        \"Antarctica\",\n        \"Argentina\",\n        \"American Samoa\",\n        \"Austria\",\n        \"Australia\",\n        \"Aruba\",\n        \"Åland Islands\",\n        \"Azerbaijan\",\n        \"Bosnia and Herzegovina\",\n        \"Barbados\",\n        \"Bangladesh\",\n        \"Belgium\",\n        \"Burkina Faso\",\n        \"Bulgaria\",\n        \"Bahrain\",\n        \"Burundi\",\n        \"Benin\",\n        \"Saint Barthélemy\",\n        \"Bermuda\",\n        \"Brunei Darussalam\",\n        \"Bolivia, Plurinational State of\",\n        \"Bonaire, Sint Eustatius and Saba\",\n        \"Brazil\",\n        \"Bahamas\",\n        \"Bhutan\",\n        \"Bouvet Island\",\n        \"Botswana\",\n        \"Belarus\",\n        \"Belize\",\n        \"Canada\",\n        \"Cocos (Keeling) Islands\",\n        \"Congo, The Democratic Republic of the\",\n        \"Central African Republic\",\n        \"Congo\",\n        \"Switzerland\",\n        \"Côte d'Ivoire\",\n        \"Cook Islands\",\n        \"Chile\",\n        \"Cameroon\",\n        \"China\",\n        \"Colombia\",\n        \"Costa Rica\",\n        \"Cuba\",\n        \"Cabo Verde\",\n        \"Curaçao\",\n        \"Christmas Island\",\n        \"Cyprus\",\n        \"Czechia\",\n        \"Germany\",\n        \"Djibouti\",\n        \"Denmark\",\n        \"Dominica\",\n        \"Dominican Republic\",\n        \"Algeria\",\n        \"Ecuador\",\n        \"Estonia\",\n        \"Egypt\",\n        \"Western Sahara\",\n        \"Eritrea\",\n        \"Spain\",\n        \"Ethiopia\",\n        \"Finland\",\n        \"Fiji\",\n        \"Falkland Islands (Malvinas)\",\n        \"Micronesia, Federated States of\",\n        \"Faroe Islands\",\n        \"France\",\n        \"Gabon\",\n        \"United Kingdom\",\n        \"Grenada\",\n        \"Georgia\",\n        \"French Guiana\",\n        \"Guernsey\",\n        \"Ghana\",\n        \"Gibraltar\",\n        \"Greenland\",\n        \"Gambia\",\n        \"Guinea\",\n        \"Guadeloupe\",\n        \"Equatorial Guinea\",\n        \"Greece\",\n        \"South Georgia and the South Sandwich Islands\",\n        \"Guatemala\",\n        \"Guam\",\n        \"Guinea-Bissau\",\n        \"Guyana\",\n        \"Hong Kong\",\n        \"Heard Island and McDonald Islands\",\n        \"Honduras\",\n        \"Croatia\",\n        \"Haiti\",\n        \"Hungary\",\n        \"Indonesia\",\n        \"Ireland\",\n        \"Israel\",\n        \"Isle of Man\",\n        \"India\",\n        \"British Indian Ocean Territory\",\n        \"Iraq\",\n        \"Iran, Islamic Republic of\",\n        \"Iceland\",\n        \"Italy\",\n        \"Jersey\",\n        \"Jamaica\",\n        \"Jordan\",\n        \"Japan\",\n        \"Kenya\",\n        \"Kyrgyzstan\",\n        \"Cambodia\",\n        \"Kiribati\",\n        \"Comoros\",\n        \"Saint Kitts and Nevis\",\n        \"Korea, Democratic People's Republic of\",\n        \"Korea, Republic of\",\n        \"Kuwait\",\n        \"Cayman Islands\",\n        \"Kazakhstan\",\n        \"Lao People's Democratic Republic\",\n        \"Lebanon\",\n        \"Saint Lucia\",\n        \"Liechtenstein\",\n        \"Sri Lanka\",\n        \"Liberia\",\n        \"Lesotho\",\n        \"Lithuania\",\n        \"Luxembourg\",\n        \"Latvia\",\n        \"Libya\",\n        \"Morocco\",\n        \"Monaco\",\n        \"Moldova, Republic of\",\n        \"Montenegro\",\n        \"Saint Martin (French part)\",\n        \"Madagascar\",\n        \"Marshall Islands\",\n        \"North Macedonia\",\n        \"Mali\",\n        \"Myanmar\",\n        \"Mongolia\",\n        \"Macao\",\n        \"Northern Mariana Islands\",\n        \"Martinique\",\n        \"Mauritania\",\n        \"Montserrat\",\n        \"Malta\",\n        \"Mauritius\",\n        \"Maldives\",\n        \"Malawi\",\n        \"Mexico\",\n        \"Malaysia\",\n        \"Mozambique\",\n        \"Namibia\",\n        \"New Caledonia\",\n        \"Niger\",\n        \"Norfolk Island\",\n        \"Nigeria\",\n        \"Nicaragua\",\n        \"Netherlands\",\n        \"Norway\",\n        \"Nepal\",\n        \"Nauru\",\n        \"Niue\",\n        \"New Zealand\",\n        \"Oman\",\n        \"Panama\",\n        \"Peru\",\n        \"French Polynesia\",\n        \"Papua New Guinea\",\n        \"Philippines\",\n        \"Pakistan\",\n        \"Poland\",\n        \"Saint Pierre and Miquelon\",\n        \"Pitcairn\",\n        \"Puerto Rico\",\n        \"Palestine, State of\",\n        \"Portugal\",\n        \"Palau\",\n        \"Paraguay\",\n        \"Qatar\",\n        \"Réunion\",\n        \"Romania\",\n        \"Serbia\",\n        \"Russian Federation\",\n        \"Rwanda\",\n        \"Saudi Arabia\",\n        \"Solomon Islands\",\n        \"Seychelles\",\n        \"Sudan\",\n        \"Sweden\",\n        \"Singapore\",\n        \"Saint Helena, Ascension and Tristan da Cunha\",\n        \"Slovenia\",\n        \"Svalbard and Jan Mayen\",\n        \"Slovakia\",\n        \"Sierra Leone\",\n        \"San Marino\",\n        \"Senegal\",\n        \"Somalia\",\n        \"Suriname\",\n        \"South Sudan\",\n        \"Sao Tome and Principe\",\n        \"El Salvador\",\n        \"Sint Maarten (Dutch part)\",\n        \"Syrian Arab Republic\",\n        \"Eswatini\",\n        \"Turks and Caicos Islands\",\n        \"Chad\",\n        \"French Southern Territories\",\n        \"Togo\",\n        \"Thailand\",\n        \"Tajikistan\",\n        \"Tokelau\",\n        \"Timor-Leste\",\n        \"Turkmenistan\",\n        \"Tunisia\",\n        \"Tonga\",\n        \"Türkiye\",\n        \"Trinidad and Tobago\",\n        \"Tuvalu\",\n        \"Taiwan, Province of China\",\n        \"Tanzania, United Republic of\",\n        \"Ukraine\",\n        \"Uganda\",\n        \"United States Minor Outlying Islands\",\n        \"United States\",\n        \"Uruguay\",\n        \"Uzbekistan\",\n        \"Holy See (Vatican City State)\",\n        \"Saint Vincent and the Grenadines\",\n        \"Venezuela, Bolivarian Republic of\",\n        \"Virgin Islands, British\",\n        \"Virgin Islands, U.S.\",\n        \"Viet Nam\",\n        \"Vanuatu\",\n        \"Wallis and Futuna\",\n        \"Samoa\",\n        \"Yemen\",\n        \"Mayotte\",\n        \"South Africa\",\n        \"Zambia\",\n        \"Zimbabwe\"\n      ],\n      \"default\": \"auto\",\n      \"prefill\": \"auto\"\n    },\n    \"maxResults\": {\n      \"title\": \"Max search results per query\",\n      \"type\": \"integer\",\n      \"description\": \"How many top organic results to fetch and emit for each search query. Values above 10 need multiple search-result pages (slower). With `Emit results for pages that could not be fetched` on, each of the requested results yields one record — a page record when the fetch succeeds, or a metadata record with `fetchError` when it does not.\",\n      \"minimum\": 1,\n      \"maximum\": 250,\n      \"default\": 3,\n      \"prefill\": 3\n    },\n    \"maxItems\": {\n      \"title\": \"Max pages per run\",\n      \"type\": \"integer\",\n      \"description\": \"Overall cap on how many pages the run may emit across all queries, URLs, and crawled pages. 0 means no global cap.\",\n      \"minimum\": 0,\n      \"maximum\": 10000,\n      \"default\": 0,\n      \"prefill\": 0\n    },\n    \"outputFormats\": {\n      \"title\": \"Output formats\",\n      \"type\": \"array\",\n      \"description\": \"Which representations to include per page, in any combination. `Links` adds every link found on the page as structured `{url, text}` pairs.\",\n      \"editor\": \"select\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"markdown\",\n          \"text\",\n          \"html\",\n          \"links\"\n        ],\n        \"enumTitles\": [\n          \"Markdown\",\n          \"Plain text\",\n          \"HTML\",\n          \"Links\"\n        ]\n      },\n      \"default\": [\n        \"markdown\"\n      ],\n      \"prefill\": [\n        \"markdown\"\n      ]\n    },\n    \"removeElementsCssSelector\": {\n      \"title\": \"Remove elements (CSS selector)\",\n      \"type\": \"string\",\n      \"description\": \"Comma-separated CSS selectors removed before extraction (navigation, footers, ads, cookie bars). Set a non-matching selector such as `dummy_keep_everything` to keep everything.\",\n      \"editor\": \"textfield\",\n      \"default\": \"nav, footer, aside, script, style, .ad, .advertisement, [aria-hidden='true']\",\n      \"prefill\": \"nav, footer, aside, script, style, .ad, .advertisement, [aria-hidden='true']\"\n    },\n    \"keepElementsCssSelector\": {\n      \"title\": \"Keep only elements (CSS selector)\",\n      \"type\": \"array\",\n      \"description\": \"When set, only content inside these selectors is kept — everything else is dropped before extraction.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"htmlTransformer\": {\n      \"title\": \"Main content extraction\",\n      \"type\": \"string\",\n      \"description\": \"`Readable content` finds the article body and drops navigation and boilerplate. `None` keeps the full cleaned page.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"none\",\n        \"readable-text\"\n      ],\n      \"enumTitles\": [\n        \"None (full page)\",\n        \"Readable content (main article)\"\n      ],\n      \"default\": \"readable-text\",\n      \"prefill\": \"readable-text\"\n    },\n    \"maxContentLength\": {\n      \"title\": \"Max content length (characters)\",\n      \"type\": \"integer\",\n      \"description\": \"Truncate the emitted text and Markdown of each page to this many characters. 0 returns the full content. Useful for controlling embedding cost.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000,\n      \"default\": 0,\n      \"prefill\": 0\n    },\n    \"includeMetadata\": {\n      \"title\": \"Include page metadata\",\n      \"type\": \"boolean\",\n      \"description\": \"Add canonical URL, author, published date, keywords, social image, and site name (each only when the page provides it).\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"chunkMarkdown\": {\n      \"title\": \"Split content into chunks\",\n      \"type\": \"boolean\",\n      \"description\": \"Emit a `chunks` array per page — heading-aware Markdown chunks ready for embedding, never split inside code blocks or tables.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"chunkMaxChars\": {\n      \"title\": \"Chunk size (characters)\",\n      \"type\": \"integer\",\n      \"description\": \"Target size of each chunk when `chunkMarkdown` is on. Code blocks and tables are kept whole even when larger.\",\n      \"minimum\": 200,\n      \"maximum\": 10000,\n      \"default\": 2000,\n      \"prefill\": 2000\n    },\n    \"chunkOverlapChars\": {\n      \"title\": \"Chunk overlap (characters)\",\n      \"type\": \"integer\",\n      \"description\": \"Approximate overlap between consecutive chunks when `chunkMarkdown` is on, so context is not lost at chunk boundaries.\",\n      \"minimum\": 0,\n      \"maximum\": 1000,\n      \"default\": 200,\n      \"prefill\": 200\n    },\n    \"maxCrawlDepth\": {\n      \"title\": \"Crawl depth\",\n      \"type\": \"integer\",\n      \"description\": \"0 reads only the start URLs. 1+ follows links found on those pages, staying on the same website, up to this depth.\",\n      \"minimum\": 0,\n      \"maximum\": 5,\n      \"default\": 0,\n      \"prefill\": 0\n    },\n    \"maxCrawlPages\": {\n      \"title\": \"Max pages to crawl\",\n      \"type\": \"integer\",\n      \"description\": \"Safety cap on pages visited in crawl mode.\",\n      \"minimum\": 1,\n      \"maximum\": 500,\n      \"default\": 25,\n      \"prefill\": 25\n    },\n    \"domainAllowlist\": {\n      \"title\": \"Allowed domains\",\n      \"type\": \"array\",\n      \"description\": \"Keep only pages whose host contains one of these substrings (case-insensitive).\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"domainBlocklist\": {\n      \"title\": \"Blocked domains\",\n      \"type\": \"array\",\n      \"description\": \"Drop pages whose host contains one of these substrings.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"minTextLength\": {\n      \"title\": \"Minimum text length\",\n      \"type\": \"integer\",\n      \"description\": \"Drop pages with fewer than this many characters of extracted text. Useful for skipping thin or placeholder pages.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000\n    },\n    \"excludeContentSelectors\": {\n      \"title\": \"Extra selectors to remove\",\n      \"type\": \"array\",\n      \"description\": \"Additional CSS selectors removed before extraction, on top of `Remove elements`.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"keywordsAnyOf\": {\n      \"title\": \"Required keywords (any of)\",\n      \"type\": \"array\",\n      \"description\": \"Keep only pages whose title or content contains at least one of these keywords (case-insensitive).\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"emitFailedResults\": {\n      \"title\": \"Emit results for pages that could not be fetched\",\n      \"type\": \"boolean\",\n      \"description\": \"When a search result page cannot be fetched after the full retry ladder, still emit one record for it with `url`, `title`, `description`, `searchResult`, `searchRank` and a `fetchError` note (no fabricated content). Turn off to skip failed pages entirely.\",\n      \"default\": true,\n      \"prefill\": false\n    }\n  },\n  \"required\": []\n}",
    "readme": "# Web Search & RAG Markdown Extractor for LLMs\n\nGive your LLM or RAG pipeline fresh web content in one run: search the web, read specific pages, or crawl a small site — and receive clean Markdown, plain text, HTML, structured links, and citation metadata. The actor starts its search on Google and automatically falls back to Bing or DuckDuckGo when an engine is unavailable, so a query keeps returning results even when one search provider is having a bad day.\n\n## What this actor does\n\n- **Three intents in one actor:** search by keyword (`query` / `queries`), read exact pages (`startUrls`), or crawl a site by following links within the same domain (`maxCrawlDepth`)\n- **Resilient search:** Google first, with automatic Bing and DuckDuckGo fallbacks; every result keeps its title, snippet, displayed address, position, and the engine that found it\n- **RAG-ready output:** clean Markdown, plain text, or HTML, plus every link on the page as structured `{url, text}` pairs and optional heading-aware chunks that never cut code blocks or tables in half\n- **Citation metadata:** canonical URL, author, published date, keywords, social image, and site name — each included when the page actually provides it\n- **Token control:** `maxContentLength` caps the returned content per page; `includeMetadata` and `chunkMarkdown` are opt-in extras\n- **Filters:** domain allowlist/blocklist, minimum text length, required keywords, and custom CSS selectors to strip or keep\n- **No login, cookies, or API keys required.** Fields a page doesn't have are omitted from its record rather than returned empty\n\n## Output per page\n\n- `url` — the page's address; `loadedUrl` — where the fetch ended after redirects; `redirectedUrl` — the final address when it differs from `url`\n- `domain` — host name of the page\n- `title`, `description`, `languageCode`\n- `markdown`, `text`, `html` — included only for the formats you select\n- `links` — every http(s) link found on the page as `{url, text}`, when `links` is selected\n- `chunks` — heading-aware content pieces with `index`, `text`, `headingPath`, `charCount`, when `chunkMarkdown` is on\n- `wordCount`, `readingTimeMinutes` (at 220 words per minute), `contentLength` (characters of the emitted content), `contentHash` (SHA-256 for change detection)\n- `canonicalUrl`, `author`, `publishedDate` (ISO 8601), `keywords`, `ogImage`, `siteName` — page metadata, when present\n- `searchRank` — 1-based position of the page in the search results (search mode only)\n- `searchResult` — `{url, title, snippet, displayedUrl, position, engine}` for pages that came from a search query\n- `query` — the search query that produced the page; `engine` — which engine found it\n- `crawlDepth` — how many link hops from a start URL (crawl mode only)\n- `fetchError` — why a page could not be fetched, on metadata-only records (see below)\n- `httpStatusCode` — the status the page answered with; pages that answer with an error status but still return content are kept like any other page\n- `loadedTime` — seconds spent fetching the page\n- `recordType: \"page\"`, `scrapedAt`\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `query` | string | `what is retrieval augmented generation` | Search terms, or a single page URL to read directly |\n| `queries` | array | `[]` | More queries for batch runs; a URL here is fetched directly |\n| `startUrls` | array | `[]` | Pages to read; with `maxCrawlDepth` > 0 these become crawl seeds |\n| `searchEngine` | string | `auto` | `auto` / `google` / `bing` / `duckduckgo` |\n| `searchLanguage` | string | `auto` | Language bias for results |\n| `searchCountry` | string | `auto` | Country bias for results |\n| `maxResults` | integer | `3` | Search results fetched per query (1–250; > 10 needs multiple result pages) |\n| `maxItems` | integer | `0` | Global page cap for the whole run (0 = no cap) |\n| `outputFormats` | array | `[\"markdown\"]` | Any of `markdown`, `text`, `html`, `links` |\n| `removeElementsCssSelector` | string | `nav, footer, aside, script, style, .ad, .advertisement, [aria-hidden='true']` | Elements removed before extraction |\n| `keepElementsCssSelector` | array | `[]` | Keep only content inside these selectors |\n| `htmlTransformer` | string | `readable-text` | `readable-text` (main article) or `none` (full page) |\n| `maxContentLength` | integer | `0` | Truncate content per page (0 = full content) |\n| `includeMetadata` | boolean | `true` | Include author, dates, canonical URL, and friends |\n| `chunkMarkdown` | boolean | `false` | Emit heading-aware `chunks` |\n| `chunkMaxChars` | integer | `2000` | Target chunk size (200–10000) |\n| `chunkOverlapChars` | integer | `200` | Overlap between chunks (0–1000) |\n| `maxCrawlDepth` | integer | `0` | Follow same-domain links up to this depth (0 = off) |\n| `maxCrawlPages` | integer | `25` | Page cap in crawl mode |\n| `domainAllowlist` | array | `[]` | Only keep pages whose host contains one of these |\n| `domainBlocklist` | array | `[]` | Drop pages whose host contains one of these |\n| `minTextLength` | integer | – | Drop pages with less extracted text than this |\n| `excludeContentSelectors` | array | `[]` | Extra CSS selectors to strip |\n| `keywordsAnyOf` | array | `[]` | Keep only pages containing at least one keyword |\n| `emitFailedResults` | boolean | `true` | Emit a metadata-only record with `fetchError` for pages that could not be fetched |\n\nOlder tasks may still carry tuning fields such as `scrapingTool`, `requestTimeoutSecs`, `desiredConcurrency`, `maxRequestRetries`, `dynamicContentWaitSecs`, `removeCookieWarnings`, `useApifyProxy`, or `debugMode`. They are accepted and ignored: request timeouts, retries, rendering, proxy rotation, and diagnostics are decided automatically by the actor.\n\n### Example: Google a question and keep only substantial pages\n\n```json\n{\n  \"query\": \"vector database comparison 2026\",\n  \"maxResults\": 5,\n  \"outputFormats\": [\"markdown\", \"links\"],\n  \"minTextLength\": 1000,\n  \"domainBlocklist\": [\"pinterest.com\"]\n}\n```\n\n### Example: batch queries with citation metadata\n\n```json\n{\n  \"queries\": [\"retrieval augmented generation evaluation\", \"chunking strategies for RAG\"],\n  \"maxResults\": 3,\n  \"includeMetadata\": true,\n  \"chunkMarkdown\": true,\n  \"chunkMaxChars\": 1500\n}\n```\n\n### Example: read exact pages\n\n```json\n{\n  \"query\": \"\",\n  \"startUrls\": [\n    \"https://en.wikipedia.org/wiki/Retrieval-augmented_generation\",\n    \"https://docs.langchain.com/oss/python/langchain/retrieval\"\n  ],\n  \"outputFormats\": [\"markdown\", \"text\"],\n  \"htmlTransformer\": \"readable-text\"\n}\n```\n\n### Example: crawl a documentation section\n\n```json\n{\n  \"query\": \"\",\n  \"startUrls\": [\"https://docs.crawl4ai.com/core/\"],\n  \"maxCrawlDepth\": 2,\n  \"maxCrawlPages\": 20,\n  \"outputFormats\": [\"markdown\", \"links\"]\n}\n```\n\n## Use cases\n\n- **RAG ingestion** — pull the current top results for a topic and hand the Markdown (or ready-made chunks) straight to your embedding step\n- **Agent context gathering** — give an AI agent a fresh, citation-bearing view of the web without building a search stack\n- **Citation enrichment** — resolve each reference URL from a document into clean text plus author and publication date\n- **Documentation snapshots** — crawl a docs section and keep `contentHash` values to detect what actually changed between runs\n- **Competitive monitoring** — schedule queries with a `domainAllowlist` to watch specific companies or publications\n- **Due-diligence research** — batch a list of questions, filter to long-form sources with `minTextLength`, and export one tidy dataset\n\n## FAQ\n\n### Do I need to log in or provide cookies?\n\nNo. Every search and page request is anonymous: no account, no cookies, no API keys.\n\n### How does the actor choose a search engine?\n\n`searchEngine: auto` (the default) tries Google first. If Google cannot be reached or returns no readable results, the actor automatically tries Bing and then DuckDuckGo. You can also pin one engine explicitly — useful when you want strictly one provider for reproducibility.\n\n### Do I need to set up a proxy?\n\nNo. The actor starts with direct requests and only switches connections when a page actually blocks it. Everything is handled automatically; there is nothing to configure. Blocked pages get a per-request escalation (datacenter rotation, then a rendering relay) before the actor gives up on them, and pages that still fail are reported through `fetchError`.\n\n### Why do some pages have fewer fields?\n\nMetadata like `author` or `publishedDate` is emitted only when the page itself declares it. If a page has no publication date, the field is simply absent from that record — never `null`, never an empty string. The same applies to `chunks` (only with `chunkMarkdown`) and `links` (only when selected).\n\n### Can the actor read JavaScript-heavy pages?\n\nYes, automatically. The actor first requests every page with plain HTTP; when a page answers with a JavaScript challenge, a 202-style JS stub, or an empty app shell, it renders that page in a real browser (dismissing common consent banners and expanding collapsed sections) before extraction. No setting to change — the escalation is decided per page.\n\n### How do I control the size of the output?\n\nSet `maxContentLength` to cap characters per page, or enable `chunkMarkdown` to get evenly sized pieces. Both help keep embedding and token costs predictable.\n\n### What happens when a page can't be fetched?\n\n`maxResults` counts *search results*, so every requested result yields one record. When a site refuses the fetch (for example a paywall or a bot challenge that survives the actor's retry ladder), the record still carries `url`, `title`, `description`, `searchResult` and `searchRank`, plus a `fetchError` note explaining what happened — with no fabricated page content. Set `emitFailedResults` to `false` if you prefer the dataset to contain successfully fetched pages only.\n\n### What happens if a search returns nothing?\n\nThe run finishes with a status message explaining what happened and still succeeds — no placeholder rows. If every provider fails for a query, the log lists the reason.\n\n### Are file downloads and AI summaries supported?\n\nNo — this actor returns text and metadata for pages. It skips media and document files (video, audio, images, PDFs) because they carry no page text, and it does not call any paid AI service.\n\n### Is this affiliated with Google, Bing, or DuckDuckGo?\n\nNo. This is an independent, third-party actor. It reads public search result pages and public web pages; it is not operated by or affiliated with any search provider.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "rag-web-browser",
      "title": "Web Search & RAG Markdown Extractor for LLMs",
      "description": "Search Google, Bing, or DuckDuckGo, fetch the top pages, or crawl a site, and get clean Markdown, plain text, links, and citation metadata — plus optional heading-aware chunks — ready for an LLM or RAG pipeline. No login, no API keys, no cookies.",
      "version": "1.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# Web Search & RAG Markdown Extractor for LLMs\n\nGive your LLM or RAG pipeline fresh web content in one run: search the web, read specific pages, or crawl a small site — and receive clean Markdown, plain text, HTML, structured links, and citation metadata. The actor starts its search on Google and automatically falls back to Bing or DuckDuckGo when an engine is unavailable, so a query keeps returning results even when one search provider is having a bad day.\n\n## What this actor does\n\n- **Three intents in one actor:** search by keyword (`query` / `queries`), read exact pages (`startUrls`), or crawl a site by following links within the same domain (`maxCrawlDepth`)\n- **Resilient search:** Google first, with automatic Bing and DuckDuckGo fallbacks; every result keeps its title, snippet, displayed address, position, and the engine that found it\n- **RAG-ready output:** clean Markdown, plain text, or HTML, plus every link on the page as structured `{url, text}` pairs and optional heading-aware chunks that never cut code blocks or tables in half\n- **Citation metadata:** canonical URL, author, published date, keywords, social image, and site name — each included when the page actually provides it\n- **Token control:** `maxContentLength` caps the returned content per page; `includeMetadata` and `chunkMarkdown` are opt-in extras\n- **Filters:** domain allowlist/blocklist, minimum text length, required keywords, and custom CSS selectors to strip or keep\n- **No login, cookies, or API keys required.** Fields a page doesn't have are omitted from its record rather than returned empty\n\n## Output per page\n\n- `url` — the page's address; `loadedUrl` — where the fetch ended after redirects; `redirectedUrl` — the final address when it differs from `url`\n- `domain` — host name of the page\n- `title`, `description`, `languageCode`\n- `markdown`, `text`, `html` — included only for the formats you select\n- `links` — every http(s) link found on the page as `{url, text}`, when `links` is selected\n- `chunks` — heading-aware content pieces with `index`, `text`, `headingPath`, `charCount`, when `chunkMarkdown` is on\n- `wordCount`, `readingTimeMinutes` (at 220 words per minute), `contentLength` (characters of the emitted content), `contentHash` (SHA-256 for change detection)\n- `canonicalUrl`, `author`, `publishedDate` (ISO 8601), `keywords`, `ogImage`, `siteName` — page metadata, when present\n- `searchRank` — 1-based position of the page in the search results (search mode only)\n- `searchResult` — `{url, title, snippet, displayedUrl, position, engine}` for pages that came from a search query\n- `query` — the search query that produced the page; `engine` — which engine found it\n- `crawlDepth` — how many link hops from a start URL (crawl mode only)\n- `fetchError` — why a page could not be fetched, on metadata-only records (see below)\n- `httpStatusCode` — the status the page answered with; pages that answer with an error status but still return content are kept like any other page\n- `loadedTime` — seconds spent fetching the page\n- `recordType: \"page\"`, `scrapedAt`\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `query` | string | `what is retrieval augmented generation` | Search terms, or a single page URL to read directly |\n| `queries` | array | `[]` | More queries for batch runs; a URL here is fetched directly |\n| `startUrls` | array | `[]` | Pages to read; with `maxCrawlDepth` > 0 these become crawl seeds |\n| `searchEngine` | string | `auto` | `auto` / `google` / `bing` / `duckduckgo` |\n| `searchLanguage` | string | `auto` | Language bias for results |\n| `searchCountry` | string | `auto` | Country bias for results |\n| `maxResults` | integer | `3` | Search results fetched per query (1–250; > 10 needs multiple result pages) |\n| `maxItems` | integer | `0` | Global page cap for the whole run (0 = no cap) |\n| `outputFormats` | array | `[\"markdown\"]` | Any of `markdown`, `text`, `html`, `links` |\n| `removeElementsCssSelector` | string | `nav, footer, aside, script, style, .ad, .advertisement, [aria-hidden='true']` | Elements removed before extraction |\n| `keepElementsCssSelector` | array | `[]` | Keep only content inside these selectors |\n| `htmlTransformer` | string | `readable-text` | `readable-text` (main article) or `none` (full page) |\n| `maxContentLength` | integer | `0` | Truncate content per page (0 = full content) |\n| `includeMetadata` | boolean | `true` | Include author, dates, canonical URL, and friends |\n| `chunkMarkdown` | boolean | `false` | Emit heading-aware `chunks` |\n| `chunkMaxChars` | integer | `2000` | Target chunk size (200–10000) |\n| `chunkOverlapChars` | integer | `200` | Overlap between chunks (0–1000) |\n| `maxCrawlDepth` | integer | `0` | Follow same-domain links up to this depth (0 = off) |\n| `maxCrawlPages` | integer | `25` | Page cap in crawl mode |\n| `domainAllowlist` | array | `[]` | Only keep pages whose host contains one of these |\n| `domainBlocklist` | array | `[]` | Drop pages whose host contains one of these |\n| `minTextLength` | integer | – | Drop pages with less extracted text than this |\n| `excludeContentSelectors` | array | `[]` | Extra CSS selectors to strip |\n| `keywordsAnyOf` | array | `[]` | Keep only pages containing at least one keyword |\n| `emitFailedResults` | boolean | `true` | Emit a metadata-only record with `fetchError` for pages that could not be fetched |\n\nOlder tasks may still carry tuning fields such as `scrapingTool`, `requestTimeoutSecs`, `desiredConcurrency`, `maxRequestRetries`, `dynamicContentWaitSecs`, `removeCookieWarnings`, `useApifyProxy`, or `debugMode`. They are accepted and ignored: request timeouts, retries, rendering, proxy rotation, and diagnostics are decided automatically by the actor.\n\n### Example: Google a question and keep only substantial pages\n\n```json\n{\n  \"query\": \"vector database comparison 2026\",\n  \"maxResults\": 5,\n  \"outputFormats\": [\"markdown\", \"links\"],\n  \"minTextLength\": 1000,\n  \"domainBlocklist\": [\"pinterest.com\"]\n}\n```\n\n### Example: batch queries with citation metadata\n\n```json\n{\n  \"queries\": [\"retrieval augmented generation evaluation\", \"chunking strategies for RAG\"],\n  \"maxResults\": 3,\n  \"includeMetadata\": true,\n  \"chunkMarkdown\": true,\n  \"chunkMaxChars\": 1500\n}\n```\n\n### Example: read exact pages\n\n```json\n{\n  \"query\": \"\",\n  \"startUrls\": [\n    \"https://en.wikipedia.org/wiki/Retrieval-augmented_generation\",\n    \"https://docs.langchain.com/oss/python/langchain/retrieval\"\n  ],\n  \"outputFormats\": [\"markdown\", \"text\"],\n  \"htmlTransformer\": \"readable-text\"\n}\n```\n\n### Example: crawl a documentation section\n\n```json\n{\n  \"query\": \"\",\n  \"startUrls\": [\"https://docs.crawl4ai.com/core/\"],\n  \"maxCrawlDepth\": 2,\n  \"maxCrawlPages\": 20,\n  \"outputFormats\": [\"markdown\", \"links\"]\n}\n```\n\n## Use cases\n\n- **RAG ingestion** — pull the current top results for a topic and hand the Markdown (or ready-made chunks) straight to your embedding step\n- **Agent context gathering** — give an AI agent a fresh, citation-bearing view of the web without building a search stack\n- **Citation enrichment** — resolve each reference URL from a document into clean text plus author and publication date\n- **Documentation snapshots** — crawl a docs section and keep `contentHash` values to detect what actually changed between runs\n- **Competitive monitoring** — schedule queries with a `domainAllowlist` to watch specific companies or publications\n- **Due-diligence research** — batch a list of questions, filter to long-form sources with `minTextLength`, and export one tidy dataset\n\n## FAQ\n\n### Do I need to log in or provide cookies?\n\nNo. Every search and page request is anonymous: no account, no cookies, no API keys.\n\n### How does the actor choose a search engine?\n\n`searchEngine: auto` (the default) tries Google first. If Google cannot be reached or returns no readable results, the actor automatically tries Bing and then DuckDuckGo. You can also pin one engine explicitly — useful when you want strictly one provider for reproducibility.\n\n### Do I need to set up a proxy?\n\nNo. The actor starts with direct requests and only switches connections when a page actually blocks it. Everything is handled automatically; there is nothing to configure. Blocked pages get a per-request escalation (datacenter rotation, then a rendering relay) before the actor gives up on them, and pages that still fail are reported through `fetchError`.\n\n### Why do some pages have fewer fields?\n\nMetadata like `author` or `publishedDate` is emitted only when the page itself declares it. If a page has no publication date, the field is simply absent from that record — never `null`, never an empty string. The same applies to `chunks` (only with `chunkMarkdown`) and `links` (only when selected).\n\n### Can the actor read JavaScript-heavy pages?\n\nYes, automatically. The actor first requests every page with plain HTTP; when a page answers with a JavaScript challenge, a 202-style JS stub, or an empty app shell, it renders that page in a real browser (dismissing common consent banners and expanding collapsed sections) before extraction. No setting to change — the escalation is decided per page.\n\n### How do I control the size of the output?\n\nSet `maxContentLength` to cap characters per page, or enable `chunkMarkdown` to get evenly sized pieces. Both help keep embedding and token costs predictable.\n\n### What happens when a page can't be fetched?\n\n`maxResults` counts *search results*, so every requested result yields one record. When a site refuses the fetch (for example a paywall or a bot challenge that survives the actor's retry ladder), the record still carries `url`, `title`, `description`, `searchResult` and `searchRank`, plus a `fetchError` note explaining what happened — with no fabricated page content. Set `emitFailedResults` to `false` if you prefer the dataset to contain successfully fetched pages only.\n\n### What happens if a search returns nothing?\n\nThe run finishes with a status message explaining what happened and still succeeds — no placeholder rows. If every provider fails for a query, the log lists the reason.\n\n### Are file downloads and AI summaries supported?\n\nNo — this actor returns text and metadata for pages. It skips media and document files (video, audio, images, PDFs) because they carry no page text, and it does not call any paid AI service.\n\n### Is this affiliated with Google, Bing, or DuckDuckGo?\n\nNo. This is an independent, third-party actor. It reads public search result pages and public web pages; it is not operated by or affiliated with any search provider.\n",
      "input": {
        "title": "RAG Web Browser Input",
        "description": "Search the web with a query, fetch specific URLs, or crawl a site — and get clean, RAG-ready content (Markdown, text, links, and optional chunks) with citation metadata.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "query": {
            "title": "Search query (or one URL)",
            "type": "string",
            "description": "What to look up, or a single web page URL to read. Examples: `vector database comparison`, `https://en.wikipedia.org/wiki/Retrieval-augmented_generation`. When `startUrls` or `queries` are also set, everything is processed in one run.",
            "editor": "textfield",
            "default": "what is retrieval augmented generation",
            "prefill": "what is retrieval augmented generation"
          },
          "queries": {
            "title": "More search queries",
            "type": "array",
            "description": "Additional queries for batch research runs. Each query is searched and its top results are fetched. A query that is itself a URL is fetched directly.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Pages to read directly. With `maxCrawlDepth` above 0, the actor walks links found on these pages within the same website instead.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "searchEngine": {
            "title": "Search engine",
            "type": "string",
            "description": "Which search engine to use. `Automatic` tries Google first and silently falls back to Bing, then DuckDuckGo when an engine is blocked — recommended.",
            "editor": "select",
            "enum": [
              "auto",
              "google",
              "bing",
              "duckduckgo"
            ],
            "enumTitles": [
              "Automatic (recommended)",
              "Google",
              "Bing",
              "DuckDuckGo"
            ],
            "default": "auto",
            "prefill": "auto"
          },
          "searchLanguage": {
            "title": "Search language",
            "type": "string",
            "description": "Language for search results. `Automatic` lets each engine choose based on the query.",
            "editor": "select",
            "enum": [
              "auto",
              "en",
              "de",
              "fr",
              "es",
              "it",
              "pt",
              "nl",
              "sv",
              "da",
              "fi",
              "no",
              "pl",
              "cs",
              "sk",
              "hu",
              "ro",
              "bg",
              "el",
              "tr",
              "ru",
              "uk",
              "ar",
              "he",
              "fa",
              "hi",
              "id",
              "ms",
              "th",
              "vi",
              "ja",
              "ko",
              "zh"
            ],
            "enumTitles": [
              "Automatic (match the query language)",
              "English",
              "German",
              "French",
              "Spanish",
              "Italian",
              "Portuguese",
              "Dutch",
              "Swedish",
              "Danish",
              "Finnish",
              "Norwegian",
              "Polish",
              "Czech",
              "Slovak",
              "Hungarian",
              "Romanian",
              "Bulgarian",
              "Greek",
              "Turkish",
              "Russian",
              "Ukrainian",
              "Arabic",
              "Hebrew",
              "Persian",
              "Hindi",
              "Indonesian",
              "Malay",
              "Thai",
              "Vietnamese",
              "Japanese",
              "Korean",
              "Chinese"
            ],
            "default": "auto",
            "prefill": "auto"
          },
          "searchCountry": {
            "title": "Search country",
            "type": "string",
            "description": "Country bias for search results. `Automatic` means no country bias.",
            "editor": "select",
            "enum": [
              "auto",
              "ad",
              "ae",
              "af",
              "ag",
              "ai",
              "al",
              "am",
              "ao",
              "aq",
              "ar",
              "as",
              "at",
              "au",
              "aw",
              "ax",
              "az",
              "ba",
              "bb",
              "bd",
              "be",
              "bf",
              "bg",
              "bh",
              "bi",
              "bj",
              "bl",
              "bm",
              "bn",
              "bo",
              "bq",
              "br",
              "bs",
              "bt",
              "bv",
              "bw",
              "by",
              "bz",
              "ca",
              "cc",
              "cd",
              "cf",
              "cg",
              "ch",
              "ci",
              "ck",
              "cl",
              "cm",
              "cn",
              "co",
              "cr",
              "cu",
              "cv",
              "cw",
              "cx",
              "cy",
              "cz",
              "de",
              "dj",
              "dk",
              "dm",
              "do",
              "dz",
              "ec",
              "ee",
              "eg",
              "eh",
              "er",
              "es",
              "et",
              "fi",
              "fj",
              "fk",
              "fm",
              "fo",
              "fr",
              "ga",
              "gb",
              "gd",
              "ge",
              "gf",
              "gg",
              "gh",
              "gi",
              "gl",
              "gm",
              "gn",
              "gp",
              "gq",
              "gr",
              "gs",
              "gt",
              "gu",
              "gw",
              "gy",
              "hk",
              "hm",
              "hn",
              "hr",
              "ht",
              "hu",
              "id",
              "ie",
              "il",
              "im",
              "in",
              "io",
              "iq",
              "ir",
              "is",
              "it",
              "je",
              "jm",
              "jo",
              "jp",
              "ke",
              "kg",
              "kh",
              "ki",
              "km",
              "kn",
              "kp",
              "kr",
              "kw",
              "ky",
              "kz",
              "la",
              "lb",
              "lc",
              "li",
              "lk",
              "lr",
              "ls",
              "lt",
              "lu",
              "lv",
              "ly",
              "ma",
              "mc",
              "md",
              "me",
              "mf",
              "mg",
              "mh",
              "mk",
              "ml",
              "mm",
              "mn",
              "mo",
              "mp",
              "mq",
              "mr",
              "ms",
              "mt",
              "mu",
              "mv",
              "mw",
              "mx",
              "my",
              "mz",
              "na",
              "nc",
              "ne",
              "nf",
              "ng",
              "ni",
              "nl",
              "no",
              "np",
              "nr",
              "nu",
              "nz",
              "om",
              "pa",
              "pe",
              "pf",
              "pg",
              "ph",
              "pk",
              "pl",
              "pm",
              "pn",
              "pr",
              "ps",
              "pt",
              "pw",
              "py",
              "qa",
              "re",
              "ro",
              "rs",
              "ru",
              "rw",
              "sa",
              "sb",
              "sc",
              "sd",
              "se",
              "sg",
              "sh",
              "si",
              "sj",
              "sk",
              "sl",
              "sm",
              "sn",
              "so",
              "sr",
              "ss",
              "st",
              "sv",
              "sx",
              "sy",
              "sz",
              "tc",
              "td",
              "tf",
              "tg",
              "th",
              "tj",
              "tk",
              "tl",
              "tm",
              "tn",
              "to",
              "tr",
              "tt",
              "tv",
              "tw",
              "tz",
              "ua",
              "ug",
              "um",
              "us",
              "uy",
              "uz",
              "va",
              "vc",
              "ve",
              "vg",
              "vi",
              "vn",
              "vu",
              "wf",
              "ws",
              "ye",
              "yt",
              "za",
              "zm",
              "zw"
            ],
            "enumTitles": [
              "Automatic (no country bias)",
              "Andorra",
              "United Arab Emirates",
              "Afghanistan",
              "Antigua and Barbuda",
              "Anguilla",
              "Albania",
              "Armenia",
              "Angola",
              "Antarctica",
              "Argentina",
              "American Samoa",
              "Austria",
              "Australia",
              "Aruba",
              "Åland Islands",
              "Azerbaijan",
              "Bosnia and Herzegovina",
              "Barbados",
              "Bangladesh",
              "Belgium",
              "Burkina Faso",
              "Bulgaria",
              "Bahrain",
              "Burundi",
              "Benin",
              "Saint Barthélemy",
              "Bermuda",
              "Brunei Darussalam",
              "Bolivia, Plurinational State of",
              "Bonaire, Sint Eustatius and Saba",
              "Brazil",
              "Bahamas",
              "Bhutan",
              "Bouvet Island",
              "Botswana",
              "Belarus",
              "Belize",
              "Canada",
              "Cocos (Keeling) Islands",
              "Congo, The Democratic Republic of the",
              "Central African Republic",
              "Congo",
              "Switzerland",
              "Côte d'Ivoire",
              "Cook Islands",
              "Chile",
              "Cameroon",
              "China",
              "Colombia",
              "Costa Rica",
              "Cuba",
              "Cabo Verde",
              "Curaçao",
              "Christmas Island",
              "Cyprus",
              "Czechia",
              "Germany",
              "Djibouti",
              "Denmark",
              "Dominica",
              "Dominican Republic",
              "Algeria",
              "Ecuador",
              "Estonia",
              "Egypt",
              "Western Sahara",
              "Eritrea",
              "Spain",
              "Ethiopia",
              "Finland",
              "Fiji",
              "Falkland Islands (Malvinas)",
              "Micronesia, Federated States of",
              "Faroe Islands",
              "France",
              "Gabon",
              "United Kingdom",
              "Grenada",
              "Georgia",
              "French Guiana",
              "Guernsey",
              "Ghana",
              "Gibraltar",
              "Greenland",
              "Gambia",
              "Guinea",
              "Guadeloupe",
              "Equatorial Guinea",
              "Greece",
              "South Georgia and the South Sandwich Islands",
              "Guatemala",
              "Guam",
              "Guinea-Bissau",
              "Guyana",
              "Hong Kong",
              "Heard Island and McDonald Islands",
              "Honduras",
              "Croatia",
              "Haiti",
              "Hungary",
              "Indonesia",
              "Ireland",
              "Israel",
              "Isle of Man",
              "India",
              "British Indian Ocean Territory",
              "Iraq",
              "Iran, Islamic Republic of",
              "Iceland",
              "Italy",
              "Jersey",
              "Jamaica",
              "Jordan",
              "Japan",
              "Kenya",
              "Kyrgyzstan",
              "Cambodia",
              "Kiribati",
              "Comoros",
              "Saint Kitts and Nevis",
              "Korea, Democratic People's Republic of",
              "Korea, Republic of",
              "Kuwait",
              "Cayman Islands",
              "Kazakhstan",
              "Lao People's Democratic Republic",
              "Lebanon",
              "Saint Lucia",
              "Liechtenstein",
              "Sri Lanka",
              "Liberia",
              "Lesotho",
              "Lithuania",
              "Luxembourg",
              "Latvia",
              "Libya",
              "Morocco",
              "Monaco",
              "Moldova, Republic of",
              "Montenegro",
              "Saint Martin (French part)",
              "Madagascar",
              "Marshall Islands",
              "North Macedonia",
              "Mali",
              "Myanmar",
              "Mongolia",
              "Macao",
              "Northern Mariana Islands",
              "Martinique",
              "Mauritania",
              "Montserrat",
              "Malta",
              "Mauritius",
              "Maldives",
              "Malawi",
              "Mexico",
              "Malaysia",
              "Mozambique",
              "Namibia",
              "New Caledonia",
              "Niger",
              "Norfolk Island",
              "Nigeria",
              "Nicaragua",
              "Netherlands",
              "Norway",
              "Nepal",
              "Nauru",
              "Niue",
              "New Zealand",
              "Oman",
              "Panama",
              "Peru",
              "French Polynesia",
              "Papua New Guinea",
              "Philippines",
              "Pakistan",
              "Poland",
              "Saint Pierre and Miquelon",
              "Pitcairn",
              "Puerto Rico",
              "Palestine, State of",
              "Portugal",
              "Palau",
              "Paraguay",
              "Qatar",
              "Réunion",
              "Romania",
              "Serbia",
              "Russian Federation",
              "Rwanda",
              "Saudi Arabia",
              "Solomon Islands",
              "Seychelles",
              "Sudan",
              "Sweden",
              "Singapore",
              "Saint Helena, Ascension and Tristan da Cunha",
              "Slovenia",
              "Svalbard and Jan Mayen",
              "Slovakia",
              "Sierra Leone",
              "San Marino",
              "Senegal",
              "Somalia",
              "Suriname",
              "South Sudan",
              "Sao Tome and Principe",
              "El Salvador",
              "Sint Maarten (Dutch part)",
              "Syrian Arab Republic",
              "Eswatini",
              "Turks and Caicos Islands",
              "Chad",
              "French Southern Territories",
              "Togo",
              "Thailand",
              "Tajikistan",
              "Tokelau",
              "Timor-Leste",
              "Turkmenistan",
              "Tunisia",
              "Tonga",
              "Türkiye",
              "Trinidad and Tobago",
              "Tuvalu",
              "Taiwan, Province of China",
              "Tanzania, United Republic of",
              "Ukraine",
              "Uganda",
              "United States Minor Outlying Islands",
              "United States",
              "Uruguay",
              "Uzbekistan",
              "Holy See (Vatican City State)",
              "Saint Vincent and the Grenadines",
              "Venezuela, Bolivarian Republic of",
              "Virgin Islands, British",
              "Virgin Islands, U.S.",
              "Viet Nam",
              "Vanuatu",
              "Wallis and Futuna",
              "Samoa",
              "Yemen",
              "Mayotte",
              "South Africa",
              "Zambia",
              "Zimbabwe"
            ],
            "default": "auto",
            "prefill": "auto"
          },
          "maxResults": {
            "title": "Max search results per query",
            "type": "integer",
            "description": "How many top organic results to fetch and emit for each search query. Values above 10 need multiple search-result pages (slower). With `Emit results for pages that could not be fetched` on, each of the requested results yields one record — a page record when the fetch succeeds, or a metadata record with `fetchError` when it does not.",
            "minimum": 1,
            "maximum": 250,
            "default": 3,
            "prefill": 3
          },
          "maxItems": {
            "title": "Max pages per run",
            "type": "integer",
            "description": "Overall cap on how many pages the run may emit across all queries, URLs, and crawled pages. 0 means no global cap.",
            "minimum": 0,
            "maximum": 10000,
            "default": 0,
            "prefill": 0
          },
          "outputFormats": {
            "title": "Output formats",
            "type": "array",
            "description": "Which representations to include per page, in any combination. `Links` adds every link found on the page as structured `{url, text}` pairs.",
            "editor": "select",
            "items": {
              "type": "string",
              "enum": [
                "markdown",
                "text",
                "html",
                "links"
              ],
              "enumTitles": [
                "Markdown",
                "Plain text",
                "HTML",
                "Links"
              ]
            },
            "default": [
              "markdown"
            ],
            "prefill": [
              "markdown"
            ]
          },
          "removeElementsCssSelector": {
            "title": "Remove elements (CSS selector)",
            "type": "string",
            "description": "Comma-separated CSS selectors removed before extraction (navigation, footers, ads, cookie bars). Set a non-matching selector such as `dummy_keep_everything` to keep everything.",
            "editor": "textfield",
            "default": "nav, footer, aside, script, style, .ad, .advertisement, [aria-hidden='true']",
            "prefill": "nav, footer, aside, script, style, .ad, .advertisement, [aria-hidden='true']"
          },
          "keepElementsCssSelector": {
            "title": "Keep only elements (CSS selector)",
            "type": "array",
            "description": "When set, only content inside these selectors is kept — everything else is dropped before extraction.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "htmlTransformer": {
            "title": "Main content extraction",
            "type": "string",
            "description": "`Readable content` finds the article body and drops navigation and boilerplate. `None` keeps the full cleaned page.",
            "editor": "select",
            "enum": [
              "none",
              "readable-text"
            ],
            "enumTitles": [
              "None (full page)",
              "Readable content (main article)"
            ],
            "default": "readable-text",
            "prefill": "readable-text"
          },
          "maxContentLength": {
            "title": "Max content length (characters)",
            "type": "integer",
            "description": "Truncate the emitted text and Markdown of each page to this many characters. 0 returns the full content. Useful for controlling embedding cost.",
            "minimum": 0,
            "maximum": 1000000,
            "default": 0,
            "prefill": 0
          },
          "includeMetadata": {
            "title": "Include page metadata",
            "type": "boolean",
            "description": "Add canonical URL, author, published date, keywords, social image, and site name (each only when the page provides it).",
            "default": true,
            "prefill": true
          },
          "chunkMarkdown": {
            "title": "Split content into chunks",
            "type": "boolean",
            "description": "Emit a `chunks` array per page — heading-aware Markdown chunks ready for embedding, never split inside code blocks or tables.",
            "default": false,
            "prefill": false
          },
          "chunkMaxChars": {
            "title": "Chunk size (characters)",
            "type": "integer",
            "description": "Target size of each chunk when `chunkMarkdown` is on. Code blocks and tables are kept whole even when larger.",
            "minimum": 200,
            "maximum": 10000,
            "default": 2000,
            "prefill": 2000
          },
          "chunkOverlapChars": {
            "title": "Chunk overlap (characters)",
            "type": "integer",
            "description": "Approximate overlap between consecutive chunks when `chunkMarkdown` is on, so context is not lost at chunk boundaries.",
            "minimum": 0,
            "maximum": 1000,
            "default": 200,
            "prefill": 200
          },
          "maxCrawlDepth": {
            "title": "Crawl depth",
            "type": "integer",
            "description": "0 reads only the start URLs. 1+ follows links found on those pages, staying on the same website, up to this depth.",
            "minimum": 0,
            "maximum": 5,
            "default": 0,
            "prefill": 0
          },
          "maxCrawlPages": {
            "title": "Max pages to crawl",
            "type": "integer",
            "description": "Safety cap on pages visited in crawl mode.",
            "minimum": 1,
            "maximum": 500,
            "default": 25,
            "prefill": 25
          },
          "domainAllowlist": {
            "title": "Allowed domains",
            "type": "array",
            "description": "Keep only pages whose host contains one of these substrings (case-insensitive).",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "domainBlocklist": {
            "title": "Blocked domains",
            "type": "array",
            "description": "Drop pages whose host contains one of these substrings.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "minTextLength": {
            "title": "Minimum text length",
            "type": "integer",
            "description": "Drop pages with fewer than this many characters of extracted text. Useful for skipping thin or placeholder pages.",
            "minimum": 0,
            "maximum": 1000000
          },
          "excludeContentSelectors": {
            "title": "Extra selectors to remove",
            "type": "array",
            "description": "Additional CSS selectors removed before extraction, on top of `Remove elements`.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "keywordsAnyOf": {
            "title": "Required keywords (any of)",
            "type": "array",
            "description": "Keep only pages whose title or content contains at least one of these keywords (case-insensitive).",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "emitFailedResults": {
            "title": "Emit results for pages that could not be fetched",
            "type": "boolean",
            "description": "When a search result page cannot be fetched after the full retry ladder, still emit one record for it with `url`, `title`, `description`, `searchResult`, `searchRank` and a `fetchError` note (no fabricated content). Turn off to skip failed pages entirely.",
            "default": true,
            "prefill": false
          }
        },
        "required": []
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "RAG Web Browser Output",
        "description": "One record per search result or fetched page with clean Markdown/text/HTML, links, page metadata for citations, optional heading-aware chunks, and the search-engine provenance of each result. Pages that could not be fetched still produce a metadata-only record with a `fetchError` note when `emitFailedResults` is on.",
        "properties": {
          "pages": {
            "type": "string",
            "title": "RAG pages",
            "description": "Dataset of fetched pages with content and metadata, ready for LLM and RAG pipelines.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "defaultMemoryMbytes": 1024,
      "minMemoryMbytes": 1024,
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "RAG Pages",
              "transformation": {
                "fields": [
                  "url",
                  "title",
                  "description",
                  "wordCount",
                  "httpStatusCode",
                  "loadedTime",
                  "searchRank",
                  "canonicalUrl",
                  "author",
                  "publishedDate",
                  "contentLength",
                  "engine",
                  "crawlDepth"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {}
    },
    "buildNumber": "1.0.4",
    "imageDigest": "45c95bac84b2490823120ed4b93e1e5d956f5008a456b5e734d04fc67eb8d7f8",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.05319666666666667
    }
  }
}