Xiaohongshu (RedNote) Scraper — Public Notes avatar

Xiaohongshu (RedNote) Scraper — Public Notes

Pricing

from $2.99 / 1,000 scraped items

Go to Apify Store
Xiaohongshu (RedNote) Scraper — Public Notes

Xiaohongshu (RedNote) Scraper — Public Notes

Scrape public Xiaohongshu (RedNote) explore notes and full note pages with no login. Get titles, body text, likes, collects, comment counts, image URLs, video URLs, and hashtags. Export JSON via API, Python, Node.js, or MCP.

Pricing

from $2.99 / 1,000 scraped items

Rating

0.0

(0)

Developer

Andrej Kiva

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

20

Total users

2

Monthly active users

8 days ago

Last modified

Share

Disclaimer: Unofficial tool — not affiliated with, sponsored by, or endorsed by Xiaohongshu / RedNote or its affiliates. Data is read from publicly accessible pages only. No login. You are responsible for complying with applicable law (including GDPR where personal data appears) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

Social discoveryWebsite traffic
Xiaohongshu (RedNote) Scraper ◄── you are hereSimilarweb Scraper
TikTok Trending Hashtags Scraper
Bluesky Scraper
YouTube Comments Scraper

Xiaohongshu scraper and RedNote API alternative — extract publicly accessible image and video notes from Xiaohongshu (小红书 / XHS / Little Red Book) as structured JSON. The recommend explore feed returns note cards with a title, like count, cover, author, and xsecToken. note_detail opens that URL and adds the body, full image gallery, video URL, hashtags, and collect / comment / share counts.

Scrape Xiaohongshu / RedNote with Python, Node.js, cURL, or MCP / AI assistants. Export JSON, CSV, or Excel from the dataset. No login and no cookies. Keyword search, comment text, and creator profile pages are login-gated and are not part of this Actor.

When to use

  • China consumer research and 种草 / haul monitoring from notes that are already on the public recommend feed
  • Pull a note's body, image gallery, video stream, hashtags, and numeric engagement without the app
  • Build a research corpus from public notes you have the right to process
  • Chain explore → note_detail: every explore row already carries url and xsecToken

