tiktokdashboardtutorial

Build a TikTok Analytics Dashboard with API Data

Build a TikTok analytics dashboard pulling real data from 11 API endpoints. Profile stats, post performance, comment sentiment, and hashtag trends in one view.

7 min read

Build a TikTok analytics dashboard by pulling profile stats, video performance, and hashtag data from Scavio TikTok API endpoints. Each request costs 1 credit ($0.005). The data comes back as structured JSON ready for charting libraries or spreadsheet export.

Dashboard Data Sources

A useful TikTok dashboard tracks three layers: account-level metrics (followers, total likes over time), content-level metrics (per-video views, engagement), and discovery metrics (hashtag performance, search visibility). Scavio endpoints cover all three.

Account Metrics Collector

Python
import requests, os, json
from datetime import date

API_KEY = os.environ["SCAVIO_API_KEY"]
BASE = "https://api.scavio.dev"
HEADERS = {"Authorization": f"Bearer {API_KEY}",
           "Content-Type": "application/json"}

def collect_account_metrics(usernames):
    metrics = []
    for username in usernames:
        resp = requests.post(f"{BASE}/api/v1/tiktok/profile",
            headers=HEADERS, json={"username": username})
        user = resp.json()["data"]["user"]
        metrics.append({
            "date": str(date.today()),
            "username": user["unique_id"],
            "followers": user["follower_count"],
            "following": user["following_count"],
            "videos": user["aweme_count"],
            "total_likes": user["total_favorited"],
        })
    return metrics

accounts = ["yourbrand", "competitor_a", "competitor_b"]
today_metrics = collect_account_metrics(accounts)
for m in today_metrics:
    print(f"@{m['username']}: {m['followers']:,} followers")

Content Performance Tracker

Python
def collect_video_metrics(username, video_count=30):
    resp = requests.post(f"{BASE}/api/v1/tiktok/profile",
        headers=HEADERS, json={"username": username})
    sec_uid = resp.json()["data"]["user"]["sec_uid"]

    all_videos = []
    cursor = "0"
    while len(all_videos) < video_count:
        resp = requests.post(f"{BASE}/api/v1/tiktok/user/posts",
            headers=HEADERS,
            json={"sec_user_id": sec_uid, "count": 20, "cursor": cursor})
        data = resp.json()["data"]
        for v in data.get("aweme_list", []):
            all_videos.append({
                "video_id": v["aweme_id"],
                "desc": v["desc"][:80],
                "created": v["create_time"],
                "views": v["statistics"]["play_count"],
                "likes": v["statistics"]["digg_count"],
                "comments": v["statistics"]["comment_count"],
                "shares": v["statistics"]["share_count"],
                "bookmarks": v["statistics"]["collect_count"],
            })
        if not data.get("has_more"):
            break
        cursor = str(data.get("max_cursor", "0"))
    return all_videos[:video_count]

Hashtag Tracker

Python
def track_hashtags(hashtag_names):
    results = []
    for name in hashtag_names:
        resp = requests.post(f"{BASE}/api/v1/tiktok/hashtag",
            headers=HEADERS, json={"hashtag_name": name})
        info = resp.json()["data"]["challengeInfo"]
        results.append({
            "date": str(date.today()),
            "hashtag": info["challenge"]["title"],
            "videos": info["stats"]["videoCount"],
            "views": info["stats"]["viewCount"],
        })
    return results

brand_hashtags = ["yourbrand", "yourbrandchallenge", "yourbrandreview"]
hashtag_data = track_hashtags(brand_hashtags)

Daily Snapshot Pipeline

Python
def daily_snapshot(accounts, hashtags, output_dir="dashboard_data"):
    os.makedirs(output_dir, exist_ok=True)
    snapshot = {
        "date": str(date.today()),
        "accounts": collect_account_metrics(accounts),
        "hashtags": track_hashtags(hashtags),
    }
    # Add video metrics for primary account
    if accounts:
        snapshot["videos"] = collect_video_metrics(accounts[0], 20)

    filepath = f"{output_dir}/{date.today()}.json"
    with open(filepath, "w") as f:
        json.dump(snapshot, f, indent=2)
    print(f"Snapshot saved: {filepath}")
    return snapshot

# Run daily via cron: python dashboard.py
daily_snapshot(
    accounts=["yourbrand", "competitor_a"],
    hashtags=["yourbrand", "yourbrandchallenge"])

Visualization

The JSON snapshots feed into any dashboard tool. For quick charts, load them into Pandas and plot with Matplotlib. For team dashboards, push to a database and connect Metabase, Grafana, or Google Sheets via a simple sync script. The structured JSON format means no parsing or transformation step.

Cost Estimate

Daily dashboard for 3 accounts + 3 hashtags + 20 video metrics: roughly 8 credits ($0.04) per day, or $1.20/month. Weekly deep reports with 100 video metrics add about $0.50/week. Total monthly cost for a comprehensive dashboard: under $4.