agentsclimarketplace

Apify yandex scraper bulk serp

Skill johnisanerd/claude-skill-yandex-scraper-bulk-serp/apify-yandex-scraper-bulk-serp

Claude/agent skill: bulk Yandex SERP collection with predictable per-result billing. Installs via npx skills add.

Install
npx -y skills add johnisanerd/claude-skill-yandex-scraper-bulk-serp --skill apify-yandex-scraper-bulk-serp

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

3 things to look at

  • 18 days oldThe repository was created 18 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

A yandex scraper for bulk SERP collection where the bill is predictable, powered by the Apify Yandex Search per-result Actor (johnvc/yandex-scrape-yandex-search-results-at-scale---per-result). Run a keyword list through Yandex across 6 domains, 19 languages, and any lr region, and get structured items back with organic rows (position, title, link, displayed_link, snippet) plus optional ads, knowledge graph, and inline media, each result type billed as its own item so you pay only for what you collect. Use when the user wants a yandex scraper, wants yandex data or Yandex search results as JSON or CSV in volume, wants to scrape many Yandex queries at scale, needs a per-result cost model instead of per-run fees, or is building a Russian-market SERP dataset. Pay-per-result billing, MCP-ready for Claude and other AI agents.

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

9.3 KB, as published. Nobody here has run it

Yandex Scraper: Bulk SERP Collection, Billed Per Result

Collect Yandex search results in volume with a cost you can predict before you start. Every item you get is one page of one result type, and that item is exactly what you pay for, which makes a keyword list easy to budget.

When to use this skill

  • The user wants a Yandex scraper for many queries, not a single lookup.
  • They want Yandex data as JSON or CSV for a keyword list, a market, or a research dataset.
  • They want the bill to scale with results collected rather than with runs started.
  • They are building a Russian-market or CIS-market SERP dataset and want organic results plus, where useful, ads, knowledge graph, or inline media.

Not for: tracking one keyword's position over time (use the companion Yandex rank tracker skill), reverse image lookups (use the Yandex Reverse Image Search Actor), or Google SERPs.

What you get (one dataset item per page, per result type)

A run returns one item per page for each result type you turned on, tagged with item_type (organic on a default run). The rows live in a nested array on that item. organic_results rows carry position, title, link, displayed_link, and snippet. The other type arrays are ads_results, knowledge_graph, inline_images, inline_videos, image_results, and video_results, and they come back empty when that type is off or absent from the SERP.

Every item also carries the query context and pagination state, which is what makes bulk output joinable: text, yandex_domain, lang, lr, max_pages, sort_mode, period, search_timestamp, search_domain, search_domain_description, search_language, search_language_description, search_location, page_number, total_pages, pages_processed, results_per_page, result_count, total_results_found, pagination_limit_reached, max_pages_set, and pagination_stopped_by_limit.

Prerequisites

The Actor

Run it with the Apify CLI

One query, two pages of organic results, which is two billable items:

apify actors call "johnvc/yandex-scrape-yandex-search-results-at-scale---per-result" -i '{"text":"crm software","yandex_domain":"yandex.com","lang":"en","lr":"84","max_pages":2}' \
  --json \
  --user-agent apify-awesome-skills/apify-yandex-scraper-bulk-serp \
  2>/dev/null

A commercial Russian query with ads and knowledge graph added, which bills the extra types as their own items:

apify actors call "johnvc/yandex-scrape-yandex-search-results-at-scale---per-result" -i '{"text":"доставка цветов","yandex_domain":"yandex.ru","lang":"ru","lr":"213","include_ads":true,"include_knowledge_graph":true,"max_pages":1}' \
  --json \
  --user-agent apify-awesome-skills/apify-yandex-scraper-bulk-serp \
  2>/dev/null

Pull a finished run's dataset for export, at no extra charge:

apify datasets get-items <DATASET_ID> --format json --user-agent apify-awesome-skills/apify-yandex-scraper-bulk-serp 2>/dev/null

