Vexaloom Labs

Yandex News Story Clusters Across Russia & the CIS

Search or browse Yandex News and get story clusters with every linked article, topic tags, source names and publication dates across Russian and CIS editions.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
modestringrequiredWhat to scrape. `searchNews` searches keywords, `browseCategory` reads a rubric feed, `topStories` reads the homepage sections, and `byStoryUrls` resolves specific story clusters.
searchQueriesarrayoptionalOne or more keywords or phrases (mode=searchNews). Russian and English queries are supported. The daily-test prefill uses one query.
categorystringoptionalRubric to browse (mode=browseCategory). `all` reads all 16 rubrics in one run.
Show all input fields
FieldTypeRequiredDescription
modestringrequiredWhat to scrape. `searchNews` searches keywords, `browseCategory` reads a rubric feed, `topStories` reads the homepage sections, and `byStoryUrls` resolves specific story clusters.
searchQueriesarrayoptionalOne or more keywords or phrases (mode=searchNews). Russian and English queries are supported. The daily-test prefill uses one query.
categorystringoptionalRubric to browse (mode=browseCategory). `all` reads all 16 rubrics in one run.
storyUrlsarrayoptionalDzen News story or instory URLs, or bare cluster UUIDs (mode=byStoryUrls). A bare numeric persistent ID is not a valid cluster URL.
maxStoriesintegeroptionalMaximum number of story clusters to return across the whole run. Yandex search depth varies by query.
sortOrderstringoptionalOrder of the returned search clusters (mode=searchNews). Yandex search itself is relevance-ranked; these options sort the returned set.
timeRangestringoptionalKeep clusters published in this window (mode=searchNews). Applied to the results Yandex returns. A custom date range overrides this field.
publishedAfterstringoptionalInclusive start date in YYYY-MM-DD format (mode=searchNews). Leave blank for no lower bound.
publishedBeforestringoptionalInclusive end date in YYYY-MM-DD format (mode=searchNews). Leave blank for no upper bound.
includeDomainsarrayoptionalKeep a cluster when at least one linked article is from one of these domains (for example `rbc.ru`).
excludeDomainsarrayoptionalDrop a cluster when any linked article is from one of these domains.
includePublishersarrayoptionalKeep a cluster when any linked source name contains one of these values (case-insensitive).
excludePublishersarrayoptionalDrop a cluster when any linked source name contains one of these values (case-insensitive).
includeKeywordsarrayoptionalKeep a cluster when its headline, summary or an article headline/summary contains at least one of these values.
excludeKeywordsarrayoptionalDrop a cluster when its headline, summary or an article headline/summary contains any of these values.
includeDetailsbooleanoptionalFetch the cluster page for topic labels, source-reported counts, images, country/region, comments and likes.
includeArticlesbooleanoptionalEmit one record per linked article in every cluster. Turn this off for a story-only dataset.
maxArticlesPerStoryintegeroptionalMaximum article records and article pages fetched per cluster. Yandex returns 100 articles per page.

Download the published input schema

