Xiaohongshu RedNote Scraper avatar

Xiaohongshu RedNote Scraper

Pricing

from $2.97 / 1,000 results

Go to Apify Store
Xiaohongshu RedNote Scraper

Xiaohongshu RedNote Scraper

Scrape public Xiaohongshu (RedNote) notes from note URLs or 24-character note IDs: title, description, hashtags, publish date, author, like, collect, comment and share counts, image URLs and video URL. No keyword or user search: you supply the notes. No login needed.

Pricing

from $2.97 / 1,000 results

Rating

0.0

(0)

Developer

Axiom Works

Axiom Works

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

3

Monthly active users

7 days ago

Last modified

Categories

Share

Returns: one row per Xiaohongshu note with id, title, description, authorNickname, likeCount, publishedAt, imageUrls and videoStreams. Input: {"noteUrls": ["https://www.xiaohongshu.com/explore/68c8d6d7000000001d01bdbd"], "maxItems": 1} Best for: creator and brand research, engagement benchmarking, collecting note media links.

{"id": "68c8d6d7000000001d01bdbd", "title": "天露芬全线精华油测评!说点真话!", "authorNickname": "小狗探员", "likeCount": 340, "collectCount": 136, "commentCount": 15, "engagementTotal": 500, "publishedAt": "2025-09-20T01:50:11.000Z"}

What does Xiaohongshu RedNote Scraper do?

Xiaohongshu RedNote Scraper collects details from public Xiaohongshu (RedNote) note pages when you provide note URLs or note IDs. It reads the note data embedded in each public page and returns the post text, author identity, engagement counts, tags, image links, and available video details. You can also draw a sample of notes from Xiaohongshu's public sitemap. No login or cookies are required for pages that are publicly accessible.

This Actor is designed for collecting a defined list of notes, checking public post details, or exploring a small sample from the site's sitemap. The sitemap is a fixed list chosen by Xiaohongshu; it is not a keyword search or a chronological feed. You can run the Actor manually, schedule it, or call it through the Apify API and integrations. It does not fetch comments or profile pages.

What data can you get?

Each successful row describes one note. Fields the page does not provide are null. Counts are parsed from the values shown on the page, so a rounded display such as 1.2万 becomes an approximate number. Turn on includeRawCounts when you also need the original display strings. Image and video links are https media URLs that may expire; store or use them promptly if your workflow needs them. The Actor returns media URLs without downloading the media.

FieldWhat it means
id, noteIdStable 24-character note ID; useful for joins and deduplication.
sourceUrl, urlRequested page URL and canonical public note URL.
typeNote type, usually normal or video.
title, descriptionPublic title and description. The description has #topic# markers and sticker codes removed; topics are in hashtags.
rawDescriptionOriginal body from the public note, retaining inline hashtags and sticker markers.
hashtagsTag names attached to the note.
hashtagDetailsHashtags as objects with the Xiaohongshu topic id and name.
engagementTotalSum of the parsed like, collect, comment and share counts.
publishedAt, lastUpdatedAtPublication and update times as ISO 8601 strings, when present. lastUpdatedAt preserves the source update timestamp even when it precedes publication.
ipLocationPublic location label, when the page provides one.
authorId, authorNicknamePublic author ID and nickname.
authorAvatarUrl, authorProfileUrlAvatar link and constructed profile URL; the profile itself is not scraped.
likeCount, collectCountApproximate likes and saves parsed from display text.
commentCount, shareCountApproximate comment and share counts. Comments themselves are not collected.
imageUrlshttps URLs for the note's images.
videoUrl, videoDurationSecVideo URL and duration when available for a video note.
coverUrl, imageCountFirst image URL and the number of images in the note.
imageDetailsEach image with url, width, height and isLivePhoto.
videoStreamsEvery available video stream with url, codec, quality, width, height, fps, sizeBytes and bitrate.
mentionedUsersUsers @-mentioned in the note, as userId and nickname; empty when none.
rawCountsOriginal displayed count strings, only with includeRawCounts.
scrapedAtTime this Actor read the note.
errorCompatibility field; null on successful rows. Unavailable notes are skipped.

The sourceUrl is the exact normalized page or endpoint requested. URLs in /discovery/item/ form and profile-style URLs such as /user/profile/<userId>/<noteId> (the note ID is taken from the end of the path) are accepted. A URL supplied in /discovery/item/ form is normalized to /explore/ because the latter is the public page used by this scraper. If an input URL includes xsec_token, that query parameter is retained in sourceUrl. Duplicate IDs are emitted once, even when your input contains different URLs for the same note.

