Tutorial

How to Build Cross-Platform Brand Monitoring with One API

Build brand monitoring across Google, TikTok, Amazon, and YouTube in a single pipeline. Track mentions, sentiment, and share of voice with one API.

Cross-platform brand monitoring tracks your brand's presence across Google search results, TikTok videos, Amazon product listings, and YouTube content in a single unified pipeline. Instead of juggling four separate APIs with different auth schemes, rate limits, and response formats, you can use the Scavio search API for Google, Amazon, and YouTube and the Scavio TikTok API for TikTok -- two endpoints covering four platforms. This tutorial builds a daily monitoring pipeline that outputs a unified brand health report with mention counts, sentiment signals, and competitor benchmarks.

Prerequisites

  • Python 3.10+ installed
  • requests library installed
  • A Scavio API key from scavio.dev
  • Brand name and 1-2 competitor names to monitor

Walkthrough

Step 1: Set up the shared API clients

Create two helper functions: one for the search API (Google, Amazon, YouTube) and one for the TikTok API. Both use the same API key but different auth patterns.

Python
import requests, os

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

def search_api(body: dict) -> dict:
    resp = requests.post(SEARCH_URL,
        headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'},
        json=body)
    resp.raise_for_status()
    return resp.json()

def tiktok_api(endpoint: str, body: dict) -> dict:
    resp = requests.post(f'{TIKTOK_URL}/{endpoint}',
        headers={'Authorization': f'Bearer {API_KEY}',
                 'Content-Type': 'application/json'},
        json=body)
    resp.raise_for_status()
    return resp.json()

Step 2: Monitor Google, Amazon, and YouTube mentions

Search each platform for brand mentions. Count how many times your brand appears in organic results, Amazon listings, and YouTube videos.

Python
def monitor_google(brand: str) -> dict:
    data = search_api({'query': f'"{brand}"', 'country_code': 'us'})
    organic = data.get('organic_results', [])
    return {'platform': 'google', 'mentions': len(organic),
            'top_result': organic[0]['title'] if organic else None}

def monitor_amazon(brand: str) -> dict:
    data = search_api({'platform': 'amazon', 'query': brand, 'marketplace': 'US'})
    products = data.get('products', [])
    return {'platform': 'amazon', 'listings': len(products),
            'avg_rating': sum(p.get('rating', 0) for p in products) / max(len(products), 1)}

def monitor_youtube(brand: str) -> dict:
    data = search_api({'platform': 'youtube', 'query': brand})
    videos = data.get('videos', [])
    return {'platform': 'youtube', 'videos': len(videos),
            'top_video': videos[0].get('title') if videos else None}

for fn in [monitor_google, monitor_amazon, monitor_youtube]:
    result = fn('yourBrand')
    print(result)

Step 3: Monitor TikTok mentions and hashtag presence

Search TikTok for brand video mentions and check the brand hashtag stats. Combine both signals for a TikTok presence score.

Python
def monitor_tiktok(brand: str) -> dict:
    # Video mentions
    search_data = tiktok_api('search/videos',
        {'keyword': brand, 'count': 20, 'cursor': 0})['data']
    video_count = len(search_data.get('videos', []))
    total_plays = sum(v.get('stats', {}).get('playCount', 0)
                      for v in search_data.get('videos', []))
    # Hashtag presence
    try:
        hashtag_data = tiktok_api('hashtag', {'hashtag': brand})['data']
        hashtag_views = hashtag_data['stats']['view_count']
    except Exception:
        hashtag_views = 0
    return {
        'platform': 'tiktok',
        'video_mentions': video_count,
        'total_plays': total_plays,
        'hashtag_views': hashtag_views
    }

tiktok_stats = monitor_tiktok('yourBrand')
print(tiktok_stats)

Step 4: Build the unified daily report

Combine all platform data into a single report. Run this daily to track brand health over time. Add competitor brands to benchmark share of voice.

Python
import json
from datetime import date

def brand_report(brands: list) -> dict:
    report = {'date': date.today().isoformat(), 'brands': {}}
    for brand in brands:
        report['brands'][brand] = {
            'google': monitor_google(brand),
            'amazon': monitor_amazon(brand),
            'youtube': monitor_youtube(brand),
            'tiktok': monitor_tiktok(brand)
        }
    # Share of voice: total mentions across platforms
    for brand in brands:
        data = report['brands'][brand]
        total = (data['google']['mentions'] + data['amazon']['listings'] +
                 data['youtube']['videos'] + data['tiktok']['video_mentions'])
        data['total_mentions'] = total
    grand_total = sum(b['total_mentions'] for b in report['brands'].values())
    for brand in brands:
        sov = report['brands'][brand]['total_mentions'] / max(grand_total, 1)
        report['brands'][brand]['share_of_voice'] = round(sov * 100, 1)
    with open(f'brand_monitor_{date.today()}.json', 'w') as f:
        json.dump(report, f, indent=2)
    return report

report = brand_report(['yourBrand', 'competitorA', 'competitorB'])
for brand, data in report['brands'].items():
    print(f"{brand}: {data['total_mentions']} mentions, {data['share_of_voice']}% SoV")

Step 5: Estimate monthly API cost

