# RedNote Xiaohongshu Search Scraper (`khadinakbar/xiaohongshu-search-scraper`) Actor

Search RedNote (Xiaohongshu) notes by keyword with an authorized session and return structured note cards with titles, creators, images, likes, URLs, and scrape time.

- **URL**: https://apify.com/khadinakbar/xiaohongshu-search-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Social media, Automation, Marketing
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 xiaohongshu search results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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

## RedNote Xiaohongshu Search Scraper

Search RedNote (Xiaohongshu / 小红书) notes by one keyword through an authorized logged-in browser session. The actor returns a clean, one-row-per-note dataset with the note URL, title, creator, displayed and normalized likes, cover image, search keyword, result position, and collection time.

Use it for China-market research, trend discovery, brand monitoring, and gathering public content examples. Do not use it for full note-detail extraction, profile cataloguing, comments, private content, or account automation.

### Output

| Field                       | Meaning                                                              |
| --------------------------- | -------------------------------------------------------------------- |
| `id`                        | Public note identifier from the rendered URL                         |
| `sourceUrl`                 | Canonical public Xiaohongshu note URL                                |
| `resultPosition`            | One-based position in the rendered search result cards               |
| `title`                     | Title text when rendered                                             |
| `authorName` / `authorUrl`  | Public creator identity when rendered                                |
| `likesText` / `likesCount`  | Engagement text as displayed plus a normalized number when parseable |
| `coverImageUrl`             | Public cover image URL when present                                  |
| `searchQuery` / `scrapedAt` | Query provenance and ISO collection time                             |

### Price

- Actor start: $0.00005 per run
- Search result: $0.006 per validated note card saved
- Platform usage: charged separately under Pay per event + usage

The actor never charges for an invalid, duplicate, or unsaved card. A typical 20-result run has up to $0.12 in event charges plus platform usage.

### Input

```json
{
    "searchQuery": "护肤",
    "maxResults": 20,
    "sessionCookie": "web_session=..."
}
````

`sessionCookie` is required because Xiaohongshu currently shows "log in to view search results" to anonymous browser sessions. Pass a current cookie header from an account you are authorized to use. It is treated as a secret and is never written to results or summaries.

### Run outcomes

Every run writes both `OUTPUT` and `RUN_SUMMARY` in the default key-value store.

- `COMPLETE`: validated search cards were returned.
- `PARTIAL`: useful cards were saved, but an explicit cap or card-parse issue occurred.
- `INVALID_INPUT`: change the query or result cap and retry.
- `UPSTREAM_FAILED`: Xiaohongshu did not render extractable public cards after browser retries; retry later or use an authorized session cookie.

### API and agent use

The actor is a regular Apify Actor, so it is available through the Apify API and Apify MCP after deployment. It accepts a single query and returns a flat, concise dataset designed for agent consumption.

### Limitations

Xiaohongshu can change its browser rendering, rate limits, login rules, and access controls without notice. Results reflect only note cards your authorized session is able to render. Engagement text is preserved as displayed, and `likesCount` is present only when the rendered text can be parsed.

TikHub currently documents a Xiaohongshu App V2 search-notes API, but the configured local `TIKHUB_API_KEY` is a placeholder, so this actor does not advertise no-cookie provider mode yet.

### Legal notice

Use this actor only for lawful collection and analysis of public data, in compliance with applicable law and the rights and platform rules relevant to your use case. Do not use it to access private data or bypass access controls.

# Actor input Schema

## `searchQuery` (type: `string`):

Keyword submitted to RedNote/Xiaohongshu note search, such as '护肤' or 'skincare tips'. Chinese, English, and mixed-language searches are accepted. It is limited to 100 characters and defaults to the example only in the Console prefill. This is not a note URL, user profile URL, hashtag, or comment query.

## `maxResults` (type: `integer`):

Maximum number of unique public note cards to save from this keyword search. Enter an integer from 1 through 100; the default is 20. Larger limits may require the browser to load more cards and increase runtime and per-result charges. This is a record cap, not a page count or a guarantee that the query has that many results.

## `sessionCookie` (type: `string`):

Cookie header from your own logged-in RedNote/Xiaohongshu browser session, in the form 'name=value; other=value'. Xiaohongshu currently gates web keyword search behind login, so this field is required. Supply it only if you are authorized to use that account; it is treated as a secret and never written to results or summaries. This is not an Apify API token, proxy password, or an input for scraping private content.

## Actor input object example

```json
{
  "searchQuery": "护肤",
  "maxResults": 20,
  "sessionCookie": "web_session=example"
}
```

# Actor output Schema

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

No description

## `output` (type: `string`):

No description

## `runSummary` (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 = {
    "searchQuery": "护肤",
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/xiaohongshu-search-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 = {
    "searchQuery": "护肤",
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/xiaohongshu-search-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 '{
  "searchQuery": "护肤",
  "maxResults": 10
}' |
apify call khadinakbar/xiaohongshu-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "RedNote Xiaohongshu Search Scraper",
        "description": "Search RedNote (Xiaohongshu) notes by keyword with an authorized session and return structured note cards with titles, creators, images, likes, URLs, and scrape time.",
        "version": "1.0",
        "x-build-id": "CrfhM4jpoZ8CB6ddy"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~xiaohongshu-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-xiaohongshu-search-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/khadinakbar~xiaohongshu-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-xiaohongshu-search-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/khadinakbar~xiaohongshu-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-xiaohongshu-search-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": [
                    "searchQuery",
                    "sessionCookie"
                ],
                "properties": {
                    "searchQuery": {
                        "title": "RedNote search keyword",
                        "type": "string",
                        "description": "Keyword submitted to RedNote/Xiaohongshu note search, such as '护肤' or 'skincare tips'. Chinese, English, and mixed-language searches are accepted. It is limited to 100 characters and defaults to the example only in the Console prefill. This is not a note URL, user profile URL, hashtag, or comment query."
                    },
                    "maxResults": {
                        "title": "Maximum search results",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of unique public note cards to save from this keyword search. Enter an integer from 1 through 100; the default is 20. Larger limits may require the browser to load more cards and increase runtime and per-result charges. This is a record cap, not a page count or a guarantee that the query has that many results.",
                        "default": 20
                    },
                    "sessionCookie": {
                        "title": "Xiaohongshu session cookie",
                        "type": "string",
                        "description": "Cookie header from your own logged-in RedNote/Xiaohongshu browser session, in the form 'name=value; other=value'. Xiaohongshu currently gates web keyword search behind login, so this field is required. Supply it only if you are authorized to use that account; it is treated as a secret and never written to results or summaries. This is not an Apify API token, proxy password, or an input for scraping private content."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
