# RedNote (Xiaohongshu) Notes Scraper (`parseforge/rednote-notes-scraper`) Actor

Scrape RedNote (Xiaohongshu) notes by link or category feed. Titles, full text, hashtags, likes, saves, comments, galleries and playable video. Export to CSV, Excel, JSON or XML.

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

## Pricing

from $4.07 / 1,000 results

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://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 📕 RedNote (Xiaohongshu) Notes Scraper

> 🚀 **Export RedNote notes in seconds.** Paste note links, or paste nothing at all, and get every note as a flat 25-field row: title, full body text, hashtags, author, likes, saves, comments, shares, the whole image gallery and a playable mp4 for video notes. Measured at about 1,000 notes a minute on a default run, with every page read through rotating datacenter addresses.

RedNote, known in China as Xiaohongshu or 小红书, is the lifestyle platform where Chinese consumers post what they actually bought, ate, wore and travelled to. This Actor reads the note pages that RedNote server renders for logged-out visitors, so every field comes from the page RedNote itself publishes. No headless browser, no API key, no account, no session cookie of your own.

Each note carries the four engagement counters RedNote tracks separately: likes, saves (收藏), comments and shares. RedNote abbreviates large like counts in its own interface as "1.4万", so the row ships both the parsed integer `likeCount` of 14000 and the raw `likeCountText` exactly as RedNote printed it. Twelve category feeds are supported, from Food to Beauty to Travel, and RedNote's own sitemap of 40,000 note links backs the run up when the logged-out feed is gated.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Consumer and brand researchers | Read unfiltered Chinese consumer opinion on a product category in its own words |
| Social listening and agency teams | Track how a campaign hashtag performs by likes, saves, comments and shares |
| AI and NLP teams | Build Chinese-language corpora of real user generated text with engagement labels |
| Creator and influencer analysts | Measure which note formats, video or gallery, earn saves rather than just likes |

### 📋 What the RedNote Notes Scraper does

> 💡 **Why it matters:** Likes are the cheapest signal on any social platform. RedNote is one of the few that publishes saves and shares as separate public numbers, and on this platform a save is the buying intent signal. This Actor puts `likeCount`, `collectCount`, `commentCount` and `shareCount` side by side on one row so you can rank notes by intent instead of by applause.

- 🔗 **Any RedNote note link:** paste `https://www.xiaohongshu.com/explore/<id>?xsec_token=...` straight from RedNote's Share menu. Bare note ids and `/discovery/item/<id>` links are normalised for you.
- 🧭 **Or paste nothing:** leave the URL list empty and the Actor sweeps a category feed for you. Twelve channels are available: Recommended, Fashion, Food, Beauty, Film and TV, Career, Relationships, Home, Gaming, Travel, Fitness and Video.
- 🗺 **A discovery path that survives the gate:** RedNote turns the logged-out feed on and off. When it serves a login shell instead, the Actor falls back to the sitemap RedNote's own robots.txt invites crawlers to read, which holds 40,000 note links that render in full without a token.
- 📝 **The whole note, not the card:** title, the full body text with RedNote's inline hashtag markup stripped out, the hashtag list as a clean array, the publish timestamp and the last edit timestamp in ISO 8601.
- ❤️ **Four engagement counters:** likes, saves, comments and shares as integers, plus the raw abbreviated like text RedNote shows on screen.
- 🖼 **Every image, full size:** the complete gallery as direct CDN links, with the cover in `imageUrl` so the dataset preview renders as a contact sheet.
- 🎬 **Playable video:** for video notes, the highest bitrate progressive mp4 RedNote exposes, plus the duration in seconds. The link plays in a browser and downloads with curl.
- 👤 **Author on every row:** nickname, stable user id, profile URL and avatar, so notes group by creator without a second run.
- 🔁 **Clean data:** one row per note, deduplicated on RedNote's own note id, the same 25 columns on every row, and `N/A` instead of a blank cell when a note simply has no title or no body text.

### 🎬 Full Demo (🚧 Coming soon)

A short walkthrough video is in production.

### 📊 Output