Calculate the credit usage for daily monitoring across all platforms. Each API call costs 1 credit at $0.005. A daily run for 3 brands across 4 platforms uses roughly 15-20 credits per day.

Python
def estimate_monthly_cost(num_brands: int, runs_per_day: int = 1) -> dict:
    # Per brand per run: 1 Google + 1 Amazon + 1 YouTube + 2 TikTok = 5 credits
    credits_per_run = num_brands * 5
    daily_credits = credits_per_run * runs_per_day
    monthly_credits = daily_credits * 30
    cost = monthly_credits * 0.005
    return {
        'brands': num_brands,
        'daily_credits': daily_credits,
        'monthly_credits': monthly_credits,
        'monthly_cost': f'${cost:.2f}',
        'recommended_plan': '$30/7K credits' if monthly_credits <= 7000
            else '$100/28K credits' if monthly_credits <= 28000
            else '$250/85K credits'
    }

for n in [3, 10, 25]:
    est = estimate_monthly_cost(n)
    print(f"{est['brands']} brands: {est['monthly_credits']} credits/mo "
          f"({est['monthly_cost']}), plan: {est['recommended_plan']}")

Python Example

Python
import requests, os, json
from datetime import date

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

def search_api(body):
    return requests.post(SEARCH_URL,
        headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'},
        json=body).json()

def tiktok_api(endpoint, body):
    return requests.post(f'{TIKTOK_URL}/{endpoint}',
        headers={'Authorization': f'Bearer {API_KEY}',
                 'Content-Type': 'application/json'},
        json=body).json()

def monitor_brand(brand):
    google = search_api({'query': f'"{brand}"', 'country_code': 'us'})
    amazon = search_api({'platform': 'amazon', 'query': brand, 'marketplace': 'US'})
    youtube = search_api({'platform': 'youtube', 'query': brand})
    tiktok = tiktok_api('search/videos', {'keyword': brand, 'count': 20, 'cursor': 0})
    return {
        'google_mentions': len(google.get('organic_results', [])),
        'amazon_listings': len(amazon.get('products', [])),
        'youtube_videos': len(youtube.get('videos', [])),
        'tiktok_videos': len(tiktok.get('data', {}).get('videos', [])),
    }

brands = ['yourBrand', 'competitorA', 'competitorB']
report = {b: monitor_brand(b) for b in brands}
for brand, data in report.items():
    total = sum(data.values())
    print(f'{brand}: {total} total mentions across 4 platforms')
    for k, v in data.items():
        print(f'  {k}: {v}')

JavaScript Example

JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
const SEARCH_URL = 'https://api.scavio.dev/api/v1/search';
const TIKTOK_URL = 'https://api.scavio.dev/api/v1/tiktok';

async function searchApi(body) {
  const r = await fetch(SEARCH_URL, {
    method: 'POST',
    headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify(body)
  });
  return r.json();
}

async function tiktokApi(endpoint, body) {
  const r = await fetch(`${TIKTOK_URL}/${endpoint}`, {
    method: 'POST',
    headers: { 'Authorization': `Bearer ${API_KEY}`, 'Content-Type': 'application/json' },
    body: JSON.stringify(body)
  });
  return r.json();
}

async function monitorBrand(brand) {
  const [google, amazon, youtube, tiktok] = await Promise.all([
    searchApi({ query: `"${brand}"`, country_code: 'us' }),
    searchApi({ platform: 'amazon', query: brand, marketplace: 'US' }),
    searchApi({ platform: 'youtube', query: brand }),
    tiktokApi('search/videos', { keyword: brand, count: 20, cursor: 0 })
  ]);
  return {
    google: (google.organic_results || []).length,
    amazon: (amazon.products || []).length,
    youtube: (youtube.videos || []).length,
    tiktok: (tiktok.data?.videos || []).length
  };
}

async function main() {
  for (const brand of ['yourBrand', 'competitorA', 'competitorB']) {
    const data = await monitorBrand(brand);
    const total = Object.values(data).reduce((a, b) => a + b, 0);
    console.log(`${brand}: ${total} mentions (G:${data.google} A:${data.amazon} Y:${data.youtube} T:${data.tiktok})`);
  }
}

main().catch(console.error);

Expected Output

JSON
{
  "date": "2026-05-12",
  "brands": {
    "yourBrand": {
      "google_mentions": 10,
      "amazon_listings": 5,
      "youtube_videos": 8,
      "tiktok_videos": 14,
      "total_mentions": 37,
      "share_of_voice": 45.1
    },
    "competitorA": {
      "total_mentions": 28,
      "share_of_voice": 34.1
    },
    "competitorB": {
      "total_mentions": 17,
      "share_of_voice": 20.7
    }
  }
}

3 brands: 450 credits/mo ($2.25), plan: $30/7K credits
10 brands: 1500 credits/mo ($7.50), plan: $30/7K credits
25 brands: 3750 credits/mo ($18.75), plan: $30/7K credits

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.10+ installed. requests library installed. A Scavio API key from scavio.dev. Brand name and 1-2 competitor names to monitor. 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 brand monitoring across Google, TikTok, Amazon, and YouTube in a single pipeline. Track mentions, sentiment, and share of voice with one API.