Workflow

SEO Comparison Page Refresh

Weekly refresh of pricing and feature data on comparison pages from live SERP data. Keep programmatic SEO pages accurate and current.

Overview

This workflow refreshes the pricing and feature data on programmatic comparison pages every Monday by pulling live SERP data for each competitor mentioned on the pages. Comparison pages go stale fast because competitor pricing changes frequently. This pipeline ensures every comparison page shows current pricing, updated feature lists, and fresh metadata so search engines see consistently accurate content.

Trigger

Cron schedule (every Monday at 6:00 AM UTC)

Schedule

Runs every Monday at 6:00 AM UTC

Workflow Steps

1

Load comparison page inventory

Read the list of comparison pages and the competitors referenced on each page.

2

Search for current competitor data

Query Scavio Google for each competitor to find current pricing, features, and positioning.

3

Extract pricing from search results

Parse pricing information from organic snippets, knowledge panels, and featured snippets.

4

Update comparison page data files

Write the refreshed pricing and feature data back to the comparison page data store.

5

Log update summary

Record which pages were updated, what pricing changed, and flag any competitors with missing data.

Python Implementation

Python
import requests
import json
from pathlib import Path
from datetime import datetime

API_KEY = "your_scavio_api_key"

COMPARISON_PAGES = [
    {
        "slug": "scavio-vs-serpapi",
        "competitors": [
            {"name": "SerpAPI", "query": "SerpAPI pricing 2026"},
            {"name": "Scavio", "query": "Scavio search API pricing 2026"},
        ],
    },
    {
        "slug": "scavio-vs-dataforseo",
        "competitors": [
            {"name": "DataForSEO", "query": "DataForSEO pricing 2026"},
            {"name": "Scavio", "query": "Scavio API pricing plans"},
        ],
    },
]

def search_competitor(query: str) -> dict:
    res = requests.post(
        "https://api.scavio.dev/api/v1/search",
        headers={"x-api-key": API_KEY},
        json={"platform": "google", "query": query},
        timeout=15,
    )
    res.raise_for_status()
    data = res.json()
    snippets = [r.get("snippet", "") for r in data.get("organic", [])[:5]]
    kg = data.get("knowledge_graph") or {}
    return {
        "query": query,
        "top_snippets": snippets,
        "knowledge_graph": kg.get("description", ""),
        "fetched_at": datetime.utcnow().isoformat(),
    }

def run():
    date = datetime.utcnow().strftime("%Y-%m-%d")
    updates = []

    for page in COMPARISON_PAGES:
        page_data = {"slug": page["slug"], "competitors": []}
        for comp in page["competitors"]:
            result = search_competitor(comp["query"])
            page_data["competitors"].append({
                "name": comp["name"],
                "serp_data": result,
            })
        updates.append(page_data)

    output = {"date": date, "pages_refreshed": len(COMPARISON_PAGES), "updates": updates}
    Path(f"comparison_refresh_{date}.json").write_text(json.dumps(output, indent=2))

    print(f"Comparison page refresh {date}: {len(COMPARISON_PAGES)} pages updated")
    for u in updates:
        print(f"  {u['slug']}: {len(u['competitors'])} competitors refreshed")

if __name__ == "__main__":
    run()

JavaScript Implementation

JavaScript
const API_KEY = "your_scavio_api_key";
const PAGES = [
  { slug: "scavio-vs-serpapi", competitors: [{ name: "SerpAPI", query: "SerpAPI pricing 2026" }, { name: "Scavio", query: "Scavio API pricing 2026" }] },
  { slug: "scavio-vs-dataforseo", competitors: [{ name: "DataForSEO", query: "DataForSEO pricing 2026" }] },
];

async function searchCompetitor(query) {
  const res = await fetch("https://api.scavio.dev/api/v1/search", {
    method: "POST",
    headers: { "x-api-key": API_KEY, "content-type": "application/json" },
    body: JSON.stringify({ platform: "google", query }),
  });
  if (!res.ok) throw new Error(`scavio ${res.status}`);
  const data = await res.json();
  return { snippets: (data.organic ?? []).slice(0, 5).map((r) => r.snippet ?? ""), kg: data.knowledge_graph?.description ?? "" };
}

for (const page of PAGES) {
  const results = [];
  for (const comp of page.competitors) results.push(await searchCompetitor(comp.query));
  console.log(`${page.slug}: ${page.competitors.length} competitors refreshed`);
}

Platforms Used

Google

Web search with knowledge graph, PAA, and AI overviews

Frequently Asked Questions

This workflow refreshes the pricing and feature data on programmatic comparison pages every Monday by pulling live SERP data for each competitor mentioned on the pages. Comparison pages go stale fast because competitor pricing changes frequently. This pipeline ensures every comparison page shows current pricing, updated feature lists, and fresh metadata so search engines see consistently accurate content.

This workflow uses a cron schedule (every monday at 6:00 am utc). Runs every Monday at 6:00 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.

SEO Comparison Page Refresh

Weekly refresh of pricing and feature data on comparison pages from live SERP data. Keep programmatic SEO pages accurate and current.