# Zhihu Scraper: Question Answers, Votes & Authors, No Login (`cliqtomedia/zhihu-scraper`) Actor

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.

- **URL**: https://apify.com/cliqtomedia/zhihu-scraper.md
- **Developed by:** [Cliqto Media](https://apify.com/cliqtomedia) (community)
- **Categories:** Social media
- **Features:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 57.1% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.89 / 1,000 answers

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

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.

![Zhihu Scraper: paste a question URL or ID, get answers with text, author, votes and date, then export to JSON, CSV or Excel](https://api.apify.com/v2/key-value-stores/10c95EuaalbaSMd1z/records/hero.png)

### Table of contents

- [What it does](#what-it-does)
- [How it works](#how-it-works)
- [Quick start](#quick-start)
- [Use cases](#use-cases)
- [Input](#input)
- [Output](#output)
- [Pricing](#pricing)
- [Limits](#limits)
- [API, export and integrations](#api-export-and-integrations)
- [Troubleshooting](#troubleshooting)
- [FAQ](#faq)
- [Related Actors](#related-actors)
- [Support](#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.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/VKrv6Ml0HZnpbsUhB/input)**

### How it works

1. The Actor reads your list of questions. It accepts browser links and plain numeric IDs, and it removes duplicates.
2. It opens the public version of each question that Zhihu shows without a login, and it goes through the answers page by page.
3. It saves each answer as one row, until it reaches your limit or the end of the question.
4. It writes a run summary that shows what happened with each question.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/VKrv6Ml0HZnpbsUhB/input)**

### Quick start

[![Input form: box 1 shows the question URL, box 2 shows the maximum number of answers](https://api.apify.com/v2/key-value-stores/10c95EuaalbaSMd1z/records/quick-start-form-20261106.png)](https://console.apify.com/actors/VKrv6Ml0HZnpbsUhB/input)

1. Open the **Input** tab. Keep the example question or paste your own URL or ID in **Question URLs or IDs** (box 1).
2. Keep **Maximum answers** at 20 for a first test (box 2).
3. Click **Start**.
4. Open the **Output** tab when the run ends. Read the author, answer text, upvotes and date in the **Answers** table (box 4).

   [![Output table: author, answer text, upvotes and date for each answer](https://api.apify.com/v2/key-value-stores/10c95EuaalbaSMd1z/records/output-table-20261106.png)](https://api.apify.com/v2/key-value-stores/10c95EuaalbaSMd1z/records/output-table-20261106.png)

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.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/VKrv6Ml0HZnpbsUhB/input)**

### 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 |

> **👉 [Try it now: open the input form](https://console.apify.com/actors/VKrv6Ml0HZnpbsUhB/input)**

### 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

```json
{
  "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

```json
{
  "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.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/VKrv6Ml0HZnpbsUhB/input)**

### 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

```json
{
  "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 |

> **👉 [Try it now: open the input form](https://console.apify.com/actors/VKrv6Ml0HZnpbsUhB/input)**

### 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.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/VKrv6Ml0HZnpbsUhB/input)**

### 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 `19550225` and `20702054` gave 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. `sourceAnswerCount` is 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 `partial` and the reason `PUBLIC_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 `skippedCards` in 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 with `UNREADABLE_ANSWERS` instead 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.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/VKrv6Ml0HZnpbsUhB/input)**

### 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_SUMMARY` record 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:

```text
https://mcp.apify.com?tools=cliqtomedia/zhihu-scraper
```

Smallest useful input:

```json
{
  "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.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/VKrv6Ml0HZnpbsUhB/input)**

### 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.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/VKrv6Ml0HZnpbsUhB/input)**

### 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.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/VKrv6Ml0HZnpbsUhB/input)**

### Related Actors

- [Quora Scraper: Answers, Upvotes, Views & Authors, No Login](https://apify.com/cliqtomedia/quora-scraper) — the same kind of question and answer data, in English.
- [Weibo Scraper: Posts, Comments & Profiles, No Login](https://apify.com/cliqtomedia/weibo-scraper) — public posts and comments from another large Chinese platform.
- [Bilibili Scraper: Videos, Comments & Creators, No Login](https://apify.com/cliqtomedia/bilibili-scraper) — videos and comments from Chinese creators.
- [Xiaohongshu (RedNote) Notes Scraper, No Login](https://apify.com/cliqtomedia/xiaohongshu-scraper) — consumer notes for product research in China.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/VKrv6Ml0HZnpbsUhB/input)**

### 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.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/VKrv6Ml0HZnpbsUhB/input)**

# Changelog

This Actor's version history is a separate document: https://apify.com/cliqtomedia/zhihu-scraper/changelog.md

# Actor input Schema

## `urls` (type: `array`):

One Zhihu question per line. Paste a question URL such as https://www.zhihu.com/question/19805218 or just the number 19805218. Answer URLs are not accepted. Some questions are not available without signing in; the run summary lists them.

## `maxItems` (type: `integer`):

Total number of answers to save across all questions. Default 20. In our tests 200 answers took 1 to 2.5 minutes and 1,000 answers took about 6 to 8.5 minutes, so raise the run timeout above 300 seconds for more than about 500 answers. Turning on comment counts makes a run much slower.

## `includeAnswerDetails` (type: `boolean`):

Off by default. On: the Actor also tries to get each answer's comment count. Zhihu often asks for a login for this number, so most answers stay empty (about 1 in 7 in our tests), and each answer takes 2.5 to 4.5 seconds longer. Set a run timeout of 600 seconds or more for over 50 answers. Comment text is not collected.

## `deliveryConnector` (type: `string`):

Your Slack, Notion or other MCP connector. After the run the Actor posts a short summary there. Connect services once in Apify Console → MCP connectors.

## `deliveryTarget` (type: `string`):

Where to post the summary: a Notion page link (each run is added on top of that page) or a Slack channel ID. Leave empty to let the connector decide.

## Actor input object example

```json
{
  "urls": [
    "https://www.zhihu.com/question/19805218"
  ],
  "maxItems": 20,
  "includeAnswerDetails": false
}
```

# Actor output Schema

## `answers` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://www.zhihu.com/question/19805218"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("cliqtomedia/zhihu-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "urls": ["https://www.zhihu.com/question/19805218"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("cliqtomedia/zhihu-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.zhihu.com/question/19805218"
  ],
  "maxItems": 20
}' |
apify call cliqtomedia/zhihu-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cliqtomedia/zhihu-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/VKrv6Ml0HZnpbsUhB/builds/uw3lza2tgBlSS9s62/openapi.json
