SuperAPI AI Directory

space-xhs-hotspot

Marketing & growth

View repository

Updated 10-16 06:52

About this skill

Xiaohongshu hotspot collection (space-xhs-hotspot)

A topic radar for creators. The goal is not to dump out data, but toanswer three questions: Does this track currently have traffic? Which content formats is the traffic concentrated in? What should I write next?

Output chain: this skill produces topic selection → space-xhs-title creates titles → space-xhs-writer writes the body. So the last section must bea topic card that can be pasted directly to downstream, not a sentence like "suggest observing more".


Data notes (must be explained before displaying any data, preserve the wording verbatim)

  • Inclusion threshold: the Honghu database only includesnotes with 1000+ engagement . Not finding it ≠ no one writes in this direction, it only meansthis direction has never produced a viral hit with 1000+ engagement—this itself is a judgment (niche/low ceiling or blue ocean).
  • Update cadence: updated daily at7 a.m.withyesterday'sdata. Same-day data can never be queried; when the user says "today", treat it as "yesterday" and explain.
  • Data snapshot: engagement count is a snapshot atthe time of ingestion, not a real-time value. It will continue to rise after ingestion—so "8000 engagement from 3 days ago" may actually be hotter than "12k from yesterday".
  • Time window: the database only containsdata from yesterday to 30 days ago. Requests beyond 30 days must be clearly stated and downgraded to the nearest available range.
  • Link format:note_url / noteLink must be output as-is, including the xsec_token query parameter. Truncating, masking, or rebuilding is prohibited, and using only note_id to assemble a URL yourself is prohibited—the assembled link will not open.note_id is a 24-character lowercase hexadecimal string and must be copied in full.

Step 0: Data source detection and downgrade (do this before every execution; do not assume the Key exists)

env | grep -E '^(REDFOX_API_KEY|SOCIALDATAX_API_KEY|GUAIKEI_API_TOKEN)=' | sed 's/=.*/=<set>/'

According to the table belowfrom top to bottom, take the first available route; when a route errors (401/insufficient balance/network failure), continue downgrading and note in the output "this data comes from route X".

Priority Environment variable Route Strengths Weaknesses
1 REDFOX_API_KEY Honghu API (script included with this skill) The only one withthree-dimensional scoring of popularity/relevance/timelinessand relatedSearches term expansion; naturally contains only 1000+ viral hits, with the highest signal-to-noise ratio Only the last 30 days; T+1 update; no comments
2 SOCIALDATAX_API_KEY socialdatax CLI (npx, see xhs-content-research) Near real-time; has --since-days, multiple sorting options, image/text and video filtering No ratings, you need to sort by engagement yourself; billed by usage
3 GUAIKEI_API_TOKEN GuaiKe Node CLI (see xiaohongshu-content-tools) can getnote details + comment section + all of the blogger's works, the only choice for deep digging Requires node, the script is in another skill directory
Fallback None WebSearch manual Zero configuration No engagement numbers, you can only see titles and the general direction

For specific commands, parameters, and error handling, see references/data_sources.md(read it before executing).

When none of the three Keys are present, do not fail silently, reply using this template:

未检测到小红书数据源,本次用公开搜索兜底(拿不到互动数,只能看内容方向)。

想要带互动数据的完整热点分析,配置任一即可(推荐第 1 个):
  export REDFOX_API_KEY=...        # https://redfox.hk/settings/api-keys  近30天爆款库,带热度评分
  export SOCIALDATAX_API_KEY=...   # https://socialdatax.com/ai          近实时搜索
  export GUAIKEI_API_TOKEN=...     # https://www.guaikei.com             详情+评论深挖
写进 ~/.zshrc 后重开终端即可。

Thencontinue using WebSearch as a fallback to finish the process(site:xiaohongshu.com <关键词> + Xiaohongshu trending aggregation sites), just replace the "engagement numbers" column with a "source" column, and note "not verified by engagement data" in the conclusion. Do not stop at the prompt just because there is no Key.


Step 1: Turn the user's words into searchable terms

Core judgment: generalized terms vs. niche terms. If you search with generalized terms, you get a bunch of unrelated viral hits and can't see any trend; if you search with overly narrow terms, you get 0 results.

