Top Brand Position Tracker logo

Top Brand Position Tracker

Organization
joomcode
top-brand-position-tracker

Ranks the brands within one Mercado Livre (Brasil) category by estimated weekly revenue and tracks how each brand's position changes between periods, using JoomPulse. Each run builds today's brand-ranking table and offers it for download; to see how positions moved, the user sends a brand table from a previous period and the skill shows each brand's movement (rose, fell, new, or out). The baseline is whatever table the user supplies — no hidden session memory. Use it to see the top brands in a category and which are rising or falling. Triggers: "top brands in this category", "which brands are growing", "brand ranking", and the pt-BR "principais marcas da categoria", "ranking de marcas", "quais marcas estão crescendo". Mercado Livre (Brasil) only; sales and revenue are JoomPulse estimates, not real transactions. To rank sellers (shops) rather than brands use the top-sellers-in-category skill; for category market size use the category-opportunity-index skill.

Overview

Publisherjoomcode
Repositoryjoompulse-skills
Skill nametop-brand-position-tracker
Stars
54
Forks
4
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by joomcode on GitHub. Read the source before you install it.

Installation

Install the Top Brand Position Tracker AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/joomcode/joompulse-skills/tree/main/skills/top-brand-position-tracker
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/joomcode/joompulse-skills.git /tmp/joompulse-skills
mkdir -p .claude/skills
cp -r /tmp/joompulse-skills/skills/top-brand-position-tracker .claude/skills/top-brand-position-tracker
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Top Brand Position Tracker in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Top Brand Position Tracker on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Top Brand Position Tracker is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Top brand position tracker

This skill ranks the brands inside one Mercado Livre (Brasil) category by estimated weekly revenue and tracks how each brand's position in that ranking moves over time. It aggregates each brand's active listings into a leaderboard.

Each run builds today's brand-ranking table for the category and offers it as a downloadable table. To see how positions moved, the user supplies a brand table from a previous period (the one this skill produced before); the skill matches brands by name and shows each brand's position movement. The baseline is whatever table the user provides — there is no hidden session memory and nothing is stored server-side. A standalone run is the ranking only: no movement column and no legend.

This is different from ranking sellers or sizing a category. To rank sellers (shops) in a category, or to track how a seller leaderboard moves over time, use the seller-ranking skills. To report a category's market size and opportunity (estimated GMV, sales, number of sellers, average ticket), use the category opportunity skill. This skill answers "which brands lead this category, and how did their positions move since a previous table?"

Prerequisites

  • JoomPulse MCP access is configured for the current agent environment.
  • The user provides the category to analyze — a category name, a category identifier, or a JoomPulse category link.
  • For a period comparison, the user supplies a previous brand table that this skill produced for the same category (pasted or uploaded). Without it, the skill produces a standalone ranking.
  • The available JoomPulse tools can look up the active listings in a category along with their estimated weekly sales and revenue, review counts, and prices.

If JoomPulse MCP access is unavailable, stop and explain that the skill requires JoomPulse MCP setup before it can rank brands and track their positions.

Scope

  • Mercado Livre (Brasil) only. JoomPulse also covers Shopee Brasil, but Shopee brand coverage is incomplete by construction — only items with tracked sales carry a brand, so brands are systematically missing and a ranking would imply a completeness the data cannot support. Brand shares and brand leaderboards must not be computed for Shopee; this analysis exists only for Mercado Livre.
  • Sales and revenue are JoomPulse estimates derived from historical listing data — not real transactions. Disclose this in every output. By contrast, review count is real Mercado Livre history — say so, it is a strength of the report.
  • Read-only. The skill never signs in as the seller and never modifies anything; it does not store the ranking — the user keeps the downloadable table and brings it back next period.
  • The baseline is user-supplied. Never claim a position change without a previous table to compare against, and never infer or fabricate one from memory.
  • Language: write in the language of the message you are answering, and default to pt-BR only when that is unclear. Never infer the language from the store, its listings or the marketplace — those are Brazilian whatever language the seller writes in, so a seller who asks in English gets the whole report in English.
  • Keep the workflow invisible. The seller wants the ranking, not a play-by- play. If one approach does not return data, switch to another quietly; only if every approach fails do you say one short, friendly sentence.

Workflow

