Dzen.ru Scraper - Articles, Videos, Channels & Comments avatar

Dzen.ru Scraper - Articles, Videos, Channels & Comments

Pricing

from $1.80 / 1,000 content records

Go to Apify Store
Dzen.ru Scraper - Articles, Videos, Channels & Comments

Dzen.ru Scraper - Articles, Videos, Channels & Comments

Scrape Dzen.ru (ex Yandex.Zen): articles, videos and channels. Full article text with likes and comment counts, channel subscriber counts with their on-page publications, video metadata. Paste any Dzen link; incremental mode reports only new and changed content.

Pricing

from $1.80 / 1,000 content records

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

35

Total users

18

Monthly active users

1.5 hours

Issues response

5 days ago

Last modified

Categories

Share

Dzen.ru Scraper: Articles, Videos & Channels

Dzen.ru Scraper turns Dzen (ex Yandex.Zen), Russia's largest content platform, into a clean JSON API. Walk the discovery feed page by page, or paste any Dzen link - an article, a video, or a channel - and get full metadata: article text with like and comment counts, channel subscriber counts with all their articles, video views and dates. Export to JSON, CSV or Excel, or pull results straight into your app through the API.

Why This Scraper?

  • Two lanes in one actor. Feed mode walks Dzen's discovery feed page by page; URL mode deep-dives pasted article, video and channel links.
  • Channel monitoring. Paste channel links and get the channel record (subscriber count included) plus its articles, newest first, as far back as Max records allows - incremental mode reports only the new ones on scheduled runs.
  • Full article records. Title, description, body text, images, author channel, like and comment counts.
  • Comments included. Turn on Include comments to get each article's and video's comments (text, author, date, likes, dislikes, emoji reactions and reply count) inside its record, plus a separate Comments output with one row per comment. Sort by popularity, newest or oldest.
  • Built for schedules. Incremental mode returns only new and changed content on recurring runs, and a refused run fails loudly instead of returning an empty dataset.
  • Reliable RU connection. Runs over the Apify proxy (automatic group, country RU) by default. If that connection is refused, the actor retries on Apify residential RU, then on a backup connection, and you can choose RESIDENTIAL yourself in the proxy settings.

Use Cases

  • Media analytics: track subscriber counts, like counts and comment counts across Dzen channels on a schedule.
  • Content monitoring: walk the discovery feed daily and get only the new publications.
  • Journalism and research: pull full article text and metadata for RU-media datasets.
  • Competitive tracking: monitor specific channels' publication cadence and engagement.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
id"article:arjYU4pA7HGwblbw" (prefixed with the entity type)
dzenType"article" (also "video", "channel", "native" for feed rows)
title"Article headline"
urlhttps://dzen.ru/a/... canonical link
publicationDate"2026-09-29" or an ISO timestamp
textPreview"Short description from the page"
textContentfull article body text (pasted article links, or channel articles with Full article text on); channel articles otherwise carry the lead paragraph in textPreview
images["https://avatars.dzeninfra.ru/..."]
authorName / authorUrlchannel name and link
subscribers869053 (channels)
likes / commentsCount124 / 44 where the page exposes them
views15234 (feed rows and videos)
isPremiumfalse
timeToReadSeconds42 (feed rows)
collectionContext"Channel Name" (publications walked from a channel)
comments[{"commentText": "...", "commentAuthor": "...", "commentDate": "2026-09-29T14:42:40Z", "commentLikes": 3, "commentReplies": 1, ...}] (with Include comments on)
detailFetchedtrue when the record's own page was read
changeType / changedFields / firstSeenAt / lastSeenAtincremental mode only

How to Use

  1. Pick a mode: feed (walk the discovery feed), url (paste links) or search (search by keyword).
  2. In feed mode set Max feed pages; in URL mode paste article, video or channel links (for channels, choose the order and whether you want articles, videos or shorts); in search mode enter queries and a result type.
  3. Set Max records to control run size and cost, then click Start.
  4. Download the dataset as JSON, CSV or Excel, or read it through the API.

