Mode Routing
First determine which result the user wants:
- Chart Mode: The user wants the Top N, prices, reviews, team, or person-months for a certain Steam Indie category. Execute the two-stage chart workflow below.
- Single-Game Case Mode: The user names a game and asks why it succeeded, what it went through, how to develop/market/run accounts for it, or requests a research report on that game. Read and execute references/single-game-case-study.md. This mode is not subject to the chart mode's restriction that you must stop after completing Stage 1.
Both modes must distinguish verifiable facts from analytical judgments; however, the reader-facing PDF does not include the research process, evidence disclaimers, or internal working notes. Evidence boundaries should be expressed through natural, concise body text, and research records should be stored separately.
Chart Mode
Strictly divide the research into two stages. By default, execute only Stage 1; after Stage 1 delivery is complete, you must stop and must not casually begin team or person-month investigation. Only after the user explicitly approves Stage 2 should you additionally investigate the team, timeline, and person-months.
Before starting, read references/research-schema.md, and output according to its fields, calculations, and evidence standards.
Fixed Standards and Variable Category
The following standards are fixed:
- Main tag: Indie
- Sort: Top Sellers, preserving the original order of the Steam page
- Region: United States, URL parameter
cc=us - Interface language: English, URL parameter
l=english - Reviews: the cumulative review count on the review details page
All Languages, not Recent Reviews, and not the single-language review count that may be displayed on the store page - Price: the original list price of the standalone game in US region USD
Basic; do not use discounted prices, package prices, bundle prices, DLC prices, or dollar figures that happen to appear in the page body - Metrics:
All Languages review count × US Basic list price - Exclude free games by default:
is_free=true, entries whose price shows as Free or that can only be played without a Basic price are not counted toward Top N; continue loading the Steam main chart downward until the number of paid entries requested by the user has been collected. Free entries are written to the collection log and do not enter the results table.
The second category besides Indie is a variable for each task, such as Simulation, Strategy, RPG, or another user-specified category:
- When the user gives a category, select that category on the Steam Indie page;
- When the user gives an already filtered link, take the category currently displayed by the link as authoritative, and verify the category name on the page;
- When the user gives both a category and a link but the two conflict, first point out the conflict and ask the user to confirm;
- When the user gives neither a category nor a filtered link, first ask which Indie subcategory is to be researched this time;
- Do not remember the previous Simulation or any other category as the default for the next time, and do not hard-code any facet parameter.
The basic entry point can use https://store.steampowered.com/tags/en/Indie/?flavor=contenthub_topsellers&cc=us&l=english, then select the second category according to this task. The final result must record the actual category name and the final filtered URL.
Hard Boundary: Two Stages
Stage 1: Top N Paid Entries
Stage 1 follows the user-specified quantity N(20 if unspecified) Collect and verify the Top N paid entries, review counts, US regional unit prices, release dates, and "minimum amount earned (rough estimate)". The original ranking of the chart is retained in steam_source_rank, and the order after filtering out free entries is written to source_rank. At this stage, the company's total headcount, funding, or outsourcing situation must not be treated as project team facts; team deep-dive and person-months are still left to the second stage.
The first stage must simultaneously generate the following readable deliverables:
- UTF-8 CSV: complete fields and evidence basis;
- Bilingual HTML/PDF: cover (using the Steam cover), methodology description, and entry pages arranged vertically by ranking. Each page must at least include the English title, Chinese title or translated name, bilingual summary, All Languages review count, US region Basic original price, minimum amount earned (rough estimate), release date, developer/publisher. Before the team and person-month columns are approved in the second stage, they must explicitly state "待补查 / Pending second-stage research" and must not be left blank or guessed.
Second stage: team and person-months
After explicit user approval, all N or user-specified candidate games may be investigated. Full tasks are preferentially divided into three groups of approximately equal size by count; for example, Top 20 is divided into 1–7, 8–14, 15–20, and Top 50 is divided into 1–17, 18–34, 35–50. Each group independently saves JSON, and finally the main task merges, deduplicates, and verifies rankings 1–N. When no sub-agents are available, execute serially in the same grouping order without changing the evidence basis.
The second stage is entered only after the user has seen the first-stage results and explicitly agrees. The user may request an investigation of all N, or may select only candidate games.
After the first stage is completed, you must ask:
The Top N Steam paid entry data and readable PDF are complete. Do you want to proceed to step two and additionally investigate team size, development cycle, and person-months? You can investigate all N, or you can first select candidate games you are interested in.
After sending the question, stop and do not continue on your own.
First-stage execution process
1. Open and verify the chart
Open the chart using the user-visible in-app browser. Do not rely only on search engine summaries or third-party aggregator sites.
Before collection, confirm:
- The page interface is in English;
- The region is the United States, and the price is displayed as
$; - The main tag is
Indie, and the currently selected category is the second category specified by the user this time; - The current chart is
Top Sellers; - The data comes from the main results list.
Exclude Featured、Popular Discounted、Popular Titles、Top Demos, event recommendations, similar products, personalized recommendations, and other non-main-chart modules.
2. Obtain the top N paid entries of the chart
Record the results in the existing order of the main chart. Keep clicking Show More or scrolling to load until at least N unique, paid App IDs are obtained, then take the filtered rankings 1–N; skip free entries and record them in the notes/log.
- Deduplicate by App ID, not by title;
- Do not adjust the Steam ranking based on personal judgment;
- When encountering free games, exclude them and continue filling downward; DLC, prologues, demos, software, or other anomalous entries still retain their paid ranking and are annotated, not silently replaced;
- For each entry, retain a reviewable detail page URL with
cc=us&l=english.
3. Open detail pages one by one
From the chart, enter each entry's Steam detail page and record the developer, publisher, release date, number of supported languages, and entry type.
Price reading rules:
- Find the purchase area for that individual entry;
- Read the
Basiccorresponding original/standard sale price; - During page promotions, still record the original price before the strikethrough;
- Do not take
Deluxe、Complete Edition, subscription, package, or bundle prices; - Do not scrape the first
$from the entire page text; game titles and body text may also contain dollar figures; - If there is no Basic price, leave it blank and state the reason; do not guess the price.
4. Get the review counts for all languages
Click the review entry on the detail page, go to the review page, and open the language filter. Read the cumulative count shown after All Languages in parentheses or next to it.
- Must record the exact integer, preserving the original value shown on the Steam page;
- Also record the review label for
All Languages; - When it can be reliably obtained, record the global positive review rate; otherwise leave it blank and do not infer it;
- Do not treat
English、Recentor the summary review count on the store page as All Languages.
5. Calculate and save
Calculate row by row:
review_based_lower_bound_signal_usd = all_languages_review_count × us_basic_list_price_usd
This value is presented as "minimum money earned (rough estimate)," but it is not actual revenue, net revenue, sales volume, or number of buyers. It does not account for purchasers who did not review, nor does it deduct refunds, platform cuts, taxes, regional pricing, free keys, discounts, or historical price differences; therefore it is only suitable as a rough screening signal under a consistent methodology.
By default, save as UTF-8 CSV (saved to the current project's research output directory):
research-output/YYYY-MM-DD-indie-<类别>-topN-paid-us-en.csv
Also generate to the same output directory:
YYYY-MM-DD-indie-<类别>-topN-paid-bilingual.htmlYYYY-MM-DD-indie-<类别>-topN-paid-bilingual.pdf
The PDF must reach the readability level of the project's existing final version: cover image, bilingual methodology page, a separate page for each entry, stable metric cards, and source links. Do not upload to Feishu or other external services without the user's explicit request.
Phase 1 delivery check
Confirm item by item before delivery:
- Exactly N rows,
source_rankconsecutive from 1–N,steam_source_rankunique and increasing in Steam main chart order; - N paid App IDs are unique, and the results table contains no free entries;
- The filtered ranking is consistent with the Steam main chart source order;
- Review counts come from
All Languages; - Prices come from the US region USD Basic original price;
- Every computable result can be recalculated from the review count and unit price;
- Excluded free entries, missing prices, DLC, non-games, or other anomalies all have notes or collection logs;
- The output clearly states the collection date, source URL, region, language, and metric disclaimer.
If a field cannot be verified on the Steam page, do not fabricate it or fill it in as fact using a third-party estimate. Keep the value blank, and state the reason for failure and the pages attempted.
Phase 2 execution requirements
After the user explicitly approves, then investigate the user-specified game:
- Core team size and role composition;
- Development start time, Early Access time, official release time;
- Effective development months;
- Person-month estimate and calculation range;
- Factors that would distort the person-month judgment, such as outsourcing, part-time work, publisher support, and financing;
- Traceable sources, publication dates, and confidence levels for each conclusion.
External multi-source verification protocol
When Steam does not provide an official website entry, the official website page has no team information, or links cannot be opened, you must not simply stop and write "cannot be found." You must continue to conduct one targeted external search, covering at least the applicable items among the following paths:
- Search using combinations such as "game name + developer + team / founder / credits / interview";
- Directly check the developer's official website, the publisher's official website, and the company's About / Team / Credits / Careers pages;
- Check development logs, GDC/public talks, developer interviews, publisher press releases, and credible media reports;
- Steam social accounts, Discord, LinkedIn, and personal homepages may only be used as leads; only content that can be clearly attributed to the development team and is traceable may be entered into the table.
Source priority: developer/publisher first-party pages > developer interviews, public talks, development logs > credible media > search snippets. Search snippets and AI answers may only be used as leads, not as final evidence. For each confirmed conclusion, save at least the source title, URL, date (if any), and a short quotation/accurate summary.
Vague statements such as total company headcount, publisher headcount, or "dozens of people" must not be directly treated as the headcount for a single project. It must be labeled as "company-level / project-level / core team / contributors"; when attribution is not possible, keep it unknown.
Person-month estimation discipline
Fact fields (team size, development start, Early Access, official release) and estimation fields are listed separately. Calculate only when both the team size and the number of effective development months have traceable basis:
person_month_estimate = team_size × effective_development_months
Prefer outputting a range or a conservative lower bound, and in support_factors / research_notes state the basis, whether it covers only the core team, and whether it includes outsourcing/publisher support. When any key fact is missing, write Not estimable, and do not package an unknown headcount multiplied by an unknown period into a precise value.
Phase 2 delivery
Phase 2 generates by default:
YYYY-MM-DD-indie-<类别>-team-personmonths.json: N independent evidence records;- Bilingual readable PDF: one page per game, including cover, introduction, number of reviews, US region unit price, minimum amount earned (rough estimate), release time, team/personnel, development cycle, and person-months;
- Editable HTML (if using the project's report generator).
If a script is used to generate the report, the script should take the category, quantity, date, and input file as parameters; when changing the category, the file name, input data, and report title must be changed accordingly, and a certain category must not be hardcoded. The script output should maintain the fields, evidence, and disclaimers specified by this Skill.
Pre-delivery PDF check: the page count should be cover + methodology explanation + number of game entries; rankings are continuous and App IDs are unique; spot-check free games, DLC, extremely long titles, and the last page; confirm that "minimum amount earned" is still clearly marked as a rough estimate, not actual revenue.Not disclosed / Not estimable The reason and the source search scope must be retained.