ScavioScavio
ProductPricingDocs
Sign InGet Started
  1. Home
  2. Tutorials
  3. How to Build a Budget TikTok Brand Monitoring System
Tutorial

How to Build a Budget TikTok Brand Monitoring System

Build a TikTok brand monitoring system that tracks mentions, sentiment, and competitor activity. Uses the Scavio TikTok API at $0.005/credit.

Get Free API KeyAPI Docs

A budget TikTok brand monitoring system tracks mentions of your brand, analyzes comment sentiment, and watches competitor activity without expensive social listening subscriptions. Using the Scavio TikTok API at $0.005/credit, you can search videos mentioning your brand, pull comments for sentiment analysis, and monitor competitor hashtags -- all within a $30/month plan. This tutorial builds a complete monitoring pipeline that runs on a daily cron and outputs a summary report.

Prerequisites

  • Python 3.10+ installed
  • requests library installed
  • A Scavio API key from scavio.dev
  • Basic familiarity with TikTok content terminology (hashtags, aweme_id)

Walkthrough

Step 1: Search TikTok for brand mentions

Use the TikTok search/videos endpoint to find recent videos mentioning your brand name. This captures both direct mentions in descriptions and related content.

Python
import requests, os
from datetime import datetime

API_KEY = os.environ['SCAVIO_API_KEY']
HEADERS = {'Authorization': f'Bearer {API_KEY}', 'Content-Type': 'application/json'}

def search_brand_mentions(brand: str, pages: int = 3) -> list:
    videos = []
    cursor = 0
    for _ in range(pages):
        resp = requests.post('https://api.scavio.dev/api/v1/tiktok/search/videos',
            headers=HEADERS,
            json={'keyword': brand, 'count': 20, 'cursor': cursor})
        data = resp.json()['data']
        videos.extend(data.get('videos', []))
        if not data.get('has_more'):
            break
        cursor = data['cursor']
    return videos

mentions = search_brand_mentions('yourBrandName')
print(f'Found {len(mentions)} videos mentioning brand')

Step 2: Extract comment sentiment per mention

For each video mentioning your brand, pull comments and classify sentiment using simple keyword matching. For production use, swap in an LLM classifier.

Python
POSITIVE_WORDS = {'love', 'amazing', 'great', 'best', 'perfect', 'awesome', 'recommend'}
NEGATIVE_WORDS = {'hate', 'worst', 'terrible', 'scam', 'broken', 'awful', 'waste'}

def get_comments(video_id: str, pages: int = 2) -> list:
    comments = []
    cursor = 0
    for _ in range(pages):
        resp = requests.post('https://api.scavio.dev/api/v1/tiktok/video/comments',
            headers=HEADERS,
            json={'aweme_id': video_id, 'count': 20, 'cursor': cursor})
        data = resp.json()['data']
        comments.extend(data.get('comments', []))
        if not data.get('has_more'):
            break
        cursor = data.get('cursor', cursor + 20)
    return comments

def classify_sentiment(comments: list) -> dict:
    counts = {'positive': 0, 'negative': 0, 'neutral': 0}
    for c in comments:
        words = set(c['text'].lower().split())
        if words & POSITIVE_WORDS:
            counts['positive'] += 1
        elif words & NEGATIVE_WORDS:
            counts['negative'] += 1
        else:
            counts['neutral'] += 1
    return counts

Step 3: Monitor competitor hashtags

Track competitor brand hashtags to benchmark their TikTok presence against yours. Compare view counts and video volume over time.

Python
def monitor_hashtag(hashtag: str) -> dict:
    resp = requests.post('https://api.scavio.dev/api/v1/tiktok/hashtag',
        headers=HEADERS, json={'hashtag': hashtag})
    data = resp.json()['data']
    return {
        'hashtag': hashtag,
        'views': data['stats']['view_count'],
        'videos': data['stats']['video_count']
    }

competitors = ['competitorA', 'competitorB', 'yourBrand']
for tag in competitors:
    stats = monitor_hashtag(tag)
    print(f'#{stats["hashtag"]}: {stats["views"]:,} views, {stats["videos"]:,} videos')

Step 4: Generate a daily summary report

Combine brand mentions, sentiment, and competitor data into a daily JSON report. Schedule this with cron for automated monitoring.

Python
import json
from datetime import date

def daily_report(brand: str, competitors: list) -> dict:
    mentions = search_brand_mentions(brand, pages=2)
    total_sentiment = {'positive': 0, 'negative': 0, 'neutral': 0}
    for v in mentions[:10]:  # Sample top 10 for budget
        comments = get_comments(v['aweme_id'], pages=1)
        sentiment = classify_sentiment(comments)
        for k in total_sentiment:
            total_sentiment[k] += sentiment[k]
    comp_stats = [monitor_hashtag(c) for c in competitors]
    report = {
        'date': date.today().isoformat(),
        'brand': brand,
        'mentions_found': len(mentions),
        'sentiment': total_sentiment,
        'competitors': comp_stats
    }
    with open(f'brand_report_{date.today()}.json', 'w') as f:
        json.dump(report, f, indent=2)
    return report

report = daily_report('yourBrand', ['competitorA', 'competitorB'])
print(json.dumps(report, indent=2))

Python Example

Python
import requests, os, json
from datetime import date

API_KEY = os.environ['SCAVIO_API_KEY']
HEADERS = {'Authorization': f'Bearer {API_KEY}', 'Content-Type': 'application/json'}