View complete JSON
{
  "description": "Search Yandex News / Dzen News by keyword, browse a category, read homepage top stories, or fetch story clusters by URL. Returns every linked article, source counts, topics and dates.",
  "properties": {
    "category": {
      "default": "politics",
      "description": "Rubric to browse (mode=browseCategory). `all` reads all 16 rubrics in one run.",
      "editor": "select",
      "enum": [
        "all",
        "politics",
        "society",
        "svo",
        "business",
        "world",
        "sport",
        "incident",
        "culture",
        "computers",
        "science",
        "auto",
        "army",
        "showbusiness",
        "health",
        "moscow",
        "personal_feed"
      ],
      "enumTitles": [
        "All categories",
        "Politics",
        "Society",
        "SVO / Ukraine conflict",
        "Business",
        "World",
        "Sport",
        "Incidents",
        "Culture",
        "Technology",
        "Science",
        "Cars",
        "Army and weapons",
        "Show business",
        "Health",
        "Moscow",
        "Interesting"
      ],
      "prefill": "politics",
      "title": "Category",
      "type": "string"
    },
    "excludeDomains": {
      "default": [],
      "description": "Drop a cluster when any linked article is from one of these domains.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "prefill": [],
      "title": "Exclude source domains",
      "type": "array"
    },
    "excludeKeywords": {
      "default": [],
      "description": "Drop a cluster when its headline, summary or an article headline/summary contains any of these values.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "prefill": [],
      "title": "Excluded keywords",
      "type": "array"
    },
    "excludePublishers": {
      "default": [],
      "description": "Drop a cluster when any linked source name contains one of these values (case-insensitive).",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "prefill": [],
      "title": "Exclude publishers",
      "type": "array"
    },
    "includeArticles": {
      "default": true,
      "description": "Emit one record per linked article in every cluster. Turn this off for a story-only dataset.",
      "prefill": true,
      "title": "Include article records",
      "type": "boolean"
    },
    "includeDetails": {
      "default": true,
      "description": "Fetch the cluster page for topic labels, source-reported counts, images, country/region, comments and likes.",
      "prefill": true,
      "title": "Include story details",
      "type": "boolean"
    },
    "includeDomains": {
      "default": [],
      "description": "Keep a cluster when at least one linked article is from one of these domains (for example `rbc.ru`).",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "prefill": [],
      "title": "Include source domains",
      "type": "array"
    },
    "includeKeywords": {
      "default": [],
      "description": "Keep a cluster when its headline, summary or an article headline/summary contains at least one of these values.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "prefill": [],
      "title": "Required keywords",
      "type": "array"
    },
    "includePublishers": {
      "default": [],
      "description": "Keep a cluster when any linked source name contains one of these values (case-insensitive).",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "prefill": [],
      "title": "Include publishers",
      "type": "array"
    },
    "maxArticlesPerStory": {
      "default": 100,
      "description": "Maximum article records and article pages fetched per cluster. Yandex returns 100 articles per page.",
      "maximum": 1000,
      "minimum": 1,
      "prefill": 3,
      "title": "Maximum articles per story",
      "type": "integer"
    },
    "maxStories": {
      "default": 20,
      "description": "Maximum number of story clusters to return across the whole run. Yandex search depth varies by query.",
      "maximum": 500,
      "minimum": 1,
      "prefill": 3,
      "title": "Maximum story clusters",
      "type": "integer"
    },
    "mode": {
      "default": "searchNews",
      "description": "What to scrape. `searchNews` searches keywords, `browseCategory` reads a rubric feed, `topStories` reads the homepage sections, and `byStoryUrls` resolves specific story clusters.",
      "editor": "select",
      "enum": [
        "searchNews",
        "browseCategory",
        "topStories",
        "byStoryUrls"
      ],
      "enumTitles": [
        "Search news by keyword",
        "Browse a category",
        "Homepage top stories",
        "Fetch story clusters by URL"
      ],
      "prefill": "searchNews",
      "title": "Mode",
      "type": "string"
    },
    "publishedAfter": {
      "description": "Inclusive start date in YYYY-MM-DD format (mode=searchNews). Leave blank for no lower bound.",
      "editor": "textfield",
      "title": "Published after",
      "type": "string"
    },
    "publishedBefore": {
      "description": "Inclusive end date in YYYY-MM-DD format (mode=searchNews). Leave blank for no upper bound.",
      "editor": "textfield",
      "title": "Published before",
      "type": "string"
    },
    "searchQueries": {
      "description": "One or more keywords or phrases (mode=searchNews). Russian and English queries are supported. The daily-test prefill uses one query.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "prefill": [
        "Яндекс"
      ],
      "title": "Search queries",
      "type": "array"
    },
    "sortOrder": {
      "default": "newest",
      "description": "Order of the returned search clusters (mode=searchNews). Yandex search itself is relevance-ranked; these options sort the returned set.",
      "editor": "select",
      "enum": [
        "relevance",
        "newest",
        "oldest",
        "mostCovered"
      ],
      "enumTitles": [
        "Yandex relevance",
        "Newest first",
        "Oldest first",
        "Most covered first"
      ],
      "prefill": "newest",
      "title": "Sort order",
      "type": "string"
    },
    "storyUrls": {
      "description": "Dzen News story or instory URLs, or bare cluster UUIDs (mode=byStoryUrls). A bare numeric persistent ID is not a valid cluster URL.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "prefill": [],
      "title": "Story URLs or cluster IDs",
      "type": "array"
    },
    "timeRange": {
      "default": "any",
      "description": "Keep clusters published in this window (mode=searchNews). Applied to the results Yandex returns. A custom date range overrides this field.",
      "editor": "select",
      "enum": [
        "any",
        "day",
        "week",
        "month"
      ],
      "enumTitles": [
        "Any time",
        "Past day",
        "Past week",
        "Past month"
      ],
      "prefill": "any",
      "title": "Publication time",
      "type": "string"
    }
  },
  "required": [
    "mode"
  ],
  "schemaVersion": 1,
  "title": "Yandex News Story Clusters Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