| Field | Type | Description |
|---|---|---|
| 🖼 `imageUrl` | string | Cover image of the note, full size on RedNote's CDN |
| 🔗 `noteUrl` | string | Canonical note URL, with the access token when one is known |
| 🆔 `noteId` | string | RedNote's own note id, stable and used for deduplication |
| 📌 `title` | string | Note title, or `N/A` when the author published without one |
| 🎞 `noteType` | string | `Image` for a gallery note, `Video` for a video note |
| ✍️ `authorName` | string | Author nickname as displayed on RedNote |
| 🧾 `authorId` | string | Stable RedNote user id of the author |
| 👤 `authorUrl` | string | Author profile URL on RedNote |
| 🙂 `authorAvatarUrl` | string | Author avatar image |
| ❤️ `likeCount` | integer | Likes, parsed to an exact integer from RedNote's abbreviation |
| 🔢 `likeCountText` | string | Likes exactly as RedNote prints them, for example `1.4万` |
| 🔖 `collectCount` | integer | Saves, the buying intent signal on RedNote |
| 💬 `commentCount` | integer | Comments on the note |
| 📤 `shareCount` | integer | Shares of the note |
| 📝 `description` | string | Body text with RedNote's inline hashtag markup removed, or `N/A` |
| 📅 `publishedAt` | string | Publish time in ISO 8601 |
| ♻️ `updatedAt` | string | Last edit time in ISO 8601 |
| 🖼 `imageCount` | integer | Number of images in the gallery |
| 🎬 `videoUrl` | string | Playable mp4 for video notes, `N/A` for image notes |
| ⏱ `videoDurationSeconds` | integer | Video length in seconds, `0` for image notes |
| 🧭 `sourceCategory` | string | How the note reached the run: `Direct URL`, `Sitemap`, or the feed channel name |
| 🏷 `hashtags` | array | Hashtag names attached to the note |
| 🖼 `imageUrls` | array | Every image in the gallery as a direct CDN link |
| 🕒 `scrapedAt` | string | When this row was collected |
| ❌ `error` | string or null | Populated only on error rows, which are never billed |

Three real records from a run:

