RedNote (Xiaohongshu) User Profile Scraper avatar

RedNote (Xiaohongshu) User Profile Scraper

Pricing

Pay per event

Go to Apify Store
RedNote (Xiaohongshu) User Profile Scraper

RedNote (Xiaohongshu) User Profile Scraper

RedNote's profiles carry the province an account posts from, and that IP location is a field here, next to nickname, RedNote ID, follower and following counts, likes and collects, verification and up to 30 recent notes. No login. $2.90 per 1,000 plus $0.003 a run.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

7

Total users

5

Monthly active users

3 days ago

Last modified

Share

Give it RedNote profile links or bare user IDs. Get back one row per profile: nickname, RedNote ID, avatar, banner, bio, follower count, following count, likes + collects, verification badge, IP location, gender, city, profession, and the user's recent notes with likes, collects and comments on each.

No login and no cookies to paste. It's a plain HTTP scraper with no browser, which is why it's cheap and why 240 profiles finish in about a minute.

$2.90 per 1,000 profiles ($0.0029 each), plus $0.003 each time a run starts. Flat rate — the same $2.90 on the free plan as on Diamond, with no volume tiers and no minimum spend. You're charged per profile actually returned; blocked pages, missing users and empty runs cost nothing.

What you get per profile

A real row, pulled 21 August 2026:

FieldValue
userId5b723a65c756070001d43c6c
urlhttps://www.xiaohongshu.com/user/profile/5b723a65c756070001d43c6c
nickname无糖小馒头
redId607277765 — the 小红书号 people search each other by
avatar / bannerImageCDN image URLs
description十年美食无人问,一朝绑匪天下知。
followerCount1310
followerCountText"1310" — the exact string the page showed
followerCountIsExacttrue
followingCount67
likesAndCollectsCount94300
likesAndCollectsCountText"94.3K"
countsAreApproximatetrue — set when either count above was abbreviated
ipLocation江苏
gendermale / female / null
locationthe city chip on the profile, when set
professionthe profession chip, when set
isVerified / verifiedType / verifiedReasonverification badge and its stated reason
tagsthe chips on the profile, e.g. ["25岁", "浙江杭州", "FoodBlogger"]
recentNoteCount / recentNotes[{ title, type, likedCount, collectedCount, commentCount, pinned, coverImage }, …]
source, scrapedAtprovenance

Field coverage, measured

220 profiles pulled from RedNote's live explore feed in one run on 2026-08-10, nothing excluded:

FieldFilled
nickname, redId, avatar, bannerImage100%
followerCount, followerCountText, likesAndCollectsCount100%
recentNotes (6.9 notes per profile on average)100%
followingCount97.7%
description90.0%
ipLocation81.4%
gender74.1%
tags70.9%
location47.3%
profession40.0%
verifiedReason6.4%
isVerified = true5.9%

Inside recentNotes: type, collectedCount, commentCount and coverImage on 100%, likedCount on 96.5%, title on 98.4%.

The fields under 100% are blank because the creator left them blank. Most people have no profession chip and only about 5% of accounts are verified. Nothing there is null because the scraper failed to read it.

Follower counts are exact for most accounts

RedNote publishes the exact number up to roughly 10,000 followers and abbreviates above that. Across those 220 profiles, 52.7% came back exact (5911, 1306, 83) and the rest abbreviated to one decimal (194.8K, 15.9K). You get both readings:

  • followerCount — a number, so you can sort and filter on it.
  • followerCountText — the original string.
  • followerCountIsExacttrue when the string was a plain integer.

countsAreApproximate is true whenever the follower or likes figure was abbreviated. 194.8K becomes 194800, which is within 0.05% of the truth rather than a bucket floor.

Input

{
"profileUrls": [
"https://www.xiaohongshu.com/user/profile/5b723a65c756070001d43c6c",
"620f2fbd000000001000e44c"
],
"maxNotesPerProfile": 10
}

