SaaS Feature Usage Auditor
Upload Mixpanel or PostHog exports, score dead-weight SaaS features, and get a kill list so founders can sunset unused product surface with confidence.
A three-year-old SaaS product has forty-plus features. Paying users touch maybe twelve. The rest is maintenance tax: tests, docs, onboarding screens, support macros, and Slack folklore that says “do not delete, Acme still uses the custom report.” Nobody can prove Acme still uses it. Nobody wants to be the person who killed the button a champion customer clicks twice a year. So the surface keeps growing, the walkthrough gets longer, and the next hire spends month one learning rooms in the product that do not matter.
Built for Developers, Solo Founders, Weekend Builders.
The deprecation category is almost silent — which is the opening. keyword research on idea 5076 puts product analytics platform at 590 monthly searches with 182% recent growth, projecting toward 860.
Suggested stack: Next.js 14 (App Router) + Vercel, Papa Parse + size-gated upload, Postgres (Supabase or Neon), Claude (Sonnet) with JSON schema, Stripe Billing, @react-pdf/renderer. Weekend scope: about 10 hours.
The Problem
A three-year-old SaaS product has forty-plus features. Paying users touch maybe twelve. The rest is maintenance tax: tests, docs, onboarding screens, support macros, and Slack…
The Solution
A weekend MVP that sits on top of the analytics you already pay for. No SDK. No six-week Segment project. The founder (or the one PM who still cares) exports events from Mixpanel…
Market Research
The product-analytics category is loud. The deprecation category is almost silent — which is the opening.
Competitive Landscape
Amplitude — Category leader: funnels, cohorts, deep integrations. Shows declining usage; will not recommend deletion, because deprecation copy fights the “more seats” story.…
Business Model
Free ($0) — One export, 20-feature cap, heatmap only, “audited with” footer on the PDF
Recommended Tech Stack
Next.js 14 (App Router) + Vercel — Upload UI, streaming parse, server actions. One repo.
AI Prompts to Build This
Copy these build prompts into Claude, Cursor, or your AI coding tool. Create a free account to unlock the full research behind them.
1. Project Setup
Build the weekend MVP of the "SaaS Feature Usage Auditor": drop in a Mixpanel or PostHog export, group events into features, and get a Keep, Investigate or Sunset verdict for each, with the numbers behind it. The file is read in your browser; only totals are sent to the app. Stack: Next.js (App Router), TypeScript, Tailwind, Supabase (Postgres, Row Level Security, Auth with email magic link), Papa Parse in the browser to stream the file, the Anthropic API to write each rationale. Verdicts are decided in plain code. Deploy on Vercel. Tables (Row Level Security on, each user reads only their own rows): - exports(id, user_id, source, filename, column_map jsonb, event_count, created_at) - features(id, export_id, name, event_names text[]) - feature_scores(id, feature_id, unique_users, events_per_user, decay_30, decay_90, top1_share, top3_share, last_seen, band) band is abandoned, concentrated or healthy - reports(id, export_id, verdicts jsonb, created_at) Screens: /login, /upload, /map (split and merge feature groups), /report/[id] (a printable page). Env vars (names only): NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY (server only), ANTHROPIC_API_KEY. Do not build: billing, plans or a trial, analytics API connections, a PDF library, team workspaces, server-side file upload. Done when: npm run dev starts, you can sign in, and the four tables exist with Row Level Security on.
2. Core Feature
Build the one feature that proves the Auditor: verdicts you can defend, from usage numbers that never include a person's identity. 1. In the browser, stream the CSV or JSON export with Papa Parse (limit about 80 MB). Require event, distinct_id and time columns and fail with a clear message if distinct_id is missing. Hash every distinct_id with SHA-256 and a random salt held only in the browser. Aggregate per event name: unique users, event count, last seen and a daily count series. Send only these aggregates to the server; no raw row and no id leaves the browser. 2. Group event names into features with a conservative normalizer (case, spaces, underscores) and ask the Anthropic API to propose clusters as JSON from the event names alone. The map screen lets the user split and merge groups before scoring. 3. Score each feature in code: unique users, events per user, 30-day and 90-day decay (guard against dividing by zero), the share of events from the top 1 and top 3 users, and the last-seen date. Bands: abandoned when users are near zero and last seen over 90 days ago, concentrated when the top user's share is above 0.6, healthy otherwise. 4. Decide the verdict in code with these rules: never sunset a feature last seen within 14 days; never sunset when the top user's share is above 0.5 unless there are fewer than 5 users; investigate when there are fewer than 10 users and the peak day is more than 5 times the median active day; sunset an abandoned feature that passes those checks; keep the rest. Unit test every rule. 5. Send only the score table and the verdict to the Anthropic API and ask for one paragraph per feature that a CEO could paste into a chat message. Check that every number in it appears in the score table. 6. /report/[id] is a printable page: one row per feature with the verdict, the user count, the concentration and the rationale. Rules: low usage is not the same as low value, so say what Investigate means. Never persist raw distinct ids or emails. Empty state: with no exports, show the upload box, the columns needed and a sample file. Done when: a 50,000-event sample across 12 events produces features and verdicts, the rule tests pass, a feature used by one account is not marked sunset, and the network log shows no raw id leaving the browser.
3. Landing Page
Build a one-page landing site for the SaaS Feature Usage Auditor, for founders who want to retire unused features. Hero: "Find the features nobody uses. Retire them with a straight face." Sub: "Drop a Mixpanel or PostHog export. Get Keep, Investigate or Sunset for each feature, with the concentration math so you do not remove the one button a champion account still clicks." One button: Join the waitlist. Sections: the problem (forty features, twelve used), a sample report with one Sunset row ("3 users, 2 at the same company"), how it works in four steps (drop, group, score, report), and an FAQ on whether low usage means low value (no, which is why Investigate exists), how your file is read (in your browser, with ids hashed) and what is not needed (no SDK, no API key). Waitlist: store the email in a waitlist table in Supabase. No other service. Style: Geist, a dark product-dashboard look, one lavender accent, no stock people. Done when: the page renders on a phone and a submitted email appears in the waitlist table.4. Branding Package
Use a design or image tool for this one. A coding agent cannot draw a logo. Brand for the SaaS Feature Usage Auditor: pick a short working name, then design a wordmark and a small mark that reads as a feature switch with the unused side filled. Colors: near-black, one lavender, one warning red for Sunset only and a muted green for Keep. Type: Geist for the interface, IBM Plex Mono for event names and scores. Deliverables: wordmark, icon, a one-page brand sheet, three verdict chips (keep, investigate, sunset) that differ by shape and word as well as color, three report-headline variants, and a cover layout for the printed report. Voice rules: never celebrate deletion, always pair a Sunset with its remaining-user count and concentration, never say "AI killed this feature". Done when: each deliverable is saved in one folder and the verdict chips are distinguishable without color.