A full-stack tool I designed, built, and shipped solo to turn raw Amazon Ads bulk exports into an instant, visual audit of what's actually driving — or draining — ad spend.
Every week I'd spend 4+ hours pivoting Amazon Ads bulk files in Excel just to answer "which campaigns are wasting money?" So I built the tool I wished existed — one upload, 90 seconds, every answer.
↗ Visit the live dashboard preview at the bottom of this page.
As the person running Amazon PPC at ATHIBAN Ecommerce, my Monday morning looked like this: download the Sponsored Products bulk file, open Excel, build pivot tables by match type, by placement, by campaign — hunt for negative-keyword candidates, flag wasted spend, screenshot findings into a slide for the weekly review. Every. Single. Week.
The workflow had three real problems:
90% of what I was doing manually was pattern recognition on tabular data. Computers are good at that. I was the bottleneck.
A single-page web dashboard where I (or any ads manager) could:
I picked the stack to keep it edge-fast, free-tier friendly, and single-developer-maintainable. No Docker, no Kubernetes, no AWS console — just Git push.
The actual ads data never leaves the browser. Parsing, aggregating, rule-evaluation — all run client-side in Web Workers. The server only stores auth + quota metadata. That decision made compliance, cost, and performance all easier at once.
Each module replaces one specific pivot-table or Excel workflow I used to run manually:
Spend, ACoS, ROAS, impressions, clicks, orders — at a glance, with period-over-period deltas.
Interactive React Flow graph of campaign → ad group → keyword. Click any node to isolate its metrics.
Winners, losers, zero-converters. Sort by ACoS, spend, orders — export any slice.
Surfaces converting search terms that aren't yet keywords, plus wasteful terms ready to negative-match.
Build your own "if-this-then-that" rules. Output: a downloadable bulk upload of bid changes and negatives.
Daily/weekly spend and ACoS curves with anomaly shading — catch a spike the same day it happens.
Top-of-search vs. rest-of-search vs. product-pages — the placement breakdown Amazon buries three clicks deep.
One-click /demo route loads 60 days of sample data. Shareable, zero friction,
zero sign-up.
The first time I uploaded a real bulk file on a Sunday evening from my phone and had my Monday recommendations ready before my coffee was done, I realized I'd never go back to pivots.
— Field-testing AdInsight Pro, v0.4Built in focused evening + weekend blocks over two weeks. Here's the honest timeline:
Set up the Astro project with the Cloudflare adapter, wired up D1 for users/sessions/quota, built the login flow and middleware. Nothing visible yet, but the plumbing was production-grade from day one.
Bulk files hit 10–15 MB easily. Parsing them on the main thread froze the UI. Moved the whole parse into a Web Worker and typed every column — the moment row-count hit 20k and the UI stayed buttery, I knew the architecture was right.
Aggregators for spend/orders/ACoS, first working keyword table with sorting & filtering. This was the first moment where I could upload a real bulk file and see something Excel couldn't show me at a glance.
Hooked up @xyflow/react to render the campaign → ad group → keyword hierarchy as a real graph. Spent an afternoon tuning auto-layout so it didn't look like spaghetti. Worth it.
Designed a small DSL-ish rule format (field + operator + value + action), wrote the evaluator, built the rule-builder UI. Output: a downloadable bulk upload ready for Seller Central. This is the module that closes the loop — insight becomes action.
Killed all hard-coded colors, moved to CSS design tokens, added a no-flash theme init script, fixed React Flow's canvas for light mode using a MutationObserver hook to re-read CSS variables when the theme changes.
Built the marketing / route and a /demo
route that auto-loads 60 days of sample data with a dismissible banner. Anyone can try
the full dashboard in one click — no signup, no data required.
PUBLIC_ROUTES
allowlist is ten times safer than remembering to add if (!user) redirect() at
the top of every page.The demo route loads the full dashboard with 60 days of realistic sample data — no sign-up, no data required. Toggle dark/light, explore all 7 modules, even download a mock negative-keyword list.
Want this kind of audit tool for your own brand? I build custom dashboards like this for e-commerce teams. Get in touch →