{
  "openapi": "3.0.1",
  "info": {
    "title": "Yandex Search Scraper - Web, Images, Videos & SEO Rankings",
    "description": "Scrape Yandex web, image and video search results with URLs, snippets and organic rankings for SEO and competitor analysis. Парсер Яндекс Поиска, картинок и видео: ссылки, сниппеты и позиции для SEO, мониторинга выдачи и анализа конкурентов.",
    "version": "0.1",
    "x-build-id": "feKtjkq7gVJOe4yqH"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~yandex-serp-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-yandex-serp-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/abotapi~yandex-serp-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-yandex-serp-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/abotapi~yandex-serp-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-yandex-serp-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "queries"
        ],
        "properties": {
          "searchType": {
            "title": "Search type",
            "enum": [
              "web",
              "images",
              "videos"
            ],
            "type": "string",
            "description": "Which Yandex vertical to search: web results, images, or videos. Images and videos return media fields like thumbnails and durations.",
            "default": "web"
          },
          "queries": {
            "title": "Search queries",
            "minItems": 1,
            "type": "array",
            "description": "One SERP walk per query. Each query gets a fresh proxy session.",
            "default": [
              "best coffee grinder"
            ],
            "items": {
              "type": "string"
            }
          },
          "maxPages": {
            "title": "Max pages per query",
            "minimum": 0,
            "type": "integer",
            "description": "SERP pages per query (page 1 is &p=0). 0 or empty reads as 1 page. Hard cap of 30 pages per query. Stops early if a page returns no new organic results.",
            "default": 0
          },
          "domain": {
            "title": "Yandex domain",
            "enum": [
              "yandex.com",
              "yandex.ru"
            ],
            "type": "string",
            "description": "Which Yandex site to query. yandex.ru returns Russian-market results (use a RU region); yandex.com is the international site. Images always use yandex.com.",
            "default": "yandex.com"
          },
          "startPage": {
            "title": "Start page",
            "minimum": 1,
            "type": "integer",
            "description": "First SERP page to fetch (1-based). Combine with Max pages per query to continue a walk, e.g. start 4 with 3 pages returns pages 4-6. Each row's page is the real SERP page, but position counts from 1 inside the fetched window, so it is not the absolute rank when you start after page 1.",
            "default": 1
          },
          "lang": {
            "title": "Result language",
            "type": "string",
            "description": "Two-letter language code to restrict results to (for example en, ru, de, tr, uk). Leave empty for any language. Web search only."
          },
          "period": {
            "title": "Freshness (period)",
            "enum": [
              "all",
              "day",
              "two_weeks",
              "month"
            ],
            "type": "string",
            "description": "Restrict web results to a time window. Web search only; image and video search ignore it.",
            "default": "all"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "date"
            ],
            "type": "string",
            "description": "Order web results by relevance (Yandex default) or by date, newest first.",
            "default": "relevance"
          },
          "imageType": {
            "title": "Image type",
            "enum": [
              "photo",
              "clipart",
              "lineart",
              "demotivator",
              "face"
            ],
            "type": "string",
            "description": "Images only. Restrict to one image kind."
          },
          "imageColor": {
            "title": "Image color",
            "enum": [
              "color",
              "gray",
              "red",
              "orange",
              "yellow",
              "cyan",
              "green",
              "blue",
              "violet",
              "white",
              "black"
            ],
            "type": "string",
            "description": "Images only. Restrict to a color or to color / gray."
          },
          "imageOrientation": {
            "title": "Image orientation",
            "enum": [
              "horizontal",
              "vertical",
              "square"
            ],
            "type": "string",
            "description": "Images only."
          },
          "imageFileType": {
            "title": "Image file type",
            "enum": [
              "jpg",
              "png",
              "gifan"
            ],
            "type": "string",
            "description": "Images only."
          },
          "imageWidth": {
            "title": "Image width (px)",
            "minimum": 1,
            "type": "integer",
            "description": "Images only. Exact width in pixels; must be set together with Image height."
          },
          "imageHeight": {
            "title": "Image height (px)",
            "minimum": 1,
            "type": "integer",
            "description": "Images only. Exact height in pixels; must be set together with Image width."
          },
          "imageSite": {
            "title": "Image site",
            "type": "string",
            "description": "Images only. Only images hosted on this site, for example example.com."
          },
          "lr": {
            "title": "Region ID (lr)",
            "type": "integer",
            "description": "Yandex region code for the SERP locale, e.g. 213 (Moscow), 2 (Saint Petersburg), 21265 (San Francisco). Only meaningful on yandex.ru. Leave empty for auto-detection."
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Hard cap on emitted dataset items across the whole run. Defaults to 100000, which is also the maximum, so a run you do not cap yourself is effectively uncapped (very large runs need a long run timeout — each query holds one browser session). A run that stops at this cap skips EXPIRED detection in incremental mode.",
            "default": 100000
          },
          "includeAds": {
            "title": "Include ads",
            "type": "boolean",
            "description": "Web search only. Also return the sponsored results shown on the page as separate rows with kind set to ad. They are never numbered, so organic positions stay true ranks. Each one is a normal result row: it counts toward Max results and is billed like any other result. With Incremental mode on, these rows are not tracked: they are re-sent and billed on every run, even when unchanged.",
            "default": false
          },
          "includeKnowledgeGraph": {
            "title": "Include knowledge panel",
            "type": "boolean",
            "description": "Web search only. Also return the knowledge panel Yandex shows for some queries as a separate row with kind set to knowledge_graph. Most queries have none. It counts toward Max results and is billed like any other result row. With Incremental mode on, these rows are not tracked: they are re-sent and billed on every run, even when unchanged.",
            "default": false
          },
          "includeInlineMedia": {
            "title": "Include inline image and video blocks",
            "type": "boolean",
            "description": "Web search only. Also return the image and video strips embedded in the page as separate rows with kind set to inline_images or inline_videos and their thumbnail links in mediaUrls. They count toward Max results and are billed like any other result row. With Incremental mode on, these rows are not tracked: they are re-sent and billed on every run, even when unchanged.",
            "default": false
          },
          "proxySettings": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy configuration. Residential is the default (RU for yandex.ru, US for yandex.com) — it returns the fullest result pages.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue an interrupted pull without returning results already collected there. Cannot be combined with incremental mode."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring. The first run returns every matching result as NEW. Later runs normally return only NEW and UPDATED results. A result is UPDATED when its title, snippet or domain changed (its URL is its identity). Position, page, media and counter fields are never compared, so a pure rank move is not an UPDATED row. Cannot be combined with resumeFromRunId.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or deliberately share state across differently configured runs. Leave empty to derive a key automatically from the search settings."
          },
          "emitUnchanged": {
            "title": "Emit unchanged records (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return records that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired records (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return records that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Optional. Fields to leave out when deciding whether a result changed. Supported: title, snippet, domain. A result whose only difference is in an ignored field stays UNCHANGED and is not returned as UPDATED. Tracked results from earlier runs are re-checked with this list, so adding a field does not trigger a wave of UPDATED rows (results saved before this option existed are compared on all fields once).",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify, Settings, Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}