# RedNote Comments Scraper - Xiaohongshu Comments & Replies (`parseforge/rednote-comments-scraper`) Actor

Scrape RedNote (Xiaohongshu) comments and replies by note link or ID: text, author, likes, date, IP region, pictures. No login. Export CSV, Excel, JSON, XML.

- **URL**: https://apify.com/parseforge/rednote-comments-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Social media, Automation, E-commerce
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.22 / 1,000 comment or replies

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

[![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)](https://apify.com/parseforge?fpr=vmoqkp)

### RedNote Comments Scraper: Xiaohongshu Comments, Replies, Likes & IP Region

**Scrape every top-level comment on a RedNote (Xiaohongshu, 小红书) note from its link or ID: 707 comments and replies from three notes came back in under 9 seconds in our last test run.** Each row carries the comment text, the author and their profile link, likes, the true reply count, the posting time, the IP region RedNote shows (in English and in Chinese), attached pictures and @-mentions. No login, no cookies, no `xsec_token`. Export to CSV, JSON, Excel, or XML.

RedNote's desktop site wants a login, or at least the note's `xsec_token`, before it loads a comment thread, and a note link copied without that token often opens an error page. This Actor reads the comment feed RedNote serves to its mobile web page, so a bare 24-character note ID is enough, and it returns one flat row per comment or reply that you can load straight into a spreadsheet, a BI tool or a sentiment model.

It reads every top-level comment of every note you give it (482 of 482 in the test above, across notes with 35, 130 and 317 top-level comments), plus the replies RedNote puts under each one. Each row has 27 fields.

| Who uses it | What they read RedNote comments for |
|---|---|
| Brand and social listening teams | What Chinese consumers say under product reviews, launches and KOL posts |
| China-market researchers | Unfiltered opinions on a category, grouped by the commenter's province |
| KOL and agency managers | Whether a sponsored post's comments are real engagement or empty praise |
| Product and CX teams | Complaints and feature requests hidden in comment threads, by keyword |
| Data scientists | Chinese-language comment datasets for sentiment, topic and intent models |

### What it does

The Actor takes RedNote note links, share links or note IDs and returns one row per comment and per reply.

- 💬 **Every top-level comment:** it follows RedNote's comment feed to the end, 20 comments a page, until the note has no more.
- ↩️ **Replies as their own rows:** the replies RedNote shows under each comment (up to 3, the ones it puts first), linked to their thread with `rootCommentId` and `replyToCommentId`. Every comment row also carries its true `replyCount`.
- 👤 **Author details:** nickname, user ID, profile link and avatar, plus RedNote's AI-agent flag.
- ❤️ **Engagement:** likes as a number and as RedNote displays them.
- 📍 **IP region:** the province or country RedNote shows next to each comment, translated to English, with the original Chinese kept alongside.
- 🖼 **Pictures and mentions:** original-size links to images attached to a comment, and every @-mentioned user with their profile link.
- 📝 **Note context on every row:** note ID and link, the note's total comment count and its top-level comment count, and the comment's position in the note.
- 🔎 **Filters:** keywords, minimum likes, posted-after date and picture-only. Comments that do not match are skipped and not charged.

### What you can do with RedNote comment data

**🧭 Listen to Chinese consumers in their own words.**

Paste the notes that review your product or a competitor's, filter by `keywords` like 价格 (price) or 质量 (quality), and read the complaints and praise without opening the app.

**📍 Map opinion by region.**

Group rows by `ipLocation` to see which provinces talk about a product, and whether overseas Chinese buyers (the United States, Malaysia, Japan) react differently.

**📈 Audit a KOL campaign.**

Compare `noteCommentCount`, `likeCount` and `replyCount` across a creator's sponsored notes, and read the top comments to see whether the engagement is real.

**🤖 Build a Chinese comment dataset.**

Collect thousands of comments with their author, time and region for sentiment, topic or intent models. RedNote stickers stay in the text as codes like `[笑哭R]` (laughing to tears), so emotion is not lost.

### Why choose this scraper

| | What you get |
|---|---|
| **No login, no token** | A bare note ID works. You do not need a RedNote account, cookies or the `xsec_token` from the share link. |
| **Every top-level comment** | The comment feed is read to the end, not only the first screen. |
| **Flat rows, linked threads** | One row per comment or reply, so each is its own spreadsheet line, with `rootCommentId` to rebuild the thread. |
| **IP region in English** | Province and country names translated, with RedNote's Chinese label kept for exact matching. |
| **Filters that cut cost** | Keywords, likes, date and pictures run as comments are read. Only matching comments are written and billed. |
| **Honest totals** | Every row carries the note's own comment counts, so you always know your coverage. |

### How it compares

All the scrapers below read public RedNote comments from note links. The comparison uses each rival's public input options, README and Store price on September 28, 2026.

| Feature | ParseForge | zen-studio/rednote-comments-scraper | khadinakbar/xiaohongshu-comments-scraper | memo23/rednote-comments-scraper |
|---|---|---|---|---|
| Works from a bare note ID, no login | Yes | Yes | Yes | No: needs the `xsec_token`, and your login cookie for more than a ~5-comment preview |
| Row shape | One row per comment or reply | One row per comment, replies nested inside | One row per comment or reply | One row per comment, up to 5 replies nested inside |
| Replies | Up to 3 per comment (RedNote's public view), plus the true reply count | Yes, on paid plans | The replies expanded on the public page | Up to 5 per comment, plus the reply count |
| Keyword, likes, date and picture filters | Yes | No | No | No |
| IP region | English and Chinese | Yes | Yes | Chinese |
| Price per 1,000 results | $2.49, down to $2.22 | $5.99, down to $4.99 | $3.00 | $5.00 |
| Run start fee | $0.005 | $0.05 per GB | $0.00005 | $0.005 |

### What a comment looks like

One unedited row from a verified run on September 28, 2026:

```json
{
  "imageUrl": "https://sns-avatar-qc.xhscdn.com/avatar/1040g2jo31uu4q7413q005qca0u389c1cvfo51i0",
  "commentId": "69dc63550000000015004853",
  "type": "Comment",
  "text": "千万不要点进作者的主页，不然就出不来了[捂脸R][捂脸R]",
  "authorName": "晚风轻吟",
  "authorId": "698a0786000000002100b02c",
  "authorUrl": "https://www.xiaohongshu.com/user/profile/698a0786000000002100b02c",
  "authorIsAiAgent": "No",
  "likeCount": 130,
  "likeCountText": "130",
  "replyCount": 12,
  "publishedAt": "2026-04-13T03:30:29.000Z",
  "ipLocation": "Chongqing",
  "ipLocationRaw": "重庆",
  "hasPictures": "No",
  "pictureCount": 0,
  "rootCommentId": "N/A",
  "replyToCommentId": "N/A",
  "position": 1,
  "noteId": "69db721a00000000220290a8",
  "noteUrl": "https://www.xiaohongshu.com/explore/69db721a00000000220290a8",
  "noteCommentCount": 449,
  "noteTopLevelCommentCount": 317,
  "mentionedUsers": [],
  "pictureUrls": [],
  "scrapedAt": "2026-09-28T19:32:25.056Z",
  "error": null
}
```

### More real rows

A reply in that thread. `rootCommentId` points to the comment above:

```json
{
  "imageUrl": "https://sns-avatar-qc.xhscdn.com/avatar/1040g2jo31q83819h7u005pdi1p9kpa9hcpnh30g",
  "commentId": "69dc6a7d000000001500ab19",
  "type": "Reply",
  "text": "不信你的话，点进去第一反应就是咽了几口口水[暗中观察R]",
  "authorName": "八方来财",
  "authorId": "65b20e53000000001300a931",
  "authorUrl": "https://www.xiaohongshu.com/user/profile/65b20e53000000001300a931",
  "authorIsAiAgent": "No",
  "likeCount": 103,
  "likeCountText": "103",
  "replyCount": 0,
  "publishedAt": "2026-04-13T04:01:02.000Z",
  "ipLocation": "Guangxi",
  "ipLocationRaw": "广西",
  "hasPictures": "No",
  "pictureCount": 0,
  "rootCommentId": "69dc63550000000015004853",
  "replyToCommentId": "69dc63550000000015004853",
  "position": 1,
  "noteId": "69db721a00000000220290a8",
  "noteUrl": "https://www.xiaohongshu.com/explore/69db721a00000000220290a8",
  "noteCommentCount": 449,
  "noteTopLevelCommentCount": 317,
  "mentionedUsers": [],
  "pictureUrls": [],
  "scrapedAt": "2026-09-28T19:32:25.056Z",
  "error": null
}
```

A picture-only comment with 87 replies. Picture comments have an empty `text`:

```json
{
  "imageUrl": "https://sns-avatar-qc.xhscdn.com/avatar/1040g2jo31lbsliua5m6g5o1boso0bpub23djkvg",
  "commentId": "6a40e8e9000000002b02bd00",
  "type": "Comment",
  "text": "",
  "authorName": "睡睡睡",
  "authorId": "602bc730000000000101e7cb",
  "authorUrl": "https://www.xiaohongshu.com/user/profile/602bc730000000000101e7cb",
  "authorIsAiAgent": "No",
  "likeCount": 352,
  "likeCountText": "352",
  "replyCount": 87,
  "publishedAt": "2026-06-28T09:27:06.000Z",
  "ipLocation": "Shanghai",
  "ipLocationRaw": "上海",
  "hasPictures": "Yes",
  "pictureCount": 1,
  "rootCommentId": "N/A",
  "replyToCommentId": "N/A",
  "position": 1,
  "noteId": "6a40dd42000000000f02a91b",
  "noteUrl": "https://www.xiaohongshu.com/explore/6a40dd42000000000f02a91b",
  "noteCommentCount": 481,
  "noteTopLevelCommentCount": 130,
  "mentionedUsers": [],
  "pictureUrls": [
    "https://sns-img-qc.xhscdn.com/comment/1040g4b8321v2ll4k7udg5o1boso0bpub5nch2k8"
  ],
  "scrapedAt": "2026-09-28T19:31:54.173Z",
  "error": null
}
```

Replies that tag someone carry them in `mentionedUsers`, for example `[{"userId": "6a40f5dc000000000e03d001", "nickname": "重生之做五百个美妆项目", "profileUrl": "https://www.xiaohongshu.com/user/profile/6a40f5dc000000000e03d001"}]`.

### Configure the run

Paste note links, share links or IDs into **Note URLs or IDs**. Links with or without `xsec_token`, the older `/discovery/item/` links, `xhslink.com` share links and whole copied share messages all work. The Input tab lists every option.

Every comment on two notes, with their replies:

```json
{ "noteUrls": ["https://www.xiaohongshu.com/explore/6a40dd42000000000f02a91b", "69db721a00000000220290a8"], "maxItems": 5000 }
```

The first 50 top-level comments of a note, without replies:

```json
{ "noteUrls": ["69db721a00000000220290a8"], "maxCommentsPerNote": 50, "includeReplies": false }
```

Only well-liked comments from the last month that mention price:

```json
{ "noteUrls": ["69db721a00000000220290a8"], "keywords": ["价格", "贵"], "minLikes": 5, "postedAfter": "30 days" }
```

On a test note with 449 comments (411 rows unfiltered), `minLikes: 10` kept 6 rows, `onlyWithPictures` kept 12, `keywords: ["主页", "哈哈"]` kept 13, and `postedAfter: "2026-05-01"` kept 44.

### Pricing

Pay-per-event: **$0.00249 per comment or reply**, dropping to $0.00222 at higher Apify plans, plus $0.005 per run start. You pay only for rows written to your dataset; error rows and comments skipped by your filters are free.

| Rows collected | Approximate cost |
|---|---|
| 20 | $0.05 |
| 1,000 | $2.50 |
| 10,000 | $24.91 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 rows as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 rows per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the RedNote Comments Scraper.
3. Paste one or more note links or IDs into **Note URLs or IDs**, set **Max Items**, add any filters, and click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab, or schedule the run to follow a note's comments over time.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2?fpr=vmoqkp) or the [ApifyClient](https://docs.apify.com/api/client/js?fpr=vmoqkp) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live RedNote comments through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/rednote-comments-scraper"
```

Then prompt it in plain language:

- *"Read every comment on this RedNote note and summarize the top complaints in English."*
- *"Which provinces do the commenters on these three notes come from? Give me a count per region."*
- *"Find the comments on this note that mention price, and list the ten most liked."*

Copy this into ChatGPT, Claude, or Cursor to start:

```
Use the Apify Actor "parseforge/rednote-comments-scraper" to collect comments from RedNote (Xiaohongshu) notes. Input: { "noteUrls": ["<note link or 24-character note ID>"], "maxItems": <n>, "includeReplies": true, "keywords": ["<optional word>"], "minLikes": <optional n>, "postedAfter": "<optional date or span>" }. Rows come back with type (Comment or Reply), text, authorName, authorId, likeCount, replyCount, publishedAt, ipLocation, pictureUrls, mentionedUsers, rootCommentId and noteUrl. Call it with the ApifyClient and my APIFY_TOKEN.
```

### Troubleshooting

**Why did a note return no comments?**

The note has no comments, was deleted or made private, or the ID is wrong. The run writes a free `NO_COMMENTS` row for that note and moves on to the next one.

**Why are some replies missing?**

RedNote's public comment view shows at most 3 replies under each comment, the ones it ranks first. The full reply list needs a signed-in account, which this Actor does not use. `replyCount` on each comment is the true total, so you can see how much of a thread you have.

**Why is `text` empty?**

The comment is a picture only. Its image is in `pictureUrls`.

**Can I sort comments by newest or most liked?**

Comments come in RedNote's own order, the one its note page shows. Sort the dataset by `publishedAt` or `likeCount` after the run, or use `postedAfter` and `minLikes` to keep only what you need.

**Why fewer rows than I asked for?**

`maxItems` counts comments and replies together across all notes, and your filters skip comments that do not match. A note with 300 top-level comments and few replies returns about 400 rows.

### FAQ

| Question | Answer |
|---|---|
| Do I need a RedNote account, cookies or an API key? | No. It reads the comments RedNote serves to logged-out visitors of its mobile web page. |
| Do I need the `xsec_token` from the share link? | No. A bare 24-character note ID works, and links with or without the token are accepted. |
| Does it get every comment? | Every top-level comment, and up to 3 replies under each (the ones RedNote shows publicly). Each comment row carries the true reply count. |
| Can I paste an `xhslink.com` share link? | Yes, or the whole copied share message. The Actor follows the link to the note. |
| What is the IP region? | The province or country RedNote displays under each comment, based on the commenter's IP. It is RedNote's label, not a precise location. |
| Are like counts exact? | They are the numbers RedNote displays. Above 10,000 RedNote abbreviates them (1.2万), and `likeCountText` keeps that text. |
| Can I get the note itself (title, text, likes)? | Use the [RedNote Notes Scraper](https://apify.com/parseforge/rednote-notes-scraper?fpr=vmoqkp) for note details, and join on `noteId`. |
| How many notes per run? | As many as you like. Notes are read three at a time, and `maxItems` caps the total rows. |
| Is this an official RedNote product? | No. It is unofficial and reads only public RedNote data. |

### Related actors

- [RedNote (Xiaohongshu) Notes Scraper](https://apify.com/parseforge/rednote-notes-scraper?fpr=vmoqkp): note titles, text, hashtags, likes, saves and galleries.
- [Weibo Scraper](https://apify.com/parseforge/weibo-scraper?fpr=vmoqkp): Weibo posts, users, hot search and comments.
- [Bilibili Comments Scraper](https://apify.com/parseforge/bilibili-comments-scraper?fpr=vmoqkp): full comment threads and replies from Bilibili videos.
- [TikTok Comments Scraper](https://apify.com/parseforge/tiktok-comments-scraper?fpr=vmoqkp): comments from public TikTok videos.
- [YouTube Comments Scraper](https://apify.com/parseforge/youtube-comments-scraper?fpr=vmoqkp): YouTube comments with replies and likes.

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** [Open our contact form](https://tally.so/r/BzdKgA) with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Xiaohongshu (RedNote). It collects only publicly available RedNote data. You are responsible for using the data in compliance with RedNote's terms and applicable laws, including PIPL, GDPR and CCPA. Do not use it to identify, profile, or target individuals.

# Actor input Schema

## `noteUrls` (type: `array`):

One note per line. Accepted: a note link (<code>https://www.xiaohongshu.com/explore/6a40dd42000000000f02a91b</code>, with or without <code>xsec\_token</code>), an older <code>/discovery/item/</code> link, a bare 24-character note ID, or an <code>xhslink.com</code> share link. No login or token is needed.

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `maxCommentsPerNote` (type: `integer`):

Stop each note after this many top-level comments (their replies still come along). Leave empty to read every top-level comment.

## `includeReplies` (type: `boolean`):

Also write the replies RedNote shows under each comment (up to 3 per comment, the ones RedNote puts first) as their own rows, linked to their parent. Every comment row carries the true reply count in <code>replyCount</code>.

## `keywords` (type: `array`):

Keep only comments whose text contains at least one of these words (case-insensitive). Comments that do not match are skipped and not charged.

## `minLikes` (type: `integer`):

Keep only comments with at least this many likes.

## `postedAfter` (type: `string`):

Keep only comments posted on or after this date. A date (<code>2026-09-01</code>) or a span back from now (<code>7 days</code>, <code>2 weeks</code>, <code>3 months</code>).

## `onlyWithPictures` (type: `boolean`):

Keep only comments that have pictures attached.

## `proxyConfiguration` (type: `object`):

Not needed: RedNote serves comments to the Actor's own address. Turn on Apify Proxy only if your runs start getting refused.

## Actor input object example

```json
{
  "noteUrls": [
    "https://www.xiaohongshu.com/explore/6a40dd42000000000f02a91b"
  ],
  "maxItems": 10,
  "includeReplies": true,
  "onlyWithPictures": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Comment text, author, likes, replies, date and IP region

## `fullData` (type: `string`):

Complete dataset with all 27 fields

# 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 = {
    "noteUrls": [
        "https://www.xiaohongshu.com/explore/6a40dd42000000000f02a91b"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/rednote-comments-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 = {
    "noteUrls": ["https://www.xiaohongshu.com/explore/6a40dd42000000000f02a91b"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/rednote-comments-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 '{
  "noteUrls": [
    "https://www.xiaohongshu.com/explore/6a40dd42000000000f02a91b"
  ],
  "maxItems": 10
}' |
apify call parseforge/rednote-comments-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/rednote-comments-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/JqsZCb7qdFeFK8KjR/builds/ZrtpgW7nEXwQhjdyi/openapi.json