Type Characteristics Example Action
Generalized term Superordinate concept, industry category, no scene/audience/style modifiers Beauty, fashion, workplace, AI, maternal and infant First expand into 6~10 niche terms,run them at the same time, and use the results to compare the popularity distribution
Niche term Has one layer of modifier (scene/audience/style/intent) Commute outfits, fat-loss breakfast, petite height-boosting, AI for making PPTs Search directly, this is the sweet spot
Overly narrow term Two or more layers of modifiers or long-tail combinations Chubby petite autumn-winter commute outfits Cut it down to one layer of modifier before searching, while keeping the original term for manual filtering

Difference from the original version: when a generalized term is detected,do not stop and wait for the user to reply "expand/do not expand". Directly state "'Fashion' is too broad, I searched in parallel across 8 niche directions", then run it all at once (Honghu supports comma-separated multiple terms). If the user wants to change direction, it is more efficient to change after seeing the results. Only when the expanded terms have multiple clearly different commercial intents (such as "insurance" → buying insurance / selling insurance / insurance practitioner) is it worth asking first.

Principles for generating expanded terms:

  • Moderate scope—self-invented terms like "middle-class outfits" return no data, while expressions that actually exist on the platform, such as "old money style", "commute", and "effortless feel", can be found.
  • Cover four dimensions, 2~3 each:Trend terms(old money style, dopamine, effortless feel),Audience terms(students, petite, moms, workers),Scene terms(commute, dating, camping, renting),Intent terms(dupes, avoid pitfalls, reviews, checklists).
  • Prioritize the words that appear in the user's own description. If the user says "I usually write about niche films, book reviews, and Hong Kong-Taiwan culture," you should search for "niche films/Hong Kong-Taiwan films/book list recommendations," not "films."

Track vocabulary:references/xhs_sectors.json

Don't come up with expansion words out of thin air—check the vocabulary first. It is organized by Xiaohongshu's official 24 top-level tracks, and each track provides trend / audience / scene / intent searchable subcategory words across four dimensions, which correspond exactly to the four dimensions above.

