MicroSaaS Kill List Validation (2026)
The kill list concept: search for competition density, review sentiment, and trend direction. If all three signal saturation, kill the idea before writing code.
The hardest part of building a micro-SaaS is not building. It is deciding what NOT to build. The r/microsaas post proposed a systematic approach: a kill list. Before you write a single line of code, run three checks against the idea. If all three signal saturation, kill the idea and move on.
Check 1: competition density
Search "best [your idea] tool" and count the results. If the first page is packed with established players, listicle roundups, and comparison sites, the market is saturated. You are not competing with one incumbent. You are competing with a category that has already been defined and populated.
Low competition density: fewer than 5 dedicated tools on the first page, results dominated by generic articles rather than product pages. This is your opening.
import requests, os
API = 'https://api.scavio.dev/api/v1/search'
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def competition_density(idea):
"""Check how crowded the market is."""
r = requests.post(API, headers=H, json={
'query': f'best {idea} tool',
'num_results': 10
})
results = r.json().get('results', [])
product_pages = 0
listicles = 0
for result in results:
title = result.get('title', '').lower()
url = result.get('url', '').lower()
if any(w in title for w in ['best', 'top', 'vs', 'alternatives']):
listicles += 1
elif any(w in url for w in ['.io', '.app', '.com/pricing']):
product_pages += 1
return {
'idea': idea,
'total_results': len(results),
'product_pages': product_pages,
'listicles': listicles,
'density': 'high' if listicles >= 4 else 'medium' if listicles >= 2 else 'low'
}
print(competition_density('ai meeting notes'))
print(competition_density('api uptime monitor for solo devs'))
Check 2: user sentiment
Competition density tells you how many tools exist. Sentiment tells you whether users are happy with them. A saturated market where everyone is frustrated is still an opportunity. A saturated market where everyone loves the existing tools is not.
Search Reddit for complaints about existing tools in the category. Look for threads with titles like "X is terrible," "alternative to X," or "frustrated with X." High complaint volume with specific, actionable complaints means there is room for a better product even in a crowded market.
def sentiment_check(idea):
"""Check if users are happy or frustrated with existing tools."""
# Search for complaints
complaints = requests.post(API, headers=H, json={
'query': f'{idea} tool frustrating OR terrible OR alternative OR hate',
'search_type': 'reddit',
'num_results': 10,
'freshness': '90d'
}).json().get('results', [])
# Search for praise
praise = requests.post(API, headers=H, json={
'query': f'{idea} tool love OR amazing OR "game changer" OR recommend',
'search_type': 'reddit',
'num_results': 10,
'freshness': '90d'
}).json().get('results', [])
complaint_count = len(complaints)
praise_count = len(praise)
if complaint_count > praise_count * 2:
verdict = 'frustrated - opportunity exists'
elif praise_count > complaint_count * 2:
verdict = 'satisfied - hard to displace'
else:
verdict = 'mixed - needs deeper analysis'
return {
'idea': idea,
'complaints': complaint_count,
'praise': praise_count,
'verdict': verdict
}
print(sentiment_check('project management'))
print(sentiment_check('invoice generator for freelancers'))
Check 3: trend direction
Is interest growing or declining? A market can be unsaturated but shrinking. A dying niche with no competitors is not an opportunity. Compare recent search volume against historical volume. If the topic has more Reddit threads in the last 30 days than the 30 days before that, interest is growing.
The kill decision
High competition density AND satisfied users AND flat or declining trend: kill the idea. You are entering a crowded market where incumbents are loved and interest is waning. Any two of those three signals is a yellow flag. All three together is a red flag.
def kill_or_build(idea):
"""Run all three checks and make the call."""
density = competition_density(idea)
sentiment = sentiment_check(idea)
signals = []
if density['density'] == 'high':
signals.append('HIGH competition')
if 'satisfied' in sentiment['verdict']:
signals.append('SATISFIED users')
if len(signals) >= 2:
return f"KILL: {idea} ({', '.join(signals)})"
elif len(signals) == 1:
return f"CAUTION: {idea} ({signals[0]}, needs deeper research)"
else:
return f"EXPLORE: {idea} (low competition, frustrated users)"
ideas = [
'ai meeting notes',
'reddit keyword monitor for founders',
'api cost calculator for side projects'
]
for idea in ideas:
print(kill_or_build(idea))
What the kill list saves you
Three API calls per idea. Under $0.02 per idea checked. Compare that to 3 months of building something nobody needs in a market that is already saturated with tools people already like. The kill list is not pessimism. It is capital allocation. Kill fast, build only what has a real opening.