From fbed3957b4226912e12666e7c73e98ec1dd2b073 Mon Sep 17 00:00:00 2001 From: Nikita Andreev <73538828+fiharet34@users.noreply.github.com> Date: Tue, 8 Sep 2026 11:46:11 +0100 Subject: [PATCH] Fix growing-leaf-category-tracker: show the number the ranking is built on, and stop the floor moving between runs The skill ranked niches by month-over-month growth and was forbidden from displaying it - Output said "exactly these five columns ... not a displayed column" while Presentation rules prescribed a header for that column and the panel required the growth figure on a card. On a text surface it appeared nowhere: one run showed fifteen rows with the leader called "o maior salto" and no percentage anywhere. Both growth columns are now displayed. The size floor was invented per run. Two runs on one category, minutes apart, chose R$ 1.000.000 and R$ 300.000, and the second run's leader sat below the first run's floor - so the same question returned a different top niche. The floor is now the greater of R$ 300 mil and 0,02% of the parent category's estimated monthly revenue, which is stated in the output. A fixed figure cannot serve both marketplaces: Mercado Livre ranks deep leaf niches, Shopee ranks whole level-3 categories. Also: revenue and unit growth read together, since a niche can grow revenue while selling fewer units; concentration and revenue per seller as columns, and seasonality as a Mercado Livre reading only, because Shopee carries none; identifier-based navigation on both marketplaces, replacing a per-category link that does not resolve; full money precision on Mercado Livre with Shopee exempt, its figures being rebuilt from rounded counters; exact coverage counts; a category-specific disclaimer with the monthly lag; retry after a pause; and an empty result separated from an outage. --- skills/growing-leaf-category-tracker/SKILL.md | 126 +++++++++++++++--- 1 file changed, 104 insertions(+), 22 deletions(-) diff --git a/skills/growing-leaf-category-tracker/SKILL.md b/skills/growing-leaf-category-tracker/SKILL.md index 7ff9bb6..e7af4b2 100644 --- a/skills/growing-leaf-category-tracker/SKILL.md +++ b/skills/growing-leaf-category-tracker/SKILL.md @@ -134,8 +134,10 @@ deepest level the marketplace actually supports: different skill's territory, so hand it over rather than faking depth here. For each kept category, get the current monthly estimated revenue and sales, the -number of active sellers, the number of products, and the month-over-month revenue -growth. All five reported columns exist on both marketplaces. +number of active sellers, the month-over-month growth of **both revenue and +units**, the concentration of orders on the leading seller, and revenue per +seller. Every reported column exists on both marketplaces, but concentration is +computed differently on each — never compare that figure across marketplaces. On Shopee, **work out the most recent month explicitly** instead of trusting a latest-month indicator — that indicator is unreliable there — and state which month @@ -144,14 +146,64 @@ the figures describe. ### Step 3 — Keep the fast-growing ones From those sub-categories, **keep only the ones that are growing fast** (strong -month-over-month revenue growth), then order the kept niches by growth, fastest -first. Use the always-positive monthly totals for size (revenue, sales, -products); growth is the filter that selects the niches — never present a change -figure as a total or as a table column. +month-over-month revenue growth), then order the kept niches by revenue growth, +fastest first. + +**Apply a size floor before ranking, and state it.** Month-over-month growth +explodes off a near-zero base: a niche going from R$ 200 to R$ 1.600 reads +700% +and leads the table over one that added hundreds of thousands. Set the floor +**relative to the parent the seller named** — at least **0,02% of that category's +estimated monthly revenue, and never below R$ 300 mil**. A fixed figure cannot +serve both marketplaces, because they rank different units: deep leaf niches on +Mercado Livre against whole level-3 categories on Shopee, which are far larger. +Say under the table which floor was used and how many niches it excluded. Without +a stated floor the same category returns a different leader from run to run. + +**Read revenue growth and unit growth together.** A niche can grow revenue while +selling *fewer* units: the gain came from a higher average ticket, not from more +demand, and a seller who wants volume should not enter it — say so plainly. The +reverse, units growing faster than revenue, means the average price is falling: +easier to enter, margin under pressure. Flag both cases. + +**Collapse a parent and its dominant child** — Mercado Livre only, since Shopee +has nothing below the level being ranked. A deep tree ranks a sub-category and its +own child separately, so a parent holding nearly all its revenue in one child +appears twice and reads as two opportunities. Where a child accounts for almost +all of its parent's revenue, keep one row, name the other beside it, and say they +are the same niche — twelve rows should mean twelve choices. + +**Identify the surviving row by the same identifier every time.** Where a pair is +collapsed, keep the row under the **parent** and name the child beside it. The +identifier is the only way the seller can find the niche again, and the table is +meant to be saved and compared next period — the same niche appearing under two +different identifiers across runs defeats the purpose of showing one. + +**Then say which of the ranked niches is actually enterable.** Growth alone is not +room: + +- **Concentration.** Where one seller holds a large share of the category's + orders, strong growth is not open space; name those niches and say the seller + would be taking on a dominant incumbent. +- **Revenue per seller.** A large, fast-growing niche split across tens of + thousands of sellers is worth less than a smaller one with few. Name the best + and the worst rather than leaving the columns to be divided by hand. +- **Seasonality — Mercado Livre only.** Where the category is marked seasonal with + a known peak month, say whether the growth is the start of the ramp (time to + position) or the middle of the curve (entering behind it). **Shopee carries no + seasonality data**: do not infer it there, and where the calendar suggests a + season say that as timing, not as data. + +Lead the written read with the most enterable niches — strong growth with low +concentration — not simply the fastest-growing. + +Keep levels and changes distinct: use the always-positive monthly totals for size, +and never present a change figure as if it were a total. Month-over-month revenue growth works on both marketplaces, and the growth ranking survives on each. On Shopee only about three months of history exist, so compare -the most recent month with the one before it and read nothing longer-run into it. +the most recent month with the one before it and read nothing longer-run into it — +which makes the floor matter more there, not less, because a short history makes a +percentage noisier. ## Output @@ -163,22 +215,43 @@ folded into their level-3 ancestor and cannot be separated here. The ranking always renders as a markdown table: -| Categoria | Qtd. vendedores | Receita (mês est.) | Vendas (mês est.) | Produtos | -|---|--:|--:|--:|--:| - -- Exactly these five columns on both marketplaces — fast growth is the filter that - selects the niches, not a displayed column. -- On Mercado Livre each category links to its JoomPulse category dashboard page. - **There is no JoomPulse category dashboard link for Shopee rows** — leave the - name as plain text and never invent a link. +| Categoria | Cresc. receita | Cresc. vendas | Qtd. vendedores | Receita (mês est.) | Vendas (mês est.) | Monopolização | Receita/vendedor | +|---|--:|--:|--:|--:|--:|:--|--:| + +- **Exactly these eight columns on both marketplaces.** Concentration and revenue + per seller are what turn a growth list into an entry decision, so they belong in + every run rather than only the ones where they occur to you. +- **Show the growth the ranking is built on** — never rank on a number the table + does not display. Both growth columns are month-over-month. +- **Monopolização** carries the tier and the raw value together, as `Baixa (0,180)` + — the tier alone hides how close two niches are. +- **Full precision in the money columns on Mercado Livre** — `R$ 468.400,35`, never + `R$ 468 mil`: this is a ranking, and rounding collapses the rows into each other. + **Shopee is exempt.** Its figures are rebuilt from the platform's own rounded + sold counters, so exact digits there would be false precision — round Shopee + money to thousands and say once that the source is rounded. +- **Identify each row by its category ID beside the name.** Neither marketplace has + a working per-category deep link: on Shopee there is none at all, and on Mercado + Livre a URL carrying a category identifier resolves to the same general + categories page. So give the seller the route in one line below the table and + **never render a per-row URL as though it opened that niche** — the ID is what + lets them find it, and a link that lands somewhere general while looking specific + is worse than none. +- Under the table, state the size floor used, the period compared, and how many + niches were read against how many the ranking shows. **Give those counts + exactly, never rounded or hedged** — "about 900" cannot be checked against the + data, and a coverage claim nobody can audit is worth little more than none. **Disclaimer (every report) — use the variant for the marketplace you queried.** Mercado Livre: -> ⚠️ Receita e vendas são estimativas do JoomPulse com base no histórico de -> anúncios — não são transações reais. / Revenue and sales are JoomPulse -> estimates based on historical listing data — not actual transactions. +> ⚠️ Receita, vendas e crescimento da categoria são estimativas de mercado do +> JoomPulse — não são transações reais, e o crescimento mês a mês herda essa +> margem de erro. A base mensal de categorias pode ter até ~31 dias de defasagem. +> / Category revenue, sales, and growth are JoomPulse market estimates — not +> actual transactions, and the month-over-month growth inherits that margin of +> error. The monthly category data can lag by up to ~31 days. Shopee: @@ -243,7 +316,16 @@ The seller should never see a system or stack error — only a friendly next ste the bar on what counts as fast growth. - **Negative or odd growth:** some niches may be shrinking; surface that honestly rather than hiding it, and never invent a positive trend. -- **Market data temporarily unavailable:** retry once quietly; if it is still - down, say market data is temporarily unavailable and to try again. Never paste - internal error text, HTTP codes, or field names to the seller. -- **Never silently limit coverage** — if you rank only some of the niches, say so. +- **Missing values.** Show `—` for any figure that is unavailable, and never print + `0` for something that was simply not measured. +- **Market data temporarily unavailable:** retry once after a short pause rather + than immediately; if it still fails, say the service is busy and to try again in + a few minutes. Never paste internal error text, HTTP codes, or field names to + the seller. +- **An empty result is not a failure.** A category with no niches above the floor + is an answer — say that, and offer to lower the floor or widen the parent. Never + report a genuine empty result as an outage. +- **Never silently limit coverage.** State how many niches were read against how + many the ranking shows. Where the pull can be ordered by growth, one page is + enough for a top-N and nothing unread grows faster — say so; otherwise page until + a pull comes back short.