URL mode accepts every link shape below (mixed sets are fine). Leaving Dzen URLs untouched runs the sample list, which holds one example of each shape (14 links), so a URL-mode run started without editing the field, or an API call that omits urls, scrapes all of them. Under the default Max records the sample links share the cap evenly (each channel, search or section link adds its share, unused share rolls on to the next link), so every shape returns at least one record. Links you paste yourself are not split: they run in order under the single Max records cap. Replace the list with your own links to scrape only those.

Link shapeExampleResult
channelhttps://dzen.ru/tasschannel record plus articles
channel tabhttps://dzen.ru/tass?tab=articleschannel's articles (?tab=videos and ?tab=shorts work too)
channel (legacy host)https://zen.yandex.ru/tasschannel, same as dzen.ru (m.dzen.ru works too)
channel by publisher idhttps://dzen.ru/id/<24-hex id>channel record plus articles
articlehttps://dzen.ru/a/as98eYhyeVtzTY8Xone article (tracking parameters are ignored)
videohttps://dzen.ru/video/watch/6130bc56baa2697c4c02a32bone video
search pagehttps://dzen.ru/search?query=%D0%B3%D1%80%D0%B8%D0%B1%D1%8Bsearch results (uses Search type)
search page, videoshttps://dzen.ru/search?query=%D0%B3%D1%80%D0%B8%D0%B1%D1%8B&type=videosonly videos (the link's type overrides Search type)
search page, channelshttps://dzen.ru/search?query=%D0%B3%D1%80%D0%B8%D0%B1%D1%8B&type=channelsonly channels
video sectionhttps://dzen.ru/videovideos from Dzen's discovery feed (Max feed pages pages, 1 by default)
news sectionhttps://dzen.ru/newsrecords from Dzen's discovery feed (Max feed pages pages, 1 by default)

Links of the old /media/<name> and /shorts/<id> forms are still accepted, but they are not confirmed to work and log a warning; prefer the channel or video link.

Topic pages and old-style article links that no longer exist on Dzen are not supported; they are skipped with a warning in the log.

Search Dzen for videos:

{
"mode": "search",
"searchQueries": ["грибы", "рецепты выпечки"],
"searchType": "videos",
"maxItems": 50
}

A channel's most popular videos:

{
"mode": "url",
"urls": [{ "url": "https://dzen.ru/tass" }],
"channelSort": "popular",
"channelContent": "videos",
"maxItems": 30
}

Walk the discovery feed:

{
"mode": "feed",
"maxPages": 5,
"maxItems": 100
}

Deep-read specific articles:

