Yandex Search Results Scraper avatar

Yandex Search Results Scraper

Pricing

Pay per event

Go to Apify Store
Yandex Search Results Scraper

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

Stas Persiianenko

Maintained by Community

Actor 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?

FieldTypeMeaning
querystringSearch phrase that produced the row
titlestringOrganic result title shown by Yandex
urlstringNormalized destination URL
domainstringDestination hostname without www.
snippetstring or nullVisible result description, when available
rankintegerOne-based organic position for this query
pageintegerOne-based Yandex results page
regionIdintegerYandex region ID used by the request
resultTypestringCurrently always organic
fetchedAtISO timestampTime the result page was fetched

How to scrape Yandex search results

  1. Open Yandex Search Results Scraper in Apify Console.
  2. Add one or more real keywords under Search queries.
  3. Choose how many organic results to collect per query.
  4. Set the total-result cap for the run.
  5. Keep region 84 for the United States or enter another Yandex numeric region ID.
  6. Click Start.
  7. Open the Yandex organic results dataset view.
  8. 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 start event per run;
  • one item event 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 outputApproximate 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 os
from apify_client import ApifyClient
client = 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().items
print(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 scraping and return title, URL, snippet, and rank.”
  • “Compare domains ranking for seo rank tracker, serp api, and keyword research tool.”

Tips for reliable tracking

  • Use the same exact query text and regionId across comparison runs.
  • Keep scheduled batches moderate instead of requesting the 1,000-record maximum by default.
  • Preserve fetchedAt and run IDs in downstream storage.
  • Compare canonical url values 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.

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.