Workflow

Daily Google Reviews Monitoring Pipeline

Monitor Google reviews daily. Track rating changes, detect new reviews, and alert your team on reputation shifts.

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

1

Search business locations

Query Google for each business name and location. Extract the knowledge panel data including star rating and review count.

2

Extract ratings and counts

Parse the search results for current star rating, total review count, and any featured review snippets.

3

Compare against history

Load the previous day's ratings from storage. Calculate the delta for star rating and review count per location.

4

Generate change report

Create a summary showing which locations had rating changes, new review volume, and any featured negative snippets.

5

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

Python
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

JavaScript
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

Google

Web search with knowledge graph, PAA, and AI overviews

Frequently Asked Questions

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.

This workflow uses a cron schedule (daily at 8 am utc). Daily at 8 AM UTC.

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

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

Daily Google Reviews Monitoring Pipeline

Monitor Google reviews daily. Track rating changes, detect new reviews, and alert your team on reputation shifts.