Tutorial

How to Build a Multi-Platform Product Research Agent

Build an AI agent that researches products across web search, TikTok, and YouTube simultaneously. Get 360-degree product intelligence in one pipeline.

Product research that only checks one platform misses the full picture. A product might be trending on TikTok but have terrible reviews on Google, or be highly rated online but unknown on social media. This tutorial builds a multi-platform research agent that combines web search, TikTok data, and YouTube coverage into a unified product intelligence report. Total cost per product: 3 searches + 1 TikTok query = $0.020.

Prerequisites

  • Python 3.9+ installed
  • requests library installed
  • A Scavio API key from scavio.dev

Walkthrough

Step 1: Build platform-specific search functions

Create separate search functions for web, TikTok, and YouTube. Each returns normalized results with platform-specific metadata.

Python
import requests, os, time

SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
SEARCH_URL = 'https://api.scavio.dev/api/v1/search'
TT_URL = 'https://api.scavio.dev/api/v1/tiktok'

def search_web(query: str) -> list:
    resp = requests.post(SEARCH_URL,
        headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
        json={'query': query, 'country_code': 'us', 'num_results': 10})
    return [{'title': r['title'], 'url': r['link'], 'snippet': r.get('snippet', ''),
             'platform': 'web'} for r in resp.json().get('organic_results', [])]

def search_youtube(query: str) -> list:
    resp = requests.post(SEARCH_URL,
        headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
        json={'query': f'site:youtube.com {query} review',
              'country_code': 'us', 'num_results': 5})
    return [{'title': r['title'].replace(' - YouTube', ''), 'url': r['link'],
             'snippet': r.get('snippet', ''), 'platform': 'youtube'}
            for r in resp.json().get('organic_results', [])
            if 'youtube.com' in r.get('link', '')]

def search_tiktok(query: str) -> list:
    resp = requests.post(f'{TT_URL}/search/videos',
        headers={'Authorization': f'Bearer {SCAVIO_KEY}',
                 'Content-Type': 'application/json'},
        json={'keyword': query, 'count': 10, 'cursor': 0})
    videos = resp.json().get('data', {}).get('videos', [])
    return [{'title': v.get('desc', '')[:80], 'author': v.get('author', {}).get('uniqueId', ''),
             'plays': v.get('stats', {}).get('playCount', 0),
             'likes': v.get('stats', {}).get('diggCount', 0),
             'platform': 'tiktok'} for v in videos]

print('Platform search functions ready')

Step 2: Build the multi-platform research pipeline

Search all three platforms for a product and compile the results into a unified report.

Python
def research_product(product_name: str) -> dict:
    print(f'Researching: {product_name}\n')
    # Web search: reviews and pricing
    web_results = search_web(f'{product_name} review 2026')
    time.sleep(0.3)
    # YouTube: video reviews
    yt_results = search_youtube(product_name)
    time.sleep(0.3)
    # TikTok: social buzz
    tt_results = search_tiktok(product_name)
    # Analyze web sentiment
    web_text = ' '.join(r['snippet'] for r in web_results).lower()
    positive_signals = sum(1 for w in ['best', 'excellent', 'recommend', 'love', 'great']
                          if w in web_text)
    negative_signals = sum(1 for w in ['worst', 'avoid', 'terrible', 'scam', 'overpriced']
                          if w in web_text)
    # Analyze TikTok engagement
    tt_total_plays = sum(v.get('plays', 0) for v in tt_results)
    tt_total_likes = sum(v.get('likes', 0) for v in tt_results)
    tt_creators = len(set(v.get('author', '') for v in tt_results))
    return {
        'product': product_name,
        'web': {'results': len(web_results), 'positive': positive_signals,
                'negative': negative_signals, 'top_result': web_results[0]['title'] if web_results else ''},
        'youtube': {'videos': len(yt_results),
                    'top_video': yt_results[0]['title'] if yt_results else ''},
        'tiktok': {'videos': len(tt_results), 'total_plays': tt_total_plays,
                   'total_likes': tt_total_likes, 'unique_creators': tt_creators},
        'credits_used': 3,  # 1 web + 1 youtube + 1 tiktok
        'cost': 0.015
    }

Step 3: Generate the product intelligence report

Format the multi-platform data into a human-readable report with platform-specific insights.

