Xiaohongshu Scraper avatar

Xiaohongshu Scraper

Pricing

from $6.00 / 1,000 notes

Go to Apify Store
Xiaohongshu Scraper

Xiaohongshu Scraper

Paste Xiaohongshu note links, or leave them empty to read the public feed, and get rows with title, body text, author, publish date, hashtags, image count and all four engagement counters: likes, comments, collects and shares. No account, no keyword search.

Pricing

from $6.00 / 1,000 notes

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Xiaohongshu Scraper (RedNote)

Turn Xiaohongshu note links into a clean table. Every row carries the note's title and body text, who published it, when, which topics it is filed under, how many images it holds, and all four engagement counters that Xiaohongshu publishes: likes, comments, collects and shares.

Paste links and you get those notes. Paste nothing and the Actor reads the public recommendation feed instead and returns what is being pushed to a logged-out visitor right now, across twelve categories from fashion to fitness.

Read this before you run it

Xiaohongshu note links only work complete. Every link you can copy out of the app or out of the browser address bar carries an xsec_token parameter, and that parameter is what makes the note readable. It belongs to that one note. Strip it, shorten the link by hand, or type a bare note id, and the server answers with a page that has no note in it.

So: copy the link, paste the link. Do not tidy it up.

That behaviour is also why this Actor is careful about what it reports. The page you get back for an incomplete link is a normal-looking one, roughly the size of a real note page, and it even carries a success flag. It simply has nothing inside it. An Actor that trusted the flag would hand you a row of empty columns and call it a note. This one checks that the note you asked for is actually present, and if it is not, the note is listed in errors with the reason instead of being shipped as a blank row.

What you cannot do here, and why we say so

Keyword search is not available. Xiaohongshu requires an account before it will return search results, and this Actor does not use accounts. Typing a keyword into a logged-out session returns a page with zero results in it, not a short list. There is no partial version of this we could sell you.

A creator's full back catalogue is not available either, for the same reason. A profile page renders the nickname and the avatar and no notes.

Comments are not returned. A note page carries its comment count, which you do get, but the comment bodies load separately behind the same account requirement.

Competing Actors in this category sell keyword search, profile crawls and comment extraction as their headline features. If those are what you need, this is not the tool, and we would rather tell you that on the listing page than after you have paid for a run. What this Actor does, it does without an account and without asking you for one.

The two ways to run it

Note links. Put one link per line in Note links. This is the mode with no ceiling: notes are read quickly and in parallel, and a few hundred in a run is comfortable. This is the right mode for monitoring a brief, a campaign, a creator's posts you already have links to, or a list handed to you by someone else.

The recommendation feed. Leave Note links empty and pick a Feed category. The Actor reads the public feed and returns what it finds. Each load returns roughly thirty notes and they do not repeat between loads, so the run walks the feed until it has what you asked for.

The feed is metered by Xiaohongshu. After a run of loads it starts answering with a page that has no cards on it, and it stays that way for a good while: long enough that a feed run scheduled hourly is realistic and one scheduled every five minutes is not. The Actor stops the moment that happens, writes feed_exhausted into errors, sets feedExhausted in the run summary, and returns what it already had rather than looping. In practice a feed run brings back somewhere around a hundred and fifty notes before it has to wait. Ask for two thousand and you will get the first batch and an honest note saying why the rest did not come.

The twelve categories are Recommended, Fashion, Food, Beauty, Film and TV, Career, Relationships, Home, Gaming, Travel, Fitness and Video.

What a row looks like

  • note_id, url, type — normal for a photo note, video for a video
  • title, description — the headline and the body text as published
  • author_name, author_id, author_url, author_avatar
  • published_at, published_timestamp, updated_at
  • likes, comments, collects, shares, engagement_total
  • likes_text — the like count exactly as the site displays it
  • hashtags, topic_ids — the topics the note is filed under
  • mentioned_users — accounts tagged in the body
  • image_count, has_live_photo, and images when you ask for them
  • share_disabled — whether the author turned sharing off
  • source, feed_category, position — where in the run the row came from

Engagement counts come in two forms

Xiaohongshu abbreviates above ten thousand: a note with 18,000 likes displays as 1.8万. Flattening that to 1.8 would be a disaster and dropping it would lose your biggest notes, so every row carries both. likes_text is the string the site shows. likes is the number, expanded, ready to sort on. The other three counters are returned as numbers only, because the site reports them that way.

engagement_total is the four counters added together. It is there because ranking by likes alone consistently misreads Xiaohongshu, where a note that gets saved and forwarded is worth more than one that gets tapped.

Fields that are legitimately empty

Plenty of notes have no title and lead with the body text instead, so title comes back as an empty string and description carries the content. A video note reports image_count of one, its cover. updated_at equals published_at on a note that was never edited. None of those are filled in with a guess.

Narrowing the output

Note type keeps only photo notes or only video notes. Minimum likes drops everything under a threshold. Both are applied after the notes are read, so they trim the output rather than the work, and the run summary reports how many rows they removed under filteredOut.

Fetch full note detail is on by default and is what produces everything above. Switch it off in a feed run and you get the lighter card instead: id, title, author, cover image, like count and, on videos, the duration. That is one request instead of two per note and is the cheap way to survey a category before deciding which notes are worth opening. Pasted links need it on, because a link on its own carries no data.

Include image URLs adds the full image list to every row. The image count is always there; this adds the addresses, which makes the dataset noticeably wider on a photo note carrying seventeen pictures.

Run sizes and timing

A hundred pasted links finish in well under a minute. A feed run is slower by design, because the feed is walked deliberately rather than hammered, and it ends when the feed stops serving.

512 MB of memory is plenty. Nothing here runs a browser.

When something cannot be read

The errors record in the key-value store lists every note that did not come back and why:

  • not_readable — the page carried no note. Almost always a link pasted without its token, or a note that has since been removed.
  • bad_input — no note id could be found in that line at all.
  • feed_exhausted — the feed stopped serving cards. Wait, or supply links.
  • fetch_failed — the page could not be loaded after three tries.

The summary record counts the same things from the other direction: notesRequested, notesReturned, notesWithDetail, notesUnreadable, withEngagement, withHashtags, feedExhausted and filteredOut. Between the two, an unexpectedly short run explains itself without you having to guess.

A note on stability

Xiaohongshu is an actively defended platform and the reachable surface here is narrower than the site as a whole. The token requirement described above is a deliberate design of theirs, not a loophole, and the feed's metering is not going to get looser. We test this Actor against the live site rather than against a saved copy, so when something changes it shows up as a failing run on our side before it shows up as a bad row on yours.

If a run comes back thinner than you expected, read summary first. It was built to answer that question.