Validating a product idea before writing code saves months of wasted effort. SERP data reveals real demand signals: what people search for, what solutions exist, what questions remain unanswered, and where market gaps exist. This tutorial shows how to use search API data to validate a product idea by checking search volume proxies, analyzing competition, identifying market gaps from People Also Ask data, and assessing existing solutions. You will build a validation pipeline that gives you a go or no-go signal based on search data.
Prerequisites
- Python 3.8+ installed
- requests library installed
- A Scavio API key from scavio.dev
- A product idea to validate
Walkthrough
Step 1: Define your validation queries
Create a set of search queries that represent your product idea from different angles.
import os, requests, json
API_KEY = os.environ["SCAVIO_API_KEY"]
PRODUCT_IDEA = "AI-powered invoice processing for freelancers"
VALIDATION_QUERIES = [
"invoice processing tool for freelancers",
"automate freelancer invoices",
"best invoice software freelancers 2026",
"freelancer invoice problems",
]Step 2: Check demand signals
Search for each query and analyze result volume and People Also Ask as demand proxies.
def check_demand(queries):
signals = []
for q in queries:
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": q})
data = resp.json()
signals.append({
"query": q,
"results": len(data.get("organic_results", [])),
"paa_count": len(data.get("people_also_ask", [])),
"has_ai_overview": bool(data.get("ai_overview")),
"related": len(data.get("related_searches", [])),
})
return {"signals": signals, "avg_paa": sum(s["paa_count"] for s in signals) / len(signals)}Step 3: Analyze competition
Check what existing solutions rank for your target queries.
def analyze_competition(query):
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": query})
results = resp.json().get("organic_results", [])[:10]
competitors = [{"title": r["title"], "url": r.get("link", ""),
"snippet": r.get("snippet", "")[:100]} for r in results]
return {"query": query, "competitors": competitors, "count": len(competitors)}Step 4: Identify gaps and generate verdict
Find unanswered questions and generate a validation verdict based on the data.
def validate(product, queries):
demand = check_demand(queries)
comp = analyze_competition(queries[0])
paa_questions = []
for s in demand["signals"]:
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": s["query"]})
paa_questions.extend([q.get("question", "") for q in resp.json().get("people_also_ask", [])])
score = min(demand["avg_paa"] * 10, 100)
return {
"product": product,
"demand_score": round(score),
"competitors": comp["count"],
"gaps": list(set(paa_questions))[:5],
"verdict": "strong" if score >= 50 else "weak" if score >= 25 else "insufficient",
}
verdict = validate(PRODUCT_IDEA, VALIDATION_QUERIES)
print(json.dumps(verdict, indent=2))Python Example
import os, requests
API_KEY = os.environ["SCAVIO_API_KEY"]
def validate(query):
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": query})
data = resp.json()
return {"results": len(data.get("organic_results", [])),
"paa": len(data.get("people_also_ask", [])),
"related": len(data.get("related_searches", []))}
print(validate("invoice processing tool for freelancers"))JavaScript Example
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};
async function validate(query) {
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H,
body: JSON.stringify({platform: "google", query})
});
const d = await r.json();
return {results: (d.organic_results||[]).length, paa: (d.people_also_ask||[]).length,
related: (d.related_searches||[]).length};
}
validate("invoice processing tool for freelancers").then(console.log);Expected Output
A product validation report with demand score, competitor count, market gaps from PAA data, and a go/no-go verdict based on search data analysis.