# RedNote Trending Scraper: Xiaohongshu 小红书 Viral Notes & Text (`serenido/rednote-trending-scraper`) Actor

Get the notes RedNote (Xiaohongshu, 小红书) is pushing right now, with full text, images, video link, tags, likes, saves, comments, shares, date and author. Filter by keyword, likes or date, or paste note links. No login, no cookies.

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

## Pricing

from $2.10 / 1,000 note saveds

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

> ⭐ If this tool saves you time, please leave a quick review on this page. It helps other people find it. Found a problem? Open an issue in the Issues tab and we'll fix it fast.

### What does RedNote Trending Scraper do?

It gets the **notes RedNote (Xiaohongshu, 小红书) is pushing right now** as clean rows you can open in Excel, Google Sheets, Python or your AI agent. No RedNote account, no login, no cookies.

- **Trending notes** from RedNote's main recommended feed (发现页), the viral posts people are seeing today. Each run reloads the feed many times, so you can get up to 1,000 different notes in one run.
- **Full detail for every note:** title, full text, tags (话题), all images, video link and length, likes, saves (收藏), comments and shares as real numbers, publish time (UTC and China time), the author's location (IP属地), author name, ID, avatar and profile link.
- **Filters:** only notes about your words (in the title, text or tags), only notes with enough likes, only notes from the last N days.
- **Read note links** you already have, including xhslink.com share links.

### Why use it?

- **Full detail by default.** Every note is opened, so you get the whole post, not just a title, likes and a cover.
- **Numbers you can sort.** RedNote shows "2.8万"; you get 28000 (and the original text too).
- **Fair billing.** Deleted or private notes, expired links and notes that stay blocked after all retries are saved as free rows with the reason. Notes your filters skip are not saved or charged. You only pay for complete notes.
- **No duplicates.** A note the feed shows twice is saved once.
- **Fast.** 300 full notes in about 90 seconds in our tests; 150 notes in under 15 seconds with full detail off.

### How to use it

1. Choose the **number of trending notes** (up to 1,000).
2. Optional: add **filters** (words, minimum likes, posted within N days).
3. Optional: paste **note links**.
4. Click **Start**.

Input example:

```json
{
  "maxNotes": 100,
  "keywords": ["咖啡", "探店"],
  "minLikes": 1000,
  "publishedWithinDays": 30
}
```

Output example (one row, images shortened):

```json
{
  "status": "ok",
  "rank": 20,
  "noteId": "6abf1c67000000001b02efe9",
  "type": "image",
  "title": "米汉堡…可保德克士荣华富贵🍔",
  "text": "德克士的米汉堡依旧和小时候一样好吃！在全是面包胚的汉堡时刻，烤过的米饭胚好满足，好像在吃一碗立起来的炸鸡拌饭[害羞R][害羞R] #我的假期美食日记[话题]# #德克士[话题]# #米汉堡[话题]#",
  "tags": ["我的假期美食日记", "野生食评人howto", "德克士", "米汉堡"],
  "likes": 5102,
  "collects": 889,
  "comments": 352,
  "shares": 3300,
  "publishedAt": "2026-10-02T02:52:23Z",
  "publishedAtChina": "2026-10-02 10:52",
  "ipLocation": "山东",
  "authorName": "头发太多L",
  "authorUrl": "https://www.xiaohongshu.com/user/profile/5a30bfab11be103721aa004e",
  "images": ["https://sns-webpic-qc.xhscdn.com/...jpg_3", "..."],
  "imageCount": 3,
  "videoUrl": null,
  "url": "https://www.xiaohongshu.com/explore/6abf1c67000000001b02efe9?xsec_token=...&xsec_source=pc_feed",
  "source": "trending feed"
}
```

### Output fields

