Xiaohongshu, sold to the West as RedNote, is the platform where Chinese consumers review restaurants, hotels, cosmetics and cities, and it is far more readable than its reputation. On 28 September 2026 we fetched it 24 times through residential exits in Singapore, the United States and Germany. A public note, requested with the token the feed hands out, answers a plain HTTP client with 70,499 bytes, the complete note text in the meta description and an Article JSON-LD block. Rendering the same note costs 2,475,522 bytes, 35 times more, and buys the comments. The explore feed is 186,518 bytes of server-rendered cards.
The search term means shopping agents, not data
Type xiaohongshu proxies into Google and autocomplete offers nothing at all. Press enter from the United States and the first page is about people, not servers: Reddit threads in r/internationalshopper looking for someone in China to buy a Xiaohongshu listing on their behalf, a buy-and-ship guide, "RedNote proxy buyer", Superbuy. Two vendor listicles and one guide to running several RedNote accounts through an anti-detect browser fill the rest. Not one result says what xiaohongshu.com returns to a request.
The data intent is a different query. xiaohongshu scraper autocompletes to github, api, profile scraper and crawler. That reader wants public notes for brand monitoring, product and venue research, creator discovery and social listening in the Chinese market, and that is the reader this page is for. We do not help with account farming or multi-accounting, and the last section says where the platform draws its own line.
The feed is server-rendered and the token is the key
The explore feed at xiaohongshu.com/explore is the surface robots.txt opens to the Chinese search engines, and it is plain HTML. From a Singapore residential exit, over plain HTTP with no JavaScript, it returned 186,518 bytes, 2,678 words of card titles and author names and 62 cover images. From the United States, 182,416 bytes and 2,621 words; from Germany, 190,005 bytes and 2,753 words. Every card links a note and its author, and every one of those links carries an xsec_token query parameter.
That parameter is the whole game. We requested the same note both ways:
| Request | Where it lands | Status | Bytes | Extractable words |
|---|---|---|---|---|
| Note by id, no token | /404 page with error_code 300031 | 200 | shell | 7 (73 rendered) |
| Note by id, with the feed's token | the note | 200 | 70,499 | 388 |
| Profile by id, no token | redirect to /login | 200 | 36,691 | 0 |
| Profile by id, with the feed's token | the profile | 200 | 138,874 | 698 |
| Explore feed | the feed | 200 | 186,518 | 2,678 |
A bare note id lands on a page whose title says the page is not available and whose URL carries error_code=300031, at HTTP 200. A bare profile id lands on the login page, also at 200. The same ids with the token from the feed return the note and the profile in full. So a Xiaohongshu job is shaped as feed first, then items: read the cards, keep the tokenised URLs, fetch those. A crawler that builds note URLs from ids it found elsewhere will read 24 pages of nothing and never see an error code.
The note text lives in the head
Here is what the tokenised note returned to a client that does not run JavaScript. The title is the note title. The <meta name="description"> is the entire body of the note, hashtags included, 2,718 characters of it. There is a canonical link, with the token stripped, an h1, an Open Graph title, and one JSON-LD block of type Article. The audit counted 21 words of body text outside the head, because the visible layout is built by JavaScript; the markdown conversion of the same response, which reads the head, came to 388 words.
Rendering the note changed almost nothing you would pay for. The rendered pass returned 71 words from Singapore in 10.5 seconds, 92 from the United States in 14.3 seconds and 127 from Germany in 7.3 seconds; a full render with the comment list open weighed 2,475,522 bytes, took 10.8 seconds and produced 1,465 words, most of them comments and related cards.
| Exit | No-JS words (body) | No-JS bytes | Rendered words | Render time |
|---|---|---|---|---|
| Singapore | 21 | 70,499 | 71 | 10.5 s |
| United States | 21 | 70,499 | 92 | 14.3 s |
| Germany | 21 | 70,499 | 127 | 7.3 s |
Two parsing notes. First, word counts on Chinese pages are whitespace counts, so they understate the content by an order of magnitude; count characters or bytes instead, and the 70,499-byte response carries 2,718 characters of note text. Second, the note's meta robots tag reads noindex,nofollow,nosnippet: the platform serves the text to the client and asks search engines not to show it. That is a statement of preference you should read before deciding what to do with the data.
The profile page behaves the same way, and it is where the counts are. With the token, a profile returned 138,874 bytes and 698 words, and its description reads, in Chinese, "has 10+ followers, follows 1K+ people". The counts are rounded in the head, "10+" and "1千+", not exact. If you need exact follower numbers on this platform, the public web does not give them to a logged-out client, and no exit country changes that.
The exit country changes the feed, not the note
We sent the tokenised note from the United States and Germany with no Accept-Language header. Both returned exactly 70,499 bytes, the same canonical, the same description, the same JSON-LD. The note is one document served identically to every country we tried. The feed is not: 186,518 bytes from Singapore, 182,416 from the United States, 190,005 from Germany, with 62, 61 and 64 cover images, because the feed is a recommendation surface assembled per request. So the rule for Xiaohongshu is the opposite of the one we found on TikTok, where the exit picks a different backend: pin a country when you are sampling the feed and want a stable population, and pin nothing when you are fetching notes by tokenised URL. Country-pinned exits are a per-request parameter on our residential network.
What robots.txt says, and who is on the list
xiaohongshu.com/robots.txt is 492 bytes and it is written for Chinese search engines. Baiduspider, bingbot, 360Spider, the Sogou spiders and YisouSpider are told to stay out of everything except the home page, /explore, /download, the World Cup section and the sitemaps. Googlebot gets a single block that disallows everything and allows one path, /worldcup26. The file ends with the block that governs everyone else:
User-agent: *
Disallow: /
The sitemap index it points to is 484 bytes and lists three gzipped note sitemaps plus one for the World Cup, so the platform is publishing a map of its notes while telling unnamed clients to stay out of all of them. Read together with the nosnippet tag on every note, the position is clear: Xiaohongshu serves its public notes to any client and does not want them republished. Readability is a technical fact, permission is a contractual one, and on this platform they point in different directions. Guides that sell several RedNote accounts on one machine are selling something the login flow is built to discourage, and we do not help build that.
What it costs, and what to stop paying for
Every number in this post came through residential proxies on the Basic line at $0.80/GB, counting a gigabyte as 10^9 bytes. Because the note text is in the head, the cost driver is bytes, not IP quality:
| Job | Bytes per request | Requests per GB | Cost per request |
|---|---|---|---|
| Note with token, plain HTTP | 70,499 | 14,185 | $0.000056 |
| Profile with token, plain HTTP | 138,874 | 7,201 | $0.00011 |
| Explore feed, plain HTTP | 186,518 | 5,361 | $0.00015 |
| Note, rendered with comments | 2,475,522 | 404 | $0.0020 |
Fifty thousand notes a day for a month is 105.7 GB over plain HTTP, about $84.60. The same 1.5 million notes rendered is 3,713 GB, about $2,970.63, and the extra $2,886 buys comment threads you may not need. On mobile proxies at $2.30/GB the plain-HTTP note is $0.00016; nothing we measured on this platform asked about the network type, so the cheaper line is the right one. This is the same head-only pattern we found on four Western platforms in follower counts in the head; Xiaohongshu is the first where the whole post body is there too.
The setting that works on Xiaohongshu
- Network: residential, Basic line at $0.80/GB. Sixteen note and profile fetches from three countries returned the same bytes; the network is not what this platform examines.
- Fetch mode:
engine: tls, plain HTTP. The tokenised note returns 388 words of markdown and 2,718 characters of note text from a 70,499-byte response; rendered it is 2,475,522 bytes for 1,465 words, of which the note itself is the same 2,718 characters. - Country: any exit for notes and profiles, which came back byte-identical from the United States and Germany. Pin the exit only when you sample the feed, whose size moved between 182,416 and 190,005 bytes across three countries because it is assembled per request.
- The parameter that matters: take note and profile URLs from the feed cards with their
xsec_token. Without it a note id reads 7 words and a profile id reads 0. - When the proxy is not enough: there is no Xiaohongshu collector in our catalogue today. For the comment thread under a note, the web scraping API with rendering returns the 1,465-word version at $0.001 per page, and for the head-only note the same API without rendering is $0.0002 per page.
- Every account gets $2 of free API usage per month.
If you want the same treatment of a platform where the exit country does rewrite the page, start with Douyin, where the same profile rendered from Germany and not from the United States on the same afternoon, or with same URL, different country, different page for the cross-target view.