Yandex Search Results Scraper
Pricing
Pay per event
Yandex Search Results Scraper
Collect ranked organic Yandex results by query and region for scheduled SEO tracking, domain visibility audits, and market research.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Collect ranked Yandex search results for keywords and save titles, destination URLs, domains, snippets, positions, pages, regions, and collection timestamps.
Use the Actor for scheduled SEO tracking, domain visibility audits, competitor research, and repeatable SERP exports without maintaining your own crawler.
What does Yandex Search Results Scraper do?
The Actor searches public Yandex web results for every supplied query.
It returns normalized organic records in the default Apify dataset.
Each record includes its source query and one-based rank, making output from recurring runs easy to compare.
The Actor supports:
- 1–50 search queries per run;
- up to 100 organic results per query;
- a run-wide cap of up to 1,000 records;
- numeric Yandex region IDs for localized ranking requests;
- numbered result-page traversal;
- CSV, JSON, Excel, XML, and other Apify dataset exports.
It does not return ads, images, videos, AI answers, or knowledge panels.
Who is it for?
SEO specialists
Track where pages and competitors appear for target keywords on Yandex.
Growth and content teams
Find pages currently visible for a topic before planning content or outreach.
Market researchers
Export ranked domains and snippets for a repeatable view of a market or category.
Agencies
Run separate Tasks for clients, regions, and keyword groups, then schedule those Tasks in Apify Console.
Data engineers
Send typed SERP records to a webhook, data warehouse, spreadsheet, or downstream Actor.
Why use this Actor?
- Query-aware records: every row retains the query that produced it.
- Rank-ready output: one-based organic positions need no post-processing.
- Localized requests: set a Yandex region ID instead of mixing markets silently.
- Bounded spend: control both results per query and total records.
- Integration-ready: output goes to the default dataset and standard Apify APIs.
- Honest failures: challenge pages and unknown upstream HTML are reported as errors, not empty successful runs.
What data can I extract?
| Field | Type | Meaning |
|---|---|---|
query | string | Search phrase that produced the row |
title | string | Organic result title shown by Yandex |
url | string | Normalized destination URL |
domain | string | Destination hostname without www. |
snippet | string or null | Visible result description, when available |
rank | integer | One-based organic position for this query |
page | integer | One-based Yandex results page |
regionId | integer | Yandex region ID used by the request |
resultType | string | Currently always organic |
fetchedAt | ISO timestamp | Time the result page was fetched |
How to scrape Yandex search results
- Open Yandex Search Results Scraper in Apify Console.
- Add one or more real keywords under Search queries.
- Choose how many organic results to collect per query.
- Set the total-result cap for the run.
- Keep region
84for the United States or enter another Yandex numeric region ID. - Click Start.
- Open the Yandex organic results dataset view.
- Export the records or connect the run to another service.
A useful first run is:
{"queries": ["yandex search api"],"maxResultsPerQuery": 10,"maxItems": 10,"regionId": 84}
Input parameters
queries
Required array of 1–50 non-empty search phrases.
Each phrase can be up to 300 characters.
Yandex operators such as site: can be included directly in a query.
Example:
{"queries": ["seo rank tracker","site:apify.com web scraping"]}
maxResultsPerQuery
Maximum number of records accepted for each query.
Allowed range: 1–100.
Default: 20.
maxItems
Run-wide maximum across all queries.
Allowed range: 1–1,000.
Default: 100.
If this cap is reached, later queries may return fewer records or may not run.
regionId
Numeric Yandex region identifier used to localize the request.
Default: 84 (United States).
For example, 213 represents Moscow.
Region IDs are a Yandex convention and may change independently of this Actor.
Output example
This shortened record came from the documented yandex search api input:
{"query": "yandex search api","title": "Yandex Search API","url": "https://yandex.cloud/ru/services/search-api","domain": "yandex.cloud","snippet": "компания Text.ru использует Yandex Search API для проверки уникальности текстов.","rank": 1,"page": 1,"regionId": 84,"resultType": "organic","fetchedAt": "2026-08-11T06:11:02.369Z"}
Search results are live source data, so titles, snippets, URLs, counts, and ranks can change between runs.
How much does it cost to scrape Yandex search results?
The Actor uses pay-per-event pricing:
- one
startevent per run; - one
itemevent for each accepted dataset record; - no charge for duplicate, rejected, empty, or failed result rows.
The current price is a $0.005 start fee and a BRONZE item price of $0.003464 per result, with lower per-result prices on higher plans.
Example BRONZE totals:
| Useful output | Approximate Actor charge |
|---|---|
| 10 results | $0.03964 |
| 25 results | $0.09160 |
| 100 results | $0.35140 |
These examples describe Actor event charges, not subscription fees. Check the live pricing panel before a production run.
Set maxItems and maxResultsPerQuery to cap output and therefore control spend.
Track Yandex rankings on a schedule
Create one Apify Task for a stable set of queries and region.
Run it on a schedule such as daily or weekly.
Keep the dataset or send each run to persistent storage.
Compare rows by query, url, and rank across fetchedAt timestamps.
The Actor emits snapshots; it does not maintain historical state or calculate position deltas itself.
Audit a domain’s Yandex visibility
Use a real site: query such as:
{"queries": ["site:apify.com web scraping"],"maxResultsPerQuery": 20,"maxItems": 20,"regionId": 84}
Filter the resulting dataset by domain and inspect titles, snippets, and ranks.
A site: query reflects what Yandex returns for that operator; it is not a complete index export.
Compare competitors and topics
Supply several commercially related terms in one run:
{"queries": ["seo rank tracker","serp api","keyword research tool"],"maxResultsPerQuery": 10,"maxItems": 30,"regionId": 84}
Group output by query or domain to see which sites recur across the topic set.
For stable comparisons, keep the query spelling, region, and limits unchanged between scheduled runs.
Export and integrations
The default dataset works with standard Apify integrations.
Common workflows include:
- export to CSV or Excel for an SEO review;
- send run completion webhooks to Make, Zapier, or n8n;
- append records to Google Sheets;
- load JSON into BigQuery, Snowflake, or a custom warehouse;
- call another Actor after a scheduled run;
- monitor selected domains in your own application.
Run with the Apify API using cURL
Replace YOUR_TOKEN with an Apify API token:
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~yandex-search-results-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"queries": ["yandex search api"],"maxResultsPerQuery": 10,"maxItems": 10,"regionId": 84}'
Fetch dataset items after the run finishes:
$curl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=json&clean=true"
Run with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/yandex-search-results-scraper').call({queries: ['yandex search api'],maxResultsPerQuery: 10,maxItems: 10,regionId: 84,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Run with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("automation-lab/yandex-search-results-scraper").call(run_input={"queries": ["yandex search api"],"maxResultsPerQuery": 10,"maxItems": 10,"regionId": 84,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
Use with Apify MCP
Claude Code
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/yandex-search-results-scraper"
Claude Desktop, Cursor, and VS Code
Add this HTTP MCP server in the client’s MCP JSON configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/yandex-search-results-scraper"}}}
Example prompts you can ask through MCP:
- “Run Yandex Search Results Scraper for
yandex search api, return 10 US-region results, and summarize the top domains.” - “Collect the first Yandex result page for
site:apify.com web scrapingand return title, URL, snippet, and rank.” - “Compare domains ranking for
seo rank tracker,serp api, andkeyword research tool.”
Tips for reliable tracking
- Use the same exact query text and
regionIdacross comparison runs. - Keep scheduled batches moderate instead of requesting the 1,000-record maximum by default.
- Preserve
fetchedAtand run IDs in downstream storage. - Compare canonical
urlvalues rather than titles alone. - Expect natural ranking movement and personalization differences from interactive browser searches.
- Retry a failed upstream run later instead of treating it as an empty ranking snapshot.
Limitations
- The Actor currently extracts organic web results only.
- It does not solve CAPTCHA challenges.
- It uses a public server-rendered Yandex search surface that can change without notice.
- The public source may return fewer results than the requested maximum.
- Numeric region IDs are accepted, but Yandex ultimately controls localization behavior.
- Results may differ from a logged-in, personalized, or differently located browser session.
- The Actor does not provide search volume, CPC, keyword difficulty, alerts, or historical storage.
- A successful run is a point-in-time snapshot, not proof of complete Yandex index coverage.
Failure behavior and troubleshooting
Why did my run return fewer rows than requested?
Yandex may expose fewer organic records for a query, site: operator, region, or later page. The Actor stops normally when no more valid cards are available.
Why did the run fail with a CAPTCHA message?
Yandex challenged the request. The Actor fails explicitly to avoid producing a misleading empty dataset. Wait and rerun rather than immediately repeating many requests.
Why is my query rejected?
Check that queries is a non-empty string array, contains at most 50 entries, and has no blank value. Also verify numeric limits are within their documented ranges.
Why do ranks differ from my browser?
Browser login state, location, region, time, and personalization can influence results. Use the same Actor settings for consistent scheduled comparisons.
How do I inspect a failed run?
Open the run log in Apify Console. The final error distinguishes malformed input, an upstream challenge, an HTTP failure, and an unrecognized page shape.
Responsible use and legality
This Actor collects publicly displayed search-result metadata.
You are responsible for ensuring that your use complies with applicable laws, contracts, website terms, and organizational policies.
Do not use output to profile people, evade access controls, overload Yandex, or republish protected content unlawfully.
Use conservative limits and schedules. Store only the data needed for a legitimate SEO, research, or automation purpose.
Related Automation Lab Actors
- Google Organic Rank Tracker for recurring Google position tracking.
- Keyword Search Volume Checker Scraper for keyword metrics rather than Yandex result pages.
- Bing Search Scraper for normalized Bing result records.
These Actors cover different sources or metrics; they are not automatic fallbacks for this Yandex Actor.
FAQ
Does this Actor require a Yandex account or API key?
No. It uses a public Yandex results surface and does not ask for Yandex credentials.
Can I search multiple keywords?
Yes. Add up to 50 queries and use maxItems as the total run cap.
Can I collect more than one result page?
Yes. Set maxResultsPerQuery above 10, up to 100.
Does it return paid ads?
No. Every emitted row has resultType: "organic".
Can I schedule rank tracking?
Yes. Save the input as an Apify Task and attach a schedule. Historical comparison remains a downstream workflow.
Can I choose a country?
Use the numeric regionId. The default is 84 for the United States. Yandex controls how the region affects the returned rankings.
Are results guaranteed to stay identical?
No. Search rankings and source snippets are live and can change at any time.
Where are the records stored?
In the run’s default Apify dataset, available through Console, API, downloads, and integrations.