```json
[
  {
    "imageUrl": "https://sns-webpic-qc.xhscdn.com/202609111352/6ab9deab1fe201051b4d931c0df66cd1/spectrum/1040g0k0323omp8ge6u005qhehr83v105jtfesho!nd_dft_wlteh_jpg_3",
    "noteUrl": "https://www.xiaohongshu.com/explore/6a7becae000000002403c2a3?xsec_token=AByUzUGbWV8SODDaCU1JL5mCRwOQ_ovYEqugR8gPpgPUA%3D&xsec_source=pc_feed",
    "noteId": "6a7becae000000002403c2a3",
    "title": "野猪救人还是头回看见。",
    "noteType": "Video",
    "authorName": "续续小娱子",
    "authorId": "6a2e8ed0000000000f038405",
    "authorUrl": "https://www.xiaohongshu.com/user/profile/6a2e8ed0000000000f038405",
    "authorAvatarUrl": "https://sns-avatar-qc.xhscdn.com/avatar/1040g2jo321n6dcmcna6g5qhehr83v105uu2mmkg",
    "likeCount": 14000,
    "likeCountText": "1.4万",
    "collectCount": 528,
    "commentCount": 242,
    "shareCount": 763,
    "description": "N/A",
    "publishedAt": "2026-08-12T03:46:54.000Z",
    "updatedAt": "2026-08-12T03:46:55.000Z",
    "imageCount": 1,
    "videoUrl": "https://sns-video-zl.xhscdn.com/stream/79/110/258/01ea7bec1454b0eb4f0370019ff4150eac_258.mp4?sign=16547ba905d9102134e8e1ce3184e2cf&t=6aa83461",
    "videoDurationSeconds": 45,
    "sourceCategory": "Direct URL",
    "hashtags": ["搞笑", "野猪", "万万没想到", "动物"],
    "imageUrls": ["https://sns-webpic-qc.xhscdn.com/202609111352/6ab9deab1fe201051b4d931c0df66cd1/spectrum/1040g0k0323omp8ge6u005qhehr83v105jtfesho!nd_dft_wlteh_jpg_3"],
    "scrapedAt": "2026-09-11T05:52:33.666Z",
    "error": null
  },
  {
    "imageUrl": "https://sns-webpic-qc.xhscdn.com/202609111352/9bcef9ab21afa3cc5c7a44ede5e4c089/1040g008323r5sro8nu6g5qapqrtdo61t7ng83p8!nd_dft_wlteh_jpg_3",
    "noteUrl": "https://www.xiaohongshu.com/explore/6a7e7404000000003301e492?xsec_token=ABOCCPyrj2KeFmHKT6ScypXCUZbDUHAGK6fbgeeCBGBx4%3D&xsec_source=pc_feed",
    "noteId": "6a7e7404000000003301e492",
    "title": "N/A",
    "noteType": "Image",
    "authorName": "烟花刹那",
    "authorId": "6959d6fa000000003700183d",
    "authorUrl": "https://www.xiaohongshu.com/user/profile/6959d6fa000000003700183d",
    "authorAvatarUrl": "https://sns-avatar-qc.xhscdn.com/avatar/1040g2jo322cb6ci67e6g5qapqrtdo61tjedkqp8",
    "likeCount": 2717,
    "likeCountText": "2717",
    "collectCount": 1276,
    "commentCount": 1191,
    "shareCount": 349,
    "description": "我们这一代考上公务员的红利是啥呀",
    "publishedAt": "2026-08-14T01:48:52.000Z",
    "updatedAt": "2026-08-14T01:48:52.000Z",
    "imageCount": 1,
    "videoUrl": "N/A",
    "videoDurationSeconds": 0,
    "sourceCategory": "Direct URL",
    "hashtags": ["公务员", "考公", "体制", "体制内上岸"],
    "imageUrls": ["https://sns-webpic-qc.xhscdn.com/202609111352/9bcef9ab21afa3cc5c7a44ede5e4c089/1040g008323r5sro8nu6g5qapqrtdo61t7ng83p8!nd_dft_wlteh_jpg_3"],
    "scrapedAt": "2026-09-11T05:52:33.765Z",
    "error": null
  },
  {
    "imageUrl": "https://sns-webpic-qc.xhscdn.com/202609111352/2923c3928d10608ad10fedc463475e10/spectrum/1040g34o323ejmucpn210417aeioud0dajk2rm3o!nd_dft_wlteh_jpg_3",
    "noteUrl": "https://www.xiaohongshu.com/explore/6a7197e9000000002c00670b?xsec_token=ABe1QgbPEeh5ff-fsfqrzbpBHF2jqFnSWmmM9W2V1XBrw%3D&xsec_source=pc_feed",
    "noteId": "6a7197e9000000002c00670b",
    "title": "是姐姐，是Cold Nerd｜冷智感香奈儿唇釉！",
    "noteType": "Video",
    "authorName": "一枝南南",
    "authorId": "5604f1e6e4b1cf3ec7c681aa",
    "authorUrl": "https://www.xiaohongshu.com/user/profile/5604f1e6e4b1cf3ec7c681aa",
    "authorAvatarUrl": "https://sns-avatar-qc.xhscdn.com/avatar/1040g2jo31a90l4pd7a00417aeioud0daqavf22o",
    "likeCount": 12000,
    "likeCountText": "1.2万",
    "collectCount": 2306,
    "commentCount": 439,
    "shareCount": 392,
    "description": "N/A",
    "publishedAt": "2026-08-05T03:08:13.000Z",
    "updatedAt": "2026-08-04T07:42:33.000Z",
    "imageCount": 1,
    "videoUrl": "https://sns-video-zl.xhscdn.com/stream/79/110/258/01ea7194bb635ba54f0370019fcbba7e72_258.mp4?sign=d53f4201f8edcc5a6c421fcc124e7bd3&t=6aa83461",
    "videoDurationSeconds": 32,
    "sourceCategory": "Direct URL",
    "hashtags": ["香奈儿", "唇釉", "美妆"],
    "imageUrls": ["https://sns-webpic-qc.xhscdn.com/202609111352/2923c3928d10608ad10fedc463475e10/spectrum/1040g34o323ejmucpn210417aeioud0dajk2rm3o!nd_dft_wlteh_jpg_3"],
    "scrapedAt": "2026-09-11T05:52:33.812Z",
    "error": null
  }
]
```

