spoils.ai · dashboard

Markets

Mockup · fake data
Today: stale custom range silently hijacks named periods and poisons the 15-min cache — "timeline selector doesn't always work" (audit Bug #1, InternationalMarketsSection.tsx:137).
New: period switch always clears the custom range; MTD is the default and each switch refetches clean data.
Verdicts · rolling 14–28d blended ROAS vs 1.76× breakeven
Today: two contradictory signal systems (Scale = ROAS ≥3 in the table vs ≥1.5 in the detail page) and thresholds hidden as magic numbers (audit §5).
New: one verdict engine, anchored to the 1.76× breakeven, with the suggested budget step printed on the card. Read-only — never writes to Meta.

Funded markets — evidence

MTD · revenue net of tax · budgets live from Meta · blended ROAS = market revenue ÷ Meta spend
Today: revenue includes tax (~8–12% inflated, audit Bug #2) and daily budgets are hardcoded at $250 — the page can't see real Meta spend.
New: revenue = total − tax per house rule; budgets pulled from the Meta API (CBO + ABO aware). 30d sparklines show revenue and ROAS shape at a glance.
MarketRevenueSpendBudget/dayBlended ROASRev 30dROAS 30d

Discovery — unfunded markets

Organic performance vs site average · candidate = beats a funded market's organics
Today: no discovery view exists — organic markets that already out-convert a funded market are invisible.
New: DE and FR flagged as candidates: their organic CVR and $/session beat AU's organics. That's the "budget would likely work here" signal.
MarketOrganic revenueSessionsCVR$/sessionvs site avg
Mockup only — all numbers are realistic fakes. Breakeven 1.76× marginal gross ROAS @ 56.9% GM. Click any verdict card or row for the market detail.