How to use it: 3 steps
- Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
https://www.zhihu.com/question/19805218in Question URLs or IDs. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
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.
Good for
- 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.
Who uses it
Market researchers
See what Chinese users think about a product or brand.
Analysts
Compare opinions across several Zhihu questions in one table.
Translation and AI teams
Use answer text in your own research or AI workflow.
Price
Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.
| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.0008 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Question checked | $0.0005 (from $0.00035 on paid Apify plans) | One valid question checked, including a question Zhihu does not return. |
| Answer | $0.0027 (from $0.00189 on paid Apify plans) | One public answer saved with its available text, HTML, images, author, votes and date. |
Examples
- One result: about $0.0035.
- 1,000 results: about $2.70.
- Every day 100 results, for 30 days: about $8.12 a month.
Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 1,800 results.
Prices checked on 8 November 2026. See the current price on Apify.
Questions
Do I need a Zhihu account or cookies?
No. The tool reads only what Zhihu shows without a login.
Can I search Zhihu by keyword?
No. Find the question first, then paste its link.
Why are there fewer answers than on the website?
The site can show more to signed-in users. The tool saves what Zhihu returns without a login.
Are the answers translated?
No. You get the original text, usually in Chinese. contentVariant is original and sourceLanguage is zh.
Details
Step by step on Apify
- 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).
Use cases
| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| 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 |
Tips for better results
- You must give question links or IDs. The tool does not search by keyword.
- Set maxItems to the total number of answers to save across the questions.
- Answer text is in the original language, usually Chinese.
Limits and good to know
- 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
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"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"
}Use it from code
Actor ID: cliqtomedia/zhihu-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/zhihu-scraper").call(run_input={
"urls": [
"https://www.zhihu.com/question/19805218"
],
"maxItems": 20
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~zhihu-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls": ["https://www.zhihu.com/question/19805218"], "maxItems": 20}'# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("cliqtomedia/zhihu-scraper")
result = tool.invoke({"run_input": {"urls": ["https://www.zhihu.com/question/19805218"], "maxItems": 20}})
print(result)The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.
Data fields (22)
| Field | Type | Meaning |
|---|---|---|
questionId | string | Zhihu question ID. |
answerId | string | Zhihu answer ID, preserved as a string. |
title | string | Question title. |
author | string | Public author name, or null when missing. |
authorBio | string | Short description the author shows on Zhihu, or null when missing. |
authorAvatarUrl | string | Link to the public author picture, or null when missing. The file is not downloaded. |
content | string | Answer text. Null for image-only answers or when the source provides no body. |
contentHtml | string | Answer HTML with active scripts and tracking images removed. |
media | array | Public image, audio and video URLs found in the answer HTML. Files are not downloaded. |
voteups | integer | Upvotes reported by Zhihu. |
downvotes | integer | Downvotes as reported by Zhihu, or null when missing. |
comments | integer | Comment count, only if you turn on comment counts and Zhihu returns the number without a login. Null otherwise. |
createdAt | string | Publication time in UTC. |
url | string | Canonical answer URL. |
sourceUrl | string | Public representation used to read the answer. |
fetchedAt | string | Collection time in UTC. |
source | string | Data source domain. |
sourceLanguage | string | Language of the original source representation. |
contentVariant | string | Original Zhihu content, not a translation. |
sourceAnswerCount | integer | Answer count reported by the source. |
type | string | Record type. |
detailStatus | string | Comment count lookup: not_requested (option off), available, unavailable (Zhihu did not return it) or deadline (no time left). |
Input settings (5)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Question URLs or IDs required | urls | array | ["https://www.zhihu.com/question/19805218"] |
| Maximum answers | maxItems | integer | 20 |
| Include comment counts | includeAnswerDetails | boolean | false |
| Send results to (optional) | deliveryConnector | string | |
| Notion page or channel (optional) | deliveryTarget | string |