Fast Mover — How it works
← Back to the tool Hub

One list, three doors — the price-raise build.

The Fast Mover Alert answers one question: “which in-stock items are selling fast enough at their current price that I should think about raising it?” An item gets on the list by passing any one of three doors. This is a price-raise list, not a restock list — and it runs entirely on confirmed sales tables. The sell-cycle machinery (in-stock velocity, stockout pressure, runway) is set aside for now — see the note in section 4.

1 The three doors

An item joins the list if it clears the noise floor (at least 3 sales in the last 30 days, in stock, READY) and opens any one of these doors:

📅

Door 1 — Calendar rate

≥ 1 unit sold per day

Over the days it’s actually been available, this item averages a sale a day or more. Steady, real demand — not a one-off spike.

Why: a unit a day at a fixed price is the classic “I could charge more and still sell it” pattern. The denominator is capped at the item’s age, so a brand-new item isn’t unfairly divided by a flat 30 days.

Door 2 — Fast shelf

days-to-sell ≤ 3

The catalog’s own “days to sell” for this item is three days or less — it clears the shelf almost as fast as it lands.

Why: the quickest, bluntest signal of underpricing. If it barely rests on the shelf, the market is telling you the price is too low.
💎

Door 3 — Revenue pace

rate × price ≥ Rp 500K / day

Sell rate × current price = rupiah moving per day. Even at under a unit a day, a pricey item can push serious money — and deserves a look.

Why: folds price and speed into one number, so a cheap high-volume item and an expensive steady one both rank fairly. This is also how the whole list is ranked.

2 The signal — what kind of fast

Every row carries a price_raise_signal that names why it’s fast, from strongest pricing power to gentlest. It’s the first thing to read on a card:

SignalMeansRead it as
A — sells out on arrival No shelf-time was ever recorded, yet it has lifetime sales — it goes the moment it lands. Strongest raise candidate. The market never even let it sit.
B — very fast shelf Days-to-sell ≤ 3. Clears in days. Almost certainly room to raise.
C — steady fast Calendar rate ≥ 1 unit/day. Reliable everyday demand. A small raise likely sticks.
D — watch On the list only through the revenue-pace door (big rupiah/day, slower unit speed). Watch it. Value is high; test a raise carefully.

3 The ranking — revenue pace

The list sorts by revenue pace = calendar sell rate × current price (rupiah per day). Row 1 is the item moving the most money each day at today’s price — the biggest prize if a raise sticks, and the most expensive mistake if it’s underpriced. It’s derived the same way in both the dashboard and Sparkle’s cards, so the two always agree.

4 What’s set aside (and why)

The cycle machinery is parked. The old build leaned on a sell-cycle table (gld_item_sell_cycle) for in-stock velocity, demand pressure (stockouts hiding real demand) and runway. That table is unconfirmed — pending Shan (Sōdan) — so this build runs without it. The cost: the strongest “pricing power” signal, the one that spotted items whose stockouts were masking demand, is not detectable here. When the cycle table is confirmed we bolt that door back on. Until then, treat this as a solid velocity list, not a pressure one.

Also gone with the cycle: runway (days of stock left), the urgency A/B/C tiers, and “est. lost revenue if ignored”. This build doesn’t estimate a rupiah-at-risk number, so nothing here rests on the old unconfirmed 14-day lead-time assumption.

5 Try it yourself

Type an item’s numbers and watch which doors open. Leave days-to-sell blank to model an item that sold out before any shelf-time was recorded.

how long it’s been READY
blank = sold out on arrival
Calendar rate
units sold per day available (capped at age)
Revenue pace
rate × price — the ranking key
Days to sell
shelf-time per unit from the catalog
📅 Calendar rate
rate ≥ 1/day
⚡ Fast shelf
days-to-sell ≤ 3
💎 Revenue pace
≥ Rp 500.000/d

6 What happens after the list exists

WhereWhat you get
Dashboard (this tool)The full list — filter by signal, sort, export. Per-row 📝 Resolve (with a note) and ✕ Ignore.
Sparkle (Discord)Change-detection watch, hourly (09:00–19:00 WIB). It keeps a snapshot of the list and only pings on a 🆕 new item or a 🔺 escalation (signal getting more urgent) — an item cooling off stays quiet. Cards carry ✅ 📝 😴 🚫 buttons and are ranked by revenue pace. Manual /alerts check always shows the current list without disturbing the watch.
Shared memoryDashboard and Discord write the same state file, and build the same signature (TF:<id>:<signal letter>) — resolve or ignore on either side and the other goes quiet too, so nothing is handled twice. Notes are kept, so future-you knows what past-you was thinking.
Verification loopA Resolve is quiet for 3 days, then the item reappears (if still flagged) with your old note attached — so you can judge whether the raise actually changed the pace. Only ✕ Ignore is forever.
EscalationHandling an item at signal C does not silence signal A — if it escalates, it comes back. Bad news always gets through.

No-cycle price-raise build. The three doors are fixed gates in the query (rate ≥ 1/day, days-to-sell ≤ 3, revenue pace ≥ Rp 500K/day), not calibrated percentiles. Reference SQL: KyouTools/sql/kyou_fast_mover_query.sql, saved in Metabase under toofast → main.