# Xiaohongshu Monitor (`maximedupre/xiaohongshu-monitor`) Actor

Monitor public Xiaohongshu and RedNote notes, tracked mentions, sample share of voice, and shop products in one dataset. Review source links, visible engagement, comparison metrics, prices, and exposed vendor details.

- **URL**: https://apify.com/maximedupre/xiaohongshu-monitor.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, E-commerce, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.40 / 1,000 note observations

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/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

### 🔎 Xiaohongshu Monitor for public notes, mentions, and shops

Brand teams, market researchers, and data users can review public Xiaohongshu and RedNote notes, tracked mentions, sample share of voice, and shop products with this Actor. It returns source links, note and author details, visible engagement, comparison fields, prices, and exposed vendor context in a dataset so you can inspect and compare public observations.

- Check public shop prices with **[Xiaohongshu Price Monitoring](https://apify.com/maximedupre/xiaohongshu-monitor/examples/xiaohongshu-price-monitoring)** for a list of shop targets.
- Compare tracked brands or products in one sample of public notes with **[Xiaohongshu Share of Voice](https://apify.com/maximedupre/xiaohongshu-monitor/examples/xiaohongshu-share-of-voice)**.
- Find notes that mention tracked brands or products with **[Xiaohongshu Mention Analysis](https://apify.com/maximedupre/xiaohongshu-monitor/examples/xiaohongshu-mention-analysis)**.
- Review public brand notes and changes across runs with **[Xiaohongshu Brand Monitoring](https://apify.com/maximedupre/xiaohongshu-monitor/examples/xiaohongshu-brand-monitoring)**.
- Collect public RedNote and Xiaohongshu notes with **[RedNote Monitor](https://apify.com/maximedupre/xiaohongshu-monitor/examples/rednote-monitor)**.

#### 📊 Review notes, comparisons, and shop products

Each saved row has a `resultType` that identifies its shape. A run can return note observations, mention analysis rows, share-of-voice rows, or shop products. The complete field tables and genuine beta rows are documented in the Output section below. Fields marked as optional appear when the public source exposes them.

#### ▶️ Run a public Xiaohongshu check

**Before you run**

Choose one `resultType` and fill the fields for that type. Note observations use `noteTargets`. Mention analysis and share of voice use `sampleNoteTargets` and `trackedEntities`. Shop products use `shopTargets`, optional price limits, and `productOrder`. Use separate runs for separate scopes.

Use public Xiaohongshu or RedNote note, shop, or vendor pages. Private, account-restricted, or otherwise non-public source pages are outside this Actor. If the same source item appears more than once in the submitted values, the first eligible occurrence is saved and later matches are ignored.

**Limits and repeat checks**

`maxItems` is optional. Leave it empty to return all available results until the source is exhausted. Set it to stop after the chosen number of saved rows. When prior observations are available, the threshold fields can flag breakout, mention-spike, anomaly, or product-value changes. These checks observe public samples and do not create a complete historical archive.

Unavailable or restricted pages may produce no saved row. Successful rows keep the source links and the fields that the public page exposes.

#### ⚙️ Input

Choose `resultType` first. All fields other than `resultType` are optional in the schema, and only fields for the selected result type are used.

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | string | Required. Choose `note-observations`, `mention-analysis`, `share-of-voice`, or `shop-products`. |
| `noteTargets` | array of URL strings | For Note observations, add public Xiaohongshu or RedNote note URLs. Use separate runs for separate scopes. |
| `breakoutThreshold` | number | For Note observations, flag a post when its observed engagement is at least this percentage above the available baseline. |
| `shopTargets` | array of source objects | For Shop products, add public Xiaohongshu or RedNote shop or vendor URLs. |
| `minPrice` | number | For Shop products, keep products at or above this price. Empty means no minimum. |
| `maxPrice` | number | For Shop products, keep products at or below this price. Empty means no maximum. |
| `productOrder` | string | For Shop products, choose `relevance`, `price-asc`, `price-desc`, or `sales`. |
| `sampleNoteTargets` | array of URL strings | For Mention analysis and Share of voice, add public note URLs that define the sample. Use separate runs for separate scopes. |
| `trackedEntities` | array of objects | For Mention analysis and Share of voice, list the brands or products to compare. |
| `trackedEntities[].name` | string | Public brand or product name to track. |
| `trackedEntities[].type` | string | Choose `brand` or `product`. |
| `mentionSpikeThreshold` | number | For Mention analysis and Share of voice, alert when mention volume changes by at least this percentage between observations. |
| `anomalyThreshold` | number | Alert when monitored engagement, mention, or product values change by at least this percentage outside their recent observed range. |
| `maxItems` | integer | Optional result limit. Leave empty to return all available results until the source is exhausted. |

`breakoutThreshold`, `mentionSpikeThreshold`, `anomalyThreshold`, `minPrice`, and `maxPrice` accept values of 0 or more. When set, `maxItems` must be at least 1. The form pre-fills `maxItems` with 25.

**Default-style input example**

This example is copied from a successful current-beta default-style run.

```json
{
  "resultType": "note-observations",
  "noteTargets": [
    "https://www.rednote.com/en/discovery/item/69e346d3000000002302707e"
  ],
  "productOrder": "relevance",
  "maxItems": 25
}
```

#### 🧾 Output

The output link opens the default dataset for the run. The dataset uses one of four row shapes based on the selected input, and every row identifies its shape with `resultType`.

**Output link**

The public output schema exposes the default dataset items URL for this run.

| Field | Type | What it does |
| --- | --- | --- |
| `dataset` | URL string | Opens the saved rows from the run's default dataset. |

**Note observation**

One row describes a public note, its author and media, and the visible engagement counters found on that note.

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | string | Always `note-observation` for this shape. |
| `sourceUrl` | URL string | Public URL of the note that was read. |
| `title` | string | Visible note title. |
| `contentType` | string | Note kind: `image`, `video`, `text`, `article`, or `other`. |
| `author` | object | Optional public author data. |
| `author.name` | string | Public display name of the author. |
| `author.profileUrl` | URL string | Optional public author profile URL. |
| `media` | array of objects | Optional media references exposed by the note. |
| `media[].url` | URL string | Direct public URL for the media file. |
| `media[].type` | string | Media kind: `image`, `video`, `audio`, or `other`. |
| `media[].altText` | string | Optional text that describes the media. |
| `engagement` | object | Optional visible counters, normalized to numbers. At least one counter can be present. |
| `engagement.likes` | object | Optional visible like counter. |
| `engagement.likes.value` | integer | Normalized like count. |
| `engagement.likes.approximate` | boolean | Whether the source marked the like count as approximate. |
| `engagement.comments` | object | Optional visible comment counter. |
| `engagement.comments.value` | integer | Normalized comment count. |
| `engagement.comments.approximate` | boolean | Whether the source marked the comment count as approximate. |
| `engagement.collects` | object | Optional visible collect counter. |
| `engagement.collects.value` | integer | Normalized collect count. |
| `engagement.collects.approximate` | boolean | Whether the source marked the collect count as approximate. |
| `engagement.shares` | object | Optional visible share counter. |
| `engagement.shares.value` | integer | Normalized share count. |
| `engagement.shares.approximate` | boolean | Whether the source marked the share count as approximate. |
| `engagementAvailability` | string | Counter status: `available`, `partial`, or `unavailable`. |

**Example note row**

This is a genuine row from a current beta run.

```json
{
  "resultType": "note-observation",
  "sourceUrl": "https://www.rednote.com/en/discovery/item/69e346d3000000002302707e",
  "title": "夏天用平板反光严重？3款热门平板膜实测！",
  "contentType": "image",
  "author": {
    "name": "视隼膜力3C数码",
    "profileUrl": "https://www.rednote.com/user/profile/5f242bdc000000000101d94c"
  },
  "media": [
    {
      "url": "http://sns-web-i10.rednotecdn.com/202609240308/be6ca56b17f77ec54771c5cc7c6c8f95/notes_pre_post/1040g3k831v3k8d90is005np45fe0bmacaqmja88!nd_dft_wlteh_jpg_3",
      "type": "image",
      "altText": "夏天用平板反光严重？3款热门平板膜实测！"
    },
    {
      "url": "http://sns-web-i10.rednotecdn.com/202609240308/147028afcb3b6242bbf41bd2bd064210/notes_pre_post/1040g3k831v3k8d90is0g5np45fe0bmac3ri38qo!nd_dft_wlteh_jpg_3",
      "type": "image",
      "altText": "夏天用平板反光严重？3款热门平板膜实测！"
    },
    {
      "url": "http://sns-web-i10.rednotecdn.com/202609240308/b3c21f09c9f636e266cc56a68d6f94e7/notes_pre_post/1040g3k831v3k8d90is105np45fe0bmacb8dhnqg!nd_dft_wlteh_jpg_3",
      "type": "image",
      "altText": "夏天用平板反光严重？3款热门平板膜实测！"
    },
    {
      "url": "http://sns-web-i10.rednotecdn.com/202609240308/54c60bce11c722217a0757db067a685c/notes_pre_post/1040g3k831v3k8d90is1g5np45fe0bmac0hgs538!nd_dft_wlteh_jpg_3",
      "type": "image",
      "altText": "夏天用平板反光严重？3款热门平板膜实测！"
    },
    {
      "url": "http://sns-web-i10.rednotecdn.com/202609240308/3c910833531a496a3d667a87e69b47a6/notes_pre_post/1040g3k831v3k8d90is2g5np45fe0bmacfnfsnrg!nd_dft_wlteh_jpg_3",
      "type": "image",
      "altText": "夏天用平板反光严重？3款热门平板膜实测！"
    },
    {
      "url": "http://sns-web-i10.rednotecdn.com/202609240308/845bac78320985970fac9ddb197dd7c3/notes_pre_post/1040g3k831v3k8d90is205np45fe0bmaci5jbvn8!nd_dft_wlteh_jpg_3",
      "type": "image",
      "altText": "夏天用平板反光严重？3款热门平板膜实测！"
    },
    {
      "url": "http://sns-web-i10.rednotecdn.com/202609240308/182a98060692cb59194ae927fead3fe6/notes_pre_post/1040g3k831v3k8d90is305np45fe0bmacpbefgjg!nd_dft_wlteh_jpg_3",
      "type": "image",
      "altText": "夏天用平板反光严重？3款热门平板膜实测！"
    }
  ],
  "engagement": {
    "likes": {
      "value": 1638,
      "approximate": false
    },
    "comments": {
      "value": 67,
      "approximate": false
    },
    "collects": {
      "value": 678,
      "approximate": false
    },
    "shares": {
      "value": 33,
      "approximate": false
    }
  },
  "engagementAvailability": "available"
}
```

**Mention analysis**

One row shows a public note where one or more tracked brands or products matched. Public text signals can help review possible promotion or seeding, but they are not proof of a paid relationship.

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | string | Always `mention-analysis` for this shape. |
| `sourceUrl` | URL string | Public URL of the note with the tracked mention. |
| `title` | string | Visible title of the note with the tracked mention. |
| `contentType` | string | Note kind: `image`, `video`, `text`, `article`, or `other`. |
| `author` | object | Optional public author data. |
| `author.name` | string | Public display name of the author. |
| `author.profileUrl` | URL string | Optional public author profile URL. |
| `matchedEntities` | array of objects | Tracked brands or products matched in the note text. |
| `matchedEntities[].name` | string | Name of the tracked brand or product. |
| `matchedEntities[].type` | string | Entity kind: `brand` or `product`. |
| `matchedEntities[].matchedText` | string | Optional public note text that supports the match. |
| `engagement` | object | Optional normalized visible counters. At least one counter can be present. |
| `engagement.likes` | integer | Optional normalized like count. |
| `engagement.comments` | integer | Optional normalized comment count. |
| `engagement.collects` | integer | Optional normalized collect count. |
| `engagement.shares` | integer | Optional normalized share count. |
| `engagementAvailability` | string | Counter status: `available`, `partial`, or `unavailable`. |
| `promotionSignals` | array of objects | Optional public text signals for review. They do not prove sponsorship. |
| `promotionSignals[].kind` | string | Signal kind: `sponsorship-language`, `product-seeding-language`, `affiliate-language`, or `other`. |
| `promotionSignals[].evidenceText` | string | Public text that supports the signal. |

**Example mention row**

This is a genuine row from a current beta run.

```json
{
  "resultType": "mention-analysis",
  "sourceUrl": "https://www.rednote.com/en/discovery/item/69e346d3000000002302707e",
  "title": "夏天用平板反光严重？3款热门平板膜实测！",
  "contentType": "image",
  "author": {
    "name": "视隼膜力3C数码",
    "profileUrl": "https://www.rednote.com/user/profile/5f242bdc000000000101d94c"
  },
  "matchedEntities": [
    {
      "name": "平板",
      "type": "brand",
      "matchedText": "夏天用平板反光严重？3款热门平板膜实测！\n夏天是不是都被平"
    },
    {
      "name": "平板膜",
      "type": "product",
      "matchedText": "夏天用平板反光严重？3款热门平板膜实测！\n夏天是不是都被平板的反光整emo了！\n强"
    }
  ],
  "engagement": {
    "likes": 1638,
    "comments": 67,
    "collects": 678,
    "shares": 33
  },
  "engagementAvailability": "available",
  "promotionSignals": [
    {
      "kind": "sponsorship-language",
      "evidenceText": " This protector is made using magnetron sp"
    }
  ]
}
```

**Share of voice result**

One row compares a tracked brand or product within the submitted public-note sample. The percentage is the share of matched mentions in that sample, not a complete view of the platform.

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | string | Always `share-of-voice` for this shape. |
| `entity` | object | Tracked brand or product being compared. |
| `entity.name` | string | Name of the tracked entity. |
| `entity.type` | string | Entity kind: `brand` or `product`. |
| `mentionVolume` | integer | Number of matched mentions in the analyzed sample. |
| `mentionShare` | number | Percentage of matched mentions assigned to this entity. |
| `creatorCoverage` | integer | Number of distinct creators whose public notes matched this entity. |
| `engagement` | object | Optional visible engagement totals for matched notes. At least one total can be present. |
| `engagement.likes` | object | Optional normalized total likes. |
| `engagement.likes.value` | integer | Total visible likes for matched notes. |
| `engagement.likes.approximate` | boolean | Whether any source like count in the total was approximate. |
| `engagement.comments` | object | Optional normalized total comments. |
| `engagement.comments.value` | integer | Total visible comments for matched notes. |
| `engagement.comments.approximate` | boolean | Whether any source comment count in the total was approximate. |
| `engagementAvailability` | string | Counter status: `available`, `partial`, or `unavailable`. |
| `sourceLinks` | array of URL strings | Optional public note URLs that support the comparison. One URL can support more than one mention. |

**Example share-of-voice row**

This is a genuine row from a current beta run.

```json
{
  "resultType": "share-of-voice",
  "entity": {
    "name": "平板",
    "type": "brand"
  },
  "mentionVolume": 6,
  "mentionShare": 75,
  "creatorCoverage": 1,
  "engagement": {
    "likes": {
      "value": 1638,
      "approximate": false
    },
    "comments": {
      "value": 67,
      "approximate": false
    }
  },
  "engagementAvailability": "available",
  "sourceLinks": [
    "https://www.rednote.com/en/discovery/item/69e346d3000000002302707e"
  ]
}
```

**Shop product**

One row describes a public product listing, its vendor, price, options, stock, and other details exposed by the shop page.

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | string | Always `shop-product` for this shape. |
| `productUrl` | URL string | Public product URL and main link for the product. |
| `productId` | string | Optional public source product identifier. |
| `name` | string | Visible product name. |
| `vendor` | object | Optional public vendor identity and page. |
| `vendor.name` | string | Optional visible vendor name. |
| `vendor.url` | URL string | Optional public vendor or shop URL. |
| `pricing` | object | Current price and optional original price or discount. |
| `pricing.currency` | string | Currency shown by the listing. |
| `pricing.current` | number | Current product price in the listed currency. |
| `pricing.original` | number | Optional original product price. |
| `pricing.discountPercent` | number | Optional discount percentage shown or normalized from the listing. |
| `categories` | array of strings | Optional public product categories. |
| `images` | array of objects | Optional product image references. |
| `images[].url` | URL string | Direct public URL of a product image. |
| `images[].altText` | string | Optional image description from the listing. |
| `variants` | array of objects | Optional SKU or option variants. |
| `variants[].name` | string | Variant option name, such as color or size. |
| `variants[].value` | string | Selected value for the variant option. |
| `variants[].available` | boolean | Optional availability flag for the variant. |
| `stock` | integer | Optional visible stock quantity. |
| `sellerRating` | number | Optional public seller rating. |
| `catalogItemCount` | integer | Optional public count of items in the vendor catalog. |
| `sales` | integer | Optional public sales or popularity count. |
| `isCrossBorder` | boolean | Optional flag showing whether the listing identifies the product as cross-border. |
| `shippingOrigin` | string | Optional shipping origin shown by the listing. |
| `sourceListingUrl` | URL string | Optional public shop or catalog page where the product was found. |

**Example shop-product row**

This is a genuine row from a current beta run.

```json
{
  "resultType": "shop-product",
  "productUrl": "https://www.xiaohongshu.com/goods-detail/6a23c89149c677000186937c",
  "productId": "6a23c89149c677000186937c",
  "name": "【BECASE壳物语】ins风雨滴渐变雾面防摔适用18PROMAX创意手机壳 · 【磁吸款】克莱蓝雨滴 iPhone 17Pro Max",
  "vendor": {
    "name": "Becase壳物语的店",
    "url": "https://www.xiaohongshu.com/shop/6697c0d6012c70000105c67f"
  },
  "pricing": {
    "currency": "CNY",
    "current": 38.8,
    "original": 38.8,
    "discountPercent": 0
  },
  "categories": [
    "全部商品"
  ],
  "images": [
    {
      "url": "https://mall-i10.xhscdn.com/arkgoods/1040g3no321cv573i6s0g5ntjlccg8v032qe9v08?imageView2/2/w/1080/format/webp/q/80&ap=3&sc=STR_DTL",
      "altText": "【BECASE壳物语】ins风雨滴渐变雾面防摔适用18PROMAX创意手机壳 · 【磁吸款】克莱蓝雨滴 iPhone 17Pro Max"
    },
    {
      "url": "https://mall-i10.xhscdn.com/arkgoods/1040g0o0321cv574cn0005ntjlccg8v03ntpfpno?imageView2/2/w/1080/format/webp/q/80&ap=3&sc=STR_DTL",
      "altText": "【BECASE壳物语】ins风雨滴渐变雾面防摔适用18PROMAX创意手机壳 · 【磁吸款】克莱蓝雨滴 iPhone 17Pro Max"
    },
    {
      "url": "https://mall-i10.xhscdn.com/arkgoods/1040g0o03220ipsjd6u005ntjlccg8v03lmsms38?imageView2/2/w/1080/format/webp/q/80&ap=3&sc=STR_DTL",
      "altText": "【BECASE壳物语】ins风雨滴渐变雾面防摔适用18PROMAX创意手机壳 · 【磁吸款】克莱蓝雨滴 iPhone 17Pro Max"
    },
    {
      "url": "https://mall-i10.xhscdn.com/arkgoods/1040g0o03212k6q6k6u1g5ntjlccg8v03o5ovocg?imageView2/2/w/1080/format/webp/q/80&ap=3&sc=STR_DTL",
      "altText": "【BECASE壳物语】ins风雨滴渐变雾面防摔适用18PROMAX创意手机壳 · 【磁吸款】克莱蓝雨滴 iPhone 17Pro Max"
    },
    {
      "url": "https://mall-i10.xhscdn.com/arkgoods/1040g3no3212k6q8a6u0g5ntjlccg8v03p3gel38?imageView2/2/w/1080/format/webp/q/80&ap=3&sc=STR_DTL",
      "altText": "【BECASE壳物语】ins风雨滴渐变雾面防摔适用18PROMAX创意手机壳 · 【磁吸款】克莱蓝雨滴 iPhone 17Pro Max"
    },
    {
      "url": "https://mall-i10.xhscdn.com/arkgoods/1040g0o03212k6qlpms005ntjlccg8v03pe44o70?imageView2/2/w/1080/format/webp/q/80&ap=3&sc=STR_DTL",
      "altText": "【BECASE壳物语】ins风雨滴渐变雾面防摔适用18PROMAX创意手机壳 · 【磁吸款】克莱蓝雨滴 iPhone 17Pro Max"
    },
    {
      "url": "https://mall-i10.xhscdn.com/arkgoods/1040g3no3212k6qnn740g5ntjlccg8v03qfv4jio?imageView2/2/w/1080/format/webp/q/80&ap=3&sc=STR_DTL",
      "altText": "【BECASE壳物语】ins风雨滴渐变雾面防摔适用18PROMAX创意手机壳 · 【磁吸款】克莱蓝雨滴 iPhone 17Pro Max"
    },
    {
      "url": "https://mall-i10.xhscdn.com/arkgoods/1040g0o0321tql7eumu005ntjlccg8v03nlc0ego?imageView2/2/w/1080/format/webp/q/80&ap=3&sc=STR_DTL",
      "altText": "【BECASE壳物语】ins风雨滴渐变雾面防摔适用18PROMAX创意手机壳 · 【磁吸款】克莱蓝雨滴 iPhone 17Pro Max"
    },
    {
      "url": "https://mall-i10.xhscdn.com/arkgoods/1040g3no3212k6qrb740g5ntjlccg8v03o6qvod8?imageView2/2/w/1080/format/webp/q/80&ap=3&sc=STR_DTL",
      "altText": "【BECASE壳物语】ins风雨滴渐变雾面防摔适用18PROMAX创意手机壳 · 【磁吸款】克莱蓝雨滴 iPhone 17Pro Max"
    },
    {
      "url": "https://mall-i10.xhscdn.com/arkgoods/1040g0o03212k6r8l701g5ntjlccg8v038u4g83o?imageView2/2/w/1080/format/webp/q/80&ap=3&sc=STR_DTL",
      "altText": "【BECASE壳物语】ins风雨滴渐变雾面防摔适用18PROMAX创意手机壳 · 【磁吸款】克莱蓝雨滴 iPhone 17Pro Max"
    }
  ],
  "variants": [
    {
      "name": "商品名称",
      "value": "【BECASE壳物语】ins风雨滴渐变雾面防摔适用18PROMAX创意手机壳",
      "available": true
    },
    {
      "name": "风格",
      "value": "时尚潮流,ins风,简易",
      "available": true
    },
    {
      "name": "样式",
      "value": "卡通",
      "available": true
    }
  ],
  "stock": 1,
  "sellerRating": 4.5,
  "catalogItemCount": 1343,
  "sales": 1,
  "isCrossBorder": false,
  "shippingOrigin": "广东深圳",
  "sourceListingUrl": "https://www.xiaohongshu.com/shop/6697c0d6012c70000105c67f"
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. The note event is `$0.0054` for each saved public note-based output, and the shop event is `$0.00675` for each saved public shop product.

| Charged event | Buyer-facing meaning | Price |
| --- | --- | --- |
| `public-note-observed` | One saved public note observation, mention analysis row, or share-of-voice row. | `$0.0054` |
| `shop-product-observed` | One saved public shop product row. | `$0.00675` |

The event descriptions cover saved outputs. This page does not promise a charge for empty, diagnostic, or setup work. Apify platform usage may also appear in the run cost.

#### 🔌 Integrations

Open the dataset in Apify, export the rows, or read them through the Apify dataset API URL exposed in the output. For a short walkthrough, use this video:

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Can I use a private or account-restricted page?

No. The Actor is for publicly reachable Xiaohongshu and RedNote discovery, note, shop, and vendor pages. Private or account-restricted pages are outside its scope.

##### What happens when a source page is unavailable?

The page may produce no saved row. The Actor keeps successful public observations and does not create a placeholder row for a page it cannot read.

##### Do note rows include source evidence?

Yes. Note-based rows include public note URLs, and they can include author profiles, media links, visible engagement, matched text, and comparison source links when the source exposes them.

##### Can I compare brands or products?

Yes. Use `mention-analysis` to find matching notes, or `share-of-voice` to compare mention volume, mention share, creator coverage, and visible engagement within the public-note sample you submit.

##### How do repeat checks work?

When prior observations are available, the threshold fields can flag changes in note engagement, mention volume, or product values. A repeat check is an observation of the submitted public sample, not a complete historical archive.

##### Can one run combine separate search scopes?

No. Use separate runs for separate scopes. Each run accepts one selected result type and its matching target or sample fields.

##### Does a promotion signal prove sponsorship?

No. A promotion signal is public text that may help you review a possible collaboration or seeding lead. It is not legal or factual proof of a paid relationship.

##### Are full comments included?

No. Note rows can include visible comment counters, but full comment-thread extraction is outside this Actor.

##### What happens when `maxItems` is empty?

The Actor returns all available results until the source is exhausted. Set a positive value when you want an optional result limit.

##### Why can a product field be missing?

The row keeps the product fields exposed by the public listing. Optional vendor, catalog, image, variant, stock, rating, sales, and shipping fields can be absent when the source does not show them.

### 📝 Changelog

**v0.0** (24-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~xiaohongshu-monitor/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [RedNote Note Detail Scraper](https://apify.com/maximedupre/rednote-note-detail-scraper) - Extract full public note details after this Actor returns source URLs.
- [RedNote User Posts Scraper](https://apify.com/maximedupre/rednote-user-posts-scraper) - Collect public post cards from a profile when you need creator-level context around monitored notes.
- [RedNote Profile Scraper](https://apify.com/maximedupre/rednote-profile-scraper) - Add public profile identity and audience fields to creator research.
- [Xiaohongshu Brand Mentions, UGC & Seeding Monitor](https://apify.com/scrupulous_buckler/xiaohongshu-brand-mentions-ugc-monitor) - Review public mention, UGC, and possible seeding signals when you need a broader brand-monitoring view.
- [RedNote Shop Scraper — China Ecommerce Products & Prices](https://apify.com/zhorex/rednote-shop-scraper) - Explore broader public RedNote shop catalogs when you need product and price discovery.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `resultType` (type: `string`):

Choose the kind of result to collect in this run.

## `noteTargets` (type: `array`):

For Note observations, add one or more public Xiaohongshu/RedNote note URLs. Use separate runs when you need separate scopes.

## `breakoutThreshold` (type: `number`):

For Note observations, flag a post as a breakout when its observed engagement is at least this percentage above the available baseline.

## `shopTargets` (type: `array`):

For Shop products, add one or more publicly reachable Xiaohongshu/RedNote shop or vendor URLs. The run returns product identity, links, prices, discounts, currency, and exposed vendor context.

## `minPrice` (type: `number`):

For Shop products, keep products at or above this price. Leave empty to set no minimum.

## `maxPrice` (type: `number`):

For Shop products, keep products at or below this price. Leave empty to set no maximum.

## `productOrder` (type: `string`):

For Shop products, choose how returned products are ordered.

## `sampleNoteTargets` (type: `array`):

For Mention analysis and Share of voice, add public Xiaohongshu/RedNote note URLs to define the sample. Separate runs are needed for separate scopes.

## `trackedEntities` (type: `array`):

For Mention analysis and Share of voice, list the brands or products to compare. Each item needs a name and an entity type.

## `mentionSpikeThreshold` (type: `number`):

For Mention analysis and Share of voice, alert when mention volume changes by at least this percentage between observations.

## `anomalyThreshold` (type: `number`):

Alert when monitored engagement, mention, or product values change by at least this percentage outside their recent observed range.

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

Optional limit for results in this run. Leave empty to return all available results until the source is exhausted.

## Actor input object example

```json
{
  "resultType": "note-observations",
  "noteTargets": [
    "https://www.rednote.com/en/discovery/item/69e346d3000000002302707e"
  ],
  "productOrder": "relevance",
  "maxItems": 25
}
```

# Actor output Schema

## `dataset` (type: `string`):

Open the note, mention, share-of-voice, or shop-product rows saved by this run.

# 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 = {
    "resultType": "note-observations",
    "noteTargets": [
        "https://www.rednote.com/en/discovery/item/69e346d3000000002302707e"
    ],
    "productOrder": "relevance",
    "maxItems": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/xiaohongshu-monitor").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 = {
    "resultType": "note-observations",
    "noteTargets": ["https://www.rednote.com/en/discovery/item/69e346d3000000002302707e"],
    "productOrder": "relevance",
    "maxItems": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/xiaohongshu-monitor").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 '{
  "resultType": "note-observations",
  "noteTargets": [
    "https://www.rednote.com/en/discovery/item/69e346d3000000002302707e"
  ],
  "productOrder": "relevance",
  "maxItems": 25
}' |
apify call maximedupre/xiaohongshu-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/xiaohongshu-monitor"
        }
    }
}
```

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/9Mvg6QSxtYLokZzxT/builds/cH0B5GieeOa5BShG9/openapi.json
