{
  "data": {
    "id": "bSVngXIyYRPALNUTs",
    "actId": "k8mATrelzfQPwRaY0",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-10-30T18:10:42.678Z",
    "finishedAt": "2026-10-30T18:10:53.896Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 11077,
      "runTimeSecs": 11.077,
      "computeUnits": 0.012307777777777779,
      "imageSizeBytes": 363917824
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Yandex SERP & Knowledge Graph Scraper Input\",\n  \"description\": \"Search Yandex or parse Yandex SERP URLs and collect organic results, ads, knowledge graph and AI answers, inline images and videos, products, local companies, weather, and related searches.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"Search by keyword or parse existing Yandex SERP URLs.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"search\",\n        \"byUrls\"\n      ],\n      \"enumTitles\": [\n        \"Search by keyword\",\n        \"Scrape Yandex SERP URLs\"\n      ],\n      \"default\": \"search\",\n      \"prefill\": \"search\"\n    },\n    \"queries\": {\n      \"title\": \"Search Queries\",\n      \"type\": \"array\",\n      \"description\": \"One or more search queries (mode=search). Each query is processed separately.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"minItems\": 1,\n      \"prefill\": [\n        \"python programming\"\n      ]\n    },\n    \"serpUrls\": {\n      \"title\": \"Yandex SERP URLs\",\n      \"type\": \"array\",\n      \"description\": \"Yandex search-result URLs, one per page (mode=byUrls). Direct Yandex URLs and translated Yandex URLs are accepted.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"domain\": {\n      \"title\": \"Yandex Domain\",\n      \"type\": \"string\",\n      \"description\": \"Regional Yandex front. yandex.com is the international entry point; Yandex may serve it from its Russia front (reported as servedDomain).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"yandex.com\",\n        \"yandex.by\",\n        \"yandex.kz\",\n        \"yandex.uz\",\n        \"yandex.com.tr\",\n        \"yandex.com.ge\",\n        \"yandex.az\",\n        \"yandex.md\",\n        \"yandex.tj\"\n      ],\n      \"enumTitles\": [\n        \"International (yandex.com)\",\n        \"Belarus (yandex.by)\",\n        \"Kazakhstan (yandex.kz)\",\n        \"Uzbekistan (yandex.uz)\",\n        \"Turkey (yandex.com.tr)\",\n        \"Georgia (yandex.com.ge)\",\n        \"Azerbaijan (yandex.az)\",\n        \"Moldova (yandex.md)\",\n        \"Tajikistan (yandex.tj)\"\n      ],\n      \"default\": \"yandex.com\"\n    },\n    \"language\": {\n      \"title\": \"Language\",\n      \"type\": \"string\",\n      \"description\": \"Yandex interface and search language. Match it to your query language to keep result text untranslated.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"en\",\n        \"ru\",\n        \"tr\",\n        \"kk\",\n        \"uz\",\n        \"az\",\n        \"be\",\n        \"uk\",\n        \"de\",\n        \"fr\",\n        \"es\",\n        \"it\",\n        \"pt\",\n        \"pl\",\n        \"cs\",\n        \"ar\",\n        \"he\",\n        \"fa\",\n        \"id\"\n      ],\n      \"enumTitles\": [\n        \"English\",\n        \"Russian\",\n        \"Turkish\",\n        \"Kazakh\",\n        \"Uzbek\",\n        \"Azerbaijani\",\n        \"Belarusian\",\n        \"Ukrainian\",\n        \"German\",\n        \"French\",\n        \"Spanish\",\n        \"Italian\",\n        \"Portuguese\",\n        \"Polish\",\n        \"Czech\",\n        \"Arabic\",\n        \"Hebrew\",\n        \"Persian\",\n        \"Indonesian\"\n      ],\n      \"default\": \"en\"\n    },\n    \"region\": {\n      \"title\": \"Region\",\n      \"type\": \"string\",\n      \"description\": \"Named Yandex region preset. Leave empty to use Yandex's default region. regionId overrides this value.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"ru\",\n        \"moscow\",\n        \"spb\",\n        \"novosibirsk\",\n        \"yekaterinburg\",\n        \"kazan\",\n        \"nizhny-novgorod\",\n        \"chelyabinsk\",\n        \"omsk\",\n        \"samara\",\n        \"rostov-on-don\",\n        \"ufa\",\n        \"krasnoyarsk\",\n        \"voronezh\",\n        \"perm\",\n        \"volgograd\",\n        \"by\",\n        \"minsk\",\n        \"kz\",\n        \"almaty\",\n        \"astana\",\n        \"uz\",\n        \"tashkent\",\n        \"tr\",\n        \"istanbul\",\n        \"ankara\",\n        \"izmir\",\n        \"ge\",\n        \"az\",\n        \"md\",\n        \"tj\"\n      ],\n      \"enumTitles\": [\n        \"Any region (default)\",\n        \"Russia\",\n        \"Moscow\",\n        \"Saint Petersburg\",\n        \"Novosibirsk\",\n        \"Yekaterinburg\",\n        \"Kazan\",\n        \"Nizhny Novgorod\",\n        \"Chelyabinsk\",\n        \"Omsk\",\n        \"Samara\",\n        \"Rostov-on-Don\",\n        \"Ufa\",\n        \"Krasnoyarsk\",\n        \"Voronezh\",\n        \"Perm\",\n        \"Volgograd\",\n        \"Belarus\",\n        \"Minsk\",\n        \"Kazakhstan\",\n        \"Almaty\",\n        \"Astana\",\n        \"Uzbekistan\",\n        \"Tashkent\",\n        \"Turkey\",\n        \"Istanbul\",\n        \"Ankara\",\n        \"Izmir\",\n        \"Georgia\",\n        \"Azerbaijan\",\n        \"Moldova\",\n        \"Tajikistan\"\n      ],\n      \"default\": \"\"\n    },\n    \"regionId\": {\n      \"title\": \"Region ID\",\n      \"type\": \"integer\",\n      \"description\": \"Numeric Yandex region ID (lr). Overrides the Region preset. For example 213 is Moscow and 983 is Turkey.\",\n      \"minimum\": 1,\n      \"maximum\": 3000000\n    },\n    \"maxPages\": {\n      \"title\": \"Max Pages Per Query\",\n      \"type\": \"integer\",\n      \"description\": \"Number of result pages to read per query (1-25). Yandex serves at most 25 pages.\",\n      \"default\": 3,\n      \"prefill\": 1,\n      \"minimum\": 1,\n      \"maximum\": 25\n    },\n    \"startPage\": {\n      \"title\": \"Start Page\",\n      \"type\": \"integer\",\n      \"description\": \"Zero-based page to start from (0-24). Use it to resume a deep result window.\",\n      \"default\": 0,\n      \"minimum\": 0,\n      \"maximum\": 24\n    },\n    \"maxItems\": {\n      \"title\": \"Max Items\",\n      \"type\": \"integer\",\n      \"description\": \"Global cap on unique items across all queries and pages (1-10,000). In rows mode this is the row count; in pages mode it caps the items inside page records.\",\n      \"default\": 100,\n      \"prefill\": 1,\n      \"minimum\": 1,\n      \"maximum\": 10000\n    },\n    \"timeFilter\": {\n      \"title\": \"Time Filter\",\n      \"type\": \"string\",\n      \"description\": \"Limit results by recency. The values map to Yandex's own past-day, past-two-weeks and past-month filters.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"day\",\n        \"twoWeeks\",\n        \"month\"\n      ],\n      \"enumTitles\": [\n        \"Any time\",\n        \"Past 24 hours\",\n        \"Past two weeks\",\n        \"Past month\"\n      ],\n      \"default\": \"any\"\n    },\n    \"fixTypos\": {\n      \"title\": \"Fix Typos\",\n      \"type\": \"boolean\",\n      \"description\": \"Let Yandex correct misspelled queries. Turn it off for exact-match searches.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"includeAds\": {\n      \"title\": \"Include Ads\",\n      \"type\": \"boolean\",\n      \"description\": \"Include sponsored Yandex Direct rows with their click URL and displayed domain.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"includeBlocks\": {\n      \"title\": \"Include SERP Blocks\",\n      \"type\": \"boolean\",\n      \"description\": \"Include knowledge graph, AI answer, inline images, inline videos, products, local companies and weather when present.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"includeRelatedSearches\": {\n      \"title\": \"Include Related Searches\",\n      \"type\": \"boolean\",\n      \"description\": \"Include the related-search suggestions shown below the results (requires Include SERP Blocks).\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"outputFormat\": {\n      \"title\": \"Output Format\",\n      \"type\": \"string\",\n      \"description\": \"Page records preserve the existing dataset shape; rows emit one flat record per result or block item.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"pages\",\n        \"rows\"\n      ],\n      \"enumTitles\": [\n        \"One record per SERP page\",\n        \"One record per result item\"\n      ],\n      \"default\": \"pages\",\n      \"prefill\": \"pages\"\n    },\n    \"failIfEmpty\": {\n      \"title\": \"Fail If Empty\",\n      \"type\": \"boolean\",\n      \"description\": \"Fail the run when no records were produced, instead of finishing with an empty dataset.\",\n      \"default\": false,\n      \"prefill\": false\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Yandex SERP & Knowledge Graph Scraper\n\nScrape **Yandex** web search across nine regional fronts and get the whole result page, not just ten blue links: organic rankings, sponsored rows, knowledge graph and AI answers, inline images and videos, product tiles, local companies, weather, and related searches. Choose page records for the familiar one-record-per-SERP shape or flat rows for rank tracking, ad intelligence and analytics. No login, API key, or proxy setup.\n\n## What it does\n\n- **Two modes:** search by keyword, or parse Yandex SERP URLs you already have.\n- **Nine live fronts:** `yandex.com`, `.by`, `.kz`, `.uz`, `.com.tr`, `.com.ge`, `.az`, `.md`, `.tj`.\n- **Rank tracking by region:** 30+ named region presets plus a numeric `regionId` override, 19 interface languages, and correct past-day / two-week / month filters.\n- **The full SERP surface:** organic rows with true slot and organic ranks, ads with click URLs and displayed domains, knowledge graph + AI answer text and sources, inline images, inline videos, products, local companies, weather and related searches.\n- **Page or row output:** keep today's page records or switch to one flat row per item with `recordType`.\n- **Clean data:** empty fields, arrays and objects are omitted at every depth, never sent as `null`.\n\n## Services\n\n| Service | What you get |\n|---|---|\n| Keyword search | Multi-query Yandex SERP collection with pagination, region, language, domain and recency controls |\n| URL parsing | Fetch specific Yandex result pages from a list of URLs, including translated Yandex URLs |\n| Rank tracking | Overall slot, organic-only rank, page number, query and region on every result |\n| Ad intelligence | Sponsored title, snippet, click URL, displayed domain and sitelinks |\n| Entity research | Knowledge graph attributes, AI answer body, cited sources and \"see also\" entities |\n| Commerce research | Product titles, prices, old prices, currencies, shops, delivery options and ratings |\n| Local research | Company names, categories, ratings, review counts, addresses, metro and opening hours |\n| Media discovery | Inline image thumbnails and originals, video cards with duration, views, publish date and preview |\n| SERP context | Weather card, related searches and result-count text |\n\n## How it works\n\n1. The actor builds a Yandex search URL from your query, domain, language, region and time filter.\n2. It reads the server-rendered result page, using Yandex's own translated result view when a regional front challenges the request.\n3. It parses every result block in page order and assigns ranks across organic and sponsored rows.\n4. It removes duplicate URLs and duplicate block items, then stops at `maxItems`, an empty page, or the end of Yandex's 25-page window.\n5. It pushes either one page record or one flat row per item. Page records keep the original dataset fields and add the new blocks beside them.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | `search` by keyword or `byUrls` for existing SERP URLs |\n| `queries` | array | `[\"python programming\"]` | One or more search queries (mode=`search`) |\n| `serpUrls` | array | – | Yandex SERP URLs, one per page (mode=`byUrls`) |\n| `domain` | string | `yandex.com` | Regional front: `.com`, `.by`, `.kz`, `.uz`, `.com.tr`, `.com.ge`, `.az`, `.md`, `.tj` |\n| `language` | string | `en` | Yandex interface/search language (19 options) |\n| `region` | string | – | Named region preset such as `moscow`, `almaty`, `istanbul` |\n| `regionId` | integer | – | Numeric Yandex region ID; overrides `region` |\n| `maxPages` | integer | `3` | Pages per query, 1–25 |\n| `startPage` | integer | `0` | Zero-based first page, 0–24 |\n| `maxItems` | integer | `100` | Global unique-item cap, 1–10,000 |\n| `timeFilter` | string | `any` | `any`, `day`, `twoWeeks`, `month` |\n| `fixTypos` | boolean | `true` | Let Yandex correct misspelled queries |\n| `includeAds` | boolean | `true` | Include sponsored rows |\n| `includeBlocks` | boolean | `true` | Include knowledge graph, AI answer, images, videos, products, companies, weather |\n| `includeRelatedSearches` | boolean | `true` | Include related-search suggestions |\n| `outputFormat` | string | `pages` | `pages` for page records, `rows` for flat items |\n| `failIfEmpty` | boolean | `false` | Fail the run when nothing was collected |\n\n### Example: rank tracking in Moscow\n\n```json\n{\n  \"mode\": \"search\",\n  \"queries\": [\"купить пластиковые окна\", \"пластиковые окна цена\"],\n  \"domain\": \"yandex.com\",\n  \"language\": \"ru\",\n  \"regionId\": 213,\n  \"maxPages\": 5,\n  \"maxItems\": 500,\n  \"timeFilter\": \"month\",\n  \"outputFormat\": \"rows\"\n}\n```\n\n### Example: audit a saved SERP URL\n\n```json\n{\n  \"mode\": \"byUrls\",\n  \"serpUrls\": [\"https://yandex.com.tr/search/?text=ikinci+el+araba&lr=87&p=0\"],\n  \"includeBlocks\": true,\n  \"includeAds\": true,\n  \"outputFormat\": \"pages\"\n}\n```\n\n## Output\n\n### Pages mode (`outputFormat: \"pages\"`)\n\nOne record per SERP page. Existing fields are preserved; new fields appear only when the block exists.\n\n- `query`, `page`, `url`, `domain`, `lang`, `scraped_at`\n- `total_results_text` — the result-count sentence when Yandex publishes one\n- `organic_results[]` — `position` (all slots), `organicPosition`, `resultType`, `title`, `link`, `displayed_link`, `displayedDomain`, `host`, `snippet`, `favicon`, `thumbnail`, `date`, `sitelinks[]`, `rating`, `reviewCount`, `price`, `priceCurrency`, `shopName`, `delivery[]`\n- `ads_results[]` — `position`, `title`, `link`, `clickUrl`, `displayed_link`, `displayedDomain`, `url` (only when Yandex exposes the destination), `snippet`, `sitelinks[]`\n- `knowledge_graph` — `title`, `description`, `image_url`, `source_url`, `attributes{}`, `label`, `answerText`, `sources[]`, `seeAlso[]`\n- `aiAnswer` — `label`, `text`, `sources[]`, `imageUrl` for standalone AI answer blocks\n- `inline_images[]` — `title`, `thumbnail_url`, `source_url`, `originalImageUrl`, `sourceHost`, `alt`\n- `inline_videos[]` — `title`, `link`, `thumbnail_url`, `duration`, `durationSeconds`, `views`, `publishedAt`, `previewVideoUrl`, `sourceHost`\n- `products[]` — `title`, `url`, `price`, `priceCurrency`, `oldPrice`, `rating`, `reviewCount`, `shopName`, `delivery[]`, `imageUrl`\n- `companies[]` — `title`, `url`, `rating`, `reviewCount`, `category`, `hours`, `priceLevel`, `address`, `metro`, `distance`, `features[]`, `imageUrl`\n- `weather` — `location`, `dateText`, `temperature`, `feelsLike`, `condition`, `wind`, `forecast[]`, `hourly[]`, `url`\n- `related_searches[]` — `query`, `link`\n- `search_metadata` — `requested_domain`, `served_domain`, `locale_switched`, `source_path`, `captcha_encountered`, `pages_fetched`, `results_found`, `region_id`, `region_name`\n- `pagination_info` — `current_page`, `max_pages_set`, `has_next_page`, `results_per_page`, `start_page`, `source_exhausted`\n\n### Rows mode (`outputFormat: \"rows\"`)\n\nOne record per item with `recordType` set to `organic`, `ad`, `knowledgeGraph`, `aiAnswer`, `inlineImage`, `inlineVideo`, `product`, `company`, `weather`, or `relatedSearch`.\n\nEvery row carries `query`, `page`, `domain`, `language`, `regionId`, `regionName`, `sourcePath`, `scrapedAt`, and the fields that belong to its type: `position`, `organicPosition`, `resultType`, `blockType`, `title`, `url`, `clickUrl`, `displayedUrl`, `displayedDomain`, `host`, `snippet`, `thumbnail`, `favicon`, `sitelinks[]`, `rating`, `reviewCount`, `price`, `priceCurrency`, `oldPrice`, `shopName`, `delivery[]`, `duration`, `durationSeconds`, `views`, `publishedAt`, `sourceHost`, `imageUrl`, `originalImageUrl`, `sources[]`, `attributes{}`, plus weather and company details when relevant.\n\n## Usage cost\n\nYou pay Apify's standard actor start and dataset-item pricing for this run. There is no proxy, API key, or external data subscription to configure, and the actor never asks you to supply credentials.\n\n## FAQ\n\n### Do I need a proxy or a Yandex account?\n\nNo. The actor uses a working connection path automatically and needs no login, cookie, or API key.\n\n### Why do some fields disappear from a record?\n\nEmpty values are omitted on purpose. If a page has no knowledge graph, no ad, no price, or no video, that field is absent rather than `null` or an empty array.\n\n### Why does `served_domain` differ from the domain I selected?\n\nYandex sometimes serves an international or regional entry point from another front, and `.com` is commonly served from `.ru`. The requested and actual fronts are both reported in `search_metadata`.\n\n### Why do I get fewer results than I asked for?\n\nYandex serves at most 10 results per page and 25 pages per query, so one query tops out around 250 results. Split a large job by region, time window, or query variant to collect more.\n\n### Are sponsored results included?\n\nYes, when `includeAds` is true. Each ad has a click URL and a displayed domain. A final destination URL is included only when Yandex exposes it; the actor never invents one.\n\n### What is the difference between `position` and `organicPosition`?\n\n`position` counts every result slot in page order, including ads. `organicPosition` counts only organic rows. Use the latter for classic rank tracking.\n\n### Can I scrape a URL I already have?\n\nYes. Use `mode: \"byUrls\"` and paste one or more Yandex result URLs. The actor reads the query, region, page and time filter from each URL.\n\n### Are old saved tasks still supported?\n\nYes. Legacy keys such as `searchQueries`, `yandexDomain`, `lang`, `lr`, `noReask`, old time-filter names and the old proxy field are accepted and mapped automatically. They are not shown in the input form anymore.\n\n### Is this affiliated with Yandex?\n\nNo. This is an independent third-party actor that reads publicly available Yandex search pages.\n\n## Notes\n\n- Yandex serves 10 organic results per page; page numbers are zero-based in the input and one-based in the output.\n- `maxItems` counts unique items across all queries. In pages mode it limits the items inside page records; in rows mode it limits rows.\n- `regionId` wins over `region`. Use it when you need an exact Yandex region rather than a named preset.\n- `language` should match your query language to keep result text in the original language.\n- Empty values are omitted at every depth. Arrays and nested objects are never sent as `null`, `\"\"`, `[]` or `{}`.\n- The actor stops on `maxItems`, an empty page, or the end of Yandex's page window. It never stops on a wall-clock timer.\n\n## Limitations\n\n- **Vertical search is separate.** This actor returns the inline blocks that appear inside the web SERP. Dedicated image, video, news, and maps search belong to the separate Yandex vertical actors.\n- **Inline blocks are conditional.** Yandex decides per query, front and layout whether to render image, video, product, company or weather cards. The actor emits a block only when the served page contains it; an absent block is not an error and is never synthesized.\n- **Ad destinations are sometimes hidden.** Yandex often keeps only a click-tracker URL. `clickUrl` and `displayedDomain` are always honest; a direct destination is added only when Yandex reveals it.\n- **Dates are conditional.** Web results rarely expose a publication date, so `date` appears only when the page shows one. Video publish dates are normalized to ISO when they can be parsed.\n- **Default region is context-sensitive.** When `region` and `regionId` are empty, Yandex chooses a region from the query and request context, so two runs can rank differently. Set `regionId` (for example `213` for Moscow) when you need reproducible rankings.\n- **Deep pages lose relevance.** Pages 11–25 are available, but Yandex's ranking gets less precise beyond the first ten. Use smaller page windows when relevance matters more than volume.\n- **Translated result text.** When Yandex serves a regional front through its translated view, the original language is preserved when `language` matches the query language. A language mismatch can produce translated snippets.\n- **Localized labels.** Some SERP labels (for example weather conditions and company categories) stay in the language Yandex renders for that front; the actor does not machine-translate them.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "yandex-serp-and-knowledge-graph-scraper",
      "title": "Yandex SERP & Knowledge Graph Scraper",
      "description": "Collect Yandex web results, ads, knowledge graph and AI answers, images, videos, products, local companies, weather and related searches across 9 regional fronts, 19 languages and 30+ regions, with page or flat-row output.",
      "version": "1.0",
      "buildTag": "latest",
      "readme": "# Yandex SERP & Knowledge Graph Scraper\n\nScrape **Yandex** web search across nine regional fronts and get the whole result page, not just ten blue links: organic rankings, sponsored rows, knowledge graph and AI answers, inline images and videos, product tiles, local companies, weather, and related searches. Choose page records for the familiar one-record-per-SERP shape or flat rows for rank tracking, ad intelligence and analytics. No login, API key, or proxy setup.\n\n## What it does\n\n- **Two modes:** search by keyword, or parse Yandex SERP URLs you already have.\n- **Nine live fronts:** `yandex.com`, `.by`, `.kz`, `.uz`, `.com.tr`, `.com.ge`, `.az`, `.md`, `.tj`.\n- **Rank tracking by region:** 30+ named region presets plus a numeric `regionId` override, 19 interface languages, and correct past-day / two-week / month filters.\n- **The full SERP surface:** organic rows with true slot and organic ranks, ads with click URLs and displayed domains, knowledge graph + AI answer text and sources, inline images, inline videos, products, local companies, weather and related searches.\n- **Page or row output:** keep today's page records or switch to one flat row per item with `recordType`.\n- **Clean data:** empty fields, arrays and objects are omitted at every depth, never sent as `null`.\n\n## Services\n\n| Service | What you get |\n|---|---|\n| Keyword search | Multi-query Yandex SERP collection with pagination, region, language, domain and recency controls |\n| URL parsing | Fetch specific Yandex result pages from a list of URLs, including translated Yandex URLs |\n| Rank tracking | Overall slot, organic-only rank, page number, query and region on every result |\n| Ad intelligence | Sponsored title, snippet, click URL, displayed domain and sitelinks |\n| Entity research | Knowledge graph attributes, AI answer body, cited sources and \"see also\" entities |\n| Commerce research | Product titles, prices, old prices, currencies, shops, delivery options and ratings |\n| Local research | Company names, categories, ratings, review counts, addresses, metro and opening hours |\n| Media discovery | Inline image thumbnails and originals, video cards with duration, views, publish date and preview |\n| SERP context | Weather card, related searches and result-count text |\n\n## How it works\n\n1. The actor builds a Yandex search URL from your query, domain, language, region and time filter.\n2. It reads the server-rendered result page, using Yandex's own translated result view when a regional front challenges the request.\n3. It parses every result block in page order and assigns ranks across organic and sponsored rows.\n4. It removes duplicate URLs and duplicate block items, then stops at `maxItems`, an empty page, or the end of Yandex's 25-page window.\n5. It pushes either one page record or one flat row per item. Page records keep the original dataset fields and add the new blocks beside them.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | `search` by keyword or `byUrls` for existing SERP URLs |\n| `queries` | array | `[\"python programming\"]` | One or more search queries (mode=`search`) |\n| `serpUrls` | array | – | Yandex SERP URLs, one per page (mode=`byUrls`) |\n| `domain` | string | `yandex.com` | Regional front: `.com`, `.by`, `.kz`, `.uz`, `.com.tr`, `.com.ge`, `.az`, `.md`, `.tj` |\n| `language` | string | `en` | Yandex interface/search language (19 options) |\n| `region` | string | – | Named region preset such as `moscow`, `almaty`, `istanbul` |\n| `regionId` | integer | – | Numeric Yandex region ID; overrides `region` |\n| `maxPages` | integer | `3` | Pages per query, 1–25 |\n| `startPage` | integer | `0` | Zero-based first page, 0–24 |\n| `maxItems` | integer | `100` | Global unique-item cap, 1–10,000 |\n| `timeFilter` | string | `any` | `any`, `day`, `twoWeeks`, `month` |\n| `fixTypos` | boolean | `true` | Let Yandex correct misspelled queries |\n| `includeAds` | boolean | `true` | Include sponsored rows |\n| `includeBlocks` | boolean | `true` | Include knowledge graph, AI answer, images, videos, products, companies, weather |\n| `includeRelatedSearches` | boolean | `true` | Include related-search suggestions |\n| `outputFormat` | string | `pages` | `pages` for page records, `rows` for flat items |\n| `failIfEmpty` | boolean | `false` | Fail the run when nothing was collected |\n\n### Example: rank tracking in Moscow\n\n```json\n{\n  \"mode\": \"search\",\n  \"queries\": [\"купить пластиковые окна\", \"пластиковые окна цена\"],\n  \"domain\": \"yandex.com\",\n  \"language\": \"ru\",\n  \"regionId\": 213,\n  \"maxPages\": 5,\n  \"maxItems\": 500,\n  \"timeFilter\": \"month\",\n  \"outputFormat\": \"rows\"\n}\n```\n\n### Example: audit a saved SERP URL\n\n```json\n{\n  \"mode\": \"byUrls\",\n  \"serpUrls\": [\"https://yandex.com.tr/search/?text=ikinci+el+araba&lr=87&p=0\"],\n  \"includeBlocks\": true,\n  \"includeAds\": true,\n  \"outputFormat\": \"pages\"\n}\n```\n\n## Output\n\n### Pages mode (`outputFormat: \"pages\"`)\n\nOne record per SERP page. Existing fields are preserved; new fields appear only when the block exists.\n\n- `query`, `page`, `url`, `domain`, `lang`, `scraped_at`\n- `total_results_text` — the result-count sentence when Yandex publishes one\n- `organic_results[]` — `position` (all slots), `organicPosition`, `resultType`, `title`, `link`, `displayed_link`, `displayedDomain`, `host`, `snippet`, `favicon`, `thumbnail`, `date`, `sitelinks[]`, `rating`, `reviewCount`, `price`, `priceCurrency`, `shopName`, `delivery[]`\n- `ads_results[]` — `position`, `title`, `link`, `clickUrl`, `displayed_link`, `displayedDomain`, `url` (only when Yandex exposes the destination), `snippet`, `sitelinks[]`\n- `knowledge_graph` — `title`, `description`, `image_url`, `source_url`, `attributes{}`, `label`, `answerText`, `sources[]`, `seeAlso[]`\n- `aiAnswer` — `label`, `text`, `sources[]`, `imageUrl` for standalone AI answer blocks\n- `inline_images[]` — `title`, `thumbnail_url`, `source_url`, `originalImageUrl`, `sourceHost`, `alt`\n- `inline_videos[]` — `title`, `link`, `thumbnail_url`, `duration`, `durationSeconds`, `views`, `publishedAt`, `previewVideoUrl`, `sourceHost`\n- `products[]` — `title`, `url`, `price`, `priceCurrency`, `oldPrice`, `rating`, `reviewCount`, `shopName`, `delivery[]`, `imageUrl`\n- `companies[]` — `title`, `url`, `rating`, `reviewCount`, `category`, `hours`, `priceLevel`, `address`, `metro`, `distance`, `features[]`, `imageUrl`\n- `weather` — `location`, `dateText`, `temperature`, `feelsLike`, `condition`, `wind`, `forecast[]`, `hourly[]`, `url`\n- `related_searches[]` — `query`, `link`\n- `search_metadata` — `requested_domain`, `served_domain`, `locale_switched`, `source_path`, `captcha_encountered`, `pages_fetched`, `results_found`, `region_id`, `region_name`\n- `pagination_info` — `current_page`, `max_pages_set`, `has_next_page`, `results_per_page`, `start_page`, `source_exhausted`\n\n### Rows mode (`outputFormat: \"rows\"`)\n\nOne record per item with `recordType` set to `organic`, `ad`, `knowledgeGraph`, `aiAnswer`, `inlineImage`, `inlineVideo`, `product`, `company`, `weather`, or `relatedSearch`.\n\nEvery row carries `query`, `page`, `domain`, `language`, `regionId`, `regionName`, `sourcePath`, `scrapedAt`, and the fields that belong to its type: `position`, `organicPosition`, `resultType`, `blockType`, `title`, `url`, `clickUrl`, `displayedUrl`, `displayedDomain`, `host`, `snippet`, `thumbnail`, `favicon`, `sitelinks[]`, `rating`, `reviewCount`, `price`, `priceCurrency`, `oldPrice`, `shopName`, `delivery[]`, `duration`, `durationSeconds`, `views`, `publishedAt`, `sourceHost`, `imageUrl`, `originalImageUrl`, `sources[]`, `attributes{}`, plus weather and company details when relevant.\n\n## Usage cost\n\nYou pay Apify's standard actor start and dataset-item pricing for this run. There is no proxy, API key, or external data subscription to configure, and the actor never asks you to supply credentials.\n\n## FAQ\n\n### Do I need a proxy or a Yandex account?\n\nNo. The actor uses a working connection path automatically and needs no login, cookie, or API key.\n\n### Why do some fields disappear from a record?\n\nEmpty values are omitted on purpose. If a page has no knowledge graph, no ad, no price, or no video, that field is absent rather than `null` or an empty array.\n\n### Why does `served_domain` differ from the domain I selected?\n\nYandex sometimes serves an international or regional entry point from another front, and `.com` is commonly served from `.ru`. The requested and actual fronts are both reported in `search_metadata`.\n\n### Why do I get fewer results than I asked for?\n\nYandex serves at most 10 results per page and 25 pages per query, so one query tops out around 250 results. Split a large job by region, time window, or query variant to collect more.\n\n### Are sponsored results included?\n\nYes, when `includeAds` is true. Each ad has a click URL and a displayed domain. A final destination URL is included only when Yandex exposes it; the actor never invents one.\n\n### What is the difference between `position` and `organicPosition`?\n\n`position` counts every result slot in page order, including ads. `organicPosition` counts only organic rows. Use the latter for classic rank tracking.\n\n### Can I scrape a URL I already have?\n\nYes. Use `mode: \"byUrls\"` and paste one or more Yandex result URLs. The actor reads the query, region, page and time filter from each URL.\n\n### Are old saved tasks still supported?\n\nYes. Legacy keys such as `searchQueries`, `yandexDomain`, `lang`, `lr`, `noReask`, old time-filter names and the old proxy field are accepted and mapped automatically. They are not shown in the input form anymore.\n\n### Is this affiliated with Yandex?\n\nNo. This is an independent third-party actor that reads publicly available Yandex search pages.\n\n## Notes\n\n- Yandex serves 10 organic results per page; page numbers are zero-based in the input and one-based in the output.\n- `maxItems` counts unique items across all queries. In pages mode it limits the items inside page records; in rows mode it limits rows.\n- `regionId` wins over `region`. Use it when you need an exact Yandex region rather than a named preset.\n- `language` should match your query language to keep result text in the original language.\n- Empty values are omitted at every depth. Arrays and nested objects are never sent as `null`, `\"\"`, `[]` or `{}`.\n- The actor stops on `maxItems`, an empty page, or the end of Yandex's page window. It never stops on a wall-clock timer.\n\n## Limitations\n\n- **Vertical search is separate.** This actor returns the inline blocks that appear inside the web SERP. Dedicated image, video, news, and maps search belong to the separate Yandex vertical actors.\n- **Inline blocks are conditional.** Yandex decides per query, front and layout whether to render image, video, product, company or weather cards. The actor emits a block only when the served page contains it; an absent block is not an error and is never synthesized.\n- **Ad destinations are sometimes hidden.** Yandex often keeps only a click-tracker URL. `clickUrl` and `displayedDomain` are always honest; a direct destination is added only when Yandex reveals it.\n- **Dates are conditional.** Web results rarely expose a publication date, so `date` appears only when the page shows one. Video publish dates are normalized to ISO when they can be parsed.\n- **Default region is context-sensitive.** When `region` and `regionId` are empty, Yandex chooses a region from the query and request context, so two runs can rank differently. Set `regionId` (for example `213` for Moscow) when you need reproducible rankings.\n- **Deep pages lose relevance.** Pages 11–25 are available, but Yandex's ranking gets less precise beyond the first ten. Use smaller page windows when relevance matters more than volume.\n- **Translated result text.** When Yandex serves a regional front through its translated view, the original language is preserved when `language` matches the query language. A language mismatch can produce translated snippets.\n- **Localized labels.** Some SERP labels (for example weather conditions and company categories) stay in the language Yandex renders for that front; the actor does not machine-translate them.\n",
      "meta": {
        "templateId": "python-http"
      },
      "input": {
        "title": "Yandex SERP & Knowledge Graph Scraper Input",
        "description": "Search Yandex or parse Yandex SERP URLs and collect organic results, ads, knowledge graph and AI answers, inline images and videos, products, local companies, weather, and related searches.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "Search by keyword or parse existing Yandex SERP URLs.",
            "editor": "select",
            "enum": [
              "search",
              "byUrls"
            ],
            "enumTitles": [
              "Search by keyword",
              "Scrape Yandex SERP URLs"
            ],
            "default": "search",
            "prefill": "search"
          },
          "queries": {
            "title": "Search Queries",
            "type": "array",
            "description": "One or more search queries (mode=search). Each query is processed separately.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "prefill": [
              "python programming"
            ]
          },
          "serpUrls": {
            "title": "Yandex SERP URLs",
            "type": "array",
            "description": "Yandex search-result URLs, one per page (mode=byUrls). Direct Yandex URLs and translated Yandex URLs are accepted.",
            "editor": "stringList",
            "items": {
              "type": "string"
            }
          },
          "domain": {
            "title": "Yandex Domain",
            "type": "string",
            "description": "Regional Yandex front. yandex.com is the international entry point; Yandex may serve it from its Russia front (reported as servedDomain).",
            "editor": "select",
            "enum": [
              "yandex.com",
              "yandex.by",
              "yandex.kz",
              "yandex.uz",
              "yandex.com.tr",
              "yandex.com.ge",
              "yandex.az",
              "yandex.md",
              "yandex.tj"
            ],
            "enumTitles": [
              "International (yandex.com)",
              "Belarus (yandex.by)",
              "Kazakhstan (yandex.kz)",
              "Uzbekistan (yandex.uz)",
              "Turkey (yandex.com.tr)",
              "Georgia (yandex.com.ge)",
              "Azerbaijan (yandex.az)",
              "Moldova (yandex.md)",
              "Tajikistan (yandex.tj)"
            ],
            "default": "yandex.com"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Yandex interface and search language. Match it to your query language to keep result text untranslated.",
            "editor": "select",
            "enum": [
              "en",
              "ru",
              "tr",
              "kk",
              "uz",
              "az",
              "be",
              "uk",
              "de",
              "fr",
              "es",
              "it",
              "pt",
              "pl",
              "cs",
              "ar",
              "he",
              "fa",
              "id"
            ],
            "enumTitles": [
              "English",
              "Russian",
              "Turkish",
              "Kazakh",
              "Uzbek",
              "Azerbaijani",
              "Belarusian",
              "Ukrainian",
              "German",
              "French",
              "Spanish",
              "Italian",
              "Portuguese",
              "Polish",
              "Czech",
              "Arabic",
              "Hebrew",
              "Persian",
              "Indonesian"
            ],
            "default": "en"
          },
          "region": {
            "title": "Region",
            "type": "string",
            "description": "Named Yandex region preset. Leave empty to use Yandex's default region. regionId overrides this value.",
            "editor": "select",
            "enum": [
              "",
              "ru",
              "moscow",
              "spb",
              "novosibirsk",
              "yekaterinburg",
              "kazan",
              "nizhny-novgorod",
              "chelyabinsk",
              "omsk",
              "samara",
              "rostov-on-don",
              "ufa",
              "krasnoyarsk",
              "voronezh",
              "perm",
              "volgograd",
              "by",
              "minsk",
              "kz",
              "almaty",
              "astana",
              "uz",
              "tashkent",
              "tr",
              "istanbul",
              "ankara",
              "izmir",
              "ge",
              "az",
              "md",
              "tj"
            ],
            "enumTitles": [
              "Any region (default)",
              "Russia",
              "Moscow",
              "Saint Petersburg",
              "Novosibirsk",
              "Yekaterinburg",
              "Kazan",
              "Nizhny Novgorod",
              "Chelyabinsk",
              "Omsk",
              "Samara",
              "Rostov-on-Don",
              "Ufa",
              "Krasnoyarsk",
              "Voronezh",
              "Perm",
              "Volgograd",
              "Belarus",
              "Minsk",
              "Kazakhstan",
              "Almaty",
              "Astana",
              "Uzbekistan",
              "Tashkent",
              "Turkey",
              "Istanbul",
              "Ankara",
              "Izmir",
              "Georgia",
              "Azerbaijan",
              "Moldova",
              "Tajikistan"
            ],
            "default": ""
          },
          "regionId": {
            "title": "Region ID",
            "type": "integer",
            "description": "Numeric Yandex region ID (lr). Overrides the Region preset. For example 213 is Moscow and 983 is Turkey.",
            "minimum": 1,
            "maximum": 3000000
          },
          "maxPages": {
            "title": "Max Pages Per Query",
            "type": "integer",
            "description": "Number of result pages to read per query (1-25). Yandex serves at most 25 pages.",
            "default": 3,
            "prefill": 1,
            "minimum": 1,
            "maximum": 25
          },
          "startPage": {
            "title": "Start Page",
            "type": "integer",
            "description": "Zero-based page to start from (0-24). Use it to resume a deep result window.",
            "default": 0,
            "minimum": 0,
            "maximum": 24
          },
          "maxItems": {
            "title": "Max Items",
            "type": "integer",
            "description": "Global cap on unique items across all queries and pages (1-10,000). In rows mode this is the row count; in pages mode it caps the items inside page records.",
            "default": 100,
            "prefill": 1,
            "minimum": 1,
            "maximum": 10000
          },
          "timeFilter": {
            "title": "Time Filter",
            "type": "string",
            "description": "Limit results by recency. The values map to Yandex's own past-day, past-two-weeks and past-month filters.",
            "editor": "select",
            "enum": [
              "any",
              "day",
              "twoWeeks",
              "month"
            ],
            "enumTitles": [
              "Any time",
              "Past 24 hours",
              "Past two weeks",
              "Past month"
            ],
            "default": "any"
          },
          "fixTypos": {
            "title": "Fix Typos",
            "type": "boolean",
            "description": "Let Yandex correct misspelled queries. Turn it off for exact-match searches.",
            "default": true,
            "prefill": true
          },
          "includeAds": {
            "title": "Include Ads",
            "type": "boolean",
            "description": "Include sponsored Yandex Direct rows with their click URL and displayed domain.",
            "default": true,
            "prefill": true
          },
          "includeBlocks": {
            "title": "Include SERP Blocks",
            "type": "boolean",
            "description": "Include knowledge graph, AI answer, inline images, inline videos, products, local companies and weather when present.",
            "default": true,
            "prefill": true
          },
          "includeRelatedSearches": {
            "title": "Include Related Searches",
            "type": "boolean",
            "description": "Include the related-search suggestions shown below the results (requires Include SERP Blocks).",
            "default": true,
            "prefill": true
          },
          "outputFormat": {
            "title": "Output Format",
            "type": "string",
            "description": "Page records preserve the existing dataset shape; rows emit one flat record per result or block item.",
            "editor": "select",
            "enum": [
              "pages",
              "rows"
            ],
            "enumTitles": [
              "One record per SERP page",
              "One record per result item"
            ],
            "default": "pages",
            "prefill": "pages"
          },
          "failIfEmpty": {
            "title": "Fail If Empty",
            "type": "boolean",
            "description": "Fail the run when no records were produced, instead of finishing with an empty dataset.",
            "default": false,
            "prefill": false
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Yandex SERP & Knowledge Graph Scraper Output",
        "description": "Yandex search pages or flat result rows with organic results, ads, knowledge graph and AI answers, inline images and videos, products, local companies, weather and related searches.",
        "properties": {
          "results": {
            "type": "string",
            "title": "Yandex search results",
            "description": "Dataset containing scraped Yandex SERP pages or flat result rows.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "dockerfile": "../Dockerfile",
      "defaultMemoryMbytes": 1024,
      "environmentVariables": {},
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "Yandex Search Results",
          "views": {
            "overview": {
              "title": "Results Overview",
              "transformation": {
                "fields": [
                  "query",
                  "page",
                  "domain",
                  "total_results_text",
                  "organic_results",
                  "scraped_at"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "query": {
                    "label": "Query",
                    "format": "text"
                  },
                  "page": {
                    "label": "Page",
                    "format": "number"
                  },
                  "domain": {
                    "label": "Domain",
                    "format": "text"
                  },
                  "total_results_text": {
                    "label": "Total Results",
                    "format": "text"
                  },
                  "organic_results": {
                    "label": "Organic Results",
                    "format": "array"
                  },
                  "scraped_at": {
                    "label": "Scraped At",
                    "format": "text"
                  }
                }
              }
            },
            "detailed": {
              "title": "Detailed View",
              "transformation": {
                "fields": [
                  "query",
                  "page",
                  "url",
                  "domain",
                  "lang",
                  "total_results_text",
                  "organic_results",
                  "ads_results",
                  "knowledge_graph",
                  "aiAnswer",
                  "inline_images",
                  "inline_videos",
                  "products",
                  "companies",
                  "weather",
                  "related_searches",
                  "search_metadata",
                  "pagination_info",
                  "scraped_at"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "query": {
                    "label": "Query",
                    "format": "text"
                  },
                  "page": {
                    "label": "Page",
                    "format": "number"
                  },
                  "url": {
                    "label": "URL",
                    "format": "link"
                  },
                  "domain": {
                    "label": "Domain",
                    "format": "text"
                  },
                  "lang": {
                    "label": "Language",
                    "format": "text"
                  },
                  "total_results_text": {
                    "label": "Total Results",
                    "format": "text"
                  },
                  "organic_results": {
                    "label": "Organic Results",
                    "format": "array"
                  },
                  "ads_results": {
                    "label": "Ads",
                    "format": "array"
                  },
                  "knowledge_graph": {
                    "label": "Knowledge Graph",
                    "format": "object"
                  },
                  "aiAnswer": {
                    "label": "AI Answer",
                    "format": "object"
                  },
                  "inline_images": {
                    "label": "Images",
                    "format": "array"
                  },
                  "inline_videos": {
                    "label": "Videos",
                    "format": "array"
                  },
                  "products": {
                    "label": "Products",
                    "format": "array"
                  },
                  "companies": {
                    "label": "Companies",
                    "format": "array"
                  },
                  "weather": {
                    "label": "Weather",
                    "format": "object"
                  },
                  "related_searches": {
                    "label": "Related Searches",
                    "format": "array"
                  },
                  "search_metadata": {
                    "label": "Metadata",
                    "format": "object"
                  },
                  "pagination_info": {
                    "label": "Pagination",
                    "format": "object"
                  },
                  "scraped_at": {
                    "label": "Scraped At",
                    "format": "text"
                  }
                }
              }
            }
          }
        }
      }
    },
    "buildNumber": "1.0.2",
    "imageDigest": "88f36f658ce91c92b176f369324e37515c61db76d7e18ef33a63fc6d1ffd79d7",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.012307777777777779
    }
  }
}