Workflow

Daily Cross-Platform Competitive Intelligence

Monitor competitors across Google, Reddit, and TikTok daily. Aggregate competitive signals from multiple platforms automatically.

Overview

Competitors do not operate on a single platform, and neither should your monitoring. This workflow runs daily at 7 AM, searches for your competitors on Google (news and web), Reddit (discussions and mentions), and TikTok (content and engagement), aggregates the signals into a unified intelligence feed, and highlights anything new or trending. Monitoring 3 competitors across 3 platforms costs about 9 credits per day ($0.045).

Trigger

Cron 7 AM UTC daily

Schedule

Daily 7 AM

Workflow Steps

1

Load Competitor Configuration

Read the list of competitor names, domains, and platform-specific identifiers from config.

2

Search Google for Competitor News

For each competitor, search Google via Scavio for recent news, press releases, and product updates.

3

Search Reddit for Mentions

Search Reddit via Scavio for competitor name mentions in relevant subreddits.

4

Search TikTok for Content

Search TikTok via Scavio for competitor brand mentions and related content.

5

Aggregate and Deduplicate

Merge results across platforms, deduplicate by URL, and tag each item with its source platform.

6

Score and Alert

Score items by novelty and relevance. Send a daily digest with the top signals to Slack or email.

Python Implementation

Python
import requests, os, json
from pathlib import Path
from datetime import date

API_KEY = os.environ["SCAVIO_API_KEY"]
SH = {"x-api-key": API_KEY, "Content-Type": "application/json"}
TH = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}

COMPETITORS = [
    {"name": "Competitor A", "domain": "competitora.com", "tiktok": "competitora"},
    {"name": "Competitor B", "domain": "competitorb.com", "tiktok": "competitorb"},
    {"name": "Competitor C", "domain": "competitorc.com", "tiktok": "competitorc"},
]
INTEL_DIR = Path("competitive_intel")
INTEL_DIR.mkdir(exist_ok=True)

def search_google(query: str) -> list:
    resp = requests.post("https://api.scavio.dev/api/v1/search", headers=SH, json={"query": query, "platform": "google"}, timeout=15)
    return resp.json().get("organic", []) if resp.ok else []

def search_reddit(query: str) -> list:
    resp = requests.post("https://api.scavio.dev/api/v1/search", headers=SH, json={"query": query, "platform": "reddit"}, timeout=15)
    return resp.json().get("organic", []) if resp.ok else []

def search_tiktok(query: str) -> list:
    resp = requests.post("https://api.scavio.dev/api/v1/tiktok/search", headers=TH, json={"query": query}, timeout=15)
    return resp.json().get("results", []) if resp.ok else []

def run():
    all_signals = []
    seen_urls = set()

    for comp in COMPETITORS:
        for platform_fn, platform_name, query in [
            (search_google, "google", f"{comp['name']} news 2026"),
            (search_reddit, "reddit", f"{comp['name']} review discussion"),
            (search_tiktok, "tiktok", comp["tiktok"]),
        ]:
            results = platform_fn(query)
            for r in results[:5]:
                url = r.get("url", "") or r.get("link", "")
                if url and url not in seen_urls:
                    seen_urls.add(url)
                    all_signals.append({
                        "competitor": comp["name"],
                        "platform": platform_name,
                        "title": r.get("title", "") or r.get("description", ""),
                        "url": url,
                        "snippet": r.get("snippet", ""),
                    })

    all_signals.sort(key=lambda s: s["platform"])
    out = INTEL_DIR / f"intel_{date.today()}.json"
    out.write_text(json.dumps(all_signals, indent=2))
    print(f"Competitive intel for {date.today()}: {len(all_signals)} signals")
    for s in all_signals[:10]:
        print(f"  [{s['platform']}] {s['competitor']}: {s['title'][:60]}")

run()

JavaScript Implementation

JavaScript
const SH = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
const TH = {'Authorization': 'Bearer '+process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
const fs = await import('fs');

const COMPETITORS = [
  {name:'Competitor A', domain:'competitora.com', tiktok:'competitora'},
  {name:'Competitor B', domain:'competitorb.com', tiktok:'competitorb'},
  {name:'Competitor C', domain:'competitorc.com', tiktok:'competitorc'},
];
const INTEL_DIR = 'competitive_intel';
try { fs.mkdirSync(INTEL_DIR); } catch {}

async function searchGoogle(query) {
  const r = await fetch('https://api.scavio.dev/api/v1/search', {method:'POST', headers:SH, body:JSON.stringify({query, platform:'google'})});
  return (await r.json()).organic || [];
}
async function searchReddit(query) {
  const r = await fetch('https://api.scavio.dev/api/v1/search', {method:'POST', headers:SH, body:JSON.stringify({query, platform:'reddit'})});
  return (await r.json()).organic || [];
}
async function searchTiktok(query) {
  const r = await fetch('https://api.scavio.dev/api/v1/tiktok/search', {method:'POST', headers:TH, body:JSON.stringify({query})});
  return (await r.json()).results || [];
}

const allSignals = [];
const seenUrls = new Set();
for (const comp of COMPETITORS) {
  const searches = [
    {fn:searchGoogle, platform:'google', query:comp.name+' news 2026'},
    {fn:searchReddit, platform:'reddit', query:comp.name+' review discussion'},
    {fn:searchTiktok, platform:'tiktok', query:comp.tiktok},
  ];
  for (const s of searches) {
    const results = await s.fn(s.query);
    for (const r of results.slice(0,5)) {
      const url = r.url || r.link || '';
      if (url && !seenUrls.has(url)) {
        seenUrls.add(url);
        allSignals.push({competitor:comp.name, platform:s.platform, title:r.title||r.description||'', url, snippet:r.snippet||''});
      }
    }
  }
}
const today = new Date().toISOString().split('T')[0];
fs.writeFileSync(INTEL_DIR+'/intel_'+today+'.json', JSON.stringify(allSignals, null, 2));
console.log('Competitive intel: '+allSignals.length+' signals');
allSignals.slice(0,10).forEach(s => console.log('  ['+s.platform+'] '+s.competitor+': '+s.title.slice(0,60)));

Platforms Used

Google

Web search with knowledge graph, PAA, and AI overviews

Reddit

Community, posts & threaded comments from any subreddit

TikTok

Trending video, creator, and product discovery

Frequently Asked Questions

Competitors do not operate on a single platform, and neither should your monitoring. This workflow runs daily at 7 AM, searches for your competitors on Google (news and web), Reddit (discussions and mentions), and TikTok (content and engagement), aggregates the signals into a unified intelligence feed, and highlights anything new or trending. Monitoring 3 competitors across 3 platforms costs about 9 credits per day ($0.045).

This workflow uses a cron 7 am utc daily. Daily 7 AM.

This workflow uses the following Scavio platforms: google, reddit, tiktok. 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 Cross-Platform Competitive Intelligence

Monitor competitors across Google, Reddit, and TikTok daily. Aggregate competitive signals from multiple platforms automatically.