Zhihu Scraper: Question Answers, Votes & Authors, No Login
Pricing
from $1.89 / 1,000 answers
Zhihu Scraper: Question Answers, Votes & Authors, No Login
Collect public answers from Zhihu (知乎) questions with no login: full text, HTML, images, author, upvotes and date. Research what Chinese users say about a topic or product. Paste a question URL or ID and export to JSON, CSV or Excel.
Pricing
from $1.89 / 1,000 answers
Rating
0.0
(0)
Developer
Cliqto Media
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
4 days ago
Last modified
Categories
Features
Share
Paste a Zhihu (知乎) question URL or ID and get its public answers as a table: full text, HTML, image links, author, upvotes, date and link. No login, cookies or API key.
Use it to research what Chinese users say about a topic or product. A first run of 20 answers usually takes 3 to 8 seconds, or about 30 seconds if the connection to Zhihu has to be retried, and costs $0.0553 on the Free plan.

Table of contents
- What it does
- How it works
- Quick start
- Use cases
- Input
- Output
- Pricing
- Limits
- API, export and integrations
- Troubleshooting
- FAQ
- Related Actors
- Support
What it does
This Actor reads the public answers of the Zhihu questions you give it. It saves one row per answer. Each row has the question title, answer text, answer HTML, image and video links, author name and bio, upvotes, downvotes, publication date and answer link.
It works only with questions you name. It does not search Zhihu by keyword. It does not collect comment text, user profiles or articles.
Good fit
- You want to know what Chinese users think about a product, brand or topic, and you already have the question links.
- You compare opinions across several Zhihu questions in one table.
- You want answer text in your own research, translation or AI workflow.
- You need a CSV or Excel file of answers without a Zhihu account.
How it works
- The Actor reads your list of questions. It accepts browser links and plain numeric IDs, and it removes duplicates.
- It opens the public version of each question that Zhihu shows without a login, and it goes through the answers page by page.
- It saves each answer as one row, until it reaches your limit or the end of the question.
- It writes a run summary that shows what happened with each question.
Quick start
-
Open the Input tab. Keep the example question or paste your own URL or ID in Question URLs or IDs (box 1).
-
Keep Maximum answers at 20 for a first test (box 2).
-
Click Start.
-
Open the Output tab when the run ends. Read the author, answer text, upvotes and date in the Answers table (box 4).
Expected result: 20 rows, one per answer, usually in 3 to 8 seconds, or about 30 seconds if the connection to Zhihu has to be retried. The slowest run took 43 seconds.
Use cases
| Buyer job | Input path | Output entity | Key fields | Next integration |
|---|---|---|---|---|
| Learn what users say about a product | urls with one or more questions | Answer | content, voteups, createdAt | CSV or Excel for review |
| Find the answers people agree with most | urls, higher maxItems | Answer | voteups, content, url | Sort by voteups in your sheet |
| Prepare Chinese text for translation or AI analysis | urls | Answer | content, contentHtml, sourceLanguage | API or MCP |
| Collect image links from answers | urls | Answer | media, url | Your own review tool |
| Get a short summary in your team tool | urls, deliveryConnector, deliveryTarget | Answer summary | author, content, url | Slack or Notion |
Input
Input fields
| Field | Plain name | Type | Required | Default / prefill | Allowed values | Effect | Example | Recommendation |
|---|---|---|---|---|---|---|---|---|
urls | Question URLs or IDs | List of text | Yes | No default; prefill is one example question | A zhihu.com/question/<ID> link or a numeric ID, up to 100 per run | Sets which questions to read | https://www.zhihu.com/question/19805218 | Start with one question |
maxItems | Maximum answers | Whole number | No | Default 20, prefill 20 | 1 to 10,000 | Total answers across all questions | 20 | Raise the run timeout above 300 seconds for more than about 500 answers |
includeAnswerDetails | Include comment counts | True or false | No | false | true, false | Tries to get a comment count for each answer | false | Keep it off unless you need this number |
deliveryConnector | Send results to | Connector | No | Empty | Your MCP connector | Posts a short summary after the run | Your Slack connector | Leave empty if you only need the table |
deliveryTarget | Notion page or channel | Text | No | Empty | Notion page link or Slack channel ID | Sets where the summary goes | A Notion page link | Use it with deliveryConnector |
An empty urls list stops the run with a clear message. Links with www., m. or no https:// work, and the Actor ignores anything after ? or #. The same question given twice counts once. An answer link such as /question/1/answer/2 is rejected, because the Actor reads whole questions.
Interacting settings
| When | Input A | Input B | Effective behavior | Example | Cost/result effect |
|---|---|---|---|---|---|
| Several questions | urls | maxItems | The limit is shared. Questions run in order until the limit is reached | 2 questions, limit 100 | If the first question fills the limit, the second is not read. The run summary lists it |
| Comment counts on | includeAnswerDetails | maxItems | Each answer takes 2.5 to 4.5 seconds longer | Runs saved 100 answers in 259 to 272 seconds. One stopped at the 300 second timeout with 60 answers after connection failures. Set a timeout of 600 seconds or more for over 50 answers | Same price, much slower |
| Large runs | maxItems | Run timeout | The run stops before the timeout and keeps saved rows | 1,000 answers took about 6 to 8.5 minutes | You pay only for saved answers |
| Cost cap | maxItems | Maximum cost per run | The run stops when the next answer would pass your cap | A cap of $0.008 pays for 2 answers on Free and Bronze, 3 on Silver and higher | The status says the limit stopped the run |
Input examples
One question
{"urls": ["https://www.zhihu.com/question/19805218"],"maxItems": 20}
Expected behavior: the Actor saves the first 20 answers that Zhihu returns.
Expected output: rows with title, author, content, voteups and createdAt.
Limit or cost note: $0.0553 on the Free plan.
Several questions, by ID
{"urls": ["19805218", "https://www.zhihu.com/question/28479292"],"maxItems": 200}
Expected behavior: the Actor reads the first question, then the second, until it saves 200 answers in total. Limit or cost note: one question fee for each question the Actor checks, plus one fee per saved answer.
Output
Output fields
The Answers table shows the main fields. Choose All fields to see the rest.
| Field | Meaning | Type | Can be empty? | Example / enum | Source / notes |
|---|---|---|---|---|---|
questionId | Zhihu question ID | Text | No | 19805218 | From your input |
title | Question title | Text | Yes | 哪些便宜好用的家用咖啡机值得推荐? | As shown on Zhihu |
answerId | Answer ID | Text | No | 2734473811 | Kept as text so long IDs stay correct |
author | Public author name | Text | Yes | evanxu | Null when Zhihu shows no name |
authorBio | Short description the author shows on Zhihu | Text | Yes | 你身边最懂吃喝的好朋友 | Null when the author has none |
authorAvatarUrl | Link to the author picture | Link | Yes | https://pic1.zhimg.com/v2-41a177c2ccfe082635b8cb92b6cdea73_l.jpg?source=57bf9c9b | The file is not downloaded |
content | Answer text | Text | Yes | 题主,不知道多便宜算便宜… | Null for image-only answers |
contentHtml | Answer HTML | Text | Yes | <p>…</p> | Active scripts and tracking images are removed |
media | Image, audio and video links | List | Can be an empty list | [{"type":"image","url":"https://pic1.zhimg.com/…"}] | Links only, files are not downloaded |
voteups | Upvotes | Number | Yes | 14 | Number reported by Zhihu |
downvotes | Downvotes | Number | Yes | 0 | Number reported by Zhihu |
comments | Comment count | Number | Yes | null | Null unless includeAnswerDetails is on and Zhihu returns it |
createdAt | Publication time in UTC | Date | Yes | 2023-01-06T13:02:02.000Z | |
url | Answer link | Link | No | https://www.zhihu.com/question/19805218/answer/2734473811 | |
sourceAnswerCount | Answers on the question, as reported by Zhihu | Number | Yes | 136 | Can differ from what Zhihu returns without a login |
detailStatus | Result of the comment count lookup | Text | No | not_requested, available, unavailable, deadline | |
sourceUrl | Public page used to read the answer | Link | No | https://www.zhihu.com/tardis/landing/m/360/qus/19805218 | |
fetchedAt | Collection time in UTC | Date | No | 2026-11-06T08:48:27.711Z | |
source | Source domain | Text | No | zhihu.com | |
sourceLanguage | Language of the source | Text | No | zh | |
contentVariant | Original text or not | Text | No | original | The Actor does not translate |
type | Record type | Text | No | answer |
Output entities and surfaces
| Situation | Dataset/API/KVS/live view | Result shape | User action |
|---|---|---|---|
| Normal item | Dataset, Answers table, API | One row per answer | Open or export the table |
| Question with no public answers | RUN_SUMMARY, status message | No rows for it. Without a login Zhihu often gives the same reply for an empty, closed or missing question, so it is usually listed as failed with SOURCE_UNAVAILABLE or UNVERIFIED_EMPTY. It is complete with 0 saved only when Zhihu confirms the question and its zero count | Try another question |
| Partial result | Dataset, RUN_SUMMARY, status message | Saved rows stay. The summary gives the stop reason and any questions not read | Raise the limit, cap or timeout |
| Question Zhihu does not return | RUN_SUMMARY, status message | Listed as failed with SOURCE_UNAVAILABLE. The run still succeeds if other questions gave answers | Check the URL or try another question |
| Zhihu ends its public list early | Dataset, RUN_SUMMARY, status message | Saved rows stay and the run succeeds with partial and PUBLIC_LIST_END. sourceAnswerCount shows the total Zhihu reports. A long pause on Zhihu's side can look the same | If you expected more answers, run it again later. A second run that stops at the same place means that is the public list |
| Technical failure | Dataset, RUN_SUMMARY, status message | The run is marked Failed, even if some rows were saved. Saved rows stay and you pay only for them. The summary gives the reason, such as NETWORK_ERROR, RATE_LIMITED, SOURCE_BLOCKED, SOURCE_ERROR, RESPONSE_TOO_LARGE or UNREADABLE_ANSWERS. After 2 questions in a row end this way, the run stops and lists the unread questions, which you do not pay for. NO_ANSWERS_LIMIT stops the run the same way after about 4 minutes or 20 MB with no answers saved. A question already started at that moment keeps its question-checked charge | Try again later |
Two cases are best-effort and do not fail the run. A question Zhihu does not return (SOURCE_UNAVAILABLE, UNVERIFIED_EMPTY) is one, if other questions gave answers. A public list that ends early with saved rows (PUBLIC_LIST_END) is the other. Reaching maxItems, your cost cap or the timeout with saved rows is also a successful run with the status partial.
Output example
{"type": "answer","questionId": "19805218","title": "哪些便宜好用的家用咖啡机值得推荐?","answerId": "2734473811","author": "evanxu","authorBio": "创业 | 咖啡爱好者 | 数码家居评测","authorAvatarUrl": "https://pic1.zhimg.com/v2-41a177c2ccfe082635b8cb92b6cdea73_l.jpg?source=57bf9c9b","content": "题主,不知道多便宜算便宜,比如100元不到的法压壶?…","contentHtml": "<p>题主,不知道多便宜算便宜…</p>","media": [{ "type": "image", "url": "https://pic1.zhimg.com/v2-b4fbe06ef907d0a0d26af950ce363492_b.gif" }],"voteups": 14,"downvotes": 0,"comments": null,"createdAt": "2023-01-06T13:02:02.000Z","url": "https://www.zhihu.com/question/19805218/answer/2734473811","source": "zhihu.com","sourceUrl": "https://www.zhihu.com/tardis/landing/m/360/qus/19805218","sourceLanguage": "zh","contentVariant": "original","sourceAnswerCount": 136,"fetchedAt": "2026-11-06T08:48:27.711Z","detailStatus": "not_requested"}
This is one row from the first example, with content and contentHtml trimmed. A null value means Zhihu did not return that value, or that you did not ask for it.
Send results to Slack or Notion
Pick your connector in the optional deliveryConnector field. After the run saves its data, the Actor posts a short summary (up to 25 rows and a link to the full dataset) there. Put a Notion page link or a Slack channel ID in deliveryTarget: in Notion every run is added on top of that one page, so your workspace does not fill up with new pages. A delivery error never fails the run and costs nothing extra. Connect a service once in Apify Console → MCP connectors.
Use case → fields
| Buyer job | Input path | Output entity | Key fields | Next integration |
|---|---|---|---|---|
| Product opinion research | urls | Answer | content, voteups, createdAt | CSV or Excel |
| Most supported answers | urls, maxItems | Answer | voteups, author, url | Your spreadsheet |
| Translation or AI analysis | urls | Answer | content, sourceLanguage | API or MCP |
Pricing
Pricing unit
You pay per event. Platform usage is included in these prices.
| Event | When it is charged | Free | Bronze | Silver | Gold and higher |
|---|---|---|---|---|---|
| Actor start | Once per run, per GB of run memory (minimum one) | $0.0008 | $0.0008 | $0.0008 | $0.0008 |
| Question checked | Once for each valid question the Actor checks | $0.0005 | $0.00045 | $0.0004 | $0.00035 |
| Answer | Once for each saved answer | $0.0027 | $0.00243 | $0.00216 | $0.00189 |
The start fee grows with run memory. The default 256 MB counts as one start fee.
- Question with no answers, a question Zhihu does not return, or a connection failure on it: you pay the start fee and the question fee, and nothing for answers. The question fee is charged before the Actor contacts Zhihu.
- Invalid input: the run stops before it checks any question, so you pay only the start fee.
- Partial or failed run: you pay for the questions checked and the answers actually saved.
- Comment counts: no extra charge.
Cost examples
| Scenario | Input scope | Expected item/event count | Free | Bronze | Silver | Gold and higher | Stop/cap behavior |
|---|---|---|---|---|---|---|---|
| Smallest | 1 question | 1 answer | $0.0040 | $0.0037 | $0.0034 | $0.0030 | Stops at maxItems |
| First test | 1 question | 20 answers | $0.0553 | $0.0499 | $0.0444 | $0.0390 | Stops at maxItems |
| Normal | 1 question | 100 answers | $0.2713 | $0.2443 | $0.2172 | $0.1902 | Stops at maxItems or your cost cap |
| Large | 1 question | 1,000 answers | $2.7013 | $2.4313 | $2.1612 | $1.8912 | Needs a longer timeout |
A run needs a maximum cost of at least $0.004. Apify refuses a lower cap before the run starts. If the money left is less than one question plus one answer, the Actor does not read the next question and says why.
Limits
- No keyword search. You must give question URLs or IDs.
- Some questions need a login. Zhihu does not return every question without one. In our tests
19550225and20702054gave no answers. The Actor does not use accounts or cookies, so it reports these questions as failed. - Answer count can be lower than on the website. The Actor saves what Zhihu returns without a login.
sourceAnswerCountis the number Zhihu reports. Zhihu's pages can overlap, so if a question comes up short the Actor reads it again, up to 2 more times, and charges only for new answers. A second read can double or triple the time for that question, and the timeout still stops the run with saved rows. - Very large questions end early. Zhihu can stop listing answers before the total it reports. One question reporting 1,613 answers listed 1,122 without a login, and those runs took about 8 to 9 minutes. The run keeps those rows, ends as a success with the status
partialand the reasonPUBLIC_LIST_END, and you pay only for saved answers. - Comment counts are often empty. Zhihu usually asks for a login for this number. In our tests about 1 answer in 7 had a count: 12 of 100 in one run and 9 of 60 in another. Comment text and replies are not collected.
- Not collected: full user profiles, follower counts, articles, number of saves, and changes over time.
- Media are links. Files are not downloaded, and links on Zhihu's servers can stop working.
- Speed. The Actor waits about 1 second between requests. We measured 100 answers in 19 to 82 seconds (the slowest run had connection failures), 1 to 2.5 minutes for 200 answers from 2 questions, and about 6 to 8.5 minutes for 1,000 answers. With the default 300 second timeout, plan for about 500 answers, or fewer if a question has to be read again or the connection fails. A connection failure in the middle of a question adds pauses of 10 and 30 seconds. If Zhihu rejects a page, the Actor asks for fewer answers and then tries once more after 10 seconds, so a question that ends this way takes about 15 seconds instead of 3. After four pauses of either kind with no answers saved in between, the Actor stops pausing. If about 4 minutes or 20 MB pass with no answers saved, the run stops with
NO_ANSWERS_LIMIT, at any timeout, so a list of failing questions does not stall. Pages read again to fill gaps count too, so a very large question can rarely stop this way, and its saved rows stay. - Requests. Each request to Zhihu waits up to 8 seconds and is tried up to 3 times. The run stops about 20 seconds before its timeout and keeps the saved rows.
- Connection failures. If the connection to Zhihu fails in the middle of a question, the Actor pauses for 10 seconds and then 30 seconds and continues from the same place, within the limit of four pauses described above. If it still fails, that question stops with
NETWORK_ERROR, the saved rows stay, and you pay only for them. In one earlier test, before these pauses were added, a run stopped at 159 of 200 answers this way. - One bad answer does not stop a run. If Zhihu returns an answer the Actor cannot read, it skips that answer, does not charge for it, and counts it as
skippedCardsin the run summary. The same applies to a response over 8 MB: the Actor asks for 20 answers, then 3, then 1, and skips the one that is too large. After 3 such answers in a row, it stops that question. If nothing in a question can be read, the question fails withUNREADABLE_ANSWERSinstead of looking empty, and two such failures in a row stop the run. - Answer order. Answers come in the order Zhihu returns them. The Actor does not sort them.
- Your use of the data. Answers are written by Zhihu users and can be protected by copyright. The Actor does not give you a license to republish them. Check the rules that apply to you.
API, export and integrations
- API: start a run with the same JSON as the input form, then read the rows from the run's default dataset.
- Export: download JSON, CSV or Excel from the Output tab or through the dataset API.
- Scheduling: run the same questions on an Apify schedule. Each run saves the answers again, so compare runs by
answerId. - Webhooks / no-code: use an Apify webhook or integration when a run finishes, then read the dataset rows in your tool.
- Run summary: the
RUN_SUMMARYrecord in the run's key-value store gives the result for each question.
Use with AI agents (MCP)
MCP server URL with only this Actor:
https://mcp.apify.com?tools=cliqtomedia/zhihu-scraper
Smallest useful input:
{"urls": ["https://www.zhihu.com/question/19805218"],"maxItems": 20}
Key output fields: title is the question, content is the answer text in Chinese, author is the public author name, voteups is the number of upvotes, and url is the answer link.
A run of 20 answers usually takes 3 to 8 seconds, about 30 seconds if the connection has to be retried, 43 seconds at worst so far, and costs $0.0553 on the Free plan. The input needs question URLs or IDs, not search words. A question can come back as failed if Zhihu requires a login for it.
Troubleshooting
Question reported as not public
Symptom: the status says "Zhihu did not return this question publicly". Likely reason: the question needs a login, or the ID is wrong. Check: open the link in a private browser window. Action: try another question. You paid only the start and question fees for it.
Input rejected
Symptom: the run stops with "Line 1 in "urls" is one answer, not a question" or "is not a Zhihu question".
Likely reason: the line has an answer link, a link to another page, or a typing error.
Check: the line named in the message.
Action: use https://www.zhihu.com/question/<ID> or only the number.
Fewer answers than expected
Symptom: the table has fewer rows than maxItems or than the number on the website.
Likely reason: the question ended, Zhihu stopped listing answers without a login (PUBLIC_LIST_END), the run timed out, or your cost cap stopped it.
Check: stopReason and sourceAnswerCount in RUN_SUMMARY.
Action: raise the timeout or cost cap if one of them stopped the run. Otherwise, this is all Zhihu returned.
Comment count is empty
Symptom: comments is null.
Likely reason: the option is off, or Zhihu asked for a login for that number.
Check: detailStatus shows not_requested or unavailable.
Action: turn on Include comment counts if it is off. Otherwise the number is not available without a login.
Zhihu stopped returning answers
Symptom: the status says "Zhihu limited the requests", "Zhihu returned an unexpected error" "Zhihu stopped returning answers before the end of the list", "Zhihu returned answers in a form the Actor could not read" or "Stopped early: about 4 minutes or 20 MB passed with no answers saved".
Likely reason: Zhihu limited requests, refused them or returned an unexpected error, or the connection failed. The run is marked Failed.
Check: stopReason for that question in RUN_SUMMARY.
Action: keep the saved rows and try again later. You pay only for answers already saved. Questions listed in unprocessedInputs were not finished, so run them again.
Run failed with no rows
Symptom: the run status is Failed and the table is empty.
Likely reason: Zhihu did not respond or returned an answer page that could not be confirmed.
Check: the status message and RUN_SUMMARY.
Action: try again later. If it repeats, open an issue with the run ID.
FAQ
Do I need a Zhihu account or cookies?
No. The Actor reads only what Zhihu shows without a login. It never asks for an account, cookies or an API key.
Can I search Zhihu by keyword?
No. Find the question on Zhihu or in a search engine first, then paste its link.
Why are there fewer answers than on the website?
The website can show more to signed-in users. The Actor saves what Zhihu returns without a login, up to your limit. We cannot promise every answer of every question.
Are the answers translated?
No. You get the original text, usually in Chinese. contentVariant is original and sourceLanguage is zh.
What do I pay if a question gives no answers?
Only the start fee and the question fee: $0.0013 on the Free plan for one question.
Related Actors
- Quora Scraper: Answers, Upvotes, Views & Authors, No Login — the same kind of question and answer data, in English.
- Weibo Scraper: Posts, Comments & Profiles, No Login — public posts and comments from another large Chinese platform.
- Bilibili Scraper: Videos, Comments & Creators, No Login — videos and comments from Chinese creators.
- Xiaohongshu (RedNote) Notes Scraper, No Login — consumer notes for product research in China.
Support
For a bug, question or feature request, open the Issues tab of this Actor on Apify. Include the run ID, your input and the status message. Never send tokens, cookies or private data.