When not to use

  • Private accounts, chats, inboxes, or gated content — public pages only; the Actor does not log in.
  • Keyword search, comment text, or creator profile stats (bio, fans, Red ID, a creator's note grid) — those pages load empty without a login. This Actor does not accept cookies.
  • You paste a bare note ID or an old xsec_token — Xiaohongshu serves a removed-page response. Run explore and reuse the url from that dataset.
  • You want 蒲公英 (PGY) rate cards or mall checkout SKUs — not in this version.

Key features

  • Two public modes — explore and note detail
  • No login or cookies — recommend explore (about 30 notes per reload) and note HTML only
  • Numeric twins for Chinese counts — "1.5万" → 15000, "1千+" → 1000
  • Video notes — h264 master URL, duration, quality, backup CDNs, subtitle URLs when Xiaohongshu publishes them
  • Share links — xhslink.com redirects that land on a note page
  • Residential proxy recommended — datacenter IPs hit Xiaohongshu's 安全限制 / 300011 wall

Input

ParameterDescription
modeexplore (default) or note_detail
startUrlsnote_detail only. Paste url values from an explore run, including ?xsec_token=
channelPublic recommend SSR feed only
fullDetailHydrate each public explore card to full note HTML
maxItemsDataset cap (default 50)
maxPagesHow many times to reload explore (feed rotates)
proxyConfigurationApify RESIDENTIAL recommended

Public recommend feed (first run, no cookie):

{
"mode": "explore",
"channel": "recommend",
"maxItems": 30,
"maxPages": 1,
"fullDetail": false,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Full note from an explore row. Copy url from that dataset. Do not reuse an old token.

{
"mode": "note_detail",
"startUrls": [
{
"url": "https://www.xiaohongshu.com/explore/NOTE_ID?xsec_token=TOKEN_FROM_EXPLORE&xsec_source=pc_feed"
}
]
}

Output

One dataset row per public note.

FieldDescription
typenote
noteId / userIdXiaohongshu identifiers
title / descNote title and body
likedCountNum / collectedCountNum / commentCountNum / shareCountNumParsed engagement
imageUrls / coverUrl / videoUrlHTTPS media
hashtagsTopic names from tagList
xsecTokenToken to reuse in note_detail
urlNote URL, including xsec_token, for a follow-up note_detail run
userNicknameAuthor name from the note card
scrapedAtUTC timestamp

Note row (abridged):

{
"type": "note",
"source": "note_detail",
"noteId": "NOTE_ID",
"noteType": "normal",
"title": "Note title",
"likedCount": "5301",
"likedCountNum": 5301,
"collectedCountNum": 2199,
"commentCountNum": 269,
"shareCountNum": 277,
"hashtags": ["topic"],
"userNickname": "author",
"url": "https://www.xiaohongshu.com/explore/NOTE_ID?xsec_token=TOKEN&xsec_source=pc_feed",
"xsecToken": "TOKEN"
}

Use cases

  • Track which notes are surfacing on the public recommend feed
  • Collect image URLs and video streams for a note you already have from explore
  • Compare like, collect, comment, and share counts on those public notes
  • Feed RedNote JSON into an MCP / agent workflow instead of screenshotting the app

Integration examples

Replace YOUR_TOKEN with your Apify API token. Actor name: crawloop/xiaohongshu-scraper.

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/xiaohongshu-scraper').call({
mode: 'explore',
maxItems: 20,
proxyConfiguration: { useApifyProxy: true, apifyProxyGroups: ['RESIDENTIAL'] },
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("crawloop/xiaohongshu-scraper").call(
run_input={
"mode": "explore",
"maxItems": 20,
"proxyConfiguration": {"useApifyProxy": True, "apifyProxyGroups": ["RESIDENTIAL"]},
}
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items[0]["title"], items[0]["likedCountNum"], items[0]["url"])

cURL

curl "https://api.apify.com/v2/acts/crawloop~xiaohongshu-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"explore","maxItems":10}'

MCP and AI assistants

Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call this Actor by its Store ID / name.

Example prompts:

  • "Run Xiaohongshu (RedNote) Scraper in explore mode for 20 notes and return title, likes, hashtags, and author as JSON"
  • "Scrape this Xiaohongshu note URL with crawloop/xiaohongshu-scraper and summarize engagement, images, and video URL"
  • "Take urls from a Xiaohongshu explore run and call crawloop/xiaohongshu-scraper in note_detail mode, then summarize body, images, and video URL"

Suite next step

After explore, run note_detail with each row's url. For Western trend context on the same brief, use TikTok Trending Hashtags Scraper.

FAQ

Is this a Little Red Book / XHS / 小红书 scraper?
Yes. Xiaohongshu, RedNote, Little Red Book, XHS, and 小红书 are the same platform. This Actor reads the public web app.

Do I need a Xiaohongshu account?
No. Explore and note detail read public HTML. The Actor rejects cookie input. Keyword search, comment text, and profile stats need a login, so they are not offered.

Where does xsec_token come from?
Every explore row includes url and xsecToken. Paste that url into note_detail. Tokens expire; a link copied weeks ago often returns an empty page.

Can I get fans, bio, or a creator's posts?
Not from the public profile page. It renders without those fields unless you are logged in.

Is this an official Xiaohongshu API?
No. It is a Xiaohongshu API alternative that reads publicly accessible web pages (window.__INITIAL_STATE__) without credentials or authenticated cookies.

Can I scrape Xiaohongshu with Python or Node.js?
Yes. Use the Apify client examples above, or call the Actor from MCP / an AI assistant and export the dataset as JSON.