How to use

  1. Open the Actor's Input tab and paste one or more public note URLs or IDs into Note URLs or IDs. You can copy an /explore/ URL, a /discovery/item/ URL, another Xiaohongshu URL containing a 24-character note ID, or the bare ID.
  2. Set Maximum items to the number of unique note records you want. The limit counts successfully scraped unique notes. For example, ten accessible unique notes with maxItems: 7 produce seven rows; unavailable notes can leave fewer results.
  3. Leave the proxy setting as provided unless you need a different Apify Proxy configuration. The Actor uses the proxy only when that setting is supplied.
  4. Click Start. When the run finishes, inspect the Dataset tab. Export the dataset as JSON, CSV, or another supported format, or use the API link in the Output tab.

Both http:// and https:// note links are accepted. Short share links from the app (xhslink.com) are not resolved: the Actor logs a warning and skips them, so open the link in a browser and paste the full xiaohongshu.com/explore/... URL or the 24-character ID. Invalid entries are skipped one by one, and if none are valid the run finishes with no rows and a status message.

For sitemap discovery, clear the URL list and enable Discover from sitemap. That mode reads the site's public note sitemap and works through entries in its published order. It is useful as a bulk sample, but it cannot select a topic, author, or date range. Start with a small maxItems to check whether the sample fits your needs. If you need a specific set of notes, provide their URLs instead.

The Actor validates input before requesting a page. A missing source or item limit outside the supported range causes a clear error. Malformed URLs, unsupported hosts and IDs of the wrong length are skipped individually with a warning. If all supplied entries are invalid, the run succeeds with zero rows and explains the accepted URL and ID forms. An inaccessible note is skipped after bounded retries.

The optional noteType filter selects image/text notes (normal) or video notes (video); its default all retains the existing behavior. Filtering occurs after the public page is fetched. A skipped type contributes no dataset row and no result charge. For supplied URLs, the Actor continues through the remaining list until the shared limit is reached or the list ends. Sitemap mode examines at most maxItems candidate IDs, so filtering that sample can produce fewer rows. It does not search the full platform for a chosen type.

Use rawDescription when you need to archive the original body, inspect inline hashtags, or perform your own text cleanup. The existing description field keeps its previous cleanup behavior, and hashtags still contains separate tag names. The original body is copied directly from the public embedded note data. Neither text field is a translation or an AI summary.

The Actor checks the run's spending limit before storing each result. If the remaining limit cannot cover another result, it stops successfully with a status message explaining why collection ended. Duplicate IDs, inaccessible notes and excluded note types do not generate placeholder rows. A blocked sitemap file is also reported without failing the entire run, allowing any usable notes to finish.

Input

FieldTypeUse
noteUrlsarray of stringsPublic note URLs or bare IDs. The prefilled examples are ready for a quick test.
discoverFromSitemapbooleanDefault false. Discover a fixed public sample when noteUrls is empty.
maxItemsintegerStop after this many unique records, from 1 to 10,000. Default 20.
noteTypestringDefault all; use normal for image/text notes or video for video notes.
includeRawCountsbooleanDefault false. Include original text for the four engagement counts.
proxyConfigurationobjectApify Proxy settings for outbound requests.

Example input for two known notes:

{
"noteUrls": [
"68c8d6d7000000001d01bdbd",
"https://www.xiaohongshu.com/discovery/item/68c90c25000000000e00c789"
],
"maxItems": 2,
"includeRawCounts": true,
"proxyConfiguration": { "useApifyProxy": true }
}

The optional xsec_token query parameter is preserved when you provide it. Other query parameters are dropped during normalization because they are not needed to identify the note. The Actor never asks for account cookies or passwords.

Output

The following is a real JSON record from a local sitemap run. Keys the page did not provide (such as videoUrl, ipLocation, rawCounts, error) are present with a null value. Text and media links are returned as seen during that run, so later runs may show updated counts or fresh signed URLs.

