Yandex SERP Scraper - Organic Results & Ads avatar

Yandex SERP Scraper - Organic Results & Ads

Pricing

from $3.20 / 1,000 search results

Go to Apify Store
Yandex SERP Scraper - Organic Results & Ads

Yandex SERP Scraper - Organic Results & Ads

Scrape Yandex search results by keyword. Extract organic positions, titles, URLs, domains and snippets with region targeting. Export JSON/CSV.

Pricing

from $3.20 / 1,000 search results

Rating

0.0

(0)

Developer

Santhej Kallada

Santhej Kallada

Maintained by Community

Actor stats

0

Bookmarked

26

Total users

11

Monthly active users

13 days ago

Last modified

Categories

Share

Yandex SERP Scraper — Organic Results, Ads & Snippets

Scrape Yandex search results for any keyword without an API key, XML quota or captcha handling. Every result comes back as a clean row with its rank, title, URL, display domain and full snippet, and paid ads are flagged separately. $4.00 per 1,000 results.

What does Yandex SERP Scraper do?

It runs your keywords on Yandex and returns the organic results page by page, in the order Yandex shows them. You can target any Yandex region (Moscow, St Petersburg, Istanbul, Almaty, ...), filter results by language, restrict them to one site or to a recent time window, and optionally collect the paid ads on the same pages.

Built for SEO rank tracking, competitor monitoring and market research in Russia, Turkey, Kazakhstan and the wider CIS, where Yandex holds a share of search that Google data does not show.

  • Organic results: rank, title, URL, display domain and snippet.
  • Yandex keyword rankings: position is the result's rank for the keyword across pages (page 2 continues at 11), ready for rank tracking.
  • Yandex ads: paid placements parsed and flagged with isAd, returned only when you ask for them.
  • Region targeting: any Yandex region ID (lr), e.g. 213 Moscow, 2 St Petersburg, 11508 Istanbul, 162 Almaty.
  • Language, site and recency filters: Yandex's results-language filter, a single-site restriction and Yandex's recency windows.
  • Bulk keywords: up to 50 keywords per run, processed concurrently.

Use cases

  • Yandex rank tracking: monitor where your domain sits for a keyword set in a specific Yandex region, on any schedule. position and displayUrl are all a rank tracker needs.
  • Competitor visibility: see which domains hold the top positions for your commercial keywords, and how that changes over time.
  • Keyword and content research: snippets show what Yandex considers relevant for a query, useful for content briefs aimed at the RU/TR/KZ market.
  • Ad intelligence: turn on includeAds to see who bids on your keywords and what their ad copy says.
  • Market entry research: Yandex is the main search engine in several markets where Google data tells you very little.

How to use Yandex SERP Scraper

  1. Enter your keywords in Search keywords, one per line (Cyrillic, Turkish and other scripts work as typed).
  2. Set Max organic results per keyword. Yandex serves about 10 per page, so 30 fetches about three pages.
  3. Set the Yandex region ID (lr) for the market you care about, e.g. 213 for Moscow. Optionally add a Results language, a Restrict to site domain, or a recency filter.
  4. Tick Include ads if you also want the paid results.
  5. Click Start, then export the dataset as JSON, CSV or Excel, or read it through the Apify API.

Example input

{
"queries": ["купить кроссовки", "доставка цветов москва"],
"maxResults": 20,
"includeAds": false,
"region": 213,
"language": "ru"
}

Input configuration

FieldTypeDefaultDescription
queriesarray of stringsrequiredKeywords to search, up to 50 per run.
maxResultsinteger30Organic results per keyword, 1 to 300. Yandex serves about 10 per page. Asking for more than exists returns everything available.
includeAdsbooleanfalseAlso return paid results. Ads are billed like organic results.
regionintegeremptyYandex region ID (lr), e.g. 213 Moscow, 2 St Petersburg, 11508 Istanbul, 983 Turkey, 162 Almaty. Empty uses Yandex's default for the connection, which is a city in Turkey, so set this for any other market.
languagestringemptyYandex's results-language filter, e.g. ru, en, tr. Only results in that language are returned. Empty means all languages.
sitestringemptyOnly results from this domain, e.g. lamoda.ru. A full URL is reduced to its domain.
withinDaysintegerempty (all time)Recency filter. Yandex offers three windows, so the value is rounded up to the nearest one: 1 = past 24 hours, 2–14 = past 2 weeks, 15–31 = past month. Above 31 means all time.
concurrencyinteger3Keywords processed at once, 1 to 6.
pageConcurrencyinteger5Result pages requested in parallel per keyword, 1 to 8.
countrystringemptyNo longer used and ignored. Kept only so saved inputs keep working; use region to choose the market.

