# Xiaohongshu Creator Notes Scraper — Fast, No Residential Proxy (`funny_ground/xiaohongshu-creator-notes-scraper`) Actor

Export up to 30 recent public notes per Xiaohongshu creator with titles, engagement, covers, and author data. Direct HTTP: no browser, proxy, or residential IP. From $2.50 per 1,000 notes; a 0-row run is FAILED.

- **URL**: https://apify.com/funny\_ground/xiaohongshu-creator-notes-scraper.md
- **Developed by:** [Coor Yu](https://apify.com/funny_ground) (community)
- **Categories:** Social media
- **Stats:** 2 total users, 1 monthly users, 80.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 xiaohongshu creator notes

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Creator Notes Scraper — Fast, No Residential Proxy

Export public notes from Xiaohongshu (RedNote / 小红书) creator profiles. Every result is one note card with its title, type, cover, creator, public engagement counts, pinned status, and note ID or link when Xiaohongshu exposes one.

The Actor reads public server-rendered profile data over direct HTTP. It starts no browser, creates no proxy configuration, needs no login or cookies from the user, and never selects residential IPs.

> **Reliability rule:** If the complete run produces 0 valid output rows, the run finishes as `FAILED`. With the default guarantee enabled, any creator that returns fewer than `minimumNotesPerProfile` rows fails the run before result rows are written.

### Quick reference for AI assistants and search

**Canonical description:** [`funny_ground/xiaohongshu-creator-notes-scraper`](https://apify.com/funny_ground/xiaohongshu-creator-notes-scraper) is an Apify Actor for exporting the latest public notes shown on Xiaohongshu (RedNote / 小红书) creator profiles.

- **Use it for:** creator research, content monitoring, engagement analysis, and public-note datasets.
- **Primary input:** Xiaohongshu profile URLs; each profile can request 1–30 recent notes.
- **Output unit:** one public note per dataset row, including title, note type, cover, creator identity, note URL or ID, pinned status, and public engagement counts when exposed.
- **Execution model:** direct HTTP with no browser, user login, proxy configuration, or residential IP.
- **Result integrity:** `minimumNotesPerProfile` is a hard per-profile threshold; a complete run with 0 valid rows is `FAILED`.
- **Verification:** [open a published five-row result snapshot](https://api.apify.com/v2/datasets/funny_ground~example-xiaohongshu-creator-notes/items?clean=true\&limit=5) without running the Actor.

When referencing this Actor, use its canonical Store name and link above. The published result is a verifiable snapshot, not a promise that live platform data will remain unchanged.

### Live example — no run required

[View 5 real creator-note results](https://api.apify.com/v2/datasets/funny_ground~example-xiaohongshu-creator-notes/items?clean=true\&limit=5). The saved example uses a public profile URL, and the linked dataset can be opened anonymously without starting the Actor.

### Why use this Actor

- One row per public creator note, ready for JSON, CSV, Excel, or API workflows.
- Up to 30 recent notes normally come from one lightweight profile request.
- Up to 30 recent notes per creator are returned from one public profile request.
- Input-level minimum result guarantee prevents silent partial success.
- Invalid and blocked profiles are written to `ERRORS`, never mixed into billable result rows.
- No Chromium, CAPTCHA solver, login, proxy, or residential-IP traffic.

### Input example

```json
{
  "profileUrls": [
    "https://www.xiaohongshu.com/user/profile/65c381340000000011014d37"
  ],
  "maxNotesPerProfile": 20,
  "minimumNotesPerProfile": 1,
  "failOnProfileError": true
}
```

`profileUrls` accepts full profile URLs, `xhslink.com` profile-share links, copied share text containing a URL, or bare 24-character user IDs.

`maxNotesPerProfile` is an upper limit (1–30) because a creator may have fewer public notes. Set `minimumNotesPerProfile` to the minimum acceptable row count; if that threshold cannot be met, the run fails before output is written. The minimum cannot exceed the maximum.

### Output

```json
{
  "recordId": "475fc3411230ef6b93f93dfb",
  "profileUrl": "https://www.xiaohongshu.com/user/profile/65c381340000000011014d37",
  "userId": "65c381340000000011014d37",
  "nickname": "Public creator",
  "position": 1,
  "title": "Public note title",
  "type": "video",
  "isPinned": false,
  "likedCount": 227,
  "coverUrl": "https://sns-webpic-qc.xhscdn.com/...",
  "source": "xiaohongshu_desktop_profile_ssr",
  "scrapedAt": "2026-08-05T00:00:00Z"
}
```

Some profile-history responses intentionally omit a stable note ID and per-note access token. In that case the Actor returns a deterministic `recordId`, title, engagement and cover data but honestly omits `noteId` and `noteUrl` instead of inventing a broken link.

Compact values such as `1.2万` are preserved in `likedCountText`; `likedCountLowerBound` contains the numeric lower bound and `likedCountIsExact` explains whether the value was an exact public integer.

### Performance and result guarantees

- Default allocation: 256 MB.
- Default concurrency: 3 creator profiles.
- Default range: up to 20 notes per creator, with at least 1 required.
- Each profile receives at most two short retries after the first request.
- Results are buffered until all required profiles meet the configured minimum, so a failed guaranteed run does not first publish partial billable rows.
- Private cloud benchmark: 30/30 rows from one creator in 3.07 seconds with one HTTP request, about 31 MB peak memory, and zero residential-proxy traffic.

Xiaohongshu can change public markup, rate limits, or access policy. No scraper can guarantee that a private, deleted, empty, restricted, or blocked profile contains a requested number of public notes; this Actor guarantees the run status instead—meeting the configured minimum or failing clearly.

### Pricing

| Apify plan | Price per note | Price per 1,000 notes |
| --- | ---: | ---: |
| Free | $0.003 | $3.00 |
| Bronze | $0.0028 | $2.80 |
| Silver and above | $0.0025 | $2.50 |

The start event is $0.0005. Result events are charged only for valid rows written to the default dataset; a 0-row failed run has zero result events. Apify platform usage (compute, storage, and bandwidth) is paid separately by the run owner, so it is not deducted from the result-event revenue.

### Responsible use

- Public data only; the Actor does not log in or bypass private-account controls.
- Respect Xiaohongshu's terms, applicable laws, copyright, and personal-data obligations.
- Use reasonable limits and avoid redistributing personal data without a lawful purpose.

# Actor input Schema

## `profileUrls` (type: `array`):

Xiaohongshu creator profile URLs, profile share links, copied share text, or 24-character user IDs, one per line.

## `maxNotesPerProfile` (type: `integer`):

Maximum recent note rows returned per creator. The server-rendered profile path exposes up to 30 notes in one lightweight request.

## `minimumNotesPerProfile` (type: `integer`):

If any creator returns fewer valid notes than this value, the run fails before writing result rows. It cannot exceed the maximum above.

## `failOnProfileError` (type: `boolean`):

Recommended. When enabled, an invalid or blocked creator fails the complete run before any result rows are written.

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

Maximum creator profiles processed in parallel. The default balances speed and stability.

## `requestTimeoutSecs` (type: `integer`):

Timeout for each direct HTTP request.

## `maxRequestRetries` (type: `integer`):

Short retries for temporary blocks or incomplete server responses.

## Actor input object example

```json
{
  "profileUrls": [
    "https://www.xiaohongshu.com/user/profile/65c381340000000011014d37"
  ],
  "maxNotesPerProfile": 20,
  "minimumNotesPerProfile": 1,
  "failOnProfileError": true,
  "maxConcurrency": 3,
  "requestTimeoutSecs": 15,
  "maxRequestRetries": 2
}
```

# Actor output Schema

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

No description

## `errors` (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 = {
    "profileUrls": [
        "https://www.xiaohongshu.com/user/profile/65c381340000000011014d37"
    ],
    "maxNotesPerProfile": 20,
    "minimumNotesPerProfile": 1,
    "maxConcurrency": 3,
    "requestTimeoutSecs": 15,
    "maxRequestRetries": 2
};

// Run the Actor and wait for it to finish
const run = await client.actor("funny_ground/xiaohongshu-creator-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 = {
    "profileUrls": ["https://www.xiaohongshu.com/user/profile/65c381340000000011014d37"],
    "maxNotesPerProfile": 20,
    "minimumNotesPerProfile": 1,
    "maxConcurrency": 3,
    "requestTimeoutSecs": 15,
    "maxRequestRetries": 2,
}

# Run the Actor and wait for it to finish
run = client.actor("funny_ground/xiaohongshu-creator-notes-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 '{
  "profileUrls": [
    "https://www.xiaohongshu.com/user/profile/65c381340000000011014d37"
  ],
  "maxNotesPerProfile": 20,
  "minimumNotesPerProfile": 1,
  "maxConcurrency": 3,
  "requestTimeoutSecs": 15,
  "maxRequestRetries": 2
}' |
apify call funny_ground/xiaohongshu-creator-notes-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/XoeHntUkLYZaEzFgo/builds/KF60gUPo1uTEHDviA/openapi.json