| Field | Meaning |
|---|---|
| status | ok, or why a free row has no note (not_found, invalid_link, blocked) |
| rank | The note's position in the feed during this run (empty for links) |
| noteId, url | The note's ID and a link that opens it (with its xsec_token) |
| type | image (图文) or video |
| title, text, tags, mentions | The post: title, full text, topic tags (话题) and mentioned users |
| likes, likesText, collects, comments, shares | Counts as numbers; likesText is what RedNote shows (2.8万) |
| publishedAt, publishedAtChina, lastUpdatedAt | Post time in UTC and China time, last edit time |
| ipLocation | The author's location shown on the post (IP属地) |
| authorName, authorId, authorUrl, authorAvatar | The author |
| coverImage, images, imageCount, videoUrl, videoDurationSec | Pictures and video |
| source, input, message | Trending feed or your link, the link you gave, and why a free row has no note |

### Good to know

- **What "trending" means here:** RedNote's main recommended feed as a logged-out visitor sees it. It is made of popular notes, mostly posted in the last 3 months, and every reload brings new ones. It is not tailored to any account.
- **No category feeds.** RedNote's category feeds (穿搭, 美食...) show only old notes from 2023 to logged-out visitors, so this tool does not sell them as trending. Use the words filter instead (for example 穿搭 or 美食).
- **Note links need their xsec_token.** RedNote does not open a note for logged-out visitors without it. Copy links from the note's Share button or your browser's address bar; xhslink.com share links work too.
- **Image and video links are signed by RedNote** and can stop working after some time. Download the files soon if you need them.
- **Not available without logging in:** keyword search, comments and full user profiles. This tool does not claim them.

### How much does it cost?

You pay only for complete notes saved to your dataset. Deleted, private or expired notes, invalid links and notes that stay blocked after all retries are saved as free rows with the reason, never charged. Notes skipped by your filters are not saved or charged. Set a maximum cost per run in the run options and the run stops cleanly when it is reached.

### Use it from AI agents and code

Run it from the Apify API, Python or JavaScript, Make, Zapier, n8n, or any MCP client (Claude, ChatGPT, Cursor) through Apify's MCP server: `https://mcp.apify.com?tools=serenido/rednote-trending-scraper`.

Python (`pip install -U apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("serenido/rednote-trending-scraper").call(run_input={"maxNotes": 50, "minLikes": 1000})
for note in client.dataset(run.default_dataset_id).iterate_items():
    print(note["likes"], note["title"], note["url"])
```

### Is it legal?

It reads public pages that anyone can open without logging in. Use the data in line with RedNote's terms and the laws that apply to you, especially for personal data like author names. This tool is not affiliated with Xiaohongshu (RedNote).

# Actor input Schema

## `maxNotes` (type: `integer`):

How many notes to save from RedNote's main trending feed (up to 1,000). Set 0 to only read the note links below.

## `fullDetail` (type: `boolean`):

On: open every note for its full text, all images, video link, tags, saves, comments, shares, exact date and location. Off: faster, only what the feed shows (title, likes, author, cover, date, link).

## `keywords` (type: `array`):

Keep notes whose title, text or tags contain any of these words, for example 咖啡 or 护肤. Leave empty for everything. Skipped notes are not saved or charged.

## `minLikes` (type: `integer`):

Keep notes with at least this many likes. 0 = all.

## `publishedWithinDays` (type: `integer`):

Keep notes posted in the last N days. 0 = any date. The feed mostly shows notes from the last 3 months.

## `noteUrls` (type: `array`):

RedNote note links to read in full, with their xsec_token (copy them from the note's Share button or the browser address bar), or xhslink.com share links. Filters do not apply to links. Deleted, private or expired links are saved as free rows.

## `maxConcurrency` (type: `integer`):

How many notes to open at the same time.

## `proxy` (type: `object`):

Residential proxy is recommended: RedNote gives one address only a few feed loads, and the tool uses a fresh address for each one. Note pages try a cheaper datacenter address first.

## Actor input object example

```json
{
  "maxNotes": 20,
  "fullDetail": true,
  "minLikes": 0,
  "publishedWithinDays": 0,
  "maxConcurrency": 5,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

No description

## `fullText` (type: `string`):

No description

## `all` (type: `string`):

No description

# 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 = {
    "maxNotes": 20,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("serenido/rednote-trending-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 = {
    "maxNotes": 20,
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("serenido/rednote-trending-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 '{
  "maxNotes": 20,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call serenido/rednote-trending-scraper --silent --output-dataset

```

## MCP server setup

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