Workflow

CrewAI Search Batch Pipeline

Run a CrewAI research crew on 10 topics with live search grounding. Each agent gets fresh SERP data via Scavio tool integration.

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

1

Load daily research topics

Read the list of 10 topics for today's research batch from configuration or a content calendar.

2

Initialize CrewAI crew with Scavio tool

Set up the CrewAI crew with a custom Scavio search tool that agents can call during execution.

3

Run researcher agent per topic

The researcher agent queries Scavio for each topic, collecting organic results, AI Overviews, and People Also Ask data.

4

Run synthesizer agent

The synthesizer agent combines raw search data into structured findings with source attribution.

5

Output research batch

Save the batch of 10 research summaries as structured JSON for downstream consumption.

Python Implementation

Python
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

JavaScript
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

Google

Web search with knowledge graph, PAA, and AI overviews

Frequently Asked Questions

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.

This workflow uses a cron schedule (daily at 10:00 am utc). Runs daily at 10: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.

CrewAI Search Batch Pipeline

Run a CrewAI research crew on 10 topics with live search grounding. Each agent gets fresh SERP data via Scavio tool integration.