resultsstringoptionalDataset containing scraped story clusters, linked articles and homepage sections.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "Story clusters and their linked articles from Yandex News / Dzen News, including source counts, topics, images and publication times.",
  "properties": {
    "results": {
      "description": "Dataset containing scraped story clusters, linked articles and homepage sections.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Yandex News results",
      "type": "string"
    }
  },
  "title": "Yandex News Story Clusters Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "title": "Yandex News Results",
  "views": {
    "articles": {
      "display": {
        "component": "table",
        "properties": {
          "articleUrl": {
            "format": "link",
            "label": "Article URL"
          },
          "headline": {
            "format": "text",
            "label": "Headline"
          },
          "imageUrl": {
            "format": "link",
            "label": "Image"
          },
          "publishedAt": {
            "format": "text",
            "label": "Published"
          },
          "sourceName": {
            "format": "text",
            "label": "Source"
          },
          "storyId": {
            "format": "text",
            "label": "Story ID"
          }
        }
      },
      "title": "Articles",
      "transformation": {
        "fields": [
          "recordType",
          "storyId",
          "docId",
          "headline",
          "sourceName",
          "articleUrl",
          "publishedAt",
          "publishedAtIso",
          "imageUrl",
          "scrapedAt"
        ]
      }
    },
    "stories": {
      "display": {
        "component": "table",
        "properties": {
          "articleCount": {
            "format": "number",
            "label": "Sources (reported)"
          },
          "articlesReturned": {
            "format": "number",
            "label": "Articles returned"
          },
          "category": {
            "format": "text",
            "label": "Category"
          },
          "headline": {
            "format": "text",
            "label": "Headline"
          },
          "publishedAt": {
            "format": "text",
            "label": "Published"
          },
          "sourceCount": {
            "format": "number",
            "label": "Unique sources"
          },
          "storyId": {
            "format": "text",
            "label": "Story ID"
          },
          "storyUrl": {
            "format": "link",
            "label": "Story URL"
          },
          "topics": {
            "format": "array",
            "label": "Topics"
          }
        }
      },
      "title": "Stories",
      "transformation": {
        "fields": [
          "recordType",
          "storyId",
          "persistentId",
          "headline",
          "category",
          "topics",
          "articleCount",
          "articlesReturned",
          "sourceCount",
          "leadSource",
          "publishedAt",
          "storyUrl",
          "scrapedAt"
        ]
      }
    },
    "trending": {
      "display": {
        "component": "table",
        "properties": {
          "sectionCounts": {
            "format": "text",
            "label": "Counts"
          },
          "topics": {
            "format": "array",
            "label": "Sections"
          }
        }
      },
      "title": "Homepage sections",
      "transformation": {
        "fields": [
          "recordType",
          "topics",
          "sectionCounts",
          "domain",
          "scrapedAt"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Yandex News Story Clusters Across Russia & the CIS

Yandex News groups coverage of the same event from many outlets into a story cluster. This actor reads the public Dzen News surface that now serves Yandex News, returns the clusters, and lists every linked article inside each one. Search by keyword, browse a category, read the homepage sections, or paste a story URL. No login, API key, or proxy is needed.

What this actor does

  • Four ways to collect news: keyword search, 16 category feeds, the 15 homepage sections, or specific story URLs and cluster IDs.
  • Story clusters, not just headlines: each story carries its cluster ID, source-reported coverage count, actual article count, unique source list, topics, image, country/region and timestamps.
  • Every linked article: article records include the publisher, headline, clean article URL, publication date, image and source flags.
  • Filters and sorting on the returned set: date window, source domain, publisher, keyword, relevance, newest, oldest or most covered.
  • Automatic deduplication by story ID and article ID, and empty fields are omitted rather than stored as nulls.

Output per story

Field Description
recordType "story"
storyId Story cluster ID (UUID); shared with its article records
persistentId Yandex's numeric story ID
storyUrl Canonical story page on Dzen News
headline Cluster headline
summary Short cluster summary, when Yandex provides one
category Broad rubric name, when available
topics / topicTags Rubric or topic labels attached to the cluster
topicIds Numeric rubric IDs
articleCount Number of publications Yandex reports for the cluster
articlesReturned Number of article records actually collected
sourceCount Number of distinct outlet names among the collected articles
sources Outlet names, when articles were collected
leadSource Outlet behind the lead article
leadArticleUrl Publisher URL of the lead article
publishedAt Cluster timestamp, ISO UTC
publishedAtRaw Timestamp label as shown by Yandex
imageUrl Cluster image, when present
country / region Story location, when Yandex reports it
importance / relatedStories Yandex story metrics
commentsCount / likesCount Interaction counts, when present
domain ru
scrapedAt UTC timestamp when collected

articlesReturned, sourceCount and sources are emitted only when includeArticles is true. With it off, no article records are fetched, so those article-derived fields are omitted.

Output per article

Field Description
recordType "article"
storyId Parent story cluster ID
docId Yandex document ID
headline Outlet's headline
summary Article snippet, when Yandex provides one
sourceName Outlet name
sourceUrl Outlet site root
articleUrl Clean link to the article
publishedAt Publication date (YYYY-MM-DD)
publishedAtIso Publication timestamp, ISO UTC
publishedAtRaw Timestamp label as shown by Yandex
imageUrl Outlet logo or article image
isForeignAgent / isDzenArticle Yandex flags
agencyId Yandex outlet ID
domain ru
scrapedAt UTC timestamp when collected

Output per homepage record

topStories (and the legacy getTrending mode) emits one recordType: "trending" record with topics (homepage section names), sectionCounts, domain and scrapedAt, followed by the story records for those sections.

Input

Field Type Default Description
mode string searchNews searchNews, browseCategory, topStories or byStoryUrls
searchQueries array – Keywords or phrases (mode=searchNews); the daily-test prefill uses ["Яндекс"]
category string politics Rubric slug or all (mode=browseCategory)
storyUrls array – Story/instory URLs or cluster UUIDs (mode=byStoryUrls)
maxStories integer 20 Maximum story clusters across the run (1–500)
sortOrder string newest relevance, newest, oldest or mostCovered (mode=searchNews)
timeRange string any any, day, week or month (mode=searchNews)
publishedAfter string – Inclusive YYYY-MM-DD start date (mode=searchNews)
publishedBefore string – Inclusive YYYY-MM-DD end date (mode=searchNews)
includeDomains array [] Keep clusters with an article from any listed domain
excludeDomains array [] Drop clusters with an article from any listed domain
includePublishers array [] Keep clusters matching any outlet name substring
excludePublishers array [] Drop clusters matching any outlet name substring
includeKeywords array [] Keep clusters matching any keyword in the title, summary or articles
excludeKeywords array [] Drop clusters matching any keyword
includeDetails boolean true Fetch cluster details such as topics, reported count, image and metrics
includeArticles boolean true Emit one record per linked article; when off, article-derived story fields are omitted
maxArticlesPerStory integer 100 Maximum articles collected per cluster (1–1000)

Example: brand monitoring by keyword

{
  "mode": "searchNews",
  "searchQueries": ["Яндекс", "Яндекс Такси"],
  "maxStories": 50,
  "timeRange": "week",
  "includeArticles": true
}

Example: all categories, story records only

{
  "mode": "browseCategory",
  "category": "all",
  "maxStories": 200,
  "includeArticles": false
}

Example: homepage top stories

{
  "mode": "topStories",
  "maxStories": 40
}

Example: resolve specific story clusters

{
  "mode": "byStoryUrls",
  "storyUrls": [
    "https://dzen.ru/news/story/85c864f8-36d7-5b96-ab8d-937bea5d9c9b",
    "c29b2d3c-c183-546b-9a23-b9aba12e981e"
  ],
  "maxArticlesPerStory": 300
}

Use cases

  • Media monitoring: follow a company, person or event across many Russian outlets.
  • Share-of-voice measurement: use the reported and returned article counts to size coverage.
  • PR and communications: see which outlets picked up a story and how the headline evolved.
  • Newsroom research: export a cluster's full article list with dates and publisher links.
  • Risk and compliance: monitor keywords, source domains and publication windows.

FAQ

What happened to Yandex News? The public Yandex News pages now redirect to Dzen News, which provides the same story-cluster model. This actor reads that public surface.

How many stories can one search return? Yandex search returns 20 clusters per page and its depth varies by query; observed runs reached 9–22 pages (roughly 175–400 unique clusters) before the result set ended. maxStories is a hard run-wide cap.

Why is articleCount different from articlesReturned? articleCount is the number Yandex reports for the cluster, while articlesReturned is the number of article records actually collected. The two can differ in either direction: Yandex's live count changes as outlets publish or remove articles (observed 96 reported vs 122 returned, and 246 vs 362), and very large clusters may be capped by maxArticlesPerStory.

Are the date and sort filters applied by Yandex? Yandex's public search page applies them in the browser rather than in the server response. This actor applies the same filters and sorting to the set it returns, so a very old custom date range may return fewer results than a dedicated archive search.

Which categories are available? All, politics, society, SVO, business, world, sport, incidents, culture, technology, science, cars, army, show business, health, Moscow and interesting. all reads every feed.

Do I need a proxy or login? No. The actor connects directly and handles the site's anonymous session automatically. No cookies or credentials are required.

Can I search other regional editions or languages? The current public surface serves one Russian-language feed; the old ru/kz/by/uz/com edition selector no longer changes the content. Search queries can still be written in Russian, English or any language Yandex indexes.

Why is there no trending keyword list? The old “what people discuss” panel is no longer present on the homepage. topStories returns the homepage sections and their top clusters instead.

Does this actor download full article text? No. It returns article metadata and the publisher's URL. Full text stays on the publisher's site and may be paywalled or geo-restricted.

Is this affiliated with Yandex or Dzen? No. This is a third-party actor reading public pages; it is not affiliated with, endorsed by, or sponsored by Yandex or Dzen.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build bC913XMWUHe0Emsxm. Documentation is regenerated from the default published build; private drafts are not included.