When to read it(three scenarios; don't waste context on the others):

Scenario Usage
The user gives a broad term ("outfits," "workplace," "AI") Find the corresponding top-level track,take 2–3 from each of the four dimensionsto make 6–10 words and search them in parallel; this is track drilling-down
The user gives a subcategory term ("commuter outfits") Search that term directly,and at the same timetake 2–3 neighboring words from the same track and dimension for horizontal comparison (see Step 4), to answer "is this term hot or cold within the track"
The user can't articulate a direction and only says "what should I write" Ask about positioning first, then take words from 1–2 tracks that match their persona

The vocabulary is a starting point, not the end: after the first round, you must use the relatedSearches(Red Fox) returned by the API or this round's high-frequency title words (other routes) for a second round of word expansion—that is the platform'scurrentreal phrasing. Trend words in the vocabulary expire; if a search returns 0 results, that means it's already dead, and that itself is a conclusion—don't force it.

When no corresponding item can be found for a track (e.g., "cross-border e-commerce," "civil service exam prep"), map it to the nearest relevant top-level track (Internet / Education) and state that it is an approximate mapping; don't rewrite the user's direction just to align with the vocabulary.


Step 2: Query and time-window strategy

Default window is 7 days(startDate = 今天 - 7). Conversion: today→yesterday, recent/last week→7 days, last N days→today-N, maximum 30 days.

When data is insufficient, only extend the time, don't change the words(changing words would mix data from two different tracks, ruining the trend judgment):

1 天 → 3 天 → 7 天 → 30 天

Every time you extend the window, you must inform: "'XX' has only 3 notes with 1000+ in the last 7 days; extended to the last 30 days." If it is still < 5 after extending to 30 days, stop and give the conclusion directly:this is a low-output track—either the audience is too narrow, or the platform isn't giving this direction traffic, or it's a blue ocean no one is writing in. You must distinguish these three possibilities for the user in the conclusion (check whether relatedSearches has words, and check the data volume of neighboring words).


Step 3: Read the data and make a trend judgment (the core of this skill, don't skip it)

After getting the note list,going item by item is not the point; patterns are. Go through the six angles below; the first five are the track's current state, and the sixth is what viral hits have in common:

1. Format distribution

Classify the top 20 by content format and count the proportions:list/roundup|tutorial steps|review comparison|personal experience narrative|pitfall warnings and complaints|data conclusions|resource collections. The format with the highest proportion = the format the platform is currently giving traffic to in this track, and also the safest object to imitate. A format with 0 proportion but that the user is good at = a differentiation opportunity (mark the risk).

2. Title hook distribution

Count the hooks appearing in the top 20 titles: numbers ("5 items" "3 days"), audience labels ("workers" "students"), pain-point quotes (complaints in quotation marks), contrast ("didn't expect" "turns out"), identity endorsement ("top-tier hospital doctor" "HR"), timeliness ("2026" "latest"). Whichever hook repeats the most is exactly what readers in this niche are into right now — pass it directly to space-xhs-title。

3. Account scale

Look at authorFans。If the top list clearly contains small accounts (<10k followers) pulling 10k+ interactions, it means traffic in this niche feeds on content, not accounts, and new accounts can enter; if it's all 500k+ big accounts dominating the list, it means it's stock competition, and new accounts will most likely sink. This point has the highest decision-making value for users, so be sure to write it out.

4. Time distribution

Hits concentrated in the last 3 days = rising hot topic, hurry up and write; evenly spread over 30 days = evergreen demand, write whenever; concentrated around 3 weeks ago with nothing new = trend has passed, don't chase it.

5. Interaction structure

Compare likedCount / collectedCount / commentsCount:

  • saves > likes → tool-type/reference-type content, readers want to keep it for later use. Suitable for checklists, templates, compilations.
  • comments > saves and comments account for a high proportion → topic-type/controversy-type content, readers want to take a stance. Suitable for opinions, questions, comparisons.
  • likes overwhelmingly high → emotion-type/aesthetic-type content, readers are just passing by and agreeing. Weak conversion, average follower growth.

The account scale item is only available on the Red Fox route authorFans. The Monster Shell routecan't actually get follower counts, so write "the follower field is missing, this route cannot determine account scale,"do not estimate, and give the other four angles as usual.

6. Hit commonality extraction (required when sample ≥ 8 items)

The five angles above answer "what this niche looks like right now," while commonality extraction answers **"why these hits went viral, which ones I can copy, and which ones I can't"** — the latter is what users really want.

Before executing, read references/pattern_extraction.md, and do three things according to it:

  1. Tag each item with two labels: format label (checklist/tutorial/review/experience/warning/data/resource/identity endorsement) + hit mechanism label (freshness/result feel/scenario feel/identity feel/emotion feel/contrast feel/save motivation/controversy feel), and each note takes the strongest 1~2 mechanisms.
  2. Count into distributions: format X/20, mechanism X/20, top 10~14 high-frequency title words.Only ≥40% counts as commonality, 20%40% counts as secondary mainstream, <20% and supported by only 12 items can only be called individual cases, and it must not be packaged as a trend.
  3. Break it into three lists: reusable / non-reusable (identity barrier, resource barrier, account barrier) / gaps.The non-reusable list cannot be omitted— only giving "what can be copied" is the same as leading users into a pit.

When the sample is < 8 items, do not calculate proportions, only do qualitative description, and write "sample of N items, conclusions are for reference only."


Step 4: Comparison (do it when the user asks "has it changed" "which one is more worth writing," otherwise skip)

A single snapshot can only say "what it's like now," not "whether it's getting better or worse" "which of A and B can enter." These two types of questions rely on two or more queries ofcomparison。

trigger conditions:The user asks "Is it still trending recently?" "How does it compare with last month?" "Which track is more worth writing for?" "Should I choose A or B?" Or step 1 performed a track drill-down and obtained multiple sets of data.

Approach:Persist each query's result JSON separately to disk, then use scripts/compare_sets.py to normalize and align them (an offline script, no network access, no Key required).

S=~/.claude/skills/space-xhs-hotspot/scripts

# 多赛道横向:同一时间窗,谁的量级更高、形态和钩子有什么差别
python3 $S/compare_sets.py 通勤穿搭=a.json 老钱风=b.json 学生党穿搭=c.json --top 20

# 单赛道纵向:同一个词,本周 vs 上月
python3 $S/compare_sets.py 本周=this.json 上月=last.json --label-kind time

# 要结构化数据自己再加工时
python3 $S/compare_sets.py a.json b.json --json
  • The input isthe persisted JSON,with two formats automatically recognized: Red Fox script output (items[]), and Guaike search-cli.js 's result files (results[]). Guaike stdout is mixed with log lines and cannot be parsed directly,use its automatically persisted xiaohongshu-content-tools/logs/*_search.json。
  • tag, which is the query term; the script uses it to exclude the query term itself from the high-frequency words (otherwise the top word would always be the query term itself).
  • Output: comparison summary table (samples/median engagement/highest engagement/collect-to-like ratio/comment-to-like ratio/small-account share/main format/main hook) + each group's format, hooks, high-frequency title words, highest-engagement notes + term-level intersections and unique terms.
  • For groups with < 8 samples, the script will mark ⚠️ itself; include this warning when relaying the results.

How to read the comparison results:

Observation Conclusion
Same term across time: median engagement drops noticeably, and the high-frequency words have changed to a new batch The trend is receding; don't chase the old wording, follow the new high-frequency words
Same term across time: the median is stable and the high-frequency words are almost unchanged Evergreen demand; you can write it anytime, and it comes down to execution
Across tracks: A has a high median but its main format is "identity endorsement" The ceiling is high butyou can't get in,and this must be stated plainly in the conclusion
Across tracks: B's median is medium but the small-account share is high and the main format is a list This is the entry point for new accounts
Term-level "shared high-frequency words" Cross-track universal hooks, with the strongest reusability
Term-level "unique words" The dedicated search entry for that track, hand it to space-xhs-title

Red line:Numbers from different data sourcescannot be directly compared by size(Red Fox is an indexed snapshot of a 1000+ indexed library, while Guaike is real-time full search scraping). When comparing across routes, only comparestructural metrics(format share, collect-to-like ratio, high-frequency words), and note that "the two sets of data come from different routes, and absolute magnitudes are not comparable."


Output format

① Data description (one line)

Data source: Red Fox API | indexing threshold engagement 1000+ | updated daily at 7 AM with yesterday's data | engagement is an indexed snapshot 📅 Query range: X月X日 - X月X日|Keywords: A, B, C

② Hot note table

With keywords (Red Fox route, with scores):

# Note title Author (followers) Engagement Likes/Collects/Comments Published Relevance Heat Timeliness Total score

No-keyword sitewide popular / non-Red Fox route (no score fields, sorted by engagement descending):

# Note title Author (followers) Engagement Like/Save/Comment Publish
  • Make both the title and the author into Markdown links. Note linkUse the return value as-is(including xsec_token), author link https://www.xiaohongshu.com/user/profile/{authorId}。
  • By default, show the first 10 entries; when there are more than 10, write below the table "X total, first 10 shown, say the word if you want all of them"—just state it, do not stop and wait for a reply, and continue straight on to the trend assessment.
  • When querying multiple keywords in parallel, group by keyword under subheadings, and show the top 5 for each group.

③ Track checkup (corresponds to the first five angles in step 3)

形态分布:清单 45% | 测评 25% | 经历叙事 20% | 其他 10%
钩子分布:数字 12/20,人群标签 9/20,痛点原话 5/20
账号量级:top10 里 4 个 <1 万粉 → 内容驱动,新号可进
时间分布:8/10 集中在近 5 天 → 上升期
互动结构:收藏平均高于点赞 1.3 倍 → 工具型需求为主

Follow each entry with a one-sentence interpretation; do not just throw out numbers.

④ Common traits of hit posts (required when the sample is ≥ 8 entries; for the format see references/pattern_extraction.md)

共性:收藏动机 12/20(60%,主流)|身份感 9/20(45%,主流)|反差感 3/20(个例)
可复用:清单式收纳合集 —— 对标《XXX》1.2w(链接)—— 换到你的赛道就是「租房党的 X 件……」
不可复用:top3 有 2 条是三甲医生出镜科普(身份壁垒),你没这个身份照抄说服力归零
空位:教程形态占比 0,但该赛道读者藏赞比 1.3 明显偏工具型 —— 可能是机会,也可能是平台不给这个形态流量,先小成本试
选题公式:收藏动机 + 清单 + 打工人 →「打工人通勤的 5 件平价单品,闭眼买」

⑤ Comparison conclusion (only give this when step 4 was done)

Paste the compare_sets.py comparison summary table, followed by 2~3 sentences of interpretation: is the volume rising or falling, which one can a new account enter, and have the high-frequency words changed. Cross-route data must be labeled "absolute volume is not comparable".

⑥ Keyword expansion and adjacent opportunities

relatedSearches List them as-is, and mark which ones are worth checking in the next round (pick the ones that match the user's persona) and which ones are irrelevant noise. For non-RedFox routes, use this round's high-frequency title words instead, and note that the source is different.

⑦ Topic suggestions (3~5 items, the key deliverable)

Give each item in this card format so the user can paste the whole thing to space-xhs-title / space-xhs-writer:

【选题 N】一句话选题
  形态:清单 / 教程 / 测评 / 叙事 / 避雷
  依据:对标笔记《XXX》互动 1.2w(链接),同类形态本轮出现 5 次
  钩子方向:数字 + 人群标签(如"打工人的 5 个 XX")
  预期互动结构:偏收藏 → 内容要有可保存的清单/模板
  风险:赛道已被 50w 粉大号占据 / 属于时效热点,7 天后失效

The basis must be tied to specific notes, and you cannot write "because this direction is very hot." Do not give topic suggestions that are not supported by benchmark notes. Topic suggestions should grow out of the topic formula in ④, and the formula and the topic suggestions must be able to match each other.


Red lines

  • Do not make up data. Interaction counts, follower counts, and publish times must all come from the API return; when falling back to WebSearch, explicitly write "no interaction data" and do not estimate.
  • Do not rewrite links. Losing the xsec_token link is equivalent to giving a 404, which is worse than not giving one.
  • Do not say "no one wrote about it" when you mean "could not find it". The inclusion threshold is 1000+ interactions; the two are not the same thing, and the wording must distinguish them.
  • Do not present correlation as causation. "6 of the top 10 have number titles" is an observation; "using number titles will make it go viral" is a wrong inference—write it as "readers in this track respond better to number hooks."
  • Do not promise results. What is given is a direction with higher probability, not "write this and it will definitely go viral."
  • Do not give only what can be copied. The common-trait extraction must also give a "not reusable" list, specifying whether it is an identity barrier, a resource barrier, or an account barrier.
  • Do not compare absolute values across sources. Different data sources have different interaction count definitions; when comparing, compare only structural metrics and note this.
  • Do not fudge when exceeding the window. If the user asks for 60 days, say "the database only has 30 days, and it has been returned as 30 days"; do not silently change it to 30 days and treat the need as satisfied.
  • Do not overreach and dig deeper. When the comment section/full body of works from a blogger is needed, take the Guaike route and explain that GUAIKEI_API_TOKENis required; do not use search results to imagine what the comment section is saying.

Self-check (go through this before output)

  • Does the top have a data source label + inclusion criteria + time range?
  • Do all note links preserve xsec_token as-is?
  • Has the broad/generic term been checked? xhs_sectors.json Do you drill down into the track and run parallel queries, rather than hard-querying with big terms?
  • When data is insufficient, did you expand the time window and inform the user, rather than secretly swapping terms?
  • Are the track health checks for all five cut points provided, and does each one have interpretation and not just numbers? When fan fields are missing, is it stated truthfully rather than estimated?
  • When the sample is ≥8 items, was commonality extraction provided, andAre all three lists complete(reusable / non-reusable / empty slots)? Are the proportions graded and stated according to the 40%/20% thresholds?
  • When multiple query groups were run, did you run compare_sets.py rather than eyeballing it? Across routes, was "absolute magnitude not comparable" marked?
  • Are there ≥3 topic suggestions, and does each one include a specific benchmark note and link?
  • Did any number appear that the interface did not return?

Directory structure

space-xhs-hotspot/
├── SKILL.md
├── scripts/
│   ├── fetch_xhs_hot_articles.py      # 红狐 API 查询脚本(需 REDFOX_API_KEY)
│   │                                  # 来源:creator-buddy/skills/xhs-hotnotes,原样复用未改动
│   └── compare_sets.py                # 第 4 步用:多组结果 JSON 归一对比(离线,不需要 Key)
│                                      # 吃红狐 items[] 和怪壳 results[] 两种格式,自动识别
└── references/
    ├── data_sources.md                # 三条路线的命令、参数、报错处理、字段映射、怪壳实测须知
    ├── xhs_hot_article_format.md      # 红狐接口字段说明(同样来自 xhs-hotnotes)
    ├── xhs_sectors.json               # 第 1 步用:24 个一级赛道 × 四维度细分词库
    └── pattern_extraction.md          # 第 3 步用:爆款共性提取方法(标签表、阈值、三张清单、选题公式)

Read on demand:data_sources.md Must-read before every execution;xhs_sectors.json Read only when track drill-down is needed;pattern_extraction.md Read only when commonality extraction is to be done for a sample of ≥8 items;xhs_hot_article_format.md Read only when taking the Red Fox route.