Overview
Marketing teams make brand claims that drift from reality. 'We are the #1 rated...' when you are actually #3. This workflow validates brand claims by searching Google for rankings, checking Amazon for product ratings versus competitors, and scanning Reddit for authentic customer sentiment. Weekly validation keeps your marketing honest and defensible.
Trigger
Weekly on Friday 10 AM, before weekly marketing review.
Schedule
Weekly
Workflow Steps
Define Brand Claims to Validate
List the claims: ranking positions, rating claims, market share assertions, and feature comparisons.
Search Google for Ranking Verification
For each ranking claim, search the relevant query and check if your brand appears at the claimed position.
Check Amazon Ratings vs Competitors
Search Amazon for your product category. Compare your rating and review count against top competitors.
Scan Reddit for Sentiment
Search Reddit for your brand name. Analyze whether community sentiment aligns with your marketing claims.
Generate Validation Report
Output a claim-by-claim report: VERIFIED, NEEDS UPDATE, or FALSE with supporting evidence.
Python Implementation
import requests, os, json
API_KEY = os.environ["SCAVIO_API_KEY"]
H = {"x-api-key": API_KEY, "Content-Type": "application/json"}
BRAND = "Acme Software"
CLAIMS = [
{"claim": "Top 5 CRM for startups", "query": "best crm for startups 2026", "platform": "google", "expected_rank": 5},
{"claim": "4.8 star rating on Amazon", "query": "Acme CRM software", "platform": "amazon", "expected_rating": 4.8},
{"claim": "Recommended on Reddit", "query": "Acme Software review reddit", "platform": "reddit", "expected_sentiment": "positive"},
]
def search(query: str, platform: str = "google") -> dict:
resp = requests.post(
"https://api.scavio.dev/api/v1/search",
headers=H,
json={"query": query, "platform": platform, "country_code": "us"},
timeout=15,
)
return resp.json()
def validate_ranking(data: dict, brand: str, expected_rank: int) -> dict:
results = data.get("organic_results", [])
for i, r in enumerate(results):
if brand.lower() in r.get("title", "").lower() or brand.lower() in r.get("link", "").lower():
actual_rank = i + 1
return {"status": "VERIFIED" if actual_rank <= expected_rank else "NEEDS UPDATE", "actual_rank": actual_rank}
return {"status": "FALSE", "actual_rank": "not found"}
def validate_rating(data: dict, expected_rating: float) -> dict:
results = data.get("organic_results", [])
if results and results[0].get("rating"):
actual = results[0]["rating"]
return {"status": "VERIFIED" if actual >= expected_rating else "NEEDS UPDATE", "actual_rating": actual}
return {"status": "UNVERIFIABLE", "actual_rating": "not found"}
def validate_claims():
report = []
for claim in CLAIMS:
data = search(claim["query"], claim.get("platform", "google"))
if "expected_rank" in claim:
result = validate_ranking(data, BRAND, claim["expected_rank"])
elif "expected_rating" in claim:
result = validate_rating(data, claim["expected_rating"])
else:
result = {"status": "MANUAL REVIEW", "data_fetched": True}
result["claim"] = claim["claim"]
report.append(result)
print(f"{claim['claim']}: {result['status']}")
return report
validate_claims()JavaScript Implementation
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
const BRAND = 'Acme Software';
const CLAIMS = [
{claim:'Top 5 CRM for startups', query:'best crm for startups 2026', platform:'google', expectedRank:5},
{claim:'4.8 star rating on Amazon', query:'Acme CRM software', platform:'amazon', expectedRating:4.8},
{claim:'Recommended on Reddit', query:'Acme Software review reddit', platform:'reddit', expectedSentiment:'positive'},
];
async function search(query, platform='google') {
const r = await fetch('https://api.scavio.dev/api/v1/search', {method:'POST', headers:H, body:JSON.stringify({query, platform, country_code:'us'})});
return r.json();
}
function validateRanking(data, brand, expectedRank) {
const results = data.organic_results || [];
for (let i=0; i<results.length; i++) {
if ((results[i].title||'').toLowerCase().includes(brand.toLowerCase())) {
const actual = i+1;
return {status:actual<=expectedRank?'VERIFIED':'NEEDS UPDATE', actualRank:actual};
}
}
return {status:'FALSE', actualRank:'not found'};
}
function validateRating(data, expectedRating) {
const results = data.organic_results || [];
if (results[0]?.rating) {
const actual = results[0].rating;
return {status:actual>=expectedRating?'VERIFIED':'NEEDS UPDATE', actualRating:actual};
}
return {status:'UNVERIFIABLE', actualRating:'not found'};
}
async function validateClaims() {
for (const claim of CLAIMS) {
const data = await search(claim.query, claim.platform||'google');
let result;
if (claim.expectedRank) result = validateRanking(data, BRAND, claim.expectedRank);
else if (claim.expectedRating) result = validateRating(data, claim.expectedRating);
else result = {status:'MANUAL REVIEW', dataFetched:true};
console.log(claim.claim+': '+result.status);
}
}
await validateClaims();Platforms Used
Web search with knowledge graph, PAA, and AI overviews
Amazon
Product search with prices, ratings, and reviews
Community, posts & threaded comments from any subreddit