RedNote Xiaohongshu Scraper — Notes & Profiles avatar

RedNote Xiaohongshu Scraper — Notes & Profiles

Pricing

from $1.00 / 1,000 feed results

Go to Apify Store
RedNote Xiaohongshu Scraper — Notes & Profiles

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

ScrapingMonkey

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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 / actionInputOutputBest for
exploreOne or more public Explore channel IDsRanked feedItem rows, with optional note and profile enrichmentContent discovery, category tracking, and engagement research
noteDetailsFull public note URLs with their current public xsec_tokenComplete normalized note rowsContent, media, topic, and engagement analysis
profilesFull public profile URLs with their current public xsec_tokenNormalized profile rows and the public initial note-card batchCreator research and public profile monitoring
autoMixed public note and profile URLs in startUrlsnote or profile rows selected from each URLBatch processing mixed known targets
monitorExplore channel IDs plus a stable monitorKeyOnly new or new-and-changed feedItem rowsScheduled 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

  1. Open the Actor and click Try for free.
  2. Keep Explore selected or choose another workflow.
  3. Select a public channel or provide note/profile URLs and set the result limit.
  4. Click Start.
  5. 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?

CategoryFields
Source and discoveryrecordType, sourceMode, sourceTarget, sourceUrl, finalUrl, channelId, channelName, rank, capturedAt
Stable identities and linksnoteId, userId, noteUrl, profileUrl, xsecToken
Note content and mediatitle, description, noteType, publishedAt, updatedAt, ipLocation, topics, mentions, tags, images, cover, video
Creator datanickname, redId, avatarUrl, bio, gender, verified, followsCount, followersCount, profile, profileNotes
EngagementengagementCount, likedCount, commentCount, collectedCount, shareCount, niceCount, interactions
Monitoring and diagnosticsisPartial, 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

ParameterTypeRequiredDefaultDescription
modestringNo"explore"auto, explore, noteDetails, profiles, or monitor. One mode runs at a time.
channelIdsstring[]In explore / monitor["homefeed_recommend"]Public RedNote Explore channel identifiers.
noteUrlsstring[]In noteDetails[]Full public note URLs, including their current xsec_token when required by the page.
profileUrlsstring[]In profiles[]Full public profile URLs, including their current xsec_token when required by the page.
startUrlsstring[]In auto[]Mixed public note or profile URLs.
maxItemsintegerNo50Maximum retained rows per result family, from 1 to 5,000.
includeNoteDetailsbooleanNotrueEnrich accessible Explore cards through an additional public note request.
includeProfilesbooleanNofalseEnrich accessible public author profiles discovered in Explore.
languagestringNo"zh-CN"Accept-Language locale, for example zh-CN or en-US.
maxConcurrencyintegerNo2Concurrent targets or enrichments, from 1 to 8.
countrystringNo"US"Two-letter ISO country used for the internal residential proxy region.
includeRawbooleanNofalseInclude the redacted public source object; increases dataset size.
monitorModestringNo"off"off, onlyNew, or newAndChanged.
monitorKeystringWith monitoring"default"Stable comparison-state namespace for recurring runs.
maxSessionRotationsintegerNo3Fresh residential sessions tried after blocks, from 1 to 6.
requestTimeoutSecsintegerNo45Per-request timeout in seconds, from 15 to 120.

Pay-per-event result types

EventCharged when
feed-resultOne feedItem row is accepted by the Dataset.
note-resultOne note row is accepted by the Dataset.
profile-resultOne 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.

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.