Step 1 — Resolve the category, gather listings, aggregate brands

  1. Ask the seller for the category if it was not given — a category name, a category identifier, or a JoomPulse category link. If only a name is given, resolve it to the matching current category (and its depth level) with JoomPulse, and confirm the match with the seller if it is ambiguous.
  2. Use JoomPulse to fetch every active listing in the category, with each listing's brand, estimated weekly sales and revenue, review count, and price. For a large category, broaden coverage in passes rather than silently capping — and if coverage is partial, say it was broad rather than presenting it as complete.
  3. Group the listings by brand and aggregate per brand. Before grouping, normalize brand names — trim and unify casing, fold obvious variants and spellings of the same brand together, and standardize generic placeholders (for example "Outro" / "Sem marca") — so one brand is not split across rows. Use this same canonical form again when matching brands across periods. Drop listings with no brand; if unbranded listings are material, mention how many had no brand rather than letting an unnamed bucket top the ranking. For each brand compute:
    • GMV estimado (semana) — total estimated weekly revenue across the brand's listings.
    • Vendas est. (semana) — total estimated weekly sales across the listings.
    • Anúncios — number of active listings for the brand.
    • Avaliações — total review count (real history).
    • Preço médio — average listing price (optional supporting column).
  4. Rank the brands by estimated weekly revenue, descending, to assign each brand its position (1 = top). If the seller asks to rank by units sold instead, rank by estimated weekly sales and say so. Keep roughly the top 20–30 brands for the table.

Step 2 — Present today's ranking and offer it for download

Render today's brand-ranking table (head it with the category name and the date). This table is the deliverable. Where the client can produce files, also offer it as a downloadable .csv / .xlsx so the user can save it and bring it back next period as the baseline; where it cannot, the markdown table stands on its own — never offer a download you cannot deliver. On a standalone ranking there is no movement column and no legend — just the ranking.

Step 3 — Offer comparison, and compare if a previous table is supplied

Invite the user to send a previous brand table for the same category to compare positions. If they provide one, match brands by canonical name (see Step 1) and for each brand compare its previous position with its current one:

  • rose N places → rose by N
  • fell N places → fell by N
  • same position → unchanged
  • not in the previous table → new
  • in the previous table but absent now → list it below the table as "saiu do ranking" — do not fabricate a position for it.

A position change requires both a previous and a current position for the same brand — never invent a trend. If no previous table is supplied, the ranking stands on its own (no movement column) and the user is told to save it for next time.

Output

Respond in the language of the seller's request (pt-BR by default), with no commentary about how the result was produced. Use plain markdown so it renders cleanly in any client.

There is one canonical brand-ranking table, used everywhere (in the response text and mirrored by the downloadable file). One row per brand, sorted by current position, with these columns:

  • Posição — current rank (1, 2, 3 …).
  • Variação — (comparison only) how the brand's position moved versus the supplied previous table. Omit this column entirely on a standalone ranking — with no previous table there is no movement to show.
  • Marca — the brand.
  • GMV estimado (semana) — the brand's estimated weekly revenue (estimate).
  • Vendas est. (semana) — the brand's estimated weekly sales (estimate).
  • Anúncios — listing count for the brand.
  • Avaliações — total review count (real history).
  • Preço médio — average listing price, or — if unavailable.

So a standalone ranking has the columns Posição | Marca | GMV estimado (semana) | Vendas est. (semana) | Anúncios | Avaliações | Preço médio; a comparison adds the Variação column right after Posição.

In the Variação cell (comparison only), mark each brand:

  • 🟢 subiu no ranking
  • 🔴 caiu no ranking
  • 🆕 novo (não estava no ranking anterior)
  • = sem mudança

The change column header is the word Variação — never a bare delta symbol.

A category has no JoomPulse page, so the table carries no category link — never build one from a categoryId. On a comparison, state the period being compared (for example "Comparado com a tabela de 12/06"). On a standalone ranking, invite the user to save the table and send it back next period to see how positions moved.

Disclaimer (every report):

⚠️ Vendas e receita são estimativas do JoomPulse com base no histórico de anúncios — não são transações reais. Avaliações são histórico real do Mercado Livre.

Visualization

Render the visuals every time the data supports them. As soon as the analysis is done, present the cards and charts described below as a self-contained visual panel — an artifact where the client renders artifacts, an inline widget where it renders widgets. Do not ask permission first, do not describe the panel instead of drawing it, and do not offer it as an optional extra: the cards and charts are part of the answer, not a follow-up.

  • Order: the cards first, then the charts, then the written read.
  • The data table always stays markdown in the response text, never inside the panel — the panel carries cards and charts only.
  • The estimate disclaimer always stays in the response text as well.
  • Skip an individual chart when its own data threshold is not met (each threshold is stated below): a chart nobody can read is worse than no chart. Skipping one chart never means skipping the panel.
  • Only the cards and charts specified below. Do not invent extra ones, and do not promote a categorical value to a bar — a chip or plain text is the honest rendering for it.
  • If no visual surface is available at all, fall back to the markdown table plus the same figures written as text cards. Never block on visuals, and never leave the answer without its numbers.

