# Changelog of RedNote Xiaohongshu 小红书 Scraper API — Notes & Transcripts (`pro100chok/rednote-xiaohongshu-scraper`) Actor

- **URL**: https://apify.com/pro100chok/rednote-xiaohongshu-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/pro100chok/rednote-xiaohongshu-scraper.md

## Changelog

### 1.2.12 (2026-09-30)

- **Fixed: the "Video" discovery category returned nothing.** RedNote still
  lists 视频 as a channel on its site, but it now answers that channel with an
  empty page for every anonymous session — measured on 2026-09-30, every page
  and every request variant came back with zero notes, so a run on the Video
  category finished with no data. The category now reads video notes out of the
  recommended feed whenever its own channel is empty: a 40-note Video run
  returned 40 unique video notes in 33 s. Every other category is unchanged and
  still reads its own channel.

### 1.2.11 (2026-09-19)

- **Fixed: every run was coming back with a single error row.** Around 17
  September RedNote started reading the `sec-ch-ua` client hints that Chrome
  sends on every request, and checking them against the TLS fingerprint. The
  Actor sent neither, so RedNote stopped answering it: note and profile pages
  came back as a 47 KB empty shell instead of the 130 KB page carrying the data,
  and the JSON endpoints — creator profiles, the discovery feed, comment threads
  — answered `461`. A run still finished "succeeded", but with one unbilled row
  saying the profile was unavailable, which is why live profiles looked deleted.
  Requests now carry the full client-hint set, every request of a run
  impersonates the exact Chrome build it claims in its headers, and the jar
  carries the two cookies the web client always sends. Re-measured end to end on
  residential proxies: discovery feed 10/10 notes, creator profiles 2/2, comment
  threads, note details with comments, and creator notes all return complete
  rows again.

### 1.2.6 (2026-09-17)

- **Runs survive RedNote's tighter risk control.** RedNote now spends its block
  per exit IP and spends it fast: an address that answers one request is refused
  on the next, a brand-new guest session from the same address does not help, and
  neither does waiting. Measured on 2026-09-17, only about one exit in two dozen
  was open at all — so the old budget of five retries, most of it spent sleeping
  between attempts, could not get a feed or a note page through. Blocks now get
  their own, much larger budget spent on rotating the address rather than on
  pauses, while connection errors keep their old backoff. Requests that are
  blocked for a different reason — an endpoint that needs a signed-in account,
  page two of a listing on an anonymous session — still fail fast instead of
  burning rotations on a wall no address gets through.

### 1.2.5 (2026-09-07)

- **Empty runs are gone.** The discovery feed needs an anonymous guest session, and RedNote answers `no login info` — nothing at all — to a run whose session could not be minted. That handshake used to be a single attempt with a 60-second budget: when a proxy exit IP stalled on it the run either burned half its time waiting or finished with zero rows. It now retries on fresh IPs with a short budget, keeps a working session instead of throwing it away on rotation, and re-mints automatically the moment RedNote drops one mid-run. A 10-note feed benchmark that returned **0 rows in 34 s** now returns **10 rows in 9 s**.
- **The right mode, even when the wrong one is selected.** Pasting a profile URL while the selector still said *Note details* used to produce an empty dataset; leaving the selector on its *Discovery feed* default produced random trending notes instead of the creator you asked for. The run now reads which input field you actually filled in and switches to the matching mode, saying so in the log. The three URL/keyword fields also no longer come pre-filled, so nothing you did not type can steer a run.
- **A run never finishes with an empty dataset and no explanation.** When there is genuinely nothing to scrape, the reason is written to the run's status message and pushed as a free, unbilled row.
- **Note URLs are fetched in parallel.** A list of note links used to be worked through one at a time. Four notes now take about as long as one; a 100-URL list is minutes faster.
- **Comments and creators run in parallel too**, and a slow item no longer holds back the ones queued behind it — every mode streams results from a worker pool instead of waiting for a whole batch to finish.
- **No request can stall a run any more.** Each request class has its own connect/read budget instead of a flat 60 seconds, so a dead exit IP is swapped in seconds rather than waited out.
- **Default concurrency raised from 5 to 10**, measured on the platform: 100 full-detail notes in **37 s instead of 67 s**, and a sustained 200-note run came back 200/200 with no throttled pages. A run waits on RedNote's page latency, not on its own pacing.
- Creator listings no longer burn five retries and five proxy rotations on the `461` RedNote returns for a profile link with no access token — a wall no fresh exit IP gets through. That case is ~15 s faster and says what to do about it.

