ScavioScavio
ProductPricingDocs
Sign InGet Started
  1. Home
  2. Workflows
  3. Negative Validation Weekly Scan
Workflow

Negative Validation Weekly Scan

Run a weekly scan to detect market saturation signals before building. Check SERP competition, ad density, and Reddit sentiment to kill bad ideas early.

Start FreeAPI Docs

Overview

This workflow runs weekly and checks a list of potential product ideas against market saturation signals. For each idea, it queries Google for organic competition and ad density, then checks Reddit for user satisfaction with existing tools. Ideas that score high on saturation metrics are flagged as 'do not build' candidates.

Trigger

Cron schedule (weekly, Monday at 9 AM UTC)

Schedule

Weekly (Monday at 9 AM UTC)

Workflow Steps

1

Load idea backlog

Read a list of product ideas from a JSON file. Each idea has a name and 2-3 search keywords to evaluate.

2

Check Google SERP saturation

For each keyword, call Scavio Google search. Count organic results from established brands, count ads, and check for knowledge panels indicating a dominant player.

3

Check Reddit satisfaction

For each idea, search Reddit for 'best [category] tool' and 'happy with [existing tool]'. High satisfaction with incumbents is a negative signal.

4

Score each idea

Compute a saturation score: organic_big_brands * 2 + ad_count * 3 + reddit_satisfied_threads * 1. Higher score means more saturated market.

5

Generate report

Output a ranked list of ideas from least saturated to most saturated. Flag ideas above the threshold as 'do not build' candidates.

Python Implementation

Python
import requests, os, json

SCAVIO_KEY = os.environ["SCAVIO_API_KEY"]
H = {"x-api-key": SCAVIO_KEY}

IDEAS = [
    {"name": "AI resume builder", "keywords": ["ai resume builder", "resume builder tool"]},
    {"name": "Invoice automation", "keywords": ["invoice automation tool", "automated invoicing"]},
]

def check_saturation(keyword: str) -> dict:
    serp = requests.post("https://api.scavio.dev/api/v1/search", headers=H,
        json={"platform": "google", "query": keyword}, timeout=10).json()
    reddit = requests.post("https://api.scavio.dev/api/v1/search", headers=H,
        json={"platform": "reddit", "query": f"{keyword} recommendation"}, timeout=10).json()
    return {
        "organic_count": len(serp.get("organic", [])),
        "ads_count": len(serp.get("ads_results", [])),
        "reddit_threads": len(reddit.get("organic", [])),
    }

for idea in IDEAS:
    scores = [check_saturation(kw) for kw in idea["keywords"]]
    avg_ads = sum(s["ads_count"] for s in scores) / len(scores)
    avg_organic = sum(s["organic_count"] for s in scores) / len(scores)
    saturation = avg_ads * 3 + avg_organic * 2
    status = "SATURATED" if saturation > 30 else "OPEN"
    print(f"[{status}] {idea['name']}: ads={avg_ads:.0f}, organic={avg_organic:.0f}, score={saturation:.0f}")

JavaScript Implementation

JavaScript
const IDEAS = [
  { name: "AI resume builder", keywords: ["ai resume builder", "resume builder tool"] },
  { name: "Invoice automation", keywords: ["invoice automation tool", "automated invoicing"] },
];

async function checkSaturation(keyword) {
  const headers = { "x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json" };
  const [serp, reddit] = await Promise.all([
    fetch("https://api.scavio.dev/api/v1/search", { method: "POST", headers,
      body: JSON.stringify({ platform: "google", query: keyword }) }).then(r => r.json()),
    fetch("https://api.scavio.dev/api/v1/search", { method: "POST", headers,
      body: JSON.stringify({ platform: "reddit", query: `${keyword} recommendation` }) }).then(r => r.json())
  ]);
  return {
    organic: (serp.organic || []).length,
    ads: (serp.ads_results || []).length,
    reddit: (reddit.organic || []).length,
  };
}

for (const idea of IDEAS) {
  const scores = await Promise.all(idea.keywords.map(checkSaturation));
  const avgAds = scores.reduce((s, x) => s + x.ads, 0) / scores.length;
  const avgOrganic = scores.reduce((s, x) => s + x.organic, 0) / scores.length;
  const saturation = avgAds * 3 + avgOrganic * 2;
  const status = saturation > 30 ? "SATURATED" : "OPEN";
  console.log(`[${status}] ${idea.name}: ads=${avgAds.toFixed(0)}, organic=${avgOrganic.toFixed(0)}, score=${saturation.toFixed(0)}`);
}

Platforms Used

Google

Web search with knowledge graph, PAA, and AI overviews

Reddit

Community, posts & threaded comments from any subreddit

Frequently Asked Questions

This workflow runs weekly and checks a list of potential product ideas against market saturation signals. For each idea, it queries Google for organic competition and ad density, then checks Reddit for user satisfaction with existing tools. Ideas that score high on saturation metrics are flagged as 'do not build' candidates.

This workflow uses a cron schedule (weekly, monday at 9 am utc). Weekly (Monday at 9 AM UTC).

This workflow uses the following Scavio platforms: google, reddit. Each platform is called via the same unified API endpoint.

Yes. Scavio's free tier includes 50 credits on signup with no credit card required. That is enough to test and validate this workflow before scaling it.

Negative Validation Weekly Scan

Run a weekly scan to detect market saturation signals before building. Check SERP competition, ad density, and Reddit sentiment to kill bad ideas early.

Get Your API KeyRead the Docs
ScavioScavio

Real-time search API for AI agents. Search every platform, not just Google.

Product

  • Features
  • Pricing
  • Dashboard
  • Affiliates

Developers

  • Documentation
  • API Reference
  • Quickstart
  • MCP Integration
  • Python SDK

Alternatives

  • Tavily Alternative
  • SerpAPI Alternative
  • Firecrawl Alternative
  • Exa Alternative

Tools

  • JSON Formatter
  • cURL to Code
  • Token Counter
  • All Tools

© 2026 Scavio. All rights reserved.

Featured on TAAFT
Terms of ServicePrivacy Policy