Python
def product_report(data: dict):
    print(f'Product Intelligence Report: {data["product"]}')
    print('=' * 50)
    # Web presence
    web = data['web']
    sentiment = 'positive' if web['positive'] > web['negative'] else 'negative' if web['negative'] > web['positive'] else 'neutral'
    print(f'\nWeb Search ({web["results"]} results):')
    print(f'  Sentiment: {sentiment} ({web["positive"]} positive, {web["negative"]} negative)')
    if web['top_result']:
        print(f'  Top result: {web["top_result"][:50]}')
    # YouTube coverage
    yt = data['youtube']
    print(f'\nYouTube ({yt["videos"]} videos found):')
    if yt['top_video']:
        print(f'  Top review: {yt["top_video"][:50]}')
    # TikTok buzz
    tt = data['tiktok']
    print(f'\nTikTok ({tt["videos"]} videos):')
    print(f'  Total plays: {tt["total_plays"]:,}')
    print(f'  Total likes: {tt["total_likes"]:,}')
    print(f'  Unique creators: {tt["unique_creators"]}')
    # Overall assessment
    tiktok_buzz = 'high' if tt['total_plays'] > 100000 else 'medium' if tt['total_plays'] > 10000 else 'low'
    print(f'\nOverall:')
    print(f'  Web sentiment: {sentiment}')
    print(f'  TikTok buzz: {tiktok_buzz}')
    print(f'  YouTube coverage: {"good" if yt["videos"] >= 3 else "limited"}')
    print(f'  Cost: ${data["cost"]:.3f} ({data["credits_used"]} API calls)')

# Research a product
data = research_product('Stanley Quencher tumbler')
product_report(data)

Python Example

Python
import requests, os, time

SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
SEARCH = 'https://api.scavio.dev/api/v1/search'
TT = 'https://api.scavio.dev/api/v1/tiktok'

def research(product):
    # Web
    web = requests.post(SEARCH, headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
        json={'query': f'{product} review 2026', 'country_code': 'us', 'num_results': 5}).json()
    # YouTube
    yt = requests.post(SEARCH, headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
        json={'query': f'site:youtube.com {product} review', 'country_code': 'us', 'num_results': 3}).json()
    # TikTok
    tt = requests.post(f'{TT}/search/videos', headers={'Authorization': f'Bearer {SCAVIO_KEY}',
        'Content-Type': 'application/json'}, json={'keyword': product, 'count': 10, 'cursor': 0}).json()
    web_count = len(web.get('organic_results', []))
    yt_count = len([r for r in yt.get('organic_results', []) if 'youtube' in r.get('link', '')])
    tt_plays = sum(v.get('stats', {}).get('playCount', 0) for v in tt.get('data', {}).get('videos', []))
    print(f'{product}: web={web_count}, youtube={yt_count}, tiktok_plays={tt_plays:,}')

research('Stanley Quencher tumbler')

JavaScript Example

JavaScript
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;

async function research(product) {
  const web = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST', headers: { 'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ query: `${product} review 2026`, country_code: 'us', num_results: 5 })
  }).then(r => r.json());
  const yt = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST', headers: { 'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ query: `site:youtube.com ${product} review`, country_code: 'us', num_results: 3 })
  }).then(r => r.json());
  const tt = await fetch('https://api.scavio.dev/api/v1/tiktok/search/videos', {
    method: 'POST', headers: { 'Authorization': `Bearer ${SCAVIO_KEY}`, 'Content-Type': 'application/json' },
    body: JSON.stringify({ keyword: product, count: 10, cursor: 0 })
  }).then(r => r.json());
  const plays = (tt.data?.videos || []).reduce((s, v) => s + (v.stats?.playCount || 0), 0);
  console.log(`${product}: web=${(web.organic_results||[]).length}, tiktok_plays=${plays.toLocaleString()}`);
}

research('Stanley Quencher tumbler');

Expected Output

JSON
Researching: Stanley Quencher tumbler

Product Intelligence Report: Stanley Quencher tumbler
==================================================

Web Search (10 results):
  Sentiment: positive (3 positive, 0 negative)
  Top result: Stanley Quencher H2.0 Review 2026 - Best Tumb

YouTube (4 videos found):
  Top review: Stanley Quencher vs YETI Rambler - Honest Rev

TikTok (10 videos):
  Total plays: 2,450,000
  Total likes: 185,000
  Unique creators: 8

Overall:
  Web sentiment: positive
  TikTok buzz: high
  YouTube coverage: good
  Cost: $0.015 (3 API calls)

Related Tutorials

Frequently Asked Questions

Most developers complete this tutorial in 15 to 30 minutes. You will need a Scavio API key (free tier works) and a working Python or JavaScript environment.

Python 3.9+ installed. requests library installed. A Scavio API key from scavio.dev. A Scavio API key gives you 250 free credits per month.

Yes. The free tier includes 250 credits per month, which is more than enough to complete this tutorial and prototype a working solution.

Scavio has a native LangChain package (langchain-scavio), an MCP server, and a plain REST API that works with any HTTP client. This tutorial uses the raw REST API, but you can adapt to your framework of choice.

Start Building

Build an AI agent that researches products across web search, TikTok, and YouTube simultaneously. Get 360-degree product intelligence in one pipeline.