### 1.2 (2026-08-24)

- **Video transcripts and subtitles.** Every video note now reports its RedNote subtitle tracks — `videoSubtitles` with a downloadable `.srt` URL per language (typically the original Chinese plus an English translation), `videoSubtitleLanguages`, `videoLanguages` and `videoHasHumanVoice`. Switch on the new **Also download video transcripts** input and the spoken text itself arrives in the row as `transcript`, timings stripped, with `transcriptLanguage` and `transcriptCharCount`.
- **Image links that outlive the run.** RedNote's own image URLs are signed and expire; every note now also carries id-based originals that do not — `imageUrlsOriginal`, `coverUrlOriginal`, `urlOriginal` on each image object, plus `videoThumbnailUrl` and `videoFirstFrameUrl` for the video stills that used to be file ids only.
- **Deeper video metadata.** Added the source resolution before transcoding (`videoSourceWidth` / `videoSourceHeight`), the audio track of the selected stream (`videoAudioCodec`, `videoAudioBitrate`, `videoAudioChannels`), `videoFormat`, `videoDurationMs`, `videoDrmType`, `videoStreamTypes` and a `videoQualityLadder` summary of every rendition.
- **Richer creator profiles.** New `profession` and `location` pulled out of the profile chips, `tagDetails` with each chip's type and icon, RedNote's own localised counters (`followersI18nText`, `followingI18nText`, `likesAndCollectsI18nText`, e.g. `10K+`), public collection counts, and `gender` now filled in from the profile's gender chip when RedNote withholds the numeric code.
- **Comment threads that make sense on their own.** Added `isNoteAuthor` (the creator answering inside their own thread), `authorIsAiAgent`, `hasMoreReplies`, `repliedToCommentId`, `repliedToUserUrl` and `invalid`.
- Notes now report `pinned` when the creator pinned them to the top of their profile, plus `hashtagCount`, `topicIds`, `atUserCount`, `livePhotoCount`, `coverUrlPreview`, and `atUsers` entries now carry the mentioned creator's profile URL and access token.
- A discovery-feed category that RedNote serves no notes for is now called out in the log instead of finishing silently.
- Removed `trackId` and `coverFileId` from the documented fields: RedNote blanks both for every session this actor uses, so they were never actually returned. Documented `noteIdHiddenByRedNote`, which the actor has always set on creator listings whose note ids RedNote hides.

### 1.1 (2026-08-13)

- **Higher yield on large runs.** RedNote starts serving payload-less note pages once a single exit IP has pulled a few dozen of them. The scraper now rotates its session before that happens and treats an empty page as a retryable block instead of accepting it, lifting full-detail coverage from 68 % to 93 % on a 100-note benchmark.
- **Results arrive as soon as they are parsed.** Request pacing now gates when a request starts rather than holding a finished record back, so rows reach the dataset seconds earlier and the first row shows up immediately.
- **Error rows are free.** A row that only explains why an input could not be scraped is pushed for visibility but never billed.
- Creator listings whose note ids RedNote hides from anonymous sessions are kept and flagged `noteIdHiddenByRedNote` instead of being dropped.
- Fixed keyword modes failing on non-Latin keywords, and progress is now logged from the first record.

### 1.0 (2026-08-13)

- Initial release. Seven scrape modes for RedNote / Xiaohongshu, six of them fully anonymous — no account, no cookie, no browser.
- **Discovery feed**: trending notes from 12 RedNote category channels with unlimited cursor pagination.
- **Note details**: full note payload — caption, all images (live-photo aware), every video rendition with codec/resolution/bitrate/size, hashtags and topic IDs, region, mentions, exact engagement counters and edit timestamps.
- **Comments**: comment threads with replies as separate linked rows, commenter profile, likes and region.
- **Creator profiles**: followers, following, likes+saves, RedNote handle (小红书号), bio, gender, region and profile tags.
- **Creator notes**: a creator's profile plus their recent posts.
- **Keyword research**: RedNote's own search suggestions, optionally expanded recursively into a long-tail keyword map.
- **Keyword search** (notes and creators) with sorting plus post-type and date filters, unlocked by the optional cookie input.
- Abbreviated counters (`10万+`, `1千+`) are returned both as the original display string and as a real integer, with `engagementTotal` pre-computed.
- Results stream into the dataset the moment each record is ready, so aborted runs keep everything collected so far.
- Share links (`xhslink.com`) are resolved automatically; access tokens are returned with every record for re-use in later runs.
