Yandex Search Scraper at a glance
Yandex Search Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes query, page, position, title and url, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Web data
- Pricing
- $2.00 per 1,000 results (Free plan), from $1.00 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 28 options
Scrape Yandex web, image and video search results with URLs, snippets and organic rankings for SEO and competitor analysis. Парсер Яндекс Поиска, картинок и видео: ссылки, сниппеты и позиции для SEO, мониторинга выдачи и анализа конкурентов.
What Yandex Search Scraper can do
- Organic results by default. Ads, the knowledge panel and inline image or video strips are left out of the organic rows, so positions are genuine organic ranks. Three opt-in switches (includeAds, includeKnowledgeGraph, includeInlineMedia, all off) return those blocks as separate rows with kind set, never numbered. Yandex serves those blocks only for some queries, regions and exits, so a run can return none of them; the knowledge panel is best effort.
- Continuous position tracking. Every result carries its query, 1-based SERP page, and a running 1-based position across the whole query walk, not just the current page. When you set startPage above 1, page stays the real SERP page but position counts from 1 at the first page you fetched, so it is the rank inside your window rather than the absolute rank.
- Three verticals from one input. Pick web, images, or videos with searchType. Media rows add their own thumbnail, duration, view count, and embed fields.
- Pagination that knows when to stop. The walk keeps requesting pages until maxPages is reached or a page returns no new organic results.
- A hard run-wide cap. maxItems bounds total emitted results across every query, so run size and cost stay predictable. It defaults to 100000, the maximum, which is effectively uncapped; set a lower value to cap a run. A run that stops at the cap skips EXPIRED detection in incremental mode.
- Built for monitoring. Incremental mode returns only new and changed results on repeated runs, and resumeFromRunId skips results an earlier run already collected (see the resume notes below for its limits).
Choose what to collect
These inputs let you configure Yandex Search Scraper - Web, Images, Videos & SEO Rankings. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
searchTypestring | Which Yandex vertical to search: web results, images, or videos. Images and videos return media fields like thumbnails and durations. |
maxPagesinteger | 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. |
domainstring | 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. |
startPageinteger | 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. |
langstring | Two-letter language code to restrict results to (for example en, ru, de, tr, uk). Leave empty for any language. Web search only. |
periodstring | Restrict web results to a time window. Web search only; image and video search ignore it. |
sortBystring | Order web results by relevance (Yandex default) or by date, newest first. |
Show 21 more inputs
| Input | What it controls |
|---|---|
imageTypestring | Images only. Restrict to one image kind. |
imageColorstring | Images only. Restrict to a color or to color / gray. |
imageOrientationstring | Images only. |
imageFileTypestring | Images only. |
imageWidthinteger | Images only. Exact width in pixels; must be set together with Image height. |
imageHeightinteger | Images only. Exact height in pixels; must be set together with Image width. |
imageSitestring | Images only. Only images hosted on this site, for example example.com. |
lrinteger | 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. |
maxItemsinteger | 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. |
includeAdsboolean | 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. |
includeKnowledgeGraphboolean | 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. |
includeInlineMediaboolean | 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. |
resumeFromRunIdstring | 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. |
incrementalModeboolean | 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. |
stateKeystring | 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. |
emitUnchangedboolean | 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. |
emitExpiredboolean | 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. |
ignoreFieldsForChangesarray | 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). |
mcpConnectorsarray | 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). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
queryQuerypagePage (number)positionPosition (number)titleTitleurlURL (link)domainDomainbreadcrumbBreadcrumbsnippetSnippetchangeTypeChangefirstSeenAtFirst seenlastSeenAtLast seenkindKindShow 13 more fields
thumbnailUrlThumbnailimageUrlimageUrlsourceHostsourceHostembedUrlembedUrldurationSecondsdurationSecondsdurationTextDurationviewsViewspublishedDatepublishedDatesearchedAtSearched attotalResultsFoundtotalResultsFoundchangedFieldsChanged fieldsblockPositionBlock (number)mediaUrlsmediaUrlsExample output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"query": "wireless noise cancelling headphones",
"page": 1,
"position": 1,
"title": "Sample Audio Shop - Noise Cancelling Headphones",
"url": "https://www.example-audio-shop.com/noise-cancelling-headphones",
"domain": "example-audio-shop.com",
"breadcrumb": "example-audio-shop.com › headphones › noise-cancelling",
"snippet": "Compare top noise cancelling headphones in stock at Sample Audio Shop..."
}Ways to use this data
- SEO and rank tracking: monitor organic positions for target keywords over time, using incremental mode to see only what moved.
- Competitor and SERP research: see which domains and pages currently rank for a query, with breadcrumbs and snippets included.
- Content and media discovery: pull the current top videos or images for a topic, with thumbnails, durations, and view counts.
- Brand monitoring: track how a brand or product name surfaces in Yandex search results.
- Data science and NLP datasets: build structured, position-tagged corpora of titles and snippets for downstream analysis.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Yandex Search Scraper return?
The documented output for Yandex Search Scraper includes query, page, position, title, url, domain, breadcrumb and snippet. Availability of each field depends on the source page and the selected mode.
How much does Yandex Search Scraper cost?
It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new or changed results on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated results, and unchanged ones are not billed unless you also turn on Emit unchanged.
Why does an incremental run with Emit expired sometimes return far more rows than Max results?
emitExpired pushes every previously tracked result your queries no longer found, and that batch is not capped by maxItems. On a scope with a large tracked history, this can push and bill well beyond your maxItems setting in a single run. Leave emitExpired off for tightly capped runs, or expect it to add rows outside that cap.
Why is a shared result missing from one of my queries after a resume?
resumeFromRunId skips any URL already present anywhere in the resumed dataset, regardless of which query returned it. If two queries can legitimately share a result, the second query's copy is silently skipped when it was already collected under the first, and if that query's whole first page was already collected, its later pages are not requested at all. Resume is most useful for queries the interrupted run never reached, and even those can lose results shared with other queries; for a query's complete, correctly ranked result set, run it fresh without resumeFromRunId.
Can I use it with AI agents or automation tools?
Yes. Call it from any Apify integration, the API, or an MCP-compatible client, and route the results into your own pipeline or app.
