CASE STUDY
How weekly reporting across two markets went from manual compilation to a real-time dashboard
Managing performance for an e-commerce beauty brand across Singapore and Malaysia meant pulling data from multiple spreadsheet tabs each week, computing blended ROAS manually, and reformatting it before every team meeting. This dashboard replaced the entire prep process with a live, auto-refreshing view built directly on top of the existing reporting sheet.
Live Demo Available
Populated with realistic but fictional data. No client information is exposed.
THE PROBLEM
Every Monday started with 30+ minutes of spreadsheet work before any meeting could happen
The brand ran separate Google Sheets for SG and MY, each with multiple tabs: weekly KPIs, platform breakdowns, Watsons revenue, TikTok GMV, Meta CPAS. Getting to a single blended number required opening tabs across two sheets, manually summing platform spend, and applying ROAS guards to filter out data entry errors.
There was no single view showing both markets at once. Comparison had to happen in your head. Flags like "TikTok is underperforming vs. target" didn't exist — someone had to remember to check.
HOW IT WORKS
Reads the existing sheet. Computes everything. Flags what needs attention.
Reads two Google Sheets tabs via Sheets API
Pulls KPIs SG and KPIs My from the existing weekly results sheet. No new data entry — the sheet the team already fills in is the source of truth.
Parses platform rows and cleans currency artifacts
Each tab has per-platform rows with inconsistent formatting (RM prefix, empty cells for non-ad channels). The parser handles currency cleanup, empty spend rows, and implausible ROAS values (e.g. 900x caused by data entry errors).
Computes blended ROAS with a Watsons guard
Watsons is a retail channel with no ad spend — including it in the denominator inflates blended ROAS. The dashboard excludes Watsons from spend but includes its revenue, matching how the team actually tracks performance.
Auto-flags performance against per-market targets
SG target is 8x blended ROAS. MY bar is 11x+. Flags surface automatically — green when on target, amber when close, red when below. No manual check needed.
Auto-refreshes every 30 seconds
Built for live use during team calls. The sheet updates mid-meeting as data comes in and the dashboard catches up without a page reload.
WHAT IT SHOWS
Both markets. All platforms. One screen.
Revenue
Total weekly revenue per market with WoW comparison
Blended ROAS
Computed across all ad-spend channels, vs. the per-market target
Channel Mix
Shopee, TikTok Shop, Watsons, DTC — revenue breakdown per market
Platform ROAS
Per-platform ad spend and return, sorted for quick scanning
Flags
Auto-generated performance alerts: pacing, ROAS misses, spend anomalies
Monthly View
Switch to monthly for cumulative revenue and trend by channel
STACK
No charting library. Donuts and ROAS bars are raw SVG so the bundle stays small and the layout stays exact. The Sheets API call is a single fetch per tab — no backend, no database, no infrastructure beyond a static Vite build on Vercel.
Want something like this for your brand?
If your reporting lives in a spreadsheet and you're spending time on prep instead of decisions, I can build a live dashboard on top of your existing data. One call is enough to scope it.