Xiaohongshu Note Comments Scraper avatar

Xiaohongshu Note Comments Scraper

Pricing

$0.10 / actor start

Go to Apify Store
Xiaohongshu Note Comments Scraper

Xiaohongshu Note Comments Scraper

💬 Xiaohongshu note comments scraper | 小红书笔记评论爬虫 Fetch the public comment list for a Xiaohongshu note by `note_id` or `share_text`. Supports cursor-based pagination (page 1-10) with cursor + index + pageArea tokens, and three sort strategies (hot / newest / earliest).

Pricing

$0.10 / actor start

Rating

0.0

(0)

Developer

wang wei

wang wei

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

2

Monthly active users

13 days ago

Last modified

Share

✨ What you get

Fetch the public comment list for a Xiaohongshu note by note_id or share_text. Supports cursor-based pagination (page 1–10) with three sort strategies: latest, most liked, or default.

When both note_id and share_text are provided, note_id wins.

💼 Use cases

  • Mining what an audience actually said under a post — give it a note_id and each comment arrives with content, publishTime, publishTimeText, ipLocation and likedCount, which is the raw material for objection mining, language mining and comment-section tone analysis.
  • Reconstructing reply structure — targetCommentId and targetUserNickname mark each reply and who it points at, so a thread can be assembled as a conversation instead of a flat list.
  • Finding the comments worth reading first — sort_strategy: like_count orders the thread by likes, which surfaces the highest-signal comments on a popular post without paging through all of it.
  • Walking a long thread with stable pagination — latest_v2 plus the nextCursor, nextIndex and nextPageArea tokens from the previous run lets a ten-page sweep of one thread run without losing its place.

✅ Who this is for

  • Community and social listening analysts — who treat comment sections as the honest signal under a post.
  • Product teams — looking for recurring objections, questions and complaints in user language.
  • Xiaohongshu KOL managers — vetting a creator by how their audience responds, not by the like count on the post.
  • Researchers archiving a discussion — where the replies matter more than the post itself.

❌ Who this is NOT for

  • Anyone expecting the complete thread — pagination is capped at 10 pages per run (the MAX_PAGES_HARD_CAP ceiling), so a heavily commented note returns only the first ten pages of comments and the rest needs another run chained from the last cursor.
  • Pagination with sort_strategy: default — the default strategy is unstable across pages and can skip or duplicate comments. Use latest_v2 if you intend to page, and dedupe on commentId regardless.
  • Getting the parent post's content — this Actor returns comments only. To pair commentCount with an actual title, image list or author profile you need the matching note detail Actor as the second step.
  • Free-tier comment collection at volume — free users get 5 runs per day and each run can be up to 10 upstream requests, so a day's budget is small relative to how many notes a comment archive normally touches.
  • Share text that has no link in it — the URL extractor requires at least one http(s) URL, so a paste containing only the title or Chinese characters is rejected instead of being looked up.

🚀 Quick start

1. Run with Example Input

{
"note_id": "697c0eee000000000a03c308",
"page": 1,
"sort_strategy": "latest_v2"
}

Or paste the full app share text:

{
"share_text": "美食 https://www.xiaohongshu.com/explore/abc?xsec_token=xyz 复制打开",
"page": 1,
"sort_strategy": "latest_v2"
}

2. Paginate to the next page

After the first run, the SUMMARY record contains nextCursor, nextIndex, and nextPageArea. Pass them back as inputs for the next run:

{
"note_id": "697c0eee000000000a03c308",
"page": 2,
"cursor": "<paste nextCursor>",
"index": <paste nextIndex>,
"pageArea": "UNFOLDED",
"sort_strategy": "latest_v2"
}

3. Export Your Results

The dataset is available as a JSON array; the SUMMARY record is in the default key-value store.

📥 Input parameters

note_id — Note ID

RequiredTypeDescription
Optional (one of two)stringXiaohongshu note ID, up to 64 alphanumeric characters. Wins over share_text when both are provided.

share_text — Share text

RequiredTypeDescription
Optional (one of two)stringA Xiaohongshu share link or the full share text from the app. up to 2000 characters; the Actor extracts the first http(s) URL. Use when you don't have the raw note_id.

