Toutiao News Scraper – 今日头条 China News, Hot Board & Comments avatar

Toutiao News Scraper – 今日头条 China News, Hot Board & Comments

Pricing

from $4.00 / 1,000 result (article, topic or profile)s

Go to Apify Store
Toutiao News Scraper – 今日头条 China News, Hot Board & Comments

Toutiao News Scraper – 今日头条 China News, Hot Board & Comments

Toutiao scraper API (今日头条, ByteDance news app), no login: Toutiao hot board/hot list = Chinese hot search, trending topics (头条热榜), Toutiao news & keyword search (头条新闻), article details + full text, channel feeds, Toutiao comments, replies, authors, followers, video URLs. $0.004/row, $0.0015/comment.

Pricing

from $4.00 / 1,000 result (article, topic or profile)s

Rating

0.0

(0)

Developer

AsiaData

AsiaData

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

22 days ago

Last modified

Security

Limited permissions

Share

Toutiao Scraper – 今日头条 News, Hot Board & Comments

What it returns: China news from Toutiao (今日头条 / Jinri Toutiao, ByteDance's Chinese news app) as flat JSON rows, no login or cookies: the Toutiao Hot Board (头条热榜 hot list, Chinese hot search / trending topics), keyword news search (English keywords auto-translated to Chinese), channel news feeds, Toutiao articles with full text, comments and replies, author profiles (with follower counts), their articles and micro-posts (微头条), video stream URLs (MP4) and related articles. New in v2.0 – Toutiao keyword research in one call: {"operation":"keywordResearch","keywords":["新能源汽车"]} → the top articles for the keyword (filters + sortBy), each with full text, followed by its comments (+ replies), plus one free insights row (top terms, comment sentiment labelled heuristic, engagement medians, top sources, commenter IP regions). Every row now carries trust fields (isPartial, unavailableFields, collectionWarnings) and articles carry engagement metrics (engagementRate, likesPer1kReads, …); trackMetrics: true turns any scheduled run into a snapshot tracker (reads / hot value / rank deltas vs the previous run). What you give it: nothing (Hot Board), or keywords[], urls[] / ids[], users[], channels[]. You control what is fetched (include), what is returned (fields, outputMode incl. the token-efficient lean mode), filters (dateFrom, minReads, textContains, sortBy…), monitoring (onlyNew) and the spend (maxItems, maxCostUsd, free dryRun). Price: $0.004 per row (topic, article, profile; full text included), $0.0015 per comment or reply. Errors, plan and summary rows are free. Speed (measured on Apify): a default call (20 Hot Board rows) finishes in ~2 s; 20 search results or 20 channel-feed articles in ~3–4 s; 50 related articles in ~6 s; 20 articles with full text in ~8 s. Unofficial; not affiliated with Toutiao or ByteDance.

For AI agents

  • Toutiao MCP tool: deadc0dex--toutiao-scraper (Apify MCP server https://mcp.apify.com). Call with call-actor, then read rows with get-dataset-items. Default calls finish in 2–8 s (well inside the 30 s wait).
  • One call, many inputs: every input is an array; in operation: "auto" all filled inputs run (one task each).
  • Never a silent failure: bad inputs come back as type: "error" rows with errorCode, message and a concrete fix; the run still ends SUCCEEDED. The last row is always type: "summary" (counts, billed events, cost, warnings, nextSteps).
  • Token-efficient output: {"outputMode":"lean"} returns only type, id and the fields agents use most, no null/empty keys, dates as 2026-10-10T10:02Z, text cut to 300 chars: on average ~70 % fewer tokens than the default rows (41–87 % by row type) (see Token-efficient mode below). Add "leanFormat":"table" for one TSV table in the summary row.
  • Free discovery: {"operation":"capabilities"} returns a machine-readable manifest (operations, fields, include options, filters, prices, limits). {"dryRun": true, ...} returns one free plan row per input with estimated rows, cost and seconds.

Copy-paste inputs (one per operation)

operationinput
hotBoard (hot list / hot search){} or {"operation":"hotBoard","maxItems":50}
search (keyword search){"keywords":["比亚迪","artificial intelligence"],"maxItems":20}
feed{"channels":["news_tech","news_finance"],"maxItems":20}
articleDetails (article details + full text){"urls":["https://www.toutiao.com/article/7694967967913607743/"]}
comments{"operation":"comments","ids":["7694967967913607743"],"maxItemsPerInput":20,"repliesPerComment":3}
replies{"operation":"replies","ids":["<commentId from a comment row>"],"maxItems":20}
userProfile{"operation":"userProfile","users":["1755235951852024"]}
userArticles{"users":["1755235951852024"],"profileTab":"all","maxItems":10}
related{"operation":"related","ids":["7694967967913607743"],"maxItems":30}
video URLs{"ids":["7694967481320718848"],"include":["video"]}
lean output{"keywords":["华为"],"outputMode":"lean","maxItems":10}
keywordResearch (keyword → articles → full text → comments → insights){"operation":"keywordResearch","keywords":["新能源汽车"],"maxArticles":10,"maxCommentsPerArticle":20,"sortBy":"mostCommented"}
comment analysis for chosen words{"operation":"keywordResearch","keywords":["BYD"],"maxArticles":5,"maxCommentsPerArticle":50,"matchTerms":["电池","续航"]}
hot board trend tracking (schedule hourly){"operation":"hotBoard","trackMetrics":true,"deltaKey":"hot-board"}
cost check{"keywords":["华为"],"maxItems":200,"dryRun":true} / {"operation":"capabilities"}

Operations (operation)

operationinputreturns (row type)billed event
auto (default)whatever is filled: urls/ids → articleDetails, users → userArticles, keywords → search, channels → feed; nothing → hotBoard––
hotBoardnonehotTopic: rank, title, hotValue, label, searchQuery, categories (top 50)result
searchkeywords[]article: title, abstract, source, authorId, publishedAt, readCount, likeCount, commentCountresult
feedchannels[] (news_hot, news_tech, news_finance, news_world, …)article (latest articles of the channel)result
articleDetailsurls[] / ids[] (article, video, 微头条)article with full text, all imageUrls, author, exact time, all countsresult
commentsurls[] / ids[]comment rows (+ reply rows with repliesPerComment)comment
repliesids[] = commentId valuesreply rowscomment
userProfileusers[] (numeric id or /c/user/<digits>/ URL)user: name, bio, verification, media account, area, IP location, createdresult
userArticlesusers[] (+ profileTab: articles default, posts = 微头条 micro-posts, all)article rows of that author, newest first, with readsresult
relatedurls[] / ids[]article rows Toutiao recommends under the articleresult
keywordResearchkeywords[] + maxArticles (10), maxCommentsPerArticle (20), repliesPerComment (0)per keyword: article rows with full text, each followed by its comment / reply rows (articleTitle), then one free insights rowresult + comment
capabilitiesnoneone free capabilities rowfree

Control what is fetched and returned

inputvalueseffect
include[]fullText, images, video, author, commentsopt-in enrichment per article row: full text + images + exact time (~0.2–0.5 s/item, 8 in parallel, same price); all image URLs (only rows without a working image are opened); video = playable MP4 videoUrl + videoStreams for video rows (links expire ~1 h, videoUrlExpiresAt); nested author profile (free); nested top comments (commentsPerItem, billed per comment)
fields[]any field names, e.g. ["title","url","publishedAt","readCount"]return only these fields (type always kept)
outputModecompact (default) / lean / fulllean = fewest tokens (curated fields, no nulls, envelope only in the summary); full adds every field plus v0.x names (mode, query, groupId, scrapedAt)
leanFormatrows (default) / tabletable also writes key-value record LEAN_TABLE (TSV, header once per row type) and copies it into the summary row when < 20 KB; same billing
maxTextCharsdefault 300 in lean, no cut otherwisecut text, abstract, description to N chars (ends with …, row gets truncated: true)
textContainse.g. ["比亚迪","BYD"]keep rows whose title/abstract/text contains any word, applied before billing
onlyNew + memoryNametrue, "tech-feed"monitoring: skip (and do not bill) rows earlier runs with the same memoryName already returned (ids kept 30 days in named key-value store toutiao-seen-<memoryName> in your account)
dateFrom, dateTo2026-10-01, ISO date-time, unix seconds, 24h, 7d, 4wpublish-time window, applied before billing
minReads, minLikes, minCommentsintegersminimum counts, applied before billing
sortByrelevance (default), newest, mostRead, mostLiked, mostCommentedorder within each input
contentTypeany, article, video, micro-postkeep one kind (videos come from feed, userArticles, related)
maxItemsdefault 20, max 10000total billable rows (comments included)
maxItemsPerInputdefault maxItems ÷ inputscap per keyword / channel / article / user
maxCostUsde.g. 0.05stop before charges exceed it (summary says stopReason)
expandQuerytrue (default)English → Chinese with a curated ~950-entry dictionary (BYD → 比亚迪, Xiaomi → 小米, Elon Musk → 马斯克, Federal Reserve → 美联储); rows show queryUsed
dryRuntruefree plan, nothing fetched or billed
maxArticles, maxCommentsPerArticledefault 10 / 20 (max 100 / 500)keywordResearch depth per keyword; maxItems defaults to keywords × maxArticles × (1 + comments)
matchTermse.g. ["电池","续航"]keep only comments/replies containing any word; the insights row counts each word. Applied after each page is fetched, so it lowers charges, not requests (Toutiao has no server-side comment search). Filter articles with textContains
insightsdefault on for keywordResearch, else off (include: ["insights"])one free insights row: n-gram top terms, lexicon sentiment (labelled heuristic), engagement medians, top articles/comments/sources, commenter IP regions. No LLM
trackMetrics + deltaKeytrue, "hot-board"snapshot mode: rows get snapshotAt, previousSnapshotAt, isNewSinceLastSnapshot and deltas vs the previous run with the same key (compact metrics kept 30 days in key-value store toutiao-snap-<deltaKey> in your account)

Output fields (compact default)

Every data row: type, operation, input, queryUsed, id, url, fetchedAt, then:

  • hotTopic: rank, title, hotValue, label, searchQuery, categories, isPinned
  • article: rank, title, abstract, contentType, source, authorName, authorId, publishedAt, readCount, likeCount, commentCount, shareCount, coverImageUrl (+ text, textLength, imageUrls, authorFollowerCount, authorVerification, favoriteCount, originalUrl, videoPlayCount with full text; + author / comments objects when included)
  • comment / reply: rank, commentId, groupId (article id), parentCommentId, text, authorName, authorId, likeCount, replyCount, publishedAt, ipLocation
  • comment rows in outputMode: "full" or via fields also have authorVerifiedReason (commenter's verification text) and hasAuthorReplied (true when the article's author replied to that comment).
  • user: userId, name, description, verified, verification, isMediaAccount, area, ipLocation, createdAt, avatarUrl, followerCount
  • with include: ["video"], video article rows add: videoUrl, videoUrlExpiresAt, videoWidth, videoHeight, videoDefinition, videoStreams (all renditions)
  • v2.0 on every compact/full data row: isPartial, unavailableFields, collectionWarnings (trust); articles: likesPer1kReads, commentsPer1kReads, sharesPer1kReads, engagementRate (computed); comments: commentReplyRatio (computed); keywordResearch comments: articleTitle. Lean rows add them only with include: ["metrics"] / ["trust"] or fields. Unknown values are null, lists are [], ids are strings, counts are integers, times are UTC ISO-8601. Full list: outputMode: "full" or the capabilities row.

Which fields each source fills (audited v1.2, checked against the Toutiao article page): search rows have reads/likes/comments and exact time but no share/favorite counts; channel-feed rows from the PC pool have only comment counts and the feed time (feedTime, when Toutiao pushed the item, not publishedAt) – add include: ["fullText"] for exact time, reads, likes, shares, author id; userArticles (articles tab) reads are rounded ("11万" → 110000) and the time is relative (relativeTime); readCount is Toutiao's live view counter and hotValue the live heat score (both move by the minute); comment rows from replies have no groupId/url (the article is not known from a comment id). Details: AUDIT_FIELDS_v1.2.md in the source.

Cost

whatprice
row: hot topic, article/video/微头条, author profile (full text, images, nested author included)$0.004
comment or reply (also nested via include: ["comments"])$0.0015
actor start$0.00005
error, summary, plan (dryRun), capabilities rowsfree

Default call (20 rows) = $0.08. Hot Board top 50 = $0.20. 20 comments = $0.03.

Example calls

{"keywords": ["BYD", "华为"], "maxItems": 10, "dateFrom": "7d", "sortBy": "mostRead"}
{"operation": "comments", "urls": ["https://www.toutiao.com/article/7694967967913607743/"], "maxItemsPerInput": 20, "repliesPerComment": 3}
{"users": ["1755235951852024"], "include": ["fullText"], "fields": ["title", "url", "publishedAt", "readCount", "text"], "maxItems": 5}

Error codes (type: "error" rows, never billed)

errorCodemeaningtypical fix
MISSING_INPUTthe operation needs an input that was emptythe fix field contains a working example input
INVALID_INPUTunknown channel, comment id not numericuse a listed channel / numeric commentId
INVALID_URLnot a Toutiao article/user URL or idpass https://www.toutiao.com/article/<id>/ or the id
NOT_FOUNDdeleted, private or not public; unknown /c/user/token/… profile linkcheck the id / link
NO_RESULTSnothing found, or filters removed everythingshorter / Chinese keyword, relax filters
BLOCKEDcaptcha / rate limit after all retriesretry later or use RESIDENTIAL proxy
UPSTREAM_ERRORunexpected Toutiao responseretry
COST_LIMITmaxCostUsd or run charge limit reached; rows so far are validraise the limit
RATE_LIMITEDHTTP 429 / too many requests after all retries; rows so far are validretry later, raise requestDelayMs
PARTIALa task stopped early because a later page failed (search page, comment page, author list); its rows are valid, the summary tasksReport says where it stoppedretry later for the rest

Toutiao keyword research: keyword → articles → full text → comments → insights

One input instead of chaining search, articleDetails and comments:

{"operation": "keywordResearch", "keywords": ["新能源汽车", "BYD"], "maxArticles": 10, "maxCommentsPerArticle": 20, "repliesPerComment": 0, "sortBy": "mostCommented", "dateFrom": "7d", "maxCostUsd": 1}

For each keyword (English names are translated, see queryUsed) the actor ranks Toutiao news results with your filters (dateFrom/dateTo, minReads, minLikes, minComments, textContains, sortBy), opens the top maxArticles for full text and exact counts, and writes each article row followed by up to maxCommentsPerArticle comment rows (Toutiao's hot order; repliesPerComment adds replies). Comment pages are fetched in parallel with the article pages. Then one free insights row per keyword:

  • articleTopTerms / commentTopTerms: most frequent 2–4 character Chinese n-grams and Latin words (by number of rows containing them; no word segmentation, read them as topic hints)
  • commentSentiment: positive / negative / neutral counts from a ~80-word lexicon with simple negation, label: "heuristic", net label only with ≥ 3 signals – a triage signal, not a classifier
  • termCounts (for matchTerms), engagement (median reads / likes / comments / engagementRate), topArticles, topComments, topSources, commenterIpLocations (Toutiao's IP属地), publishedRange, caveats Cost = articles × $0.004 + comments × $0.0015 (10 articles + 200 comments = $0.34; most articles have fewer comments, so runs usually cost less – dryRun gives the upper bound). Measured on Apify: 3 articles + 11 comments + insights in ~4 s.

Trust, engagement metrics and snapshot tracking

  • Null vs zero: null = Toutiao did not provide the value for that source (listed in the row's unavailableFields); 0 = Toutiao reported zero. isPartial: true + collectionWarnings when a sub-request for that row failed (e.g. the article page could not be opened, so only list fields are present). The summary has tasksReport (per input: requested vs returned, comments, pages fetched, stop reason), pagesFetched, isPartial and nullRule. Pages that fail after earlier pages worked produce a free PARTIAL row – never a silent cut.
  • Computed metrics (documented, null-safe): engagementRate = (likes + comments + shares) / reads (4 decimals), likesPer1kReads, commentsPer1kReads, sharesPer1kReads (per 1,000 reads, 2 decimals), comments commentReplyRatio = replies / max(likes, 1). Null when reads are unknown or 0. Formulas are also in the summary (computedFields).
  • Snapshot mode: schedule any operation with trackMetrics: true and a deltaKey; rows get readsDelta, likesDelta, commentsDelta, sharesDelta, engagementRateDelta (articles), hotValueDelta and rankDelta (> 0 = moved up; hot topics), followerCountDelta (profiles), likesDelta / replyCountDelta (comments). Only compact numbers (no text) are stored, 30 days, in your own key-value store.

Token-efficient mode (lean output for AI agents)

outputMode: "lean" is made for LLM context windows:

  • each row keeps type and id plus a curated set: hotTopic rank, title, hotValue, label, searchQuery (searchQuery omitted when it equals the title); article title, source, publishedAt, readCount, likeCount, commentCount, contentType (only when not "article"), videoDurationSeconds/videoPlayCount (videos), text (full text calls); comment text, authorName, likeCount, replyCount, publishedAt; reply adds parentCommentId; user name, description, verification, isMediaAccount, ipLocation, createdAt;
  • keys whose value is null, empty, [] or false are left out (zero counts stay);
  • operation, input, queryUsed, fetchedAt appear once in the summary row (tasks); runs with several inputs keep input on each row;
  • url is left out when it is the standard pattern (summary urlPatterns: article https://www.toutiao.com/article/{id}/, micro-post /w/{id}/, hot topic /trending/{id}/, user /c/user/{id}/) and kept when it points elsewhere;
  • dates are compact UTC ISO YYYY-MM-DDTHH:MMZ; text is cut to maxTextChars (300) with … and truncated: true;
  • fields[] still picks any field; leanFormat: "table" adds one TSV table (header once) – the fewest tokens.

Measured with tiktoken cl100k_base on real rows (v1.2, avg tokens per row, compact → lean → table): hot topic 143 → 50 → 35; search article 384 → 79 → 57; feed article 371 → 87 → 67; article with full text 3,012 → 396; comment 194 → 79 → 58; reply 178 → 85; profile 340 → 201. Billing is identical in every mode.

{"type":"article","id":"7694977286570787379","title":"美媒感慨:通用、福特都没法立足的日本市场,比亚迪却有戏?","source":"观察者网","publishedAt":"2026-10-10T10:02Z","readCount":3020,"likeCount":54,"commentCount":21}

Toutiao keyword search – Toutiao news search by keyword (头条新闻 / 头条搜索, English → Chinese)

{"keywords": ["Tesla", "特斯拉"], "maxItems": 20} searches Toutiao news (so.toutiao.com news tab, then the all tab; up to ~100–160 unique results per keyword for large maxItems, 3 pages fetched in parallel). English names are translated with a curated dictionary (BYD → 比亚迪, Federal Reserve → 美联储); each row shows queryUsed. Add dateFrom: "7d", sortBy: "mostRead" or minReads to narrow; filters run before billing and paging stops as soon as enough rows passed them.

Empty input (or {"operation":"hotBoard"}) → what is trending in China right now: up to 50 topics with hotValue, label and searchQuery (~2 s). Pass searchQuery values to search for the articles behind a topic. Channel feeds work the same way: {"channels": ["news_finance", "news_tech"], "maxItems": 20}.

Toutiao channel feed (头条频道)

{"channels": ["news_tech", "news_finance"], "maxItems": 20} → the latest articles of a Toutiao channel feed (24 channels; English names like tech and Chinese names like 科技 work). Three Toutiao pools are read in one parallel round (~50 unique rows per channel per run).

{"operation": "related", "ids": ["7694967967913607743"], "maxItems": 30} → the "related reading" articles, videos and micro-posts Toutiao shows under an article (with reads, likes, exact time).

Toutiao video URLs

{"ids": ["7694967481320718848"], "include": ["video"]} (or any feed / related / userArticles call with include: ["video"]) → playable MP4 videoUrl of the best rendition, videoUrlExpiresAt (about 1 h), width / height / definition and all renditions in videoStreams, plus videoPlayCount and duration. Same price per row.

Toutiao article details and full text (article scraper)

{"urls": ["https://www.toutiao.com/article/7694967967913607743/"]} (or ids) → full plain text (one line per paragraph), all image URLs, author, exact publish time and all counts. Add include: ["fullText"] to any search/feed/userArticles/related call to get the same for every row (same price). Use fields to get only what you need, e.g. ["title","url","publishedAt","text"].

Toutiao comments and replies

{"operation": "comments", "ids": ["7694967967913607743"], "maxItemsPerInput": 50} → top comments with author, likes, reply count, IP location (50 per request, ~2 s). repliesPerComment: 3 adds replies; operation: "replies" with commentId values pages through all replies. Nested comments on article rows: include: ["comments"] + commentsPerItem.

Toutiao user profile, followers, user articles and micro-posts

{"operation": "userProfile", "users": ["1755235951852024"]} → name, bio, verification, media account, area, IP location and followerCount (read from the author's newest article/post; the profile API itself encrypts its counters). users also accepts https://www.toutiao.com/c/user/<id>/ and /c/user/token/<token>/ share links (resolved to the numeric id automatically). {"users": ["1755235951852024"], "maxItems": 10, "sortBy": "newest"} → that author's latest articles with reads (头条号 media accounts).

Which Toutiao data do you need? (single-purpose jobs, one actor)

jobinput
Toutiao hot board / hot search tracker{"operation":"hotBoard","trackMetrics":true,"deltaKey":"hot"} (hourly schedule)
Toutiao keyword search{"keywords":["比亚迪"],"maxItems":50}
Toutiao article text scraper{"urls":["https://www.toutiao.com/article/<id>/"]}
Toutiao comments scraper (+ replies){"operation":"comments","ids":["<id>"],"maxItemsPerInput":100,"repliesPerComment":5}
Toutiao user / author feed{"users":["<user id or profile URL>"],"profileTab":"all","maxItems":20}
Topic research with comments + sentiment{"operation":"keywordResearch","keywords":["<topic>"]}

Pricing

$0.004 per topic/article/profile row (full text, images and nested author profile included), $0.0015 per comment or reply, $0.00005 per run start. Error, summary, plan (dryRun) and capabilities rows are free. Set maxItems and maxCostUsd to cap spend; the run stops before exceeding them.

Example output rows

{"type": "hotTopic", "operation": "hotBoard", "input": null, "queryUsed": null, "id": "7695707626033954852", "url": "https://www.toutiao.com/trending/7695707626033954852/", "fetchedAt": "2026-10-12T17:35:37.084Z", "rank": 1, "title": "评论员:日本是铁了心要介入台海", "hotValue": 44939912, "label": null, "searchQuery": "评论员:日本是铁了心要介入台海", "categories": ["military"], "isPinned": false}
{"type": "article", "operation": "search", "input": "BYD", "queryUsed": "比亚迪", "id": "7695781314229781035", "url": "https://www.toutiao.com/article/7695781314229781035/", "fetchedAt": "2026-10-12T17:35:54.719Z", "rank": 1, "title": "外媒实测两周攻破比亚迪Shark6皮卡,厂方承认软件缺陷", "abstract": "澳大利亚媒体9月播出的一则实测,记录下这样一幕:记者驾驶比亚迪Shark 6行驶在堪培拉郊外公路上,坐在路边的网络安全研…", "contentType": "article", "source": "皮卡车市.PiKM", "authorName": "皮卡车市.PiKM", "authorId": "62005434531", "publishedAt": "2026-10-12T14:02:18.000Z", "readCount": 16, "likeCount": 0, "commentCount": 0, "shareCount": null, "coverImageUrl": null}
{"type": "comment", "operation": "comments", "input": "7694967967913607743", "queryUsed": "7694967967913607743", "id": "7695356474414957370", "url": "https://www.toutiao.com/article/7694967967913607743/", "fetchedAt": "2026-10-12T17:35:52.625Z", "rank": 1, "commentId": "7695356474414957370", "groupId": "7694967967913607743", "parentCommentId": null, "text": "我胃癌晚期,治疗意义不大,医生说还有八个月的生存期,现在已过了十八个月,自我感觉良好,不知道还能生存多久?", "authorName": "忆江南ooo", "authorId": "53304838182", "likeCount": 25, "replyCount": 34, "publishedAt": "2026-10-11T10:33:25.000Z", "ipLocation": "浙江"}
{"type": "summary", "operation": "auto", "operationsRun": ["search"], "inputs": 1, "rowsByType": {"article": 5}, "billableRows": 5, "billedEvents": {"result": 5, "comment": 0}, "costUsd": 0.02, "stopReason": "maxItems (5) reached", "warnings": [], "nextSteps": ["For full text: include [\"fullText\"] or operation \"articleDetails\" with ids = id values. For reactions: operation \"comments\" with the same ids."]}

(Real rows from test runs on 2026-10-12; long texts cut with … here only.)

Speed and limits

  • v1.3 (measured on Apify, 256 MB, same inputs as v1.2.5): channel feed 20 rows 8.3 → 3–4 s (all three pools in one parallel round), related 50 rows 9.7 → 6.1 s (pages in parallel), search 50 rows 5.2 → ~4.1–4.7 s; Hot Board, details, comments ~1.5–2 s; peak memory 20–37 MB. Upstream round trips from Apify to Toutiao are 1–2.5 s each (sometimes 4–5 s) – that, not the actor, is the floor.
  • v1.3 removed limits: /c/user/token/… profile links now resolve; profiles return followerCount; include: ["video"] returns playable MP4 URLs; search goes deeper (all tab paged to its end: ~99 instead of 83 rows for 人工智能, 160 for 新能源汽车).
  • v1.2: one pre-bundled file, a third channel pool (~50 unique rows per channel), lean output (−41 to −87 % tokens per row), two data fixes from the field audit (rounded 19-digit ids; dead image links dropped).
  • Light by design: no browser, no Apify SDK, one HTTP dependency; default run memory 256 MB.
  • Keyword search uses so.toutiao.com; Toutiao sometimes answers with a slide captcha or an empty page, the actor retries with a fresh session/IP automatically.
  • Channel-feed rows from the PC pool carry no working image URL (Toutiao only sends unsigned links there); include: ["images"] opens just those rows to add a signed image.
  • Not available without login: keyword video search (Toutiao search returns articles; get videos via feed / userArticles / related with contentType: "video"), following / like / publish counts of profiles (encrypted by Toutiao), more than ~50 unique rows per channel per run, Q&A (wukong.com is closed). Video URLs expire about an hour after the run.

Use via API

curl -X POST "https://api.apify.com/v2/acts/deadc0dex~toutiao-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H 'Content-Type: application/json' -d '{"keywords":["比亚迪"],"maxItems":5}'

Python: ApifyClient(token).actor("deadc0dex/toutiao-scraper").call(run_input={"keywords": ["BYD"]}).

Backward compatibility (v0.x inputs)

mode (hotBoard, search, feed, articleDetails), searchKeywords, articleUrls, feedChannels, maxItemsPerQuery and fetchDetails: true still work (mapped to operation, keywords, urls, channels, maxItemsPerInput, include: ["fullText"]). outputMode: "full" adds the old output names mode, query, groupId, scrapedAt.

The actor reads only public pages and public JSON endpoints that any visitor can open, without login. Personal data (commenter names, author bios) may be protected by laws such as GDPR or China's PIPL: collect only what you need and have a legitimate purpose.

FAQ

Is Toutiao the same as ByteDance news? Toutiao (今日头条, Jinri Toutiao) is ByteDance's Chinese news and information app; this actor reads its public web data. It does not cover Douyin. Do I need a Toutiao account or cookies? No. Can I search in English? Yes: known English names are translated (see queryUsed); unknown words stay as typed. Chinese keywords give the best recall. How do I monitor the Hot Board or a channel for new items only? Schedule the actor with onlyNew: true and a memoryName per monitor; each run returns and bills only rows not seen in earlier runs. How do I keep costs predictable? Set maxItems and maxCostUsd, or run dryRun: true first. Filters are applied before billing. Is the sentiment AI-generated? No. The insights row counts words from a fixed lexicon (with simple negation) and n-grams; it is labelled heuristic and makes no claims beyond those counts. No LLM is called and nothing is translated. Does matchTerms make runs cheaper? It lowers the charge (only matching comments are billed) but not the number of requests: Toutiao has no server-side comment search, so pages are fetched and then filtered. Spellings: people also search for this as toutao scraper, toutiao scrapper, tou tiao, jinritoutiao or 头条 爬虫 – it is the same Toutiao (今日头条) data. Keywords: Toutiao scraper, Toutiao API, Jinri Toutiao, 今日头条, 头条热榜, 头条搜索, 头条评论, 头条号, China news API, Chinese news scraper, ByteDance news.