Yandex SERP Scraper - Organic Results & Ads
Pricing
Pay per event
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
Pay per event
Rating
5.0
(4)
Developer
Santhej Kallada
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
4
Monthly active users
6 days ago
Last modified
Categories
Share
Yandex SERP Scraper — Organic Results, Ads & Snippets
Scrape Yandex search results at scale without an API key or captcha handling. Give this Yandex SERP scraper a keyword and it returns every result as a clean row: organic position, title, URL, display domain and snippet — with paid results separated out.
Built for SEO rank tracking, competitor monitoring and market research in Russia, Turkey, Kazakhstan and the wider CIS, where Yandex holds a share Google does not.
$4.00 per 1,000 results — a full page of 10 organic results costs about $0.04.
Features
- Scrape Yandex organic search results — position, title, URL, domain, snippet
- Track Yandex keyword rankings — positions numbered in page order for rank monitoring
- Scrape Yandex ads separately — paid placements parsed and flagged, returned only if you ask
- Target a Yandex region — Moscow, St Petersburg, Istanbul, Almaty and every other
lrregion ID - Set the Yandex interface language — Russian, English, Turkish and more
- Scrape Yandex results for one domain —
site:filtering built in - Filter Yandex results by recency — only results from the last N days
- Scrape multiple keywords in one run — up to 50 per run, processed concurrently
- Export Yandex SERP data to JSON, CSV or Excel — or pull it from the API
What you get
Every row includes:
| Field | Description |
|---|---|
position | Rank within the results, numbered from 1 |
title | Result title, reassembled from Yandex's highlighted fragments |
url | Destination URL |
displayUrl | Domain as Yandex displays it |
snippet | Description text shown under the result |
isAd | Whether the result is a paid placement |
searchQuery | The keyword that produced it |
sourcePage | Which SERP page it came from |
scrapedAt | Timestamp |
Use cases
Yandex rank tracking. Monitor where your domain sits for a keyword set in a specific Yandex region, on whatever schedule you choose. 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 input for content briefs targeting the RU/TR/KZ market.
Ad intelligence. Turn on includeAds to see who is bidding on your keywords and what their ad copy says.
Market entry research. Yandex is the dominant engine in several markets where Google data tells you very little. This is the equivalent dataset for those markets.
Input
{"queries": ["running shoes", "купить кроссовки"],"maxResults": 30,"includeAds": false,"region": 213,"language": "ru","site": "example.com","withinDays": 7}
| Option | Description |
|---|---|
queries | Search keywords, one or more (up to 50 per run) |
maxResults | Organic results per keyword. Yandex serves ~10 per page, so 30 fetches about 3 pages |
includeAds | Also return paid results. Ads are billed like organic results |
region | Yandex region ID (lr), e.g. 213 Moscow, 2 St Petersburg, 84 USA, 983 Istanbul |
language | Interface language: ru, en, tr, … |
site | Restrict to one domain — applied as a site: operator |
withinDays | Only results published in the last N days |
pageConcurrency | Pages fetched in parallel per keyword |
country | Exit country. Leave this empty unless you have a specific reason — see below |
Output example
{"position": 1,"title": "1,000+ shoes reviewed and cut in half","url": "https://runrepeat.com/","displayUrl": "runrepeat.com","snippet": "Independent running shoe reviews with lab testing…","isAd": false,"searchQuery": "running shoes","sourcePage": 1}
Notes worth reading
- Yandex returns about 10 organic results per page.
maxResults: 30therefore fetches roughly three pages. Setting it very high returns everything available rather than erroring. - Ads are not billed unless you want them. A typical Yandex page carries around as many paid placements as organic results. They are parsed either way but only returned — and charged — when
includeAdsis on. - Blocked and captcha pages are never billed. If Yandex challenges a request it is retried, and if it still fails the page is skipped and reported in
blocked_pages. - Leave
countryempty. This is counter-intuitive but measured: pinning an exit country makes Yandex less reliable, not more, and returns fewer results. The default is deliberately unset. - Region targeting is done with
region, notcountry. Yandex's ownlrparameter is what controls which market's results you get.
Pricing
| Event | Price |
|---|---|
| Result returned | $0.004 ($4.00 per 1,000) |
| Zero-result keyword | $0.002 |
| Actor start | $0.0005 |
A full page of 10 organic results costs about $0.04. Flat across every Apify plan — no tier gating and no subscription.
FAQ
Do I need a Yandex API key or XML quota? No. Yandex's official XML API requires registration and imposes quotas; this 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 983.
Does it handle Yandex captchas? Yes. Challenged requests are retried automatically, and any page that still fails is skipped without charge.
Can I scrape Yandex in Russian?
Yes — pass Cyrillic keywords directly and set language to ru.
How do I separate ads from organic results?
They are separated for you. Organic results come back with isAd: false; ads only appear when includeAds is enabled.
Can I run this on a schedule? Yes — use Apify's scheduler for daily or weekly rank tracking, or trigger it from your own pipeline via API.
Why is country empty by default?
Because testing across domains and exit countries showed unpinned requests succeed more often and return more results. Pinning us in particular halved the result count.
Support
Open an issue on the Actor's Issues tab and I'll take a look.