
Instagram Reel Scraper
scrape.ly/store/echofield/instagram-reel-scraperSocial mediaVideos
1 monthly user

Extract public Xiaohongshu (RedNote) comments from a note link: text, author, likes, replies, pictures, and the location shown on the comment.
Export the public comments on any Xiaohongshu (RedNote) note. Paste a note link and get the comment text, author, likes, location label, attached pictures, and the replies shown under each comment, as structured rows. No Xiaohongshu login, no cookies, and no browser.
The public note page includes a preview of about five top-level comments with up to three replies each. This actor collects that preview, fast and cheaply, so you can review a note or check a link before planning a bigger job.
replies and sub_comments.ip_location.url, origin_url, width, height) and @ mentions are included.xsec_token, xhslink.com share links, or the whole message copied from the app.failedInputs of the OUTPUT record.xsec_token).| Field | Type | What it does |
|---|---|---|
noteUrls | array | One note per entry. Accepts a discovery or explore link with xsec_token, an xhslink.com share link, or the copied app message. A bare 24-character note id is accepted, but Xiaohongshu often refuses it without a token. |
maxCommentsPerNote | integer | Top-level comments to keep per note. Default 10. 0 keeps every comment on the public page. |
includeReplies | boolean | Keep the replies already shown under a comment. Default on. Each reply is billed as its own result. |
maxRepliesPerComment | integer | Replies to keep per comment. Default 5. 0 keeps every reply on the page. |
proxyConfiguration | object | Datacenter proxy by default. |
{
"noteUrls": [
"https://www.xiaohongshu.com/discovery/item/6a8e608c000000001f0062b9?xsec_token=ABzJO67rEEOTnCrKBqkUgvqj0ejLq-v1wvUDt5FnSZcuU=&xsec_source=pc_feed"
],
"maxCommentsPerNote": 10,
"includeReplies": true,
"maxRepliesPerComment": 5
}
Each top-level comment is one dataset row. Replies sit on replies and sub_comments.
| Field | Description |
|---|---|
id, content, author | Comment id, text, and author nickname. |
user | Public nickname, avatar URL, and user id. |
like_count, sub_comment_count | Likes, and the reply total Xiaohongshu reports (can exceed the replies in the row). |
ip_location, time | Location label and Unix time in seconds. |
pictures, at_users | Attached pictures and mentioned users. |
replies, sub_comments | Replies shown under the comment. |
note_id, note_comment_count, url_to_note | The note the comment belongs to. |
Real item from a test run (trimmed):
{
"id": "6a8e7aaf000000000a01d176",
"content": "Great note, thanks for sharing!",
"author": "Jane Doe",
"user": {
"userid": "0000000000000000000000aa",
"nickname": "Jane Doe",
"images": "https://sns-avatar-qc.xhscdn.com/avatar/example-avatar.jpg?imageView2/2/w/120/format/jpg"
},
"like_count": 7610,
"sub_comment_count": 82,
"ip_location": "浙江",
"time": 1787722416,
"replies": [
{
"id": "6a8e7fd1000000000200fcd9",
"content": "Same here.",
"author": "John Roe",
"like_count": 445,
"ip_location": "上海",
"time": 1787723730
}
],
"pictures": [],
"at_users": [],
"note_id": "6a8e608c000000001f0062b9",
"note_comment_count": 1042,
"url_to_note": "https://www.xiaohongshu.com/discovery/item/6a8e608c000000001f0062b9?xsec_token=ABzJO67rEEOTnCrKBqkUgvqj0ejLq-v1wvUDt5FnSZcuU=&xsec_source=pc_feed",
"sort_by": "preview"
}
When a link cannot be read, no row is saved and nothing is billed. The link is listed in failedInputs of the run's OUTPUT record with one of these reasons:
| Reason | Meaning |
|---|---|
INVALID_URL | The text is not a Xiaohongshu note link. |
NOTE_UNAVAILABLE | The note did not open. The usual cause is a link without xsec_token. |
FETCH_FAILED | Xiaohongshu did not answer after several retries. |
$3.50 per 1,000 comments, which is $0.0035 per comment. Each reply kept on a comment costs the same $0.0035, and replies are billed only when Include replies is on. Links that cannot be read are not billed. When a comment's replies would go over your maximum charge, the comment keeps only the replies the remaining budget pays for, is charged for exactly those, and is marked truncatedAtChargeLimit: true; the run then stops.
Worked example: the default run returned 5 comments and 15 replies, which is 20 results or $0.07 in result fees. Compute and proxy traffic are billed separately at standard rates; the total for that run was about $0.075.
Is it legal to scrape RedNote comments? The actor reads publicly visible note pages only. You are responsible for following Xiaohongshu's terms and the privacy laws that apply to you.
Do I need a Xiaohongshu login or my own proxy? No login and no cookies. Datacenter proxy is built in and is enough for the public note page.
Why are there only about five comments? That is the preview Xiaohongshu puts on the public page. Later pages of the thread need a logged-in session and are not included.
Why was my link rejected?
Open the note in the app, copy the share link, and paste that. The link should contain xsec_token. A bare note id, or a link with the token removed, is often blocked.
Are pictures included? Yes, when the comment on the public page has them.
Can I schedule it or use the API? Yes. Start runs and read the dataset through the API, or use schedules in the console.
red_id or a business label, are null.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
noteUrlsarrayRequiredNote URLs or share links
One Xiaohongshu note per line. A discovery or explore link works when it includes xsec_token. An xhslink.com share link is followed to that note. A bare 24-character note id only works when Xiaohongshu still opens it.
maxCommentsPerNoteintegerOptionaldefault 10Max comments per note
Top-level comments to keep from each note. The public page shows about five. 0 keeps every comment on that page.
Replies are nested on the comment they belong to.
includeRepliesbooleanOptionaldefault trueInclude replies under each comment
Keep the replies that are already shown under a comment. Each included reply is billed as its own result. The public page shows up to three replies per comment.
maxRepliesPerCommentintegerOptionaldefault 5Max replies per comment
How many of the shown replies to keep under each comment. 0 keeps every reply on the page. The public page shows up to three.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter addresses are the default.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| id | string | null | Comment id |
| content | string | null | Comment text |
| author | string | null | Author nickname |
| user | object | null | Public author profile |
| like_count | integer | null | Likes shown on the comment |
| sub_comment_count | integer | null | Reply count reported for the comment |
| ip_location | string | null | Location label shown on the comment |
| time | integer | null | Posted at, Unix seconds |
| replies | array | Replies included for this comment |
| pictures | array | Pictures attached to the comment |
| at_users | array | People mentioned in the comment |
| note_id | string | null | Note id |
| note_title | string | null | Note title |
| note_comment_count | integer | null | Comment count shown on the note |
| url_to_note | string | null | Note URL |
| liked | boolean | null | |
| comment_index_in_note | integer | null | |
| comment_type | integer | null | |
| status | integer | null | |
| invalid | boolean | null | |
| truncatedAtChargeLimit | boolean | Present (true) when the comment's replies were cut to what the run's maximum charge still paid for. |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Comment | A public comment, or a reply included with that comment. | $0.0035 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('echofield/rednote-comments-scraper').call({
"noteUrls": [
"https://www.xiaohongshu.com/discovery/item/6a8e608c000000001f0062b9?xsec_token=ABzJO67rEEOTnCrKBqkUgvqj0ejLq-v1wvUDt5FnSZcuU=&xsec_source=pc_feed"
],
"maxCommentsPerNote": 10,
"includeReplies": true,
"maxRepliesPerComment": 5,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run echofield/rednote-comments-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=echofield/rednote-comments-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.