Every call carries the three flags this repo expects, --json (or --format json), --user-agent apify-awesome-skills/apify-yandex-scraper-bulk-serp, and 2>/dev/null.

Run it from Claude or another AI agent (MCP)

The Actor is MCP-ready. Add the hosted server URL:

https://mcp.apify.com/?tools=actors,docs,johnvc/yandex-scrape-yandex-search-results-at-scale---per-result

Then ask, for example, "Collect the first page of yandex.ru results for these ten keywords in Moscow and give me one CSV row per link." MCP setup docs: https://docs.apify.com/platform/integrations/mcp

Workflow

  1. Write the keyword list first. text takes one query per run, so a list of 30 keywords is 30 runs. Build the list before you spend anything.
  2. Fix the market once and reuse it. Set yandex_domain, lang, and lr the same way across the whole batch so the collected rows are comparable.
  3. Decide which result types you actually need. Organic is on by default. Each of include_ads, include_knowledge_graph, include_inline_images, include_inline_videos, include_image_search, and include_video_search adds its own items per page, so each one multiplies the bill.
  4. Do the arithmetic before the batch. Items are roughly keywords times pages times result types enabled. Multiply by the live per-item price in references/gotchas.md, then confirm with the user if the batch is large.
  5. Run the batch, then read every dataset. Re-reading datasets is free, so collect once and export as many times as you like.
  6. Flatten for analysis. Filter items by item_type, walk the nested array, and emit one row per result with the parent item's text, search_timestamp, search_location, and page_number copied down. That is your CSV.

Inputs

  • text (string, required): the query, supporting the operators yandex.com supports such as site:
  • yandex_domain (enum, 6 domains, default yandex.com)
  • lang (enum, 19 languages) and lr (region ID string, for example 213 Moscow, 225 Russia, 84 USA)
  • include_organic_results (default true), plus include_ads, include_knowledge_graph, include_inline_images, include_inline_videos, include_image_search, include_video_search (booleans, each billed as its own items)
  • max_pages (integer, default 2, max 100, 0 for no cap): the main cost lever
  • sort_mode (relevance or date) and period (all, day, last_two_weeks, month) for a fresher slice
  • Image filters (image_type, image_color, image_orientation, image_file_type, image_width, image_height, image_site, image_recent) and video filters (video_duration, video_hd) apply only to the dedicated verticals

Cost

Billing is per dataset item, and an item is one page of one result type. Organic-only, one page per keyword, means one item per keyword, which is the cheapest way to sweep a large list. Turning on two extra result types roughly triples the item count for the same pages. Estimate as keywords times pages times enabled types, then price it with the live per-item figure in references/gotchas.md.

Honest limits

  • One query per run. Batching a keyword list means orchestrating multiple runs from your side.
  • Results are not flat. Rows are nested inside organic_results and friends, so a CSV export needs the flattening step in the workflow.
  • Ads, knowledge graph, and inline media appear only when Yandex shows them for that query, so enabling a type does not guarantee items of that type.
  • Positions and result sets vary by region and shift over time. A bulk collection is a snapshot with a search_timestamp, not a stable index.
  • Only the fields listed above are guaranteed. Anything extra shows up only when Yandex includes it.

Troubleshooting

  • Bill higher than expected: count enabled result types, not just pages. Each type on each page is a separate item.
  • Empty dataset for a keyword: check the query manually on the chosen yandex_domain, and broaden it.
  • Wrong-market results: lr alone does not switch language. Set yandex_domain, lang, and lr together.
  • Fewer pages than max_pages: Yandex ran out of results. Check pagination_limit_reached and pages_processed.
  • Do not re-run the Actor just to re-export. Read the existing dataset again with the export command above, which costs nothing.

See references/gotchas.md for cost guardrails and error recovery, and references/actor-index.md for the Actor routing table.

Related Yandex and international SERP Actors

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.