Overview
This workflow runs a CrewAI research crew that processes 10 topics daily, with each agent grounded by live search data from Scavio. A researcher agent searches Google for each topic, a synthesizer agent combines findings, and a writer agent produces research summaries. The Scavio tool integration ensures every crew output is based on current data rather than training cutoff knowledge.
Trigger
Cron schedule (daily at 10:00 AM UTC)
Schedule
Runs daily at 10:00 AM UTC
Workflow Steps
Load daily research topics
Read the list of 10 topics for today's research batch from configuration or a content calendar.
Initialize CrewAI crew with Scavio tool
Set up the CrewAI crew with a custom Scavio search tool that agents can call during execution.
Run researcher agent per topic
The researcher agent queries Scavio for each topic, collecting organic results, AI Overviews, and People Also Ask data.
Run synthesizer agent
The synthesizer agent combines raw search data into structured findings with source attribution.
Output research batch
Save the batch of 10 research summaries as structured JSON for downstream consumption.
Python Implementation
import requests
import json
from pathlib import Path
from datetime import datetime
API_KEY = "your_scavio_api_key"
TOPICS = [
"best SERP API for AI agents 2026",
"structured search data vs web scraping",
"AI Overview optimization strategies",
"search API pricing comparison 2026",
"MCP search integration patterns",
]
def scavio_search(query: str) -> dict:
"""Custom tool function for CrewAI agents."""
res = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": query, "ai_overview": True},
timeout=15,
)
res.raise_for_status()
data = res.json()
return {
"query": query,
"organic": [
{"title": r.get("title", ""), "snippet": r.get("snippet", ""), "link": r.get("link", "")}
for r in data.get("organic", [])[:5]
],
"ai_overview": (data.get("ai_overview") or {}).get("text", "")[:500],
"paa": [q.get("question", "") for q in data.get("people_also_ask", [])],
}
def run():
date = datetime.utcnow().strftime("%Y-%m-%d")
batch_results = []
for topic in TOPICS:
# Step 1: Research phase (simulates CrewAI researcher agent)
search_data = scavio_search(topic)
# Step 2: Synthesis phase (simulates CrewAI synthesizer agent)
summary = {
"topic": topic,
"sources_found": len(search_data["organic"]),
"has_ai_overview": bool(search_data["ai_overview"]),
"related_questions": search_data["paa"],
"top_sources": search_data["organic"][:3],
"ai_overview_excerpt": search_data["ai_overview"][:200],
}
batch_results.append(summary)
output = {"date": date, "topics_processed": len(TOPICS), "results": batch_results}
Path(f"crewai_batch_{date}.json").write_text(json.dumps(output, indent=2))
print(f"CrewAI batch {date}: {len(batch_results)} topics researched")
for r in batch_results:
print(f" {r['topic']}: {r['sources_found']} sources, AIO={'yes' if r['has_ai_overview'] else 'no'}")
if __name__ == "__main__":
run()JavaScript Implementation
const API_KEY = "your_scavio_api_key";
const TOPICS = ["best SERP API for AI agents 2026", "structured search data vs web scraping", "AI Overview optimization"];
async function scavioSearch(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, ai_overview: true }),
});
if (!res.ok) throw new Error(`scavio ${res.status}`);
const data = await res.json();
return {
organic: (data.organic ?? []).slice(0, 5).map((r) => ({ title: r.title ?? "", snippet: r.snippet ?? "" })),
aiOverview: (data.ai_overview ?? {}).text ?? "",
paa: (data.people_also_ask ?? []).map((q) => q.question ?? ""),
};
}
const results = [];
for (const topic of TOPICS) {
const data = await scavioSearch(topic);
results.push({ topic, sources: data.organic.length, hasAio: !!data.aiOverview });
}
for (const r of results) console.log(`${r.topic}: ${r.sources} sources, AIO=${r.hasAio}`);Platforms Used
Web search with knowledge graph, PAA, and AI overviews