# Xiaohongshu 小红书 Scraper - RedNote Notes, Users & Comments (`vulnv/xiaohongshu-scraper`) Actor

Scrape Xiaohongshu / RedNote (小红书): keyword note search, full note details, creator profiles, a creator's posted notes, and note comments. Export likes, collects, comments, images, video and creator data to JSON/CSV/Excel. No login, cookies or proxy needed.

- **URL**: https://apify.com/vulnv/xiaohongshu-scraper.md
- **Developed by:** [VulnV](https://apify.com/vulnv) (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 $4.00 / 1,000 notes

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Xiaohongshu Scraper - Search 小红书 (RedNote) Notes, Creators & Comments

**Scrape Xiaohongshu / RedNote (小红书) and export notes, creator profiles and comments to JSON, CSV or Excel.** Search notes by keyword, pull a single note's full details, get a creator's profile, list every note a creator has posted, or collect a note's comments - all from one Actor. Each result is one clean, flat row with likes, collects, comments, shares, images, video URLs and creator data.

No login, no cookies, no proxies and no China IP to configure - data is fetched through a fast, managed pipeline. Just pick an operation, add your input and press **Start**.

> **Unofficial notice:** This is an independent tool and is **not** affiliated with, endorsed by, or connected to Xiaohongshu, 小红书, RedNote or Xingin. "Xiaohongshu", "小红书" and "RedNote" are trademarks of their respective owners, used here only to describe what the Actor scrapes.

### What is Xiaohongshu (RedNote)?

Xiaohongshu (小红书, "Little Red Book", known internationally as RedNote) is one of China's largest lifestyle and social-commerce platforms, with hundreds of millions of users sharing "notes" - image and video posts - about beauty, fashion, travel, food and shopping. This scraper gives you programmatic access to Xiaohongshu's search, notes, creators and comments so you can track trends, discover creators (KOLs) and analyze engagement at scale without a Xiaohongshu account.

### Operations

Pick one **Operation** and fill in the matching field:

| Operation | Input field | What you get |
|-----------|-------------|--------------|
| **Search notes by keyword** | `keywords` | Notes matching each keyword, with full engagement and creator data. |
| **Note details** | `noteUrls` | The full detail of each note (title, body, images, video URL, counts). |
| **Note comments** | `noteUrls` | Top-level comments for each note, with replies and commenter data. |
| **Creator profile** | `userUrls` | A creator's profile: followers, following, total likes/saves, bio, verification. |
| **Creator's posted notes** | `userUrls` | Every note a creator has posted, paginated. |

`noteUrls` and `userUrls` accept full URLs, share links, or bare note / user IDs - one per line.

### How to use it (step by step)

1. Choose an **Operation**.
2. Fill in the matching input:
   - Search notes -> add one or more **Search keywords** (Chinese, English, brands and emoji all work).
   - Note details / Note comments -> paste **Note URLs / IDs**.
   - Creator profile / Creator's posted notes -> paste **Creator URLs / IDs**.
3. Set **Maximum results per input** (default 100, or 0 for all available) for the paginated operations.
4. For search, optionally set **Sort**, **Note type** and **Published in**. For comments, optionally set **Comment sort order**.
5. Press **Start**. Export the dataset as JSON, CSV, Excel, XML or via the API.

### Input

| Field | Type | Description |
|-------|------|-------------|
| `operation` | string | **Required.** `search_notes`, `note_detail`, `note_comments`, `user_profile`, or `user_notes`. |
| `keywords` | array | Search keywords (for `search_notes`). |
| `noteUrls` | array | Note URLs, share links or IDs (for `note_detail`, `note_comments`). |
| `userUrls` | array | Creator URLs, share links or IDs (for `user_profile`, `user_notes`). |
| `maxItems` | integer | Max results per keyword / creator / note. `0` = all available. Default `100`. |
| `searchSort` | string | `general`, `most_liked`, or `latest` (search only). |
| `noteType` | string | `all`, `video`, or `image` (search only). |
| `timeFilter` | string | `all`, `one_day`, `one_week`, `half_year` (search only). |
| `commentSort` | string | `latest`, `most_liked`, or `default` (comments only). |

### Output

Every row carries a `record_type` of `note`, `user` or `comment`. Common note fields:

| Field | Description |
|-------|-------------|
| `note_id`, `note_url`, `note_type` | Note identity and canonical URL (`video` or `image`). |
| `title`, `desc`, `hashtags` | Note title, body text and topic / hashtag names. |
| `liked_count`, `collected_count`, `comments_count`, `shared_count`, `view_count` | Engagement metrics. |
| `author_user_id`, `author_red_id`, `author_nickname`, `author_verified` | Creator data. |
| `image_urls`, `cover_url`, `video_url`, `video_duration` | Media URLs. |
| `create_time`, `ip_location` | Publish time (ISO-8601 UTC) and region. |

Creator (`user`) rows add `fans_count`, `follows_count`, `notes_count`, `liked_total`, `collected_total`, `profile_url` and `desc` (bio). Comment (`comment`) rows add `comment_id`, `content`, `like_count`, `sub_comment_count` and a parsed `sub_comments` list.

Example note row:

```json
{
  "record_type": "note",
  "operation": "search_notes",
  "input": "护肤",
  "note_id": "69d8ab670000000022003dbe",
  "note_type": "video",
  "note_url": "https://www.xiaohongshu.com/explore/69d8ab670000000022003dbe",
  "title": "Skin Routine",
  "liked_count": 7897,
  "collected_count": 1458,
  "comments_count": 193,
  "shared_count": 277,
  "author_nickname": "…",
  "author_red_id": "420393425",
  "ip_location": "Sichuan",
  "video_url": "https://…/….mp4",
  "hashtags": ["vlog", "护肤"]
}
````

### Common use cases

- **Trend tracking** - watch what is rising on Xiaohongshu for any keyword, sorted by newest or most-liked.
- **KOL / creator discovery** - find creators for a niche, then pull their profile and full note history.
- **Competitor and brand monitoring** - track a brand's notes, engagement and comment sentiment.
- **Market research** - build datasets of Chinese-consumer lifestyle, beauty, travel and shopping content.

### Notes on reliability

- Media URLs (images and video) are signed and time-limited by Xiaohongshu's CDN; download them promptly.
- Search and comment counts reflect what Xiaohongshu returns at scrape time and can change.
- If a note or creator is private, deleted or region-locked, that input is skipped and the run continues.

### FAQ

**Do I need a Xiaohongshu account, cookies or a proxy?** No. Just add your input and press Start.

**Can I run several keywords or URLs at once?** Yes - add multiple lines. For search and creator-notes, cross-input duplicate notes are removed automatically.

**What languages work for search?** Chinese, English, pinyin, brand names and emoji all work.

# Actor input Schema

## `operation` (type: `string`):

What to scrape. Each operation uses a different input field below:

• Search notes → Keywords
• Note details → Note URLs / IDs
• Note comments → Note URLs / IDs
• Creator profile → Creator URLs / IDs
• Creator's notes → Creator URLs / IDs

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

For the "Search notes" operation. Add one or more keywords - Chinese, English, brand names and emoji all work. Each keyword is searched independently and cross-keyword duplicates are removed.

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

For the "Note details" and "Note comments" operations. Paste full note URLs, share links, or bare note IDs - one per line.

## `userUrls` (type: `array`):

For the "Creator profile" and "Creator's posted notes" operations. Paste full profile URLs, share links, or bare user IDs - one per line.

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

Upper bound on results per keyword / creator / note (for the paginated operations: search, creator's notes, comments). Cost scales linearly. Set 0 to fetch all available.

## `searchSort` (type: `string`):

For "Search notes" only. How Xiaohongshu orders results.

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

For "Search notes" only. Limit to a note format.

## `timeFilter` (type: `string`):

For "Search notes" only. Limit results to notes published within this window.

## `commentSort` (type: `string`):

For "Note comments" only. How to order the returned comments.

## Actor input object example

```json
{
  "operation": "search_notes",
  "keywords": [
    "护肤",
    "citywalk"
  ],
  "maxItems": 100,
  "searchSort": "general",
  "noteType": "all",
  "timeFilter": "all",
  "commentSort": "latest"
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped Xiaohongshu results in the default dataset.

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

Overview table of the scraped results.

# 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 = {
    "keywords": [
        "护肤",
        "citywalk"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("vulnv/xiaohongshu-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 = { "keywords": [
        "护肤",
        "citywalk",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("vulnv/xiaohongshu-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "护肤",
    "citywalk"
  ]
}' |
apify call vulnv/xiaohongshu-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=vulnv/xiaohongshu-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Xiaohongshu 小红书 Scraper - RedNote Notes, Users & Comments",
        "description": "Scrape Xiaohongshu / RedNote (小红书): keyword note search, full note details, creator profiles, a creator's posted notes, and note comments. Export likes, collects, comments, images, video and creator data to JSON/CSV/Excel. No login, cookies or proxy needed.",
        "version": "1.0",
        "x-build-id": "Pp8EdWLms5WLDuGvn"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/vulnv~xiaohongshu-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-vulnv-xiaohongshu-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/vulnv~xiaohongshu-scraper/runs": {
            "post": {
                "operationId": "runs-sync-vulnv-xiaohongshu-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/vulnv~xiaohongshu-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-vulnv-xiaohongshu-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "operation"
                ],
                "properties": {
                    "operation": {
                        "title": "⚙️ Operation",
                        "enum": [
                            "search_notes",
                            "note_detail",
                            "note_comments",
                            "user_profile",
                            "user_notes"
                        ],
                        "type": "string",
                        "description": "What to scrape. Each operation uses a different input field below:\n\n• Search notes → Keywords\n• Note details → Note URLs / IDs\n• Note comments → Note URLs / IDs\n• Creator profile → Creator URLs / IDs\n• Creator's notes → Creator URLs / IDs",
                        "default": "search_notes"
                    },
                    "keywords": {
                        "title": "🔎 Search keywords",
                        "type": "array",
                        "description": "For the \"Search notes\" operation. Add one or more keywords - Chinese, English, brand names and emoji all work. Each keyword is searched independently and cross-keyword duplicates are removed.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "noteUrls": {
                        "title": "📝 Note URLs / IDs",
                        "type": "array",
                        "description": "For the \"Note details\" and \"Note comments\" operations. Paste full note URLs, share links, or bare note IDs - one per line.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "userUrls": {
                        "title": "👤 Creator URLs / IDs",
                        "type": "array",
                        "description": "For the \"Creator profile\" and \"Creator's posted notes\" operations. Paste full profile URLs, share links, or bare user IDs - one per line.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "📊 Maximum results per input",
                        "minimum": 0,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Upper bound on results per keyword / creator / note (for the paginated operations: search, creator's notes, comments). Cost scales linearly. Set 0 to fetch all available.",
                        "default": 100
                    },
                    "searchSort": {
                        "title": "📈 Search sort order",
                        "enum": [
                            "general",
                            "most_liked",
                            "latest"
                        ],
                        "type": "string",
                        "description": "For \"Search notes\" only. How Xiaohongshu orders results.",
                        "default": "general"
                    },
                    "noteType": {
                        "title": "🎞️ Note type",
                        "enum": [
                            "all",
                            "video",
                            "image"
                        ],
                        "type": "string",
                        "description": "For \"Search notes\" only. Limit to a note format.",
                        "default": "all"
                    },
                    "timeFilter": {
                        "title": "📅 Published in",
                        "enum": [
                            "all",
                            "one_day",
                            "one_week",
                            "half_year"
                        ],
                        "type": "string",
                        "description": "For \"Search notes\" only. Limit results to notes published within this window.",
                        "default": "all"
                    },
                    "commentSort": {
                        "title": "💬 Comment sort order",
                        "enum": [
                            "latest",
                            "most_liked",
                            "default"
                        ],
                        "type": "string",
                        "description": "For \"Note comments\" only. How to order the returned comments.",
                        "default": "latest"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