def search_mentions(brand, pages=2):
    videos, cursor = [], 0
    for _ in range(pages):
        data = requests.post('https://api.scavio.dev/api/v1/tiktok/search/videos',
            headers=HEADERS, json={'keyword': brand, 'count': 20, 'cursor': cursor}).json()['data']
        videos.extend(data.get('videos', []))
        if not data.get('has_more'): break
        cursor = data['cursor']
    return videos

def get_comments(vid_id, pages=1):
    comments, cursor = [], 0
    for _ in range(pages):
        data = requests.post('https://api.scavio.dev/api/v1/tiktok/video/comments',
            headers=HEADERS, json={'aweme_id': vid_id, 'count': 20, 'cursor': cursor}).json()['data']
        comments.extend(data.get('comments', []))
        if not data.get('has_more'): break
        cursor = data.get('cursor', cursor + 20)
    return comments

def hashtag_stats(tag):
    data = requests.post('https://api.scavio.dev/api/v1/tiktok/hashtag',
        headers=HEADERS, json={'hashtag': tag}).json()['data']
    return {'hashtag': tag, 'views': data['stats']['view_count'], 'videos': data['stats']['video_count']}

mentions = search_mentions('yourBrand')
print(f'{len(mentions)} mentions found')
for v in mentions[:5]:
    comments = get_comments(v['aweme_id'])
    print(f"  {v['desc'][:40]} -> {len(comments)} comments")
for c in ['competitorA', 'competitorB']:
    s = hashtag_stats(c)
    print(f"#{s['hashtag']}: {s['views']:,} views")

JavaScript Example

JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
const H = { 'Authorization': `Bearer ${API_KEY}`, 'Content-Type': 'application/json' };

async function searchMentions(brand, pages = 2) {
  const videos = [];
  let cursor = 0;
  for (let i = 0; i < pages; i++) {
    const r = await fetch('https://api.scavio.dev/api/v1/tiktok/search/videos', {
      method: 'POST', headers: H,
      body: JSON.stringify({ keyword: brand, count: 20, cursor })
    }).then(r => r.json());
    videos.push(...(r.data.videos || []));
    if (!r.data.has_more) break;
    cursor = r.data.cursor;
  }
  return videos;
}

async function getComments(videoId) {
  const r = await fetch('https://api.scavio.dev/api/v1/tiktok/video/comments', {
    method: 'POST', headers: H,
    body: JSON.stringify({ aweme_id: videoId, count: 20, cursor: 0 })
  }).then(r => r.json());
  return r.data.comments || [];
}

async function hashtagStats(tag) {
  const r = await fetch('https://api.scavio.dev/api/v1/tiktok/hashtag', {
    method: 'POST', headers: H,
    body: JSON.stringify({ hashtag: tag })
  }).then(r => r.json());
  return { hashtag: tag, views: r.data.stats.view_count };
}

async function main() {
  const mentions = await searchMentions('yourBrand');
  console.log(`${mentions.length} brand mentions`);
  for (const v of mentions.slice(0, 5)) {
    const comments = await getComments(v.aweme_id);
    console.log(`  ${v.desc.slice(0, 40)} -> ${comments.length} comments`);
  }
  for (const c of ['competitorA', 'competitorB']) {
    const s = await hashtagStats(c);
    console.log(`#${s.hashtag}: ${s.views.toLocaleString()} views`);
  }
}

main().catch(console.error);

Expected Output

JSON
{
  "date": "2026-05-12",
  "brand": "yourBrand",
  "mentions_found": 38,
  "sentiment": {
    "positive": 42,
    "negative": 7,
    "neutral": 31
  },
  "competitors": [
    { "hashtag": "competitorA", "views": 2400000, "videos": 1200 },
    { "hashtag": "competitorB", "views": 890000, "videos": 430 }
  ]
}

Related Tutorials

  • How to Analyze TikTok Comment Sentiment with API + LLM
  • How to Track TikTok Hashtag Trends via API
  • How to Build Cross-Platform Brand Monitoring with One API

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. Basic familiarity with TikTok content terminology (hashtags, aweme_id). A Scavio API key gives you 50 free credits on signup.

Yes. The free tier includes 50 credits on signup, 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.

Related Resources

Solution

Monitor Your Brand on TikTok Without Enterprise Pricing

Read more
Best Of

Best Cross-Platform Brand Monitoring APIs in 2026

Read more
Best Of

Best TikTok Analytics APIs for Brand Monitoring in May 2026

Read more
Use Case

Budget TikTok Brand Monitoring via API

Read more
Workflow

Competitor Brand Monitoring Email Digest

Read more
Workflow

Daily TikTok UGC Monitoring Workflow

Read more

Start Building

Build a TikTok brand monitoring system that tracks mentions, sentiment, and competitor activity. Uses the Scavio TikTok API at $0.005/credit.

Get Free API KeyRead the Docs
ScavioScavio

Real-time search API for AI agents. Search every platform, not just Google.

Product

  • Features
  • Pricing
  • Dashboard
  • Affiliates

Developers

  • Documentation
  • API Reference
  • Quickstart
  • MCP Integration
  • Python SDK

Alternatives

  • Tavily Alternative
  • SerpAPI Alternative
  • Firecrawl Alternative
  • Exa Alternative

Tools

  • JSON Formatter
  • cURL to Code
  • Token Counter
  • All Tools

© 2026 Scavio. All rights reserved.

Featured on TAAFT
Terms of ServicePrivacy Policy