Find where your Google Ads or Microsoft Ads budget is leaking, in 60 seconds, without giving anyone access to your account.
SpendLeak is a local-first web tool for freelance media buyers and agencies. You drop in your search terms report (the single highest-waste surface in any paid search account) and it shows you exactly which terms are burning budget with zero conversions, the hidden themes draining money across many terms at once, and the efficient terms worth scaling. Then it hands you a paste-ready negative keyword list and a client-ready summary.
Nothing is uploaded. The CSV is parsed entirely in your browser. No login, no Google OAuth, no account access, no server. Once the page is loaded it works offline.
Live: https://android-tipster.github.io/spendleak/
Every Google Ads audit tool (Optmyzr, Adalysis, Opteo) wants OAuth access to the account and a monthly subscription, and lives inside the account. There was nothing dead-simple for the freelancer who just needs to answer two questions fast:
- Where is this account leaking money?
- How do I explain it to the client and fix it?
The terror that runs through r/PPC is the expensive, silent mistake: "I overspent a client's account by $104,000," "spent $7,000 and not a single real lead." The search terms report is where most of that waste hides in plain sight, and it exports in two clicks. SpendLeak turns it into a number.
- Money-pit terms — search terms that spent real money and produced zero conversions, above a defensible threshold (one account average cost-per-conversion). The headline "reclaimable spend" figure is the sum of these. It never double counts and never flags a term just for being new or cheap.
- Hidden waste themes (n-grams) — individual words and phrases (like
jobs,diy,free, a competitor name) that each appear across many search terms and collectively drain budget at zero conversions. This is the leak a human scanning 2,000 rows never spots. SpendLeak never suggests a theme that produced any conversions, so it will not tell you to negativenear mewhennear meis converting. - Scaling opportunities — terms converting below your account average, ranked by profitable headroom.
- A paste-ready negative keyword list — exact-match negatives for the specific wasted terms, plus phrase negatives for the high-leverage themes.
- A client-ready summary — plain English, no jargon, ready to drop into an email or report.
The file you load never leaves your machine. There is no analytics call, no upload, no network request with your data. Read js/app.js and js/engine.js — the analysis is a pure function over the CSV text. This matters because client ad-spend data is sensitive, and it is the one thing a hosted SaaS competitor cannot match.
| Free | Pro ($39 one-time) | |
|---|---|---|
| Reclaimable headline + account snapshot | yes | yes |
| Top 5 money-pit terms | yes | all of them |
| Hidden waste themes | top 3 | all |
| Scaling opportunities | — | yes |
| Paste-ready negative keyword list | — | yes |
| Client-ready summary | — | yes |
| Audits / accounts | unlimited | unlimited |
Pro is a one-time purchase, not a subscription. The key is an ECDSA P-256 signed token verified offline in your browser. No license server.
# any static server works; nothing to build
python -m http.server 8753
# open http://localhost:8753npm test # engine unit tests (pure, no browser)
npm run test:dom # DOM integration test via jsdom (free view, Pro unlock, persistence)
npm run test:alljs/engine.js— the analysis engine. Pure, zero dependencies, runs in browser and Node.js/license.js— offline Pro key verification (Web Crypto).js/app.js— UI glue.tools/issue_license.cjs— seller-side key issuer (node tools/issue_license.cjs buyer@email.com).sample-search-terms.csv— a realistic demo export. The in-app "Load sample data" button uses an embedded copy so it works offline.
MIT for the code. The waste-detection thresholds are deliberately conservative so the reclaimable figure is one you can defend to a client.