### ✨ Why choose this Actor

| | What you get |
|---|---|
| **No cookie, no account** | Nothing to paste from your browser and nothing to keep alive. The Actor reads only what RedNote server renders for a logged-out visitor. |
| **Saves and shares, not just likes** | Four separate counters per note. On RedNote a save is the intent signal, and most exports flatten it away. |
| **Exact counts and the raw label** | `likeCount` is 14000 where RedNote printed `1.4万`. Both are on the row, so a chart and a screenshot agree. |
| **Playable video, not a thumbnail** | The highest bitrate progressive mp4 RedNote exposes, plus duration. It plays in a browser and downloads with curl. |
| **Two ways in** | Paste links for a precise pull, or paste nothing and let it sweep a category feed with a sitemap fallback behind it. |
| **25 columns, one shape** | Every row has the same keys in the same order, so CSV imports, joins and Excel filters behave. |
| **No blanks, no nulls** | A value the note does not carry is `N/A` or `0`, never an empty cell. |
| **Honest ceilings** | The keyword search wall and the feed gate are documented below, not left for you to discover after a run. |
| **Fast and cheap** | HTTP only, no browser to warm up, about 1,000 notes a minute on the default datacenter proxy. |

### 📈 How it compares to alternatives

| Feature | This Actor | Typical RedNote scrapers | By hand |
|---|---|---|---|
| Fields per note | 25 | 8 to 24 | Whatever you copy |
| Session cookie required | No | Often yes | You are the session |
| Likes, saves, comments and shares | All four | Usually likes and comments | Four numbers per note, by eye |
| Exact count plus RedNote's own label | Yes | Abbreviated or parsed, rarely both | Abbreviated |
| Playable video URL | Yes, highest bitrate mp4 | Sometimes a thumbnail only | Screen record it |
| Full image gallery | Yes, every image | Cover only | Save each one |
| Hashtags as a clean array | Yes | Left inline in the body text | Retype them |
| Works with no input at all | Yes, feed with sitemap fallback | Needs URLs or a keyword | No |
| Keyword search | No, see the FAQ | Some, with an account behind it | Yes, while logged in |
| Memory and speed | 4 GB, HTTP only, about 1,000 notes a minute | Often a browser at 4 GB | Hours |

