Pricing problems, by urgency
Every product where at least one confidently-matched competitor is cheaper than us right now, worst gap first. ~70% of the catalogue sits at RRP parity — the toggle below collapses that noise so only genuine exceptions show.
| ◉ | Product | Status | Our price | Best competitor | Seller | Gap | Gap % | Since |
|---|
Where competitors have the better price
The competitive picture per product — who beats us, by how much, and when that gap first appeared.
Where we have the cheapest price
Products where Audio Monkey beats every tracked competitor — sorted by how big our advantage is.
| Product | Our price | Next cheapest | Seller | Our advantage | Headroom |
|---|
Revenue upside — price-raise candidates
Where we're the cheapest by a meaningful margin, we're likely under-pricing. Raising toward the next-cheapest competitor captures margin without losing the price-leader position. Estimate assumes matching to just under the next competitor.
| Product | Our price | Next competitor | Suggested price | Margin/unit gained |
|---|
Marketplace buy-box — eMAG & Altex
On marketplaces where Audio Monkey also sells directly, "competition" splits into two layers: our own listing vs. our own site (consistency), and our own listing vs. other sellers on the same product (the buy box). This shows the second layer — who holds the buy box per SKU per marketplace, confidently-matched offers only.
| Product | Marketplace | Status | Our listing | Cheapest other seller | Seller | # sellers |
|---|
Own-channel consistency — #13
Our own marketplace listing price should match our own audiomonkey.ro price, and if we're on both eMAG and Altex those should agree with each other. A mismatch usually means a manual edit on one channel that never propagated.
| Product | Channel A | Price A | Channel B | Price B | Gap |
|---|
Market position
The strategic view — not "what do I do about this SKU" but "how healthy is our position overall, and where should attention go."
Gap distribution — #5
Where the whole catalogue sits vs. the market. The tall bar at 0% is the RRP-parity majority; the tail to the left is where competitors undercut us.
Share of cheapest — #40
Across matched SKUs, who holds the lowest price most often.
| Seller | Wins / SKUs contested | Share |
|---|
Match coverage by brand — #20, #68
What fraction of each catalogue has a confident competitor match, for the brands actually configured in price_match_rules (docs/competitors.md's tracked set) — not every raw Shopify vendor value, most of which aren't real brands worth chasing matches for. Brands with matching deliberately disabled (near-exclusives) are labeled, not counted as gaps.
| Brand | Matched / total | Coverage | Status |
|---|
Brand scorecards — #65
One tile per tracked brand: parity rate, undercut count, biggest gap, cheapest-share — the whole picture in one row.
Category rollup — #66
Matched products grouped by category (inferred from the product title's first word — Boxe/Casti/Amplificator etc., since the catalog has no category field). Click a category to drill into its SKUs.
Brand vs. brand — #67
Compare competitive position across two tracked brands side by side.
Reseller clusters — #15
Sellers appearing as a competitor on 2+ products — a repeat name is the pattern worth watching for a grey-market reseller. (The suppress-self guardrail is structural: our own listing is filtered out before it can ever be counted as a competitor anywhere in this dashboard.)
| Seller | Products | Where seen |
|---|
Exclusive-brand watchlist — #99
Brands where matching is off by policy (near-exclusive distribution). A calm confirmation nothing's changed — or a flag if a competitor has appeared.
Trends
Lines and bands, not tables — where the History and Anomalies panels answer "what happened," this answers "what does the shape look like." Depth grows with the live scraper; a thin history draws a thin chart rather than a misleading flat one (see #30).
Per-brand sparklines — #7
Our price vs. the cheapest competitor, one tiny chart per SKU in a brand — an RRP-break moment jumps out across a whole brand at once.
Price band — #8
For one product, our price against the shaded competitor min–max band over time.
Volatility — #9
Coefficient of variation of observed competitor prices — how much a SKU's price bounces around. Needs 3+ observations per product to mean anything.
| Product | Volatility | Observations |
|---|
Recoveries — #9
A competitor whose price broke from RRP and has since returned to parity — the exception no longer needs attention.
| Product | Source | Recovered |
|---|
Seller-count trend — #12
On marketplace listings, whether the number of distinct prices observed is rising or falling — an early warning of growing pressure before anyone actually undercuts us.
| Product | Marketplace | Change | Direction |
|---|
History
What changed over time — sourced from the append-only price_history log. Depth grows as the live scraper accumulates more runs; a fresh install shows thin data here by design.
Undercut duration — #6
For each product currently beaten, how long the cheapest competitor has stayed below our price.
| Product | Cheapest competitor | Gap | Undercut streak |
|---|
Price-change event log — #10
Every observed price move, ours and competitors', newest first.
| When | Product | Source | Change | Delta |
|---|
Compare two products — #94
Overlay two products' price history to spot a brand-wide move vs. a product-specific one.
Anomalies
Prices that don't look right — before they reach the hero figure, an alert, or a repricing decision. Flag, don't silently trust: the same principle as the match-confidence gate, applied to the price value itself.
Price-drop / spike detector — #77
Any single-step price move of 40%+ between two consecutive observations of the same product/source — a flash sale, or a scrape glitch.
| When | Product | Source | Change | Move |
|---|
Implausible-price quarantine — #78
Competitor prices below 10% or above 500% of our own price for the same product — far more likely a wrong match or a scrape/parsing bug than a real price. Never counts toward the hero, alerts, or any other panel.
| When | Product | Source | Their price | Our price |
|---|
Our own price changes — #80
Every observed change to our own price — catches a bad import or accidental edit as fast as it catches a deliberate reprice.
| When | Product | Change | Move |
|---|
Gone quiet — #80
Previously-matched products with no competitor observation in the last 48h. Could mean the competitor delisted it, or the scraper just hasn't circled back yet — worth a manual check either way.
| Product | Last seen |
|---|
Cheapest but unavailable — #71
An out-of-stock competitor price that would otherwise look like the cheapest — not real competitive pressure, since nobody can actually buy at that price. Already excluded from every other panel's "cheapest" calculation; shown here so it doesn't just silently vanish.
| Product | Out-of-stock seller | Their price | Our price |
|---|
We're out, they're not — #71
We're out of stock while a competitor still has inventory — a compounding lost sale on top of whatever the price gap already costs.
| Product | In-stock competitor | Their price |
|---|
Out of stock AND undercut — #70
The compound case: we're out of stock, and the in-stock competitor is also cheaper than our own listed price — not just unavailable, but losing on price too if we did have it.
| Product | Our price | In-stock competitor | Their price |
|---|
MAP / RRP break detector
Confidently-matched competitor prices that fall below a brand's configured MAP floor. Our most defensible reason to act — and evidence for a brand escalation. Only brands with map_enforced set in price_match_rules appear here.
| Product | Competitor | MAP floor | Their price | Depth below floor | Since |
|---|
Repeat-offender leaderboard — #32
Sellers ranked by how often and how deep they break MAP — the chronic cutters worth a strategic conversation, not a one-off promo.
| Seller | Breaks | Products | Avg. depth below floor |
|---|
"Everyone at RRP except X" spotlight — #23
The cleanest, most defensible signal: a product where every other confidently-matched competitor sits at RRP and exactly one has broken ranks.
| Product | The one outlier | Their price | Field | Since |
|---|
Our own parity breaks — #25
We're the outlier in an otherwise fully-parity field — catches our own mispricing. "Export evidence" copies a plain-text summary (SKU, RRP, our price, every competitor at parity with sources) formatted to paste into a report.
| Product | Our price | RRP | Gap | Evidence |
|---|
Parity exception heatmap — #24
Brand × source grid — darker means more of that brand's matched catalogue is off RRP on that source.
Parity-break clusters — #79
Many SKUs in one brand breaking parity on the same day signals a coordinated brand-wide move, not scattered one-off noise.
| Brand | SKUs affected | Day |
|---|
Needs match verification
Competitor offers below the confidence gate (70%) or flagged for manual review. Excluded from every other panel and from the hero figure until confirmed — no repricing decision should rest on a shaky match. Reason flags (#18) are a title-text heuristic for bundle/pair-vs-single mismatches — a hint to check, not a verdict. "Compare" (#17) opens a side-by-side to confirm without leaving the dashboard.
| Product | Competitor | Their price | Confidence | Reason |
|---|
Site issues — audit worklist
Storefront defects found in the 2026-07-21 catalogue audit, as a tickable list. Open each link to verify on the live site, then mark it fixed. Three categories re-verify themselves against the storefront (marked auto) — those checkmarks can appear on their own once you fix them in Shopify.
Keyboard: j/k move between rows, x toggles fixed, o opens the product link — #92.
Scrape health
Per source: when it last actually contributed data, and how much. A source that's silently stopped working is worse than no source at all — this is the thing that catches it before a decision gets made on stale prices.
| Source | Status | Last contributed | Rows on file |
|---|
Freshness-adjusted alerts — #28
Open alerts that reference a source past its freshness window — not suppressed (a real undercut still deserves attention even on a slightly old read), but flagged so it's weighted accordingly.
Recent activity
Price-match decisions and stock changes.
Open alerts
Write-back queue
Approved price-match suggestions, staged for Shopify — see #41 in the roadmap.
Recent decisions
Reports
How actively pricing is being managed, and a snapshot of where we stand — the two things worth checking on a regular cadence.
Decision activity — #82
Every alert on file, by how it was resolved.
Positioning snapshot — #84
Strategy
The CEO-level view — where we compete on price vs. value, which lines are actually contested, and one number for overall competitiveness.
Positioning quadrant — #95
Benchmark index — #98
Battleground — #96
Products with 2+ confidently-matched competitors — genuinely contested, worth active attention.
| Product | Competitors | Position |
|---|
Safe harbour — #96
Exclusive/near-exclusive lines with little real competitive pressure by policy.
| Brand | Why |
|---|
Price-leadership goals — #97
Triage
The most urgent items across the whole dashboard, condensed into one scrollable list — built for a phone, works just as well as a fast top-N view on desktop.