page — Page number

RequiredTypeDescription
Optionalinteger 1–10Default 1. Each page = one Data provider request.

cursor — Pagination cursor

Required (page >= 2)TypeDescription
OptionalstringFrom the previous run's nextCursor. Leave blank for page 1.

index — Comment index

Required (page >= 2)TypeDescription
Optionalinteger ≥ 0From the previous run's nextIndex. Use 0 for the first page.

pageArea — Fold status

Required (page >= 2)TypeDescription
Optionalenum UNFOLDED / FOLDEDDefault UNFOLDED. From the previous run's nextPageArea.

sort_strategy — Sort order

RequiredTypeDescription
Optionalenum latest_v2 / like_count / defaultDefault latest_v2 (recommended for stable pagination). default is not recommended because pagination may skip or duplicate comments.

📤 Output

See "What You Get" above for the full field list. Each row also includes rawData, the unmodified Data provider payload, for audit and re-parsing.

💰 Billing

  • Free tier: 5 runs/day (each run = up to 10 Data provider requests).
  • Paid users: Unlimited runs.
  • Hard caps: 10 pages per run (configurable via MAX_PAGES_HARD_CAP).
  • Note about default sort: default may cause pagination to skip or duplicate comments; prefer latest_v2.

❓ FAQ

  • How do I paginate? After each run, copy nextCursor, nextIndex, and nextPageArea from the SUMMARY, then re-run with page = current + 1 and the new tokens.
  • My free run is blocked? Free tier is 5 runs/day. Upgrade your Apify plan, wait until tomorrow, or set APIFY_USER_IS_PAYING=1.
  • Can I sort by hot / engagement? like_count sorts by likes (desc). default is Data provider-default but unstable across pages.
  • What happens if the data provider returns no comments on page 2? The Actor stops and reports the previous page's nextCursor in the SUMMARY, so you don't lose pagination state.
  • Do I need to add an Data provider API key? No. This Actor ships with the data provider integration preconfigured — Data provider_API_KEY and Data provider_BASE_URL are baked into the build. No Console setup, no secrets to manage.

📚 Resources

Open an issue on the Actor Console page or contact via Discord linked in the data provider SUMMARY.

See ./CHANGELOG.md.

📜 Notes & caveats

Use it together with the other Xiaohongshu Actors

This Actor is one piece of a 4-piece Xiaohongshu toolkit. Run them in sequence to go from a topic, to a single note detail, to its comment thread.

Where in the pipelineActorConsoleUse it to
before / step ①Xiaohongshu Keyword Search ScraperJECW4SdwsOOgtuobcstep ① — discover noteIds by keyword
sister Actor / step ②Xiaohongshu Image Note Detail ScraperkP7I5XcMAaLxaYj0Rstep ② — pair with this Actor for the parent note's metadata (title / images / author)
after / step ③Xiaohongshu Video Note Detail ScrapernIGSWsYF5htLotphkstep ② — same, but for the parent video note

You are here: Xiaohongshu Note Comments Scraper (step ③) — run this on its own for pull the full comment thread (cursor-paginated). The other 3 Actors live in their own Apify listings — click their Console links to open them in a new tab.

Cross-Platform Alternatives

If your brand or research target is also discussed on other Chinese-language platforms, the comment thread you scrape here is just one signal. Pair it with:

PlatformActorUse it for
WeiboWeibo Post Detail ScraperWeibo post detail + 10 pages of comments — same comment-threading pattern
Brand mention monitoringBrand Mention Auditcross-platform brand mention tracking (web + social)
Google MapsMaps Business Leads ScraperB2B lead generation by category, keyword, and location

Why Use This Actor

ProblemHow This Actor Solves It
You have a Xiaohongshu note URL and want to monitor or archive the comment thread.Pass the URL as share_text; get a normalized dataset of comments with author, engagement, and timestamps.
You want deeper data than a single page.User-driven pagination: pass the next-page cursor / index / pageArea tokens returned by the previous run.
You want to sort comments differently.Pick latest_v2 (recommended), like_count, or default.