Example output

{
"position": 1,
"title": "Мужские кроссовки купить на OZON по низкой цене",
"url": "https://www.ozon.ru/category/muzhskiy-krossovki/",
"displayUrl": "Ozon.ru",
"snippet": "Мужские кроссовки – покупайте на OZON по выгодным ценам! Быстрая и бесплатная доставка, большой ассортимент, бонусы...",
"isAd": false,
"searchQuery": "купить кроссовки",
"sourcePage": 1,
"scrapedAt": "2026-09-23T06:52:11.402Z"
}
FieldDescription
positionRank for the keyword, numbered from 1 and continuing across pages (the first result on page 2 is usually 11). Ads are numbered separately from organic results.
titleResult title, reassembled from Yandex's highlighted fragments.
urlDestination URL. For ads this is Yandex's ad click link.
displayUrlDomain as Yandex displays it.
snippetThe description text shown under the result.
isAdtrue for a paid placement.
searchQueryThe keyword that produced the row.
sourcePageThe results page it came from.
scrapedAtWhen the row was collected (UTC).

A run summary is saved to the run's key-value store as OUTPUT: organic_results, ads, pages_fetched, zero_result_queries, blocked_pages, failed_pages, failed_queries and billing_stopped_early.

How much does Yandex SERP Scraper cost?

Pay per event. You pay for results returned, not for pages fetched.

EventFree / Bronze planSilver planGold plan and above
Result returned (organic, or ad when includeAds is on)$0.004$0.0036$0.0032
Zero-result keyword (Yandex answered, but with no results at all)$0.002$0.0018$0.0016
Actor start (once per run)$0.0005$0.00045$0.0004

Worked examples at Free/Bronze prices:

  • 1 keyword, top 10 organic results: 10 × $0.004 + $0.0005 = $0.0405
  • 2 keywords, top 20 organic each: 40 × $0.004 + $0.0005 = $0.1605
  • 1 keyword, 10 organic + 8 ads with includeAds: 18 × $0.004 + $0.0005 = $0.0725

Pages that time out or are blocked by a captcha are never billed, and a keyword is only billed as "zero-result" when Yandex actually returned an empty results page. There is no subscription.

FAQ

Do I need a Yandex API key or XML quota? No. Yandex's official XML API needs registration and has quotas; this actor needs neither.

Can I track rankings for a specific city? Yes. Set region to the Yandex lr ID for that city: Moscow is 213, St Petersburg is 2, Istanbul is 11508. 983 is the whole of Turkey.

Where do the results come from? From Yandex search, collected through Yandex's Turkish portal (yandex.com.tr) with your region applied by Yandex itself, so 213 returns Moscow-localised results. Rankings can differ somewhat from what yandex.ru shows for the same region, most visibly for English-language keywords, which lean more international. Set language to ru to keep results Russian-language.

Can I scrape Yandex in Russian or Turkish? Yes. Type the keywords in their own script. To return only results in one language, set language to ru, tr or en.

How do I separate ads from organic results? It is done for you. Organic rows have isAd: false. Ads are only returned, and only billed, when includeAds is on. The number of ads depends on who is bidding at that moment and can be zero.

Why did a keyword come back empty? Yandex challenges automated traffic, and a page that cannot be fetched after several retries is skipped rather than billed. The run log names the keyword, and OUTPUT counts it under failed_pages / failed_queries. If no page at all could be fetched, the run ends as Failed with an explanation and only the Actor start is billed. Running it again later usually works.

How recent can results be? Yandex offers three recency windows: past 24 hours, past 2 weeks and past month. withinDays is rounded up to the nearest one, so 7 returns results from the past 2 weeks.

Can I run this on a schedule? Yes. Save your input as a task and add an Apify schedule for daily or weekly rank tracking, or trigger it from your own pipeline through the API.

Support

Open an issue on the Actor's Issues tab and I'll take a look.