{
"id": "6895c3670000000004005f5d",
"sourceUrl": "https://www.xiaohongshu.com/explore/6895c3670000000004005f5d",
"noteId": "6895c3670000000004005f5d",
"url": "https://www.xiaohongshu.com/explore/6895c3670000000004005f5d",
"type": "normal",
"title": "总算知道怎么挑精华!速抄作业走上护肤捷径",
"description": "本人肤质:冬混干夏混油,敏皮上岸\n护肤这么些年我是既要又要\n用过的精华没有一百也有五十瓶\n今天就总结一波值回票价的精华使用感\n大家可以对症下药~\n-\n娇韵诗第九代黄金双萃【进阶抗老】\n赫莲娜绿宝瓶精华【急救维稳】\n海蓝之谜鎏金精华【紧致饱满】\n雅诗兰黛小棕瓶精华【夜间抗老】",
"hashtags": [],
"publishedAt": "2025-10-10T03:18:16.000Z",
"lastUpdatedAt": "2025-12-31T05:06:28.000Z",
"authorId": "5dea493c00000000010039a2",
"authorNickname": "Ong菜大王",
"authorAvatarUrl": "https://sns-avatar-qc.xhscdn.com/avatar/1040g2jo31hggvighjs705nfa94u08ed2imjrj4o",
"authorProfileUrl": "https://www.xiaohongshu.com/user/profile/5dea493c00000000010039a2",
"likeCount": 290,
"collectCount": 198,
"commentCount": 9,
"imageUrls": [
"http://sns-webpic-qc.xhscdn.com/202609300450/ed89499765e78785913902f59b6e0e0e/1040g2sg31qocjum200eg5nfa94u08ed2qt64898!nd_dft_wlteh_jpg_3",
"http://sns-webpic-qc.xhscdn.com/202609300450/02cb67c8d407cc4b8bc53cfde983641d/1040g00831omtk55r0g1g5nfa94u08ed207g8rq0!nd_dft_wlteh_jpg_3",
"http://sns-webpic-qc.xhscdn.com/202609300450/eff99a8e87047722333054ce66b4f985/1040g00831omtk55r0g105nfa94u08ed2l39apig!nd_dft_wlteh_jpg_3",
"http://sns-webpic-qc.xhscdn.com/202609300450/ed624e3080a9f027ed59708be891211c/1040g00831omtk55r0g0g5nfa94u08ed2pklmfdg!nd_dft_wlteh_jpg_3",
"http://sns-webpic-qc.xhscdn.com/202609300450/42dcef7db705642194f35ee50ae9eed9/1040g2sg31qocjum200e05nfa94u08ed24ckune8!nd_dft_wlteh_jpg_3"
],
"scrapedAt": "2026-09-29T20:50:52.953Z"
}

A failed page contributes no dataset row. Compare returned noteId values with your input IDs and inspect the unavailable-ID warnings in the run log to identify gaps. The Actor charges the result event only when a note is successfully scraped. There is no enrichment or other extra charge.

A separate local note run returned the new original-body field as follows. The hashtags and sticker markers remain in this field; description keeps the established cleaned form.

{
"id": "68c8d6d7000000001d01bdbd",
"type": "normal",
"rawDescription": "天露芬!!真的颠覆我对精华油的认知!\n作为在德国畅销45年的有机护肤牌,它家的油做得那叫一个轻薄高效!\n五瓶油各司其职,搭配使用堪比护肤届的满汉全席\n\t\n🧡天露芬双A抗皱超模油-深层抗皱\n和我一样怕传统A醇刺激的姐妹,真的可以试试这瓶!\n321分层抗皱的细胞级复苏配比,实在给力!\n三重有机植物油、植物双A醇和复活草密罗木,从表层润纹到深层促胶原,一瓶搞定!\n核心成分植物双A醇,淡纹紧致一样没落下,还不用建立耐受~\n我连续用了一周,脸上的干纹肉眼可见变淡,下颌线和法令纹都紧致很多,皮肤摸起来又软又嫩,真的适合30+的熟龄肌抗皱!\n\t\n🤎天露芬眼油-紧致淡纹\n眼周干薄脆还带细纹的姐妹必入!\nRevinage®+尾穗苋协同淡纹紧致,质地轻薄如水,吸收快不糊眼不长脂肪粒~\n我搭配按摩棒向上提拉,像给小细纹上了“液体绷带”,滋润又安心!\n妆前用它打底就不卡眼纹,眼周饱满润泽,看起来像刚满18岁\n\t\n💛天露芬赋活油-抗初老嫩脸\n垮脸暗沉人的回春宝藏,很适合25+干皮抗初老!\n9种抗氧植物成分+秘鲁尾穗苋,促胶原消暗沉两手抓~\n水感质地吸收快,不黏不腻,用完脸透亮有光泽!\n熬夜后用它拯救菜色脸,第二天皮肤还是饱满亮泽~\n\t\n🤍天露芬美白油-美白淡斑\n温和派美白选手真的有点东西!\n油溶性VC-IP+沙棘果油,从源头阻断黑色素,改善暗沉斑点,还顺带修护屏障~\n质地像精华水一样清透,吸收后不拔干没有小黑点,敏感肌友好\n我用完一瓶,脸颊痘印和局部暗沉淡了好多,整张脸干净透亮,是那种健康的亮白感!\n\t\n💚天露芬修护油-舒缓修护\n换季泛红干痒?屏障脆弱反复?\n这瓶真的是我的“救急蓝朋友”!\nDEFENSIL®-PLUS舒缓成分+5种天然脂类,快速压住红痒热,修护屏障强韧底子~\n上脸瞬间就有被安抚的感觉,我喜欢放冰箱后做冰油敷,舒缓效果加倍!\n坚持用下来,皮肤状态稳如泰山,再也不随便闹情绪~\n有想以油养肤的姐妹,可以做做功课看看适合哪一款~\n\t\n#天露芬[话题]# #天露芬精华油[话题]##天露芬双A抗皱超模油[话题]##天露芬赋活油[话题]##天露芬美白油[话题]##天露芬修护油[话题]##天露芬眼油[话题]##眼油[话题]##限精华[话题]##眼霜[话题]##美白[话题]##淡斑[话题]# #干皮[话题]##干皮精华油[话题]##以油养肤[话题]##细纹[话题]##修护[话题]#"
}