### 🚀 How to use

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [RedNote Notes Scraper](https://apify.com/parseforge/rednote-notes-scraper?fpr=vmoqkp).
3. Paste RedNote note links, or leave the list empty and pick a category feed, set Max Items, and click **Start**.
4. Download the dataset as CSV, Excel, JSON or XML from the **Storage** tab, or read it through the API.

A first run, with no links at all:

```json
{
  "maxItems": 10,
  "category": "homefeed.food_v3",
  "noteType": "any"
}
```

To pull specific notes instead, copy each link from RedNote's Share menu so it keeps its `xsec_token`, and put them in **RedNote note URLs**. Set **Note type** to `video` if you only want notes with a playable mp4.

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

### 💼 Business use cases

**🧴 Beauty and skincare category research.** A brand team sweeps the Beauty feed weekly, ranks notes by `collectCount` rather than `likeCount`, and reads the body text of the top 50 to find which ingredient claims Chinese shoppers repeat in their own words.

**📣 Campaign hashtag tracking.** An agency collects every note link it can find for a launch hashtag, joins them on `noteId` week over week, and watches `shareCount` to see whether the campaign is being passed around or only scrolled past.

**🤖 Chinese-language training corpora.** An NLP team runs the category sweep across all twelve channels, keeps `description`, `hashtags` and the four engagement counters, and ends up with labelled Chinese user generated text that no English-only corpus contains.

**🎥 Creator format analysis.** A creator strategy team pulls a few thousand notes, groups by `noteType` and `videoDurationSeconds`, and tests whether short video notes really earn more saves per like than gallery notes in the same category.

### 🔌 Automating RedNote Notes Scraper

- **Make and Zapier:** run the category sweep every morning and append new notes to Google Sheets or Airtable.
- **Slack:** post a message when a note in your category crosses a save threshold.
- **Airbyte:** sync the dataset into BigQuery, Snowflake or Postgres and keep a rolling RedNote warehouse.
- **GitHub Actions:** refresh a category file every night and commit the CSV.
- **Google Drive:** save each weekly sweep as an Excel file in a shared folder.

### 🌟 Beyond business use cases

- **🎓 Research:** sociolinguists studying how Mandarin internet slang spreads, with publish timestamps to date each use.
- **🧳 Personal:** build a travel shortlist from the Travel feed, sorted by saves rather than by whatever the app decides to show you.
- **🤝 Non-profit:** public health teams reading how wellness claims circulate on a platform that Western media rarely indexes.
- **🧪 Experimentation:** a testbed for Chinese-language sentiment models where the engagement counters act as a weak label.

### 🤖 Ask an AI assistant about this scraper

Paste this into ChatGPT, Claude or any assistant that can browse:

> Read https://apify.com/parseforge/rednote-notes-scraper and tell me which fields it returns for a RedNote note, how it finds notes when I give it no URLs, and what it cannot do.

### ❓ Frequently Asked Questions

#### 🔍 Can I search RedNote by keyword?

No, and no scraper can do it from a logged-out visit. RedNote's search endpoint answers `code -101, 无登录信息` which means "no login info", with or without a valid request signature, and the search page server renders an empty result list. Keyword search on RedNote needs a logged-in account. This Actor works from note links and category feeds instead, which need nothing.

#### 🔗 Which RedNote links can I paste?

`https://www.xiaohongshu.com/explore/<id>?xsec_token=...` is the canonical form and the one RedNote's Share menu gives you. Bare note ids and older `/discovery/item/<id>` links are normalised for you.

#### 🔑 Why does a link without `xsec_token` fail?

RedNote serves the page shell to everyone but fills in the note body only when the link carries the access token its own Share menu appends. Trim the token off and you get an empty page. The Actor reports that as an error row naming the note id, and error rows are never billed.

#### 🧭 What happens if I give no URLs at all?

The Actor sweeps the category feed you picked. If RedNote is serving the logged-out login shell instead of the feed that day, it falls back to the sitemap RedNote's own robots.txt points crawlers at, which holds 40,000 note links that render without a token.

#### 📉 Why is the feed sometimes unavailable?

RedNote gates its logged-out feed on and off. A measured session collected 126 unique notes across four calls, then got the login shell on eight of eight retries an hour later from two different proxy pools. The sitemap fallback exists so a run never comes back empty.

#### 🔢 What is `likeCountText` for?

RedNote abbreviates large counts in its interface, so a note with 14000 likes displays as `1.4万`. `likeCount` is the parsed integer and `likeCountText` is what RedNote actually printed. Keep both if your report needs to match a screenshot.

#### 🔖 Why does `collectCount` matter more than likes?

A save on RedNote means someone intends to come back to the note before buying, cooking or travelling. Likes are cheap, saves are not, and RedNote publishes both. Ranking by saves surfaces a very different top 50.

#### 🎬 Do the video links actually play?

Yes. `videoUrl` is the highest bitrate progressive mp4 RedNote exposes for that note. It opens in a browser and downloads with curl. Image notes return `N/A` and `videoDurationSeconds` of `0`.

#### 👤 Can I scrape a creator's full profile and post history?

Not from this Actor. RedNote server renders an empty `userPageData` for logged-out visitors and loads the profile through a signed request that needs an account. Every row still carries `authorId` and `authorUrl`, so notes group by creator.

#### 💬 Does it return the comments themselves?

No. `commentCount` is the true total RedNote publishes, but the comment list loads through the same account-gated request as search. Use a dedicated comments Actor if you need the text.

#### 🛡️ Do I need a proxy?

The Apify datacenter proxy is on by default, and you can leave it that way. RedNote rate limits each address to about 7 note pages a second and walls a faster one for about 20 minutes, so rotating datacenter addresses is what lets a run read about 1,000 notes a minute. Datacenter transfer is not billed, so it costs nothing extra. If you switch the proxy off, the Actor paces itself to that per-address limit, which works out to about 300 notes a minute, and moves to the datacenter proxy on its own if RedNote still pushes back.

#### ⚠️ What do `N/A` and `0` mean?

`N/A` means the note genuinely does not carry that value, most often a note published with no title, or a body that was nothing but hashtags. `0` on `videoDurationSeconds` means it is an image note. Cells are never left blank and never null.

#### 🔁 Can the same note appear twice?

No. Rows are deduplicated on RedNote's own note id, so a note reached through both the feed and your URL list is billed once.

#### ⏰ Can I run this on a schedule?

Yes. Schedule the Actor in the Apify Console to sweep a category every morning and it will collect whatever RedNote surfaced overnight.

#### 📄 What output formats are supported?

CSV, JSON, Excel and XML, plus the Apify API and every integration on the Actor page.

#### ❌ What happens when a page fails?

The Actor retries three times, then writes a row carrying only an `error` message so you can see exactly which note failed. Error rows are never billed. Dead links inside RedNote's own sitemap are skipped quietly and topped up from the queue instead.

### 🔌 Integrate with any app

The dataset is available through the Apify API the moment the run finishes. Use the `run-sync-get-dataset-items` endpoint for one-shot calls, webhooks to trigger downstream jobs, or the Make, Zapier, Airbyte and LangChain integrations listed on the Actor page.

### 🔗 Recommended Actors

- [Bilibili Video Scraper](https://apify.com/parseforge/bilibili-video-scraper?fpr=vmoqkp)
- [Instagram Profile Scraper](https://apify.com/parseforge/instagram-profile-scraper?fpr=vmoqkp)
- [TikTok Hashtag Analytics Scraper](https://apify.com/parseforge/tiktok-hashtag-analytics-scraper?fpr=vmoqkp)
- [Reddit Posts & Comments Scraper](https://apify.com/parseforge/reddit-posts-comments-scraper?fpr=vmoqkp)
- [YouTube Comments Scraper](https://apify.com/parseforge/youtube-comments-scraper?fpr=vmoqkp)

***

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp).

**🆘 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 an independent tool and is not affiliated with, endorsed by, or sponsored by Xiaohongshu or RedNote. It collects only publicly available data that the site server renders for logged-out visitors. You are responsible for using the data in compliance with RedNote's terms of use and applicable laws.

# Actor input Schema

## `startUrls` (type: `array`):

Note links copied from RedNote, for example https://www.xiaohongshu.com/explore/68f3a1c2000000001e0345b7?xsec\_token=ABc... . Use the link from RedNote's own Share menu: it carries the xsec\_token that unlocks the note body. A bare /explore/<id> link without that token returns an empty page and is reported as an error row. Leave this list empty to sweep a category feed instead.

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

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

## `category` (type: `string`):

Which RedNote channel to sweep when the URL list is empty. These are the eleven channels the site's own feed switcher exposes, plus the default mixed recommendation feed.

## `noteType` (type: `string`):

Keep only image notes or only video notes. Video notes carry a playable mp4 link and a duration; image notes carry the full gallery. Filtering happens after the note is read, so a narrow filter still costs requests.

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

Apify proxy settings. Datacenter proxy is enough here and costs no transfer. Switch it off to read from a single address, which the Actor then paces to about 5 notes a second. Residential is only worth it if datacenter egress starts returning empty feeds.

## Actor input object example

```json
{
  "maxItems": 10,
  "category": "homefeed_recommend",
  "noteType": "any",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Key fields

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

Complete dataset with all 25 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 = {
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/rednote-notes-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 = {
    "maxItems": 10,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/rednote-notes-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 '{
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call parseforge/rednote-notes-scraper --silent --output-dataset

```

## MCP server setup

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