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.
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.
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.
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.
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.
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
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
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
{
"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