How much does it cost?

This Actor uses per-result charging: one result event for each successfully scraped note. An unavailable note is skipped and does not trigger that event. Check the Actor's Pricing tab for the current per-result rate; prices can change. Set maxItems before starting a large run so the output volume stays within your planned budget. A sitemap sample can generate many requests, so test a small limit first.

Use with AI agents (MCP)

Apify's MCP server can expose this Actor as a tool to an AI agent. Configure an MCP client with the server URL below. Use the Actor's input schema to give the agent clear, bounded requests. Your agent can then inspect the dataset rather than trying to infer post details from a link alone.

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=axiomworks/xiaohongshu-note-scraper"
}
}
}

Example prompts: “Collect the public title, author, hashtags, and like count for these three Xiaohongshu note URLs.” “Read ten notes from the public sitemap and return only their titles and publication dates.” “Collect accessible notes for these IDs, compare returned noteId values with my input, and report missing IDs.” Specify a small item limit when exploring, and remember that the sitemap cannot search by keyword.

Integrations and API

You can call the Actor from a scheduled Apify run, a workflow integration, or code. Supply your own Apify API token through the client environment. The examples show an input list and a limit; adapt them to your own public notes. The API result is a run, whose default dataset contains the rows described above.

Python with the Apify client:

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("axiomworks/xiaohongshu-note-scraper").call(run_input={
"noteUrls": ["68c8d6d7000000001d01bdbd"],
"maxItems": 1,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["id"], item.get("title"))

JavaScript with the Apify client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('axiomworks/xiaohongshu-note-scraper').call({
noteUrls: ['68c8d6d7000000001d01bdbd'],
maxItems: 1,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => process.stdout.write(`${item.id}: ${item.title ?? item.error}\n`));

cURL with a synchronous dataset response:

curl -X POST \
'https://api.apify.com/v2/acts/axiomworks~xiaohongshu-note-scraper/run-sync-get-dataset-items' \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"noteUrls":["68c8d6d7000000001d01bdbd"],"maxItems":1}'

FAQ

Can this Actor search Xiaohongshu by keyword? No. It reads specific public notes or a fixed sample from the public sitemap. The sitemap is not a search index with filters. If you already have note URLs from another workflow, paste those URLs into noteUrls.

Why was a note skipped? The public page may have been removed, restricted, redirected, or temporarily blocked. The Actor retries up to three times with backoff and a fresh proxy session when configured; with the default Apify Proxy and no groups chosen, retries switch to the residential proxy group. It does not log in, solve CAPTCHAs, or request signed private APIs. The run log lists skipped IDs so you can check the full public URL, retain any supplied xsec_token, or retry later with Apify Proxy.

Are counts exact? They reflect displayed page values. Large values may be rounded by Xiaohongshu, and the integer parser turns units such as 万 and 千 into numbers. Use includeRawCounts to keep the displayed form beside the parsed estimate.

Does it scrape comments or user profiles? No. It returns a comment count when available, and it builds a profile URL from the public author ID. It does not open profile pages or request comments. Those data are outside the scope of this Actor.

Are images and videos downloaded? No. The Actor returns links embedded in the public note. They can be signed and short lived. Video fields are null unless a video stream is available in the page data. Image notes have a null video URL.

What happens when I supply the same note twice? The Actor normalizes each input to its note ID and emits the ID once. This applies across /explore/, /discovery/item/, and bare-ID forms. The first supplied URL determines any retained xsec_token for that ID.

The Actor reads publicly visible note pages without logging in. Xiaohongshu's robots.txt disallows crawling, and its terms may restrict automated use. Assess those rules and the law that applies to your use case before collecting or reusing data. This Actor is an independent tool and is not affiliated with Xiaohongshu or RedNote.

Feedback

If a public note page changes format, share a sample URL, the input settings, and the relevant run log through the Actor's Issues or feedback channel. Do not post tokens, cookies, proxy passwords, or private data. A report that identifies the affected note ID and which fields are missing is especially useful. You can also report a sitemap change or a case where a displayed count is parsed incorrectly.