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.

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 500 credits per month 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.