Bare 24-character user IDs work as well as full URLs. maxItems is a cap, not a target: leave it at 0 and you get one row per URL you supplied. maxNotesPerProfile takes 0–30; set it to 0 to skip notes entirely.

includeExploreFeed tops the list up with authors from RedNote's public explore feed, so you can try the actor without hunting for links first. Off by default.

How it opens a profile, and the one thing that can go wrong

The actor reads RedNote's mobile profile page. That page needs an xsec_token, which the actor mints for itself from the public explore feed at the start of each run — one request, and the token then opens every profile in the queue. You never have to supply one.

The mint is the only step that can end a run with zero rows. RedNote meters its server-rendered pages per exit address, and on a busy day it answers with an empty client-render shell instead of the feed. The actor races several exit pools looking for one that answers. If none does, you get a single uncharged TOKEN_UNAVAILABLE row and the run stops right there instead of burning your compute.

Two fixes: re-run a few minutes later, or open xiaohongshu.com in a browser, click any creator, and paste the xsec_token out of the address bar into the xsecToken input. One token opens every profile and stays valid for at least an hour.

Limits, stated plainly

No note permalinks. The profile page identifies each recent note by a 32-character hash, not the 24-character note ID that /explore/<id> accepts, and there's no way to turn one into the other. So each note comes back with its title, type, likes, collects, comments and cover image, and no url — emitting one that would 404 is worse than omitting it. If you need note bodies, the companion RedNote Scraper reads note pages directly.

There is no lifetime note total. The profile shows following, followers and likes+collects. It doesn't show "posted N notes", so the actor doesn't invent one. recentNoteCount is how many recent notes are in that row, not a career total.

Up to 30 recent notes. That's the first page of the profile. There's no full note history here.

The explore feed is a bonus, not a feature. It yields about thirty authors per page and gets refused more often than a profile page does. When it's on and RedNote refuses it, you get one uncharged FEED_UNAVAILABLE row and the run carries on with the URLs you supplied.

A user ID that doesn't exist looks identical to a refusal. RedNote serves the same login shell for both, so the diagnostic row names both possibilities. Check the ID before assuming you were rate-limited.

Bios are as written. RedNote's own 还没有简介 placeholder ("no bio yet") is site text, not user text, so it comes back as null.

No email or phone. RedNote doesn't publish either on a profile.

Throughput

Two runs on the Apify platform, 2026-08-10: 220 of 220 profiles in 47 seconds, and 240 of 240 in 72 seconds, at 8 concurrent requests. About 47 KB of traffic per profile.

Each profile gets four attempts across four exit addresses and four browser fingerprints before it's given up on. If eight profiles in a row fail, the run stops and writes an uncharged RATE_LIMITED row listing every URL it didn't attempt, so you can feed that list straight back in later.

Billing

$2.90 per 1,000 profiles, plus $0.003 when the run starts. One charge per profile row actually returned. Blocked pages, missing users, TOKEN_UNAVAILABLE and empty runs produce _diagnostic rows that cost nothing. Empty input returns one labelled _sample row so you can see the shape, also free.

A 100-profile run costs $0.293. A 1,000-profile run costs $2.903.

FAQ

Do I need a RedNote account or cookies? No. Everything here is the public, signed-out profile page.

Is RedNote the same thing as Xiaohongshu? Yes. 小红书 / Xiaohongshu is the Chinese name; RedNote is what most English speakers call it.

How do I find a user ID? Open any RedNote post, click the author, copy the URL. The 24-character hex string after /user/profile/ is the ID. Paste either the whole URL or just that string.

Can I get a user's full note history? No. Up to 30 recent notes from the first page of the profile, with engagement counts but without permalinks.

What is the xsecToken input for? Nothing, normally. Leave it empty and the actor mints its own. It exists only so you can unblock a run that reported TOKEN_UNAVAILABLE.

What happens if a profile is deleted or the ID is wrong? An uncharged diagnostic row with an errorCode and a hint. You're not billed for it.