Tutorial

How to Validate a MicroSaaS Idea with Negative Search Signals

Use search data to find negative signals for a microsaas idea: saturated market, declining interest, strong incumbents. Python tutorial.

An r/microsaas post warned that most microsaas ideas fail because founders ignore negative signals. This tutorial systematically searches for three red flags: market saturation (too many existing tools), declining interest (trend data), and strong incumbents (funded companies dominating the SERP).

Prerequisites

  • Scavio API key
  • Python 3.8+

Walkthrough

Step 1: Check for market saturation

Count existing tools and alternatives pages.

Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}

def check_saturation(idea):
    data = requests.post('https://api.scavio.dev/api/v1/search',
        headers=H,
        json={'platform': 'google', 'query': f'best {idea} tools 2026'}).json()
    results = data.get('organic_results', [])
    listicles = [r for r in results if any(w in r.get('title', '').lower()
        for w in ['best', 'top', 'comparison', 'vs', 'alternative'])]
    return {'total_results': len(results), 'listicles': len(listicles),
            'saturated': len(listicles) >= 5}

Step 2: Check for declining interest

Search for complaints about existing tools -- if users are leaving, the market might be dying.

Python
def check_declining(idea):
    data = requests.post('https://api.scavio.dev/api/v1/search',
        headers=H,
        json={'platform': 'reddit', 'query': f'{idea} dead OR dying OR declining OR shutting down'}).json()
    results = data.get('results', [])
    return {'decline_posts': len(results),
            'declining': len(results) >= 3}

Step 3: Check for strong incumbents

Search for funded companies and enterprise players.

Python
def check_incumbents(idea):
    data = requests.post('https://api.scavio.dev/api/v1/search',
        headers=H,
        json={'platform': 'google', 'query': f'{idea} software company funding'}).json()
    results = data.get('organic_results', [])
    funded = [r for r in results if any(w in r.get('snippet', '').lower()
        for w in ['series', 'raised', 'million', 'billion', 'ipo', 'acquired'])]
    return {'funded_companies': len(funded),
            'strong_incumbents': len(funded) >= 3}

Step 4: Generate negative signal report

Combine all checks into a verdict.

Python
def negative_signal_report(idea):
    sat = check_saturation(idea)
    dec = check_declining(idea)
    inc = check_incumbents(idea)
    red_flags = sum([sat['saturated'], dec['declining'], inc['strong_incumbents']])
    print(f'Idea: {idea}')
    print(f'Saturation: {sat["listicles"]} listicles ({"RED FLAG" if sat["saturated"] else "OK"})')
    print(f'Declining: {dec["decline_posts"]} posts ({"RED FLAG" if dec["declining"] else "OK"})')
    print(f'Incumbents: {inc["funded_companies"]} funded ({"RED FLAG" if inc["strong_incumbents"] else "OK"})')
    print(f'\nVerdict: {red_flags}/3 red flags')
    if red_flags >= 2: print('AVOID: High risk of failure')
    elif red_flags == 1: print('CAUTION: Investigate further')
    else: print('PROCEED: Low negative signals')

negative_signal_report('project management')

Python Example

Python
import os, requests
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}

def check_idea(idea):
    for q, label in [
        (f'best {idea} tools', 'Saturation'),
        (f'{idea} dead declining', 'Decline'),
        (f'{idea} funding raised', 'Incumbents')]:
        data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
            json={'platform': 'google', 'query': q}).json()
        print(f'{label}: {len(data.get("organic_results", []))} results')

check_idea('email marketing')

JavaScript Example

JavaScript
const checks = ['best tools', 'dead declining', 'funding raised'];
for (const suffix of checks) {
  const res = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST',
    headers: {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'},
    body: JSON.stringify({platform: 'google', query: `${idea} ${suffix}`})
  });
  const data = await res.json();
  console.log(`${suffix}: ${data.organic_results?.length} results`);
}

Expected Output

JSON
Negative signal report: saturation score, decline indicators, incumbent strength, and overall verdict (Avoid/Caution/Proceed). 3 Google + 1 Reddit query = $0.02.

Related Tutorials

Frequently Asked Questions

Most developers complete this tutorial in 15 to 30 minutes. You will need a Scavio API key (free tier works) and a working Python or JavaScript environment.

Scavio API key. Python 3.8+. A Scavio API key gives you 500 free credits per month.

Yes. The free tier includes 500 credits per month, which is more than enough to complete this tutorial and prototype a working solution.

Scavio has a native LangChain package (langchain-scavio), an MCP server, and a plain REST API that works with any HTTP client. This tutorial uses the raw REST API, but you can adapt to your framework of choice.

Start Building

Use search data to find negative signals for a microsaas idea: saturated market, declining interest, strong incumbents. Python tutorial.