Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Yandex Search Engine Scraper (SERP API) icon

Yandex Search Engine Scraper (SERP API)

Scrape Yandex search results by keyword or URL. Get rank, title, URL, domain, snippet, ads and SERP features. Pick the region. $3.40 per 1,000.

635 runs on Apify $0.0034 per search result ($3.4 / 1,000)
Run this in the cloudRun on Apify →

Ad Intelligence & Competitor Research

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust queries, domain, startUrls (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0034 per search result = $3.4 per 1,000

You are charged forWhenPrice
Search result returnedCharged once per unique Yandex search result returned (organic listing, ad or featured block). Duplicates across pages, diagnostic rows, captcha pages and the empty-input sample row are never charged.$0.0034

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-09-22, and they are what you are actually charged.

Inputs

FieldWhat it doesType
queriesKeywords to search on Yandex. One row per result. Works in any language. Russian, Turkish, English, Kazakh.array
domainWhich Yandex front-end to query. They all serve the same index, but they do not all defend themselves the same way: yandex.com.tr answers automated requests reliably and honours the lr region code, which is why it is the default. If the host you pick answers with a robot check, the run automatically retries that query on yandex.com.tr pinned to the same region and tells you in an uncharged notice row - the "domain" field on every result records the host that actually answered. Note that yandex.uz ignores lr and always ranks for Uzbekistan.string
startUrlsPaste full Yandex search URLs instead of keywords, for example https://yandex.com/search/?text=pizza&lr=213. The query, region and start page are read from the URL.array
regionYandex region id that decides which regional ranking you get. Verified codes: 225 Russia, 213 Moscow, 2 Saint Petersburg, 65 Novosibirsk, 54 Yekaterinburg, 43 Kazan, 47 Nizhny Novgorod, 39 Rostov-on-Don, 35 Krasnodar, 51 Samara, 187 Ukraine, 143 Kyiv, 149 Belarus, 157 Minsk, 159 Kazakhstan, 163 Astana, 10393 Almaty, 983 Turkey, 11508 Istanbul, 171 Uzbekistan, 10335 Tashkent, 168 Azerbaijan, 167 Armenia, 10262 Yerevan, 169 Georgia, 84 USA, 102 Germany, 95 United Kingdom. Leave empty to let Yandex choose.integer
maxItemsPerQueryHow many results to return for each query. Yandex serves about 10-20 per page and this actor pages through automatically.integer
maxItemsHard cap across all queries. Every returned result is one charged event, so this is also your budget cap.integer
maxPagesPerQuerySafety stop on how deep to page for one query.integer
includeAdsInclude Yandex Direct ad slots (type "ad"). Their URL is Yandex's click tracker; the advertiser's own domain is in displayedDomain.boolean
includeFeaturedInclude non-organic SERP blocks such as video carousels, image strips, related searches and the AI answer teaser (type "featured"). They occupy a rank slot, which matters for rank tracking. Turn off if you only want the ten blue links.boolean

What you get

A structured dataset — each result includes fields like:

positionorganicPositiontypetitledisplayedDomainurlsnippetpageregiondomainsearchQuery

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

1 ready-to-run use cases

Yandex Search Results Scraper

Scrape Yandex search results for any keyword: title, URL, snippet and position. Ranks differently to Google.

Related tools in Ad Intelligence & Competitor Research

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

Google Ads Transparency Scraper iconAd Intelligence & Competitor Research

Google Ads Transparency Scraper

Scrape Google Ads Transparency Center by domain, advertiser name or ID. Get ad creatives, formats, first and last shown dates. $0.60 per 1,000 ads.

Ready to run — no setup

Meta Ad Library Scraper iconAd Intelligence & Competitor Research

Meta Ad Library Scraper

Scrape Facebook and Instagram Ad Library ads by keyword, Page ID or URL. Get ad copy, creatives, dates and platforms. No login. $0.34 per 1,000 ads.

Ready to run — no setup

TikTok Trending Hashtags iconAd Intelligence & Competitor Research

TikTok Trending Hashtags

Get TikTok Creative Center hashtag rankings by country: rank, posts, views, popularity curve and top creators. Three at a time. No login needed.

2 use cases

SaaS Competitor Monitor: Pricing, Changelog & Positioning iconMonitors & Alerts

SaaS Competitor Monitor: Pricing, Changelog & Positioning

Track a competitor's SaaS pricing, changelog and positioning on a schedule. You get only what changed, sent to Slack. $0.01 per page checked.

4 use cases

G2 Reviews Scraper iconReviews & Reputation Data

G2 Reviews Scraper

Scrape G2 software reviews at $1.70 per 1,000: rating, title, full text, reviewer, date and URL. Works on any product. No G2 account or API key.

Ready to run — no setup

Google Trends Scraper iconAd Intelligence & Competitor Research

Google Trends Scraper

Get Google Trends data with no API key. Interest over time, interest by region or city, top and rising queries. $0.06 per 1,000 rows.

Ready to run — no setup

See all Ad Intelligence & Competitor Research →

Yandex Search Engine Scraper: Yandex results by keyword and region, no API key

The same query put to Yandex from Moscow and from Istanbul does not come back as the same page. Yandex ranks by region, the region is a code in the URL, and you can ask for any of them from anywhere. One row per slot: rank, title, link, the domain Yandex shows, the snippet, sitelinks, and whether the slot is organic, a Direct ad or a featured block.

The honest part. Yandex does not always serve a query, and when it refuses you get an uncharged diagnostic row instead of results, so a run can come back with far fewer rows than you asked for. There is also no total-result count anywhere on a modern Yandex page, so nothing here can report one.

InputKeywords, or full Yandex search URLs
OutputOne row per result slot
Ceiling20,000 results per run, up to 40 pages per query
Account neededNone, and no API key
Price$3.40 per 1,000 results, flat on every plan

🔎 What Yandex Search Engine Scraper does

Give it keywords and a region code and it pages through the results, writing a row for every slot on the page in the order Yandex put them.

The region code is the point. lr=213 is Moscow, 225 is Russia, 11508 is Istanbul, 163 is Astana. Set one and you get that region's ranking wherever the run happens to execute. Leave it empty and Yandex picks, which is fine for a look and wrong for a comparison.

Three kinds of slot come back, and all three take up a rank position: organic listings, Yandex Direct ads, and featured blocks like video carousels, image strips and the AI answer teaser. Each row carries position for the slot's place on the page and organicPosition for its place among the organic rows only, which is the one rank trackers want.

📥 What you give it

{
  "queries": ["купить пластиковые окна", "ergonomic office chair"],
  "domain": "yandex.com.tr",
  "region": 213,
  "maxItemsPerQuery": 20,
  "maxItems": 100
}
FieldDefaultWhat it is
queriesbox holds ergonomic office chairKeywords, in any language Yandex handles. Russian, Turkish, English, Kazakh.
startUrlsemptyFull Yandex search URLs instead. The query, region and start page are read out of the address.
domainyandex.com.trWhich Yandex front end to ask. They share one index. yandex.com.tr is the default because it honours the region code and answers consistently. yandex.uz ignores the region code and always ranks for Uzbekistan.
regionemptyThe lr code. Verified ones include 225 Russia, 213 Moscow, 2 Saint Petersburg, 43 Kazan, 187 Ukraine, 143 Kyiv, 149 Belarus, 159 Kazakhstan, 10393 Almaty, 983 Turkey, 11508 Istanbul, 171 Uzbekistan, 168 Azerbaijan, 169 Georgia, 84 USA, 102 Germany, 95 United Kingdom.
maxItemsPerQuery20Results per query, up to 2,000. Yandex serves about 10 to 20 a page.
maxItems100Hard cap across every query. Every returned result counts, so this is your budget cap.
maxPagesPerQuery15How deep to page for one query, up to 40.
includeAdsonInclude Direct ad slots, typed ad.
includeFeaturedonInclude carousels, image strips, related searches and the AI answer teaser, typed featured. Turn it off for the ten blue links only.
proxyConfigurationonOptional. Not needed for a normal run.

Run it with no queries and no URLs and you get one labelled sample row.

📤 What you get back

A real row from a recent run. This one happens to be the AI answer teaser, which is why title and url are empty on it:

{
  "searchQuery": "ergonomic office chair",
  "page": 1,
  "position": 1,
  "positionOnPage": 1,
  "organicPosition": null,
  "type": "featured",
  "featureType": "neuro-answer",
  "isAd": false,
  "title": null,
  "url": null,
  "displayedUrl": null,
  "displayedDomain": null,
  "brandName": null,
  "snippet": "Yazeka Arama sonuclarina dayanarak olusturuldu Internette arama Uygun kaynak secimi ...",
  "sitelinks": [],
  "region": 213,
  "regionRequested": 213,
  "domain": "yandex.com.tr",
  "domainRequested": "yandex.com.tr",
  "searchUrl": "https://yandex.com.tr/search/?text=ergonomic+office+chair&lr=213",
  "scrapedAt": "2026-09-21T01:45:43.797Z"
}
FieldWhat it is
position, positionOnPageThe slot's rank across the whole result set, and its place on its own page. Ads and featured blocks occupy a slot.
organicPositionRank counting organic rows only. null on ads and featured blocks.
type, featureType, isAdorganic, ad or featured, and which kind of block a featured row is.
title, url, snippetThe listing as Yandex renders it. On an ad, url is Yandex's click tracker.
displayedUrl, displayedDomain, brandNameThe breadcrumb Yandex prints, and the real domain behind it. On an ad this is where you find the advertiser.
sitelinksThe extra links under a listing, as {title, url}.
region, regionRequestedWhat Yandex actually served, and what you asked for. Compare them before trusting a ranking.
domain, domainRequestedWhich front end answered, and which one you picked.

🧾 Reading the output

Three kinds of row can land in your dataset.

RowHow to spot it
A resultIt has a position and a type
The sample rowWritten only when there were no queries and no URLs
A notice or diagnosticIt carries an errorCode

Diagnostic and notice rows are never charged.

CodeWhat it means
BAD_URLThat entry is not a Yandex search URL. The other jobs carry on.
DOMAIN_FAILOVERThe host you picked would not serve that query, so it was retried on yandex.com.tr at the same region. The domain field on the rows says who answered.
CAPTCHAYandex answered with a robot check instead of results. Re-run, or try fewer queries at once.
FETCH_FAILEDYandex was unreachable or answered badly.
NO_RESULTSThe query returned nothing usable.
ABORTEDThree queries in a row came back dead, so the rest were skipped rather than burned through.
TIME_LIMITThe run was close to its time limit, so it stopped and kept everything it had already delivered. Give it more time, or ask for fewer results, to get the rest. If nothing had come back by then, the run ends as failed.
PROXY_GROUP_IGNOREDA setting in proxyConfiguration could not be used, so the run carried on without it.

▶️ How to run it

1. Open Yandex Search Engine Scraper and click Try for free. 2. Put your keywords into Search queries, replacing the example. 3. Set Region (Yandex lr code) to the market you care about. This is the setting that changes the answer. 4. Set Max results in total low for the first run, then click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost?

$3.40 per 1,000 results. Flat on every Apify plan, no volume tiers.

Every row with a rank counts, ads and featured blocks included, because they take up a rank slot. If you only want organic listings, turn includeAds and includeFeatured off and you stop paying for them.

Sample rows, notice rows and diagnostic rows are not charged, and a query Yandex refuses costs you nothing.

💡 What people use it for

  • Tracking where a site ranks in Moscow, Almaty or Istanbul, where a Google-only view says nothing.
  • Watching which advertisers are buying a keyword, through displayedDomain on the ad rows.
  • Pulling the snippet Yandex writes for your pages, which is not always the meta description.
  • Comparing the same keyword across regions by running it once per lr code.
  • Checking whether featured blocks are pushing the organic results down a market you care about.

🚧 What it does not do

  • No total result count. Yandex does not print one any more, so nothing can report it.
  • Leave region empty and each query keeps its own. Every query pins to whatever region its

first page came back with, so two queries in one run can be ranked for different places. Set region whenever you are comparing anything.

  • yandex.uz ignores the region code and always ranks for Uzbekistan.
  • An ad row can come back typed organic. The tell is the link: an ad's url points at a

yabs.yandex click tracker, and the advertiser's own domain sits in displayedDomain.

  • The AI answer block is a teaser, so its row carries the visible text with title and url

empty, as above.

  • Some queries will not be served. You get an uncharged row saying so, and a run can end with

very few results.

  • About 20 pages is the realistic depth for one query, whatever the page cap allows.
  • Web results only. No images, video, maps or news verticals.
  • A ranking is a snapshot, and Yandex personalises less than Google but still moves daily.

🧭 Which Yandex scraper do you need?

If you wantUse
Search results by keyword and regionThis one
Businesses and places from Yandex MapsYandex Maps Scraper
Reviews for a place on Yandex MapsYandex Maps Reviews Scraper
Products and prices on Yandex MarketYandex Market Scraper
The same job on GoogleGoogle Search Results Scraper

❓ Questions people ask

Do I need a Yandex account or an API key? No. Nothing to apply for and no quota to watch.

Which region code should I use? The one for the market you sell in. 213 for Moscow, 225 for Russia as a whole, 11508 for Istanbul, 163 for Astana. The list in the input has the verified ones.

Why did I get fewer rows than I asked for? Either the query ran out of pages, or Yandex refused it. The diagnostic row tells you which, and neither costs you anything.

Can I search in Russian? Yes, and in Turkish, Kazakh and English. Put the query in whatever language you want to rank in.

Does the domain I pick change the ranking? The index is the same. The region code is what changes the ranking, except on yandex.uz, which ignores it.

Is scraping search results legal? They are public pages. Apify's write-up on scraping and the law is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the query, the region code and the run ID. The errorCode on the diagnostic row usually names the problem on its own.