Negative keyword automation for local advertisers

Micro-SaaSWeb1 monthGoogle Ads APINext.jsClaude APIPostgres

The idea

Every local Google Ads account leaks. A plumber bids on emergency plumber and pays for how to fix a toilet myself, plumbing jobs near me, and free plumbing advice — junk terms that accumulate because reviewing the search terms report weekly is tedious expert work nobody does. For a business spending $2-10k a month, the leak is routinely 10-20% of budget, and it’s sitting in a report nobody opens.

Adspirer proves advertisers will pay for AI hands on their ad accounts — but full AI media management asks for scary trust. This does one legible job with a receipt: an LLM reads every search term against what the business actually offers (which beats the incumbents’ keyword-matching rules precisely on terms like brands they don’t carry or DIY intent), and a human approves every change. The weekly email leads with a dollar figure of waste found, which is a renewal argument that writes itself.

Who pays

Local businesses running their own ads and 2-person agencies managing a dozen local accounts pay $49-99 a month per account — trivially justified when the first scan finds hundreds in monthly waste, which it almost always does. The trial is the sales pitch: connect the account, see the wasted-spend number before entering a card. Distribution: local-marketing and agency communities, SEO content for negative keyword list for [trade] queries (high intent, low competition), and white-label-flavored agency deals.

MVP scope

  • Google Ads OAuth, search-terms report ingestion, and business-profile onboarding with not-offered prompts per trade
  • Claude classification of terms with reason and attached spend, deduped against existing negatives
  • Approval queue with bulk actions; one-click push of exact-match negatives via the API, with undo
  • Weekly wasted-spend email and cumulative savings dashboard
  • Per-account Stripe billing with a show-the-waste-first trial
  • Skip for v1: Microsoft Ads, auto-apply mode without approval, bid or budget recommendations, Performance Max asset exclusions, white-label reports
// Build prompt — paste into Cursor / Claude Code / Lovable / Bolt
Build NegBot, a negative-keyword automation tool for local advertisers. Stack: Google Ads API (OAuth connect, search terms report, negative keyword mutation), Next.js, Claude API for term classification, Postgres.

Core flow: 1) User connects Google Ads via OAuth and answers a 5-minute business profile: services offered, services explicitly NOT offered, service area, brand names. 2) Weekly job pulls the search terms report per campaign with spend, clicks, and conversions. 3) Claude classifies each term against the business profile into: relevant, junk (DIY intent, job seekers, wrong service, wrong location, competitor-brand traps, free/cheap-only intent), or ambiguous — with a one-line reason and the spend attached to it. 4) Weekly email leads with one number: wasted spend found this week, e.g. $214 on 37 junk terms, top offenders listed. 5) User opens the review queue, sees each flagged term with reason and cost, and approves/rejects individually or in bulk; approval pushes exact-match negatives to the right campaign or shared negative list via the API. Nothing changes without approval. 6) Dashboard tracks cumulative saved spend since signup — the renewal number.

Pages: OAuth onboarding + business profile, review queue, negatives history with undo, savings dashboard, agency view (multiple accounts), billing.

Non-obvious details: classification quality depends on the not-offered list — force it in onboarding with trade-specific suggestions. Dedupe against existing negative lists before flagging, or trust dies on first sight.

Pricing: $49/mo per account, $99/mo for 5 accounts (agency tier). 14-day trial that shows found waste before asking for payment.

// More Micro-SaaS ideas