Overview
Businesses with multiple locations need to track Google review ratings and new review volume daily, but manually checking each location is tedious and error-prone. This workflow searches Google for each of your business locations at 8 AM daily, extracts current ratings and review counts from the search results, compares against the previous day's data to detect changes, and sends alerts when ratings drop or new negative reviews appear. Early detection means faster response to reputation issues.
Trigger
Cron schedule (daily at 8 AM UTC)
Schedule
Daily at 8 AM UTC
Workflow Steps
Search business locations
Query Google for each business name and location. Extract the knowledge panel data including star rating and review count.
Extract ratings and counts
Parse the search results for current star rating, total review count, and any featured review snippets.
Compare against history
Load the previous day's ratings from storage. Calculate the delta for star rating and review count per location.
Generate change report
Create a summary showing which locations had rating changes, new review volume, and any featured negative snippets.
Alert on significant changes
Send notifications when a location drops below 4.0 stars, loses more than 0.2 stars in a day, or gets flagged reviews.
Python Implementation
import requests, os, json
from datetime import datetime
H = {"x-api-key": os.environ["SCAVIO_API_KEY"]}
LOCATIONS = [
{"name": "Acme Corp", "location": "San Francisco"},
{"name": "Acme Corp", "location": "New York"},
{"name": "Acme Corp", "location": "Austin"},
]
# Previous day's data (load from your storage in production)
PREVIOUS_DATA = {
"San Francisco": {"rating": 4.5, "reviews": 230},
"New York": {"rating": 4.2, "reviews": 185},
"Austin": {"rating": 4.7, "reviews": 95},
}
def check_location(business):
"""Search for a business location and extract review data."""
query = f"{business['name']} {business['location']} reviews"
r = requests.post("https://api.scavio.dev/api/v1/search", headers=H,
json={"platform": "google", "query": query}, timeout=10).json()
# Extract from knowledge graph or organic results
kg = r.get("knowledge_graph", {})
organic = r.get("organic", [])[:3]
snippets = [o.get("snippet", "") for o in organic]
return {
"location": business["location"],
"business": business["name"],
"search_snippets": snippets,
"knowledge_graph": bool(kg),
"checked_at": datetime.utcnow().isoformat()
}
alerts = []
for loc in LOCATIONS:
result = check_location(loc)
prev = PREVIOUS_DATA.get(loc["location"], {})
print(f"[CHECK] {loc['name']} {loc['location']}")
print(f" Snippets: {result['search_snippets'][0][:100] if result['search_snippets'] else 'N/A'}")
if prev:
print(f" Previous: {prev.get('rating', 'N/A')} stars, {prev.get('reviews', 'N/A')} reviews")
print(f"\nLocations checked: {len(LOCATIONS)}")
print(f"Alerts generated: {len(alerts)}")JavaScript Implementation
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};
const LOCATIONS = [
{name: "Acme Corp", location: "San Francisco"},
{name: "Acme Corp", location: "New York"},
{name: "Acme Corp", location: "Austin"},
];
const PREVIOUS_DATA = {
"San Francisco": {rating: 4.5, reviews: 230},
"New York": {rating: 4.2, reviews: 185},
"Austin": {rating: 4.7, reviews: 95},
};
async function checkLocation(business) {
const query = `${business.name} ${business.location} reviews`;
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H,
body: JSON.stringify({platform: "google", query})
}).then(r => r.json());
const organic = (r.organic || []).slice(0, 3);
return {
location: business.location,
business: business.name,
searchSnippets: organic.map(o => o.snippet || ""),
knowledgeGraph: !!r.knowledge_graph,
checkedAt: new Date().toISOString()
};
}
(async () => {
const alerts = [];
for (const loc of LOCATIONS) {
const result = await checkLocation(loc);
const prev = PREVIOUS_DATA[loc.location] || {};
console.log(`[CHECK] ${loc.name} ${loc.location}`);
console.log(` Snippets: ${result.searchSnippets[0]?.slice(0, 100) || "N/A"}`);
if (prev.rating) console.log(` Previous: ${prev.rating} stars, ${prev.reviews} reviews`);
}
console.log(`\nLocations checked: ${LOCATIONS.length}`);
console.log(`Alerts generated: ${alerts.length}`);
})();Platforms Used
Web search with knowledge graph, PAA, and AI overviews