The panel contains:

  • Three cards:
    • Marcas ativas — the number of named brands in the ranking.
    • Líder — the #1 brand's name and its share % of total estimated weekly revenue across the ranked brands.
    • Maior alta — the brand that climbed the most and how many positions it rose. Only with a comparison (a previous table supplied); on a standalone ranking, drop this card or replace it with a neutral one — for example GMV total estimado (semana) of the ranked brands — never fabricate a rise.
  • Horizontal bar chart: the top ~10 brands by GMV estimado (semana), descending. Use a neutral single-hue ramp — this bar ranks size, it does not signal good or bad, so no semantic green/red.

Tables always render as markdown, on every surface — the ranked table lives in the response text, never inside a rendered visual.

Ranked table (always markdown, both surfaces)

The ranked table is the one canonical brand-ranking table defined in Output — the same columns on every surface. It lives in the response text, never inside a rendered visual.

The column headers, labels and disclaimers below are written in pt-BR because that is the default. They are a template, not literal strings: when the seller writes in another language, translate all of them — the headers, row values such as sim / não / ouro, and the disclaimer — and keep the structure, the emoji and the R$ money formatting, which stays the same in every language because the marketplace trades in reais. When the request is in English, no Portuguese is left anywhere in the answer.

  • Standalone ranking: columns Posição | Marca | GMV estimado (semana) | Vendas est. (semana) | Anúncios | Avaliações | Preço médio — no Variação column and no legend (with no symbols in the table a legend only adds noise).
  • Comparison (a previous table supplied): add the Variação column right after Posição. The change column header is the word Variação — never a bare delta symbol. Cell markers:
    • 🟢 subiu no ranking
    • 🔴 caiu no ranking
    • 🆕 novo (não estava no ranking anterior)
    • = sem mudança
  • Show the marker legend (🟢 / 🔴 / 🆕 / =) only in the comparison, where those markers actually appear — never on a standalone ranking.

Render the bar chart only when the data supports it; if there are too few brands to be meaningful, skip the chart and keep the table.

Formatting (both surfaces): round numbers and format in pt-BR — revenue as R$ 1,2 mi / R$ 850 mil / R$ 4.300; counts with . as the thousands separator (1.250). Keep the ⚠️ estimate disclaimer on every output.

Notes & Guardrails

The seller should never see a system or stack error — only a friendly next step.

  • The seller asks about Shopee: say plainly that Shopee brand data is too incomplete to rank — only items with tracked sales carry a brand, so a leaderboard would look authoritative while missing whole brands. Do not produce a Shopee brand ranking or brand share. Offer instead what Shopee data does support: category structure and concentration, or the best-selling items in the category. If the marketplace is unclear, ask first — an identifier beginning MLB is Mercado Livre, a bare 10–11 digit number is Shopee.
  • No category given or an ambiguous name: ask for the category (name, identifier, or JoomPulse link) before going further.
  • No active listings or no brands in the category: say no brand data is available for this category right now, and offer to try a different or broader category.
  • Mostly unbranded listings: rank only the named brands, and mention how many listings had no brand rather than letting an unnamed bucket dominate the top.
  • Market data temporarily unavailable: retry once quietly; if it is still down, say market data is temporarily unavailable and suggest re-running. Never paste internal error text, HTTP codes, or field names to the seller.
  • No previous table supplied: render today's ranking only (no movement column, no legend) and invite the user to save it for next time.
  • Supplied table is for a different category, malformed, or unreadable: say so plainly and fall back to the standalone ranking; do not force a misaligned comparison.
  • Never silently limit coverage — if the category is large and only part of it was scanned, say the coverage was broad rather than presenting it as complete.

Frequently asked questions

What does the Top Brand Position Tracker AI skill do?

Ranks the brands within one Mercado Livre (Brasil) category by estimated weekly revenue and tracks how each brand's position changes between periods, using JoomPulse. Each run builds today's brand-ranking table and offers it for download; to see how positions moved, the user sends a brand table from a previous period and the skill shows each brand's movement (rose, fell, new, or out). The baseline is whatever table the user supplies — no hidden session memory. Use it to see the top brands in a category and which are rising or falling. Triggers: "top brands in this category", "which brands a...

Why use Top Brand Position Tracker on TypingMind?

Because you install it once and use it with any model. Top Brand Position Tracker is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Top Brand Position Tracker in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/joomcode/joompulse-skills/tree/main/skills/top-brand-position-tracker. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Top Brand Position Tracker?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Top Brand Position Tracker?

As many as you like. As long as a model supports skills, you can use Top Brand Position Tracker with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Top Brand Position Tracker AI skill free?

Yes. It is published on GitHub by joomcode under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