{
"mode": "url",
"urls": [
"https://dzen.ru/a/arjYU4pA7HGwblbw",
"https://dzen.ru/a/arnnyamrzEdmCVFV"
]
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/dzen-ru-scraper").call(run_input={
"mode": "feed",
"maxItems": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["dzenType"], item["title"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/dzen-ru-scraper').call({
mode: 'url',
urls: ['https://dzen.ru/tass'],
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Rival-compatible fields and extra inputs

Every row also carries these additive fields (the original fields are unchanged): contentId (= id), contentType (= dzenType), contentUrl (= url), author (= authorName), authorId (channel handle from authorUrl), authorSubscribers (= subscribers), publishedAt (= publicationDate), engagementRate (likes + comments, as a percent of views), inputUrl (the pasted link that produced the row), platform (dzen), scrapedAt, status (ok, or expired for incremental tombstones) and error (always empty on delivered rows: failed reads are not returned or billed). dislikes, reposts, favorites and category are part of the row shape but stay empty: Dzen's anonymous feed carries only the viewer's own flags (disliked, favorited, saved), a repost login link and an opaque numeric rubric id with no category name, and no counters.

Naming note: other Dzen scrapers use comments for a count. Here comments is the array of comment objects (with Include comments on) and the count is commentsCount.

  • startUrls: an alias of urls; both lists are merged and de-duplicated.
  • engagementScore: adds authorMedianViews, viewsVsAuthorMedian and engagementVsAuthorMedian, computed over the records of this run for the same channel.
  • maxConcurrency (1-10, default 4): parallel page and comment reads.

These fields are added after change detection, so they never mark an unchanged record as UPDATED and add no charge.

Resume and recurring updates

  • Resume (resumeFromRunId) continues one interrupted run: paste its run or dataset ID and the actor skips everything already collected there, so you don't pay twice.
  • Incremental mode (incrementalMode) is for scheduled runs over the same links. Each record is classified NEW, UPDATED (with changedFields), UNCHANGED (suppressed and not billed unless emitUnchanged is on), REAPPEARED or EXPIRED (only after a run that scanned every link to the end, never after a Max records cap, a spending-limit stop or a resumed run, and only with emitExpired). EXPIRED rows count toward Max records: they fill only the room left under the cap, and the rest stay in the stored state for a later run. Compared: every output field except views, scrapedAt and the comments list (still returned; a new comment counts through commentsCount); add more with ignoreFieldsForChanges. stateKey names or shares the stored state. With incremental mode off, output is exactly as before.
  • What counts as a change. views never makes a record UPDATED, because view counts rise on almost every run; the field is still returned. Likes, comment counts and subscriber counts do count, so a record is returned (and billed) again when they move. That is how a like-count jump or subscriber growth is spotted. To hear only about new content, add those fields to ignoreFieldsForChanges. Links in the output are always clean canonical dzen.ru URLs, so they never cause a false change.

Input Parameters

ParameterTypeDefaultDescription
modestringfeedfeed (walk the discovery feed), url (paste links) or search (search by keyword).
searchQueriesarray(none)Search mode: keywords or phrases, one per row.
searchTypestringallSearch mode: all, articles, videos or channels.
startUrlsarray(none)Alias of urls; both lists are merged.
channelSortstringnewestChannel links: newest, popular or oldest first.
channelContentstringarticlesChannel links: the channel's articles, videos or shorts.
fetchArticleTextbooleanfalseChannel links: read each article in full (complete text and images), charged as a full page read. Off returns the listing data (title, lead paragraph, counts, date, cover).
urlsarray14 sample linksDzen links (url mode): articles, videos, shorts, channels, search pages; see the supported links table. Mixed sets are fine.
maxItemsinteger20Stop after this many records (0 = the 1,000,000 maximum).
maxPagesinteger0Max result pages per feed or search query (0 = no limit).
maxConcurrencyinteger4Parallel page and comment reads (1-10).
engagementScorebooleanfalseAdd per-channel median views and relative engagement fields.
includeCommentsbooleanfalseAlso collect each article's and video's comments (nested in the record, and one row per comment in the Comments output).
maxCommentsPerPostinteger20Max comments per post. Does not count toward maxItems.
commentsSortstringtoptop (most popular, at most 20 per post), newest or oldest.
resumeFromRunIdstring(none)Continue one interrupted run.
incrementalModebooleanfalseReturn only new and changed records on scheduled runs.
stateKeystring(none)Name or share an incremental-mode state.
emitUnchangedbooleanfalseAlso return (and bill) unchanged records.
emitExpiredbooleanfalseAlso return (and bill) expired records.
ignoreFieldsForChangesarray(none)Extra output fields that should not make a record UPDATED (views is always ignored).
proxyobjectApify proxy, automatic group, RUConnection settings.
mcpConnectorsarray(none)Optional: send a summary of each record to apps you authorized under Integrations.
notionParentPageUrlstring(none)Notion connector only: page under which records are created.
maxNotifyListingsinteger50Cap on records written to each connector per run.

Output views

The run's Output tab (and ?view=<name> through the API) offers these views:

ViewWhat it shows
Dzen Records (overview)every record: type, title, link, author, counts, dates
Comments (comments)one row per collected comment next to its post's title and link
Changes (changes)incremental mode only: change type, changed fields, first and last seen
Channels (channels)channel records: name, link, subscribers

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

{
"id": "article:arjYU4pA7HGwblbw",
"dzenType": "article",
"title": "Article headline",
"url": "https://dzen.ru/a/arjYU4pA7HGwblbw",
"publicationDate": "2026-09-29T10:00:00Z",
"textPreview": "Short description from the page",
"textContent": "Full article body text...",
"images": ["https://avatars.dzeninfra.ru/get-zen-pub/..."],
"authorName": "Channel Name",
"subscribers": null,
"likes": 124,
"commentsCount": 44,
"comments": [],
"views": null,
"collectionContext": null,
"detailFetched": true,
"changeType": null,
"changedFields": [],
"firstSeenAt": null,
"lastSeenAt": null
}

Plan Requirement

The default connection is the Apify proxy (automatic group, country RU); in our checks Dzen's pages load over it after a short automatic sign-in handshake that the actor handles for you. If the default connection is refused, the actor retries on Apify residential RU, then on a backup connection. You can pick RESIDENTIAL yourself in Proxy configuration. On Apify free plans, which do not include residential proxies, the actor continues on a backup connection and logs this warning:

The selected connection is unavailable to this run. Apify free plans do not include residential proxies. Continuing on a backup connection; some pages may still be unavailable. For residential access, upgrade at https://apify.com/pricing or supply your own proxy URLs.

When the backup connection serves the run it logs "Served over the backup connection (the default connection was unavailable)." You can also supply your own proxy URLs in Proxy configuration. Expect 15-30 seconds before the first records while the connection is set up.

FAQ

How much does it cost?

You pay per record returned: articles, videos and channels are charged as content records (the item event), each collected comment (only with Include comments on) is charged as a comment (comment-enrichment), and every run has a small start fee (actor-start). Records whose full page is read, which means every pasted article or video link and channel articles with Full article text on, are also charged a full page read (detail-enrichment). Channel articles without it, channel videos and shorts, search results and feed rows never are. The Pricing tab shows the current rates. Use Max records and Max comments per post to cap the cost of any run; a run also stops cleanly at the spending limit you set.

How do comments work?

Comments sit inside their article or video record, in the comments list, so each post stays one record. The Comments output (next to the default output on the run page, or ?view=comments through the API) shows one row per comment next to the post's title and link, ready for CSV or Excel. Only top-level comments are returned; commentReplies tells you how many replies each has. With Most popular first, Dzen shows at most 20 comments per post; choose Newest first or Oldest first to get more. In incremental mode a post's comments are returned (and charged) again only when the post itself is NEW, UPDATED or REAPPEARED. A new comment changes commentsCount, which counts as a change.

This actor collects only publicly available content metadata and article text. You are responsible for how you use the data: follow Dzen's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Article text and media can be subject to third-party rights.

What is the difference between feed, URL and search mode?

Feed mode walks Dzen's discovery feed and returns a broad, paginated stream of publications. URL mode deep-dives specific links: full article text, channel subscriber counts and their articles, videos or shorts in newest, most popular or oldest order, and video metadata. Search mode returns Dzen's search results for your queries, optionally only articles, only videos or only channels. Channels found by search carry a rounded subscriber count (for example 15.3K); paste the channel link in URL mode for the exact figure.

Can I monitor a channel for new publications?

Yes. Paste the channel link, turn on Incremental mode, and schedule the run. Each run then returns only new and updated records, and unchanged ones are not billed.

Why did my run fail instead of returning an empty dataset?

If no page can be read, the run stops with a clear message so "no results" is never confused with "nothing could be read". Three messages exist: "The proxy connection was refused for this account, so no page could be read. Your Apify plan does not include proxy access; a paid plan is required" (check your own proxy credentials if you entered any); "No results: residential proxies are unavailable on this run (Apify free plans do not include them), and the backup connection could not load the requested Dzen pages" (upgrade or supply your own proxy URLs); and "Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search" (try again later).

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

Send results into your apps (MCP connectors)

Optionally pipe results into Notion, Linear, Airtable or Apify through Model Context Protocol connectors. Authorize a connector under Apify, Settings, API & Integrations, then select it in mcpConnectors. The dataset output is never changed by this.

🔗 More scrapers you might like

Pair this actor with these related scrapers from the same team:

🧩 Pikabu Scraper
Scrape Pikabu (Пикабу): keyword search, hot/new/best feeds, communities, tags, full story...
🧩 OK.ru Scraper
Scrape public OK.ru users, groups, topics, posts, videos, games and greetings by keyword...
🛒 Ozon.ru Scraper
Extract structured product data from Ozon.ru, Russia’s largest marketplace. Search by...
🧩 TikTok Comments Scraper
Scrape comments from TikTok videos using one or more video URLs or IDs. Extract comment...
🏠 Domclick RU Property Scraper
Extract property listings from domclick.ru, one of Russia’s largest real estate portals...
🏷️ Wildberries Scraper
Scrape Wildberries marketplace: product search with prices (wallet vs retail), discounts...

👉 Browse all abotapi scrapers

💬 Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.