RedNote Xiaohongshu Scraper — Notes & Profiles
Pricing
from $1.00 / 1,000 feed results
RedNote Xiaohongshu Scraper — Notes & Profiles
Scrape public RedNote (Xiaohongshu) Explore feeds, note details, creator profiles, engagement, images, video metadata, and monitoring-ready change records—without supplying an account or cookies.
Pricing
from $1.00 / 1,000 feed results
Rating
0.0
(0)
Developer
ScrapingMonkey
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
RedNote (Xiaohongshu) Scraper - Explore Feeds, Note Details and Profiles
Collect public RedNote Explore feeds, note content, creator profiles, media, topics, and visible engagement in one structured Apify dataset.
- Browse public Explore channels and preserve each note's discovery rank and source
- Enrich feed cards with available note titles, descriptions, publish dates, locations, topics, mentions, and tags
- Extract public image galleries, covers, video metadata, and visible engagement counts
- Collect creator names, Red IDs, bios, avatars, verification, follower counts, and public profile notes
- Process multiple channels, note URLs, and profile URLs in one run
- Monitor Explore feeds and save only new or changed public records on scheduled runs
- No RedNote account, cookies, browser, or user-supplied proxy is required; requests use the built-in Apify Residential Proxy
- Export results to JSON, CSV, Excel, XML, RSS, or access them through the Apify API
What can you do with this Actor?
| Mode / action | Input | Output | Best for |
|---|---|---|---|
explore | One or more public Explore channel IDs | Ranked feedItem rows, with optional note and profile enrichment | Content discovery, category tracking, and engagement research |
noteDetails | Full public note URLs with their current public xsec_token | Complete normalized note rows | Content, media, topic, and engagement analysis |
profiles | Full public profile URLs with their current public xsec_token | Normalized profile rows and the public initial note-card batch | Creator research and public profile monitoring |
auto | Mixed public note and profile URLs in startUrls | note or profile rows selected from each URL | Batch processing mixed known targets |
monitor | Explore channel IDs plus a stable monitorKey | Only new or new-and-changed feedItem rows | Scheduled discovery and change detection |
Choose one mode per run. A single run can process multiple targets for that mode; explore can also enrich discovered feed items with note details and profiles.
Quick start
- Open the Actor and click Try for free.
- Keep Explore selected or choose another workflow.
- Select a public channel or provide note/profile URLs and set the result limit.
- Click Start.
- Preview the single Results table or download it in your preferred format.
The default input collects a small public homefeed_recommend Explore dataset and is ready to run.
Input examples
Explore and enrich notes
{"mode": "explore","channelIds": ["homefeed_recommend"],"maxItems": 20,"includeNoteDetails": true,"country": "US"}
Public note details
{"mode": "noteDetails","noteUrls": ["https://www.xiaohongshu.com/explore/NOTE_ID?xsec_token=PUBLIC_TOKEN&xsec_source=pc_feed"],"country": "US"}
Public profiles
{"mode": "profiles","profileUrls": ["https://www.xiaohongshu.com/user/profile/USER_ID?xsec_token=PUBLIC_TOKEN&xsec_source=pc_feed"],"country": "US"}
Auto-detect mixed public URLs
{"mode": "auto","startUrls": ["https://www.xiaohongshu.com/explore/NOTE_ID?xsec_token=PUBLIC_TOKEN&xsec_source=pc_feed","https://www.xiaohongshu.com/user/profile/USER_ID?xsec_token=PUBLIC_TOKEN&xsec_source=pc_feed"],"country": "US"}
Monitor Explore for new or changed records
{"mode": "monitor","channelIds": ["homefeed_recommend"],"maxItems": 50,"monitorMode": "newAndChanged","monitorKey": "rednote-homefeed-daily","country": "US"}
maxItems limits retained rows for each result family. One dataset row represents one feed item, note, or profile and always uses the same 48-field top-level contract.
Complete output examples
Every result row contains exactly 48 top-level fields. The same complete key set makes mixed result types predictable in JSON exports and keeps every field visible in the single Results view.
Complete feedItem row — 48 top-level fields
{"recordType": "feedItem","sourceMode": "explore","sourceTarget": "example-target","sourceUrl": "https://example.com/public-result","finalUrl": "https://example.com/public-result","channelId": "example-id","channelName": null,"rank": 0,"noteId": "example-id","userId": "example-id","noteUrl": "https://example.com/public-result","profileUrl": "https://example.com/public-result","title": "Example public record","description": "Example public content","noteType": null,"publishedAt": "2026-08-13T12:00:00Z","updatedAt": "2026-08-13T12:00:00Z","ipLocation": null,"nickname": "Example public record","redId": "example-id","avatarUrl": "https://cdn.example.com/image.jpg","bio": null,"gender": null,"verified": false,"followsCount": 0,"followersCount": 0,"engagementCount": 0,"likedCount": 0,"commentCount": 0,"collectedCount": 0,"shareCount": 0,"niceCount": 0,"topics": [],"mentions": [],"images": [],"cover": {},"video": {},"tags": [],"interactions": [],"profile": {},"profileNotes": [],"xsecToken": null,"isPartial": false,"monitorStatus": null,"changedFields": [],"previousCapturedAt": "2026-08-13T12:00:00Z","capturedAt": "2026-08-13T12:00:00Z","raw": {}}
Complete note row — 48 top-level fields
{"recordType": "note","sourceMode": "noteDetails","sourceTarget": "example-target","sourceUrl": "https://example.com/public-result","finalUrl": "https://example.com/public-result","channelId": "example-id","channelName": null,"rank": 0,"noteId": "example-id","userId": "example-id","noteUrl": "https://example.com/public-result","profileUrl": "https://example.com/public-result","title": "Example public record","description": "Example public content","noteType": null,"publishedAt": "2026-08-13T12:00:00Z","updatedAt": "2026-08-13T12:00:00Z","ipLocation": null,"nickname": "Example public record","redId": "example-id","avatarUrl": "https://cdn.example.com/image.jpg","bio": null,"gender": null,"verified": false,"followsCount": 0,"followersCount": 0,"engagementCount": 0,"likedCount": 0,"commentCount": 0,"collectedCount": 0,"shareCount": 0,"niceCount": 0,"topics": [],"mentions": [],"images": [],"cover": {},"video": {},"tags": [],"interactions": [],"profile": {},"profileNotes": [],"xsecToken": null,"isPartial": false,"monitorStatus": null,"changedFields": [],"previousCapturedAt": "2026-08-13T12:00:00Z","capturedAt": "2026-08-13T12:00:00Z","raw": {}}
Complete profile row — 48 top-level fields
{"recordType": "profile","sourceMode": "profiles","sourceTarget": "example-target","sourceUrl": "https://example.com/public-result","finalUrl": "https://example.com/public-result","channelId": "example-id","channelName": null,"rank": 0,"noteId": "example-id","userId": "example-id","noteUrl": "https://example.com/public-result","profileUrl": "https://example.com/public-result","title": "Example public record","description": "Example public content","noteType": null,"publishedAt": "2026-08-13T12:00:00Z","updatedAt": "2026-08-13T12:00:00Z","ipLocation": null,"nickname": "Example public record","redId": "example-id","avatarUrl": "https://cdn.example.com/image.jpg","bio": null,"gender": null,"verified": false,"followsCount": 0,"followersCount": 0,"engagementCount": 0,"likedCount": 0,"commentCount": 0,"collectedCount": 0,"shareCount": 0,"niceCount": 0,"topics": [],"mentions": [],"images": [],"cover": {},"video": {},"tags": [],"interactions": [],"profile": {},"profileNotes": [],"xsecToken": null,"isPartial": false,"monitorStatus": null,"changedFields": [],"previousCapturedAt": "2026-08-13T12:00:00Z","capturedAt": "2026-08-13T12:00:00Z","raw": {}}
What data can you extract?
| Category | Fields |
|---|---|
| Source and discovery | recordType, sourceMode, sourceTarget, sourceUrl, finalUrl, channelId, channelName, rank, capturedAt |
| Stable identities and links | noteId, userId, noteUrl, profileUrl, xsecToken |
| Note content and media | title, description, noteType, publishedAt, updatedAt, ipLocation, topics, mentions, tags, images, cover, video |
| Creator data | nickname, redId, avatarUrl, bio, gender, verified, followsCount, followersCount, profile, profileNotes |
| Engagement | engagementCount, likedCount, commentCount, collectedCount, shareCount, niceCount, interactions |
| Monitoring and diagnostics | isPartial, monitorStatus, changedFields, previousCapturedAt, raw |
Nested fields such as cover, video, interactions, profile, profileNotes, and optional raw retain RedNote's public source structure after sensitive cookie, authorization, token, and signature keys are removed. Their nested keys are source-controlled and can change; the 48 top-level keys above are fixed by the Actor.
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
mode | string | No | "explore" | auto, explore, noteDetails, profiles, or monitor. One mode runs at a time. |
channelIds | string[] | In explore / monitor | ["homefeed_recommend"] | Public RedNote Explore channel identifiers. |
noteUrls | string[] | In noteDetails | [] | Full public note URLs, including their current xsec_token when required by the page. |
profileUrls | string[] | In profiles | [] | Full public profile URLs, including their current xsec_token when required by the page. |
startUrls | string[] | In auto | [] | Mixed public note or profile URLs. |
maxItems | integer | No | 50 | Maximum retained rows per result family, from 1 to 5,000. |
includeNoteDetails | boolean | No | true | Enrich accessible Explore cards through an additional public note request. |
includeProfiles | boolean | No | false | Enrich accessible public author profiles discovered in Explore. |
language | string | No | "zh-CN" | Accept-Language locale, for example zh-CN or en-US. |
maxConcurrency | integer | No | 2 | Concurrent targets or enrichments, from 1 to 8. |
country | string | No | "US" | Two-letter ISO country used for the internal residential proxy region. |
includeRaw | boolean | No | false | Include the redacted public source object; increases dataset size. |
monitorMode | string | No | "off" | off, onlyNew, or newAndChanged. |
monitorKey | string | With monitoring | "default" | Stable comparison-state namespace for recurring runs. |
maxSessionRotations | integer | No | 3 | Fresh residential sessions tried after blocks, from 1 to 6. |
requestTimeoutSecs | integer | No | 45 | Per-request timeout in seconds, from 15 to 120. |
Pay-per-event result types
| Event | Charged when |
|---|---|
feed-result | One feedItem row is accepted by the Dataset. |
note-result | One note row is accepted by the Dataset. |
profile-result | One profile row is accepted by the Dataset. |
The Actor does not emit a paid error event. Failed targets are counted by category in RUN_SUMMARY; successful targets continue. Actual event prices are shown on the Actor's Pricing tab.
Use cases
Discover content and creators
Turn public Explore feeds into ranked datasets of notes, authors, topics, media, and visible engagement for content research and creator discovery.
Monitor public trends and accounts
Run the Actor on an Apify schedule with a stable monitorKey to retain only new or meaningfully changed public records, then notify another system through a webhook.
Build research and BI pipelines
Export normalized rows to Google Sheets, Airtable, Make, Zapier, n8n, Airbyte, a data warehouse, or an API client for filtering and analysis.
Performance and cost
Direct HTTP generally uses substantially less memory and bandwidth than launching a browser, but source response size, retries, optional enrichment, raw objects, and pagination determine actual cost. Start with a small limit, inspect the Dataset and RUN_SUMMARY, then scale. Lower concurrency is usually more reliable on stricter public sites.
API usage
Replace YOUR_USERNAME with the publishing Apify username after publication:
curl -X POST \"https://api.apify.com/v2/acts/YOUR_USERNAME~rednote-xiaohongshu-scraper/runs?token=APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"mode": "explore","channelIds": ["homefeed_recommend"],"maxItems": 20,"includeNoteDetails": true,"country": "US"}'
The request body is the same JSON used in Apify Console. Read results from the run's default Dataset or use the output link that opens view=overview.
Best for / not for
Best for: public Explore discovery, known-note enrichment, creator research, recurring feed monitoring, and HTTP-efficient data pipelines.
Not for: keyword search, comments, complete creator histories, shop data, private or login-only content, or URLs that require a token the public page no longer accepts.
Limits and good to know
Public SSR pages expose a bounded initial feed. Keyword search, comments, signed pagination APIs, login-only content, and private content are intentionally outside this HTTP-only Actor.
A missing public value is returned as null or an empty array. One failed input does not create a frightening error row in Results. If every input fails, the run fails after writing diagnostic counts to RUN_SUMMARY.
Frequently asked questions
What input should I provide?
Use channelIds for Explore, full public URLs with their current public xsec_token for notes and profiles, or mixed URLs in startUrls for auto.
How many results can I extract?
maxItems accepts 1-5,000. The actual number can be lower because public SSR pages expose a bounded feed and some targets may be unavailable or blocked by the source.
Can I process multiple inputs?
Yes. Arrays accept multiple channels or URLs. The Actor deduplicates stable note and profile identities before saving rows.
Can I schedule recurring runs?
Yes. Use Apify schedules with mode: "monitor", a stable monitorKey, and monitorMode: "onlyNew" or "newAndChanged"; use webhooks for downstream notifications.
Does this Actor open a browser?
No. Runtime extraction uses direct HTTP only and contains no Playwright, Selenium, Chromium, or browser installation.
Do I need an account or cookies?
No. The supported modes use public pages and anonymous endpoints. Cookies or authorization values from research captures are never embedded in the release.
Do I need to configure a proxy?
No. On Apify, the Actor creates a Residential Proxy configuration internally and does not expose proxy settings in Input. Local developers may privately point the documented test-only environment variable at a proxy file; that variable is not an Actor input and is ignored on the platform.
Why are some fields empty?
The single Results view covers every result type. Fields that do not apply to a row remain empty, while the complete key set is preserved in JSON.
Responsible use
Collect only public RedNote data you are permitted to process. Respect applicable law, privacy rights, platform terms, rate limits, and intellectual-property rights. This Actor is not affiliated with or endorsed by RedNote.
Support
For a reproducible issue, include the Apify run ID, mode, a non-sensitive public target, expected result, and actual result. Never send account credentials, cookies, access tokens, proxy passwords, or private content.
Local development
For local read-only smoke tests only, REDNOTE_TEST_PROXY_FILE may point to a private file containing one login:password@host:port proxy per line. The file is never read on Apify and must not be committed.