End-to-end FastMoss creator ranking scraper + analyzer. Uses kimi-webbridge to drive the user's logged-in browser, extracts creator rows into CSVs, and ships an aggregation script + Markdown report template that produces an analysis report. Scope: the 达人 section of fastmoss.com (5 rankings + creator search). For products, shops, ads, videos, or live streams, use the corresponding sister skill.
Prerequisites
-
Kimi WebBridge daemon healthy:
~/.kimi-webbridge/bin/kimi-webbridge status # expect: {"running": true, "extension_connected": true}If not healthy: invoke
Skill(kimi-webbridge)and followreferences/operations.md. -
User is logged in to fastmoss.com in their browser (this skill reuses their session — no auth).
-
Read
references/environment.mdbefore writing new shell orevaluateJS — Windows + bash + no-jq + heredoc-escaping rules all live there. Cost of skipping: silent failures that look like daemon bugs.
Creator ranking URLs
| Ranking key | Chinese | URL |
|---|---|---|
fans |
Follower Growth Creators Ranking | https://www.fastmoss.com/zh/influencer/tiktok/fans |
commerceTop |
E-commerce Creators Ranking | https://www.fastmoss.com/zh/influencer/tiktok/commerceTop |
blue-v |
Blue V Creators Ranking | https://www.fastmoss.com/zh/influencer/tiktok/blue-v |
popular |
Trending Creators Ranking | https://www.fastmoss.com/zh/influencer/tiktok/popular |
potentialTop |
Dark Horse Creators Ranking | https://www.fastmoss.com/zh/influencer/tiktok/potentialTop |
| (search) | Creator Search | https://www.fastmoss.com/zh/influencer/search?shop_window=1 |
Use /zh/ (Chinese) locale. Site is a NUXT/Vue SPA — always wait for hydration (--nav-sleep 6+).
Per-ranking column schemas
Each ranking has a different metric column set. The scraper reads <thead> dynamically and writes one CSV column per header, so the schema is captured automatically.
| Ranking | Header columns (after rank/creator/country) |
|---|---|
fans |
Follower Change, Followers, Follower Growth Rate, Works Count |
commerceTop |
Total Followers, Products Sold Count, Total E-commerce GMV |
blue-v |
Follower Change, Followers, Likes Increase |
popular |
Total Followers, Total Works Count, Likes Increase |
potentialTop |
E-commerce Category, Potential Index, Total E-commerce GMV, Video Publish Volume, Average Video Views, Total Sales |
The 达人 / 达人信息 column is multi-line text (name + ID:xxx + category). The scraper pre-parses into creator_name, creator_id, creator_category for easier analysis.
Quick start
# Step 1: Scrape one ranking (Top N pages)
python <path-to-skill>/scripts/creator_scraper.py \
--ranking fans --pages 5 --out <out-dir>/fans.csv
python <path-to-skill>/scripts/creator_scraper.py \
--ranking commerceTop --pages 5 --out <out-dir>/commerce.csv
# Step 2: Multi-country comparison on one ranking
python <path-to-skill>/scripts/creator_filtered.py \
--ranking fans --country 美国,印度尼西亚,泰国,马来西亚 \
--time 周榜 --pages 3 \
--out <out-dir>/fans_by_country.csv
# Step 3: Aggregate the per-ranking CSVs into a Markdown report
python <path-to-skill>/scripts/analyze.py \
--fans <out-dir>/fans.csv \
--commerce <out-dir>/commerce.csv \
--blue-v <out-dir>/blue-v.csv \
--popular <out-dir>/popular.csv \
--horse <out-dir>/horse.csv \
--out-md <report>.md
<path-to-skill> is wherever this skill is installed (typically .claude/skills/fastmoss-creators inside the project, or ~/.claude/skills/fastmoss-creators for a user-level install). Run any script with --help for the full arg list.
Scripts
| Script | Purpose |
|---|---|
scripts/creator_scraper.py |
Top-N paginating scraper, any of the 5 rankings (schema auto-detected from <thead>) |
scripts/creator_filtered.py |
Multi-country or multi-time-window filter + paginate |
scripts/analyze.py |
Aggregate CSVs → crosstabs (stdout) or full Markdown report (template-driven) |
References (read on demand)
| File | When to read |
|---|---|
references/environment.md |
Before writing any new shell or evaluate JS — Windows/bash/jq/heredoc rules (mirrors fastmoss-products' version) |
references/analysis_recipe.md |
The Markdown template analyze.py fills. Read to understand the report structure or to extend it |
Filter label vocabularies
Time windows (which appear depends on ranking)
| Label | Value | Where it appears |
|---|---|---|
日榜 |
1 | fans, commerceTop, blue-v, popular |
周榜 |
2 | all rankings |
月榜 |
3 | all rankings |
近28天 |
1 | potentialTop (instead of 日榜) |
Countries (16 markets)
--country <中文,comma-separated>: 全部, 美国, 印度尼西亚, 英国, 越南, 泰国, 马来西亚, 菲律宾, 西班牙, 墨西哥, 德国, 法国, 意大利, 巴西, 日本, 新加坡.
Same vocabulary as fastmoss-products.
Critical gotchas (each cost real time on first run)
Full details in references/environment.md. Summary:
- @e refs from
snapshotgo stale after every navigation →"No node with given id found". Bundled scripts click by text viaevaluate, never @e refs. - Bash heredoc + JS regex =
"Invalid regular expression: missing /"— heredoc eats a backslash layer. Use.split('\n')over.replace(/\n+/g, ...). - Page 1 of ranking tables has an empty filler row at top —
parse_rowfilters it (countryempty ANDcreator_nameempty → drop). - SPA hydration lag — creator pages may need slightly longer waits than product pages (6s default vs 5s). Too fast → 0 rows.
- Time filter labels vary by ranking (
日榜vs近28天) — pass the label you see on the page; the bundled click script matches by exact text. - Schema differs between rankings —
creator_scraper.pyreads<thead>dynamically so the CSV column set varies by ranking. Don't assume a fixed schema in your downstream code; iterate overdict.keys(). jqmay not be installed — decode screenshots manually withpython -c+base64.- Python defaults to a locale-specific encoding on Windows — always
open(..., encoding='utf-8-sig')when reading the produced CSVs.
CSV output schema
Base columns (always present):
page, ranking, rank, creator_name, creator_id, creator_category, country
Plus one column per <thead> header (Chinese, kept as-is). The 达人/达人信息 column is duplicated raw under its original header for traceability. All CSVs are utf-8-sig (BOM) for Excel.
When using creator_filtered.py, two extra columns are prepended:
filter_country, filter_time
Session hygiene
- Default session
"fastmoss-creators"for all calls (isolated from sister skills' sessions). Override via--sessionif needed. - At task end:
curl -d '{"action":"close_session","args":{},"session":"fastmoss-creators"}' http://127.0.0.1:10086/command. - All bundled scripts use
newTab:Trueon first navigate so they work whether or not the session pre-exists.
达人搜索 (creator search) — not scripted
The search page (/zh/influencer/search) takes free-text input and returns creator cards, not a table. Not covered by the bundled scripts. To scrape it, write a custom evaluate that:
- Fills the search box (
input[placeholder*=搜索]or text-match). - Waits for result cards.
- Extracts card data via DOM queries.
Use references/environment.md rules when writing that JS.