DEV Community

Cover image for Yandex Tracking at Scale: Build a Rank Tracker for 1,000 Keywords in 2026
Truffle Pig Data
Truffle Pig Data

Posted on

Yandex Tracking at Scale: Build a Rank Tracker for 1,000 Keywords in 2026

Most rank trackers price Yandex like an afterthought, when they cover it at all. If your clients sell into Russia, Turkey, Kazakhstan, or anywhere else Yandex matters, the tooling gap is real: you either pay for an enterprise tier you don't need or you track rankings by hand. I built the Yandex Rank Tracker API to close that gap. It's a per-result Yandex SERP scraper: you pay for exactly the rows you pull, whether that's a 10-keyword daily check or a 1,000-keyword monthly sweep.

Disclosure: the Apify links in this post are affiliate links. If you run the Actor, I may earn a referral commission at no extra cost to you.

Does Yandex have a search API?

Technically yes, which makes this different from most sources I scrape. Yandex offers developer search APIs, but getting there means account registration in the Yandex ecosystem, API keys, quota tiers, and output built for site owners rather than rank trackers. What you don't get is the SERP as users see it: the ads, the knowledge graph card, the inline image and video blocks. A scraper-as-API fills that hole. You send a keyword and a region, and you get back the live results page as structured JSON, no key ceremony involved.

What the Yandex tracking data looks like

The Yandex Rank Tracker API returns each search result as its own JSON row: ranking position, title, target URL, snippet, favicon, publication date, and rich snippets when present.

Field Example Notes
Position 3 Rank on the page, the number you're tracking
Title CRM для малого бизнеса Result headline as served
URL https://example.ru/crm Target link for domain matching
Snippet Попробуйте бесплатно... Description text under the title
Publication date 2026-06-12 When Yandex shows one
Rich snippets sitelinks, ratings Present on enhanced results

Optional result types add paid ads with advertiser metadata, knowledge-graph entity cards, inline image strips, and video carousels. You can localize by domain (yandex.com, .ru, .by, .kz, .uz, .com.tr), pick from 19 interface languages, target a region ID, sort by relevance or date, and paginate as deep as you need.

Who this is for

SEO agencies with clients in CIS or Turkish markets, in-house teams that need daily Russian-language rank checks, ad-intelligence analysts watching who bids on which keywords, and builders giving an AI agent a second search engine beyond Google.

The manual way, and where it breaks

You can request a Yandex results page yourself and parse it. I tried, and the failure list got long fast. Yandex ships one of the more aggressive captcha walls in search, so unattended scripts stall within minutes. Regional targeting rides on an lr region ID system you have to map by hand. Cyrillic queries need careful encoding, the markup differs by domain and language, and ad blocks shift position between runs. Every one of those is fixable, and together they become a part-time job.

The faster way: run the Yandex Rank Tracker API

Documented input in, structured rows out, per-result billing.

Apify Console

  1. Open the Yandex Rank Tracker API and click Try for free.
  2. Set text to your keyword, pick a yandex_domain, and optionally a region.
  3. Run it and export the rows as JSON or CSV.

REST

curl -X POST "https://api.apify.com/v2/acts/johnvc~yandex-scrape-yandex-search-results-at-scale---per-result/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "text": "купить квартиру москва", "yandex_domain": "yandex.ru", "lr": "225", "max_pages": 1 }'
Enter fullscreen mode Exit fullscreen mode

Region 225 is Russia; the run endpoint itself is covered in the Apify API docs.

Track Yandex rankings in Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("johnvc/yandex-scrape-yandex-search-results-at-scale---per-result").call(
    run_input={
        "text": "CRM для малого бизнеса",
        "yandex_domain": "yandex.ru",
        "lr": "225",
        "max_pages": 1,
    }
)

for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row.get("position"), row.get("title"), row.get("url"))
Enter fullscreen mode Exit fullscreen mode

Match url against your domain and you have a rank check; loop it over a keyword list and you have a tracker.

Track 1,000 keywords without a subscription

The flagship task, Track Yandex rankings for 1,000 keywords, shows the bulk pattern. Per-result pricing keeps the budget predictable: 1,000 keywords times a top-10 pull is 10,000 rows, about $150, whether that happens in one run or fifty.

Monitor SERPs and ads on a schedule

Bulk collect Yandex SERPs for SEO monitoring is the recurring-snapshot setup, and Monitor Yandex search ads by keyword points the same machinery at paid results, advertiser metadata included.

Pull knowledge graph, images, and video blocks

Rankings are not the whole SERP. Get Yandex knowledge graph entity data extracts the entity card, Extract Yandex inline images by query grabs the image strip, and Track Yandex video results by query covers the video carousel.

Go beyond Russian

There are ready-made tracks for 18 languages and several country markets, from Turkish SERPs to Kazakh SERPs to country-level runs like Yandex SERPs in Georgia. For the no-code crowd, Export Yandex search results to CSV skips the code entirely.

Let your AI agent read the SERPs

Over the Model Context Protocol, the Actor becomes a tool that Claude, Claude Code, or Cursor can call mid-conversation. Ask "where does mysite.ru rank for 'CRM для малого бизнеса', and who outranks it?" and the agent runs the check against live rows instead of guessing. The task Get Yandex SERP data in Claude via MCP walks through the config, and there's more on Claude at claude.ai.

FAQ about Yandex tracking with a scraper

How is this Yandex scraper different from the per-page Yandex Search API?

Same structured data, different meter. This Actor bills per result row, which wins for bulk rank tracking where you control exactly how many rows you pull. Its sibling, the Yandex Search API, bills per SERP page and wins for occasional full-page pulls.

What does the Yandex scraper cost per run?

About $0.015 per result row plus a small start fee, with no subscription underneath. A top-10 check on one keyword is roughly fifteen cents; new Apify accounts include free platform credit, so trial runs usually cost nothing.

Can Claude run this Yandex scraper through MCP?

Yes. Add it as an MCP tool and Claude or Cursor can run rank checks during a conversation, with the structured rows coming back as tool output.

How do I schedule the Yandex scraper for daily tracking?

Save your keyword list as a task, attach an Apify schedule with a cron expression, and each run appends fresh rows you can diff over time. Start from the Yandex Rank Tracker API and save your first task.

What won't this Yandex scraper tell you?

It reports the SERP for the domain, language, and region you request, which is not the personalized page any single logged-in user sees. It also can't see data Yandex doesn't render, search volume included; pair it with a keyword tool for that half of the picture.

More from Truffle Pig Data

I've written about the rank-tracking angle elsewhere: the Medium piece Build a Yandex Rank Tracker: Bulk SERP Monitoring at $0.015 per Result, the same story on LinkedIn, and a shorter build note on Peerlist.

Wrapping up

If your rank tracker goes blank east of Warsaw, this is the fix: per-result Yandex tracking that costs what you pull. Start with the Yandex Rank Tracker API and a ten-keyword test list.

Top comments (0)