TikTok Hashtag Analytics via API: Trends, Volume, and Videos
Track TikTok hashtag performance with API: view counts, video counts, trending velocity, and top videos per hashtag. No browser scraping required.
Scavio returns TikTok hashtag stats (video count, total views) and paginated video feeds for any hashtag at 1 credit per request. Track hashtag growth, discover trending topics, and benchmark campaign performance without scraping.
Two Hashtag Endpoints
The hashtag info endpoint returns metadata: hashtag ID, title, description, video count, and total view count. The hashtag videos endpoint returns the paginated video feed for that hashtag with full video statistics. Together they give you both the macro picture and the individual content performance.
Getting Hashtag Stats
import requests, os
API_KEY = os.environ["SCAVIO_API_KEY"]
BASE = "https://api.scavio.dev"
HEADERS = {"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"}
def hashtag_info(name):
resp = requests.post(f"{BASE}/api/v1/tiktok/hashtag",
headers=HEADERS, json={"hashtag_name": name})
info = resp.json()["data"]["challengeInfo"]
return {
"id": info["challenge"]["id"],
"title": info["challenge"]["title"],
"videos": info["stats"]["videoCount"],
"views": info["stats"]["viewCount"],
}
tags = ["skincare", "dropshipping", "aitools", "productivity"]
for tag in tags:
stats = hashtag_info(tag)
print(f"#{stats['title']}: {stats['views']:,} views, "
f"{stats['videos']:,} videos")Browsing Hashtag Videos
def hashtag_videos(hashtag_id, pages=3):
all_videos = []
cursor = "0"
for _ in range(pages):
resp = requests.post(f"{BASE}/api/v1/tiktok/hashtag/videos",
headers=HEADERS,
json={"hashtag_id": hashtag_id, "cursor": cursor, "count": 20})
data = resp.json()["data"]
for v in data.get("aweme_list", []):
all_videos.append({
"desc": v["desc"][:80],
"views": v["statistics"]["play_count"],
"likes": v["statistics"]["digg_count"],
"author": v["author"]["unique_id"],
})
if not data.get("has_more"):
break
cursor = str(data["cursor"])
return all_videos
info = hashtag_info("dropshipping")
videos = hashtag_videos(info["id"])
for v in sorted(videos, key=lambda x: x["views"], reverse=True)[:10]:
print(f"{v['views']:>12,} views | @{v['author']} | {v['desc']}")Tracking Hashtag Growth Over Time
import json
from datetime import date
def track_hashtag(name, history_file="hashtag_history.json"):
try:
with open(history_file) as f:
history = json.load(f)
except FileNotFoundError:
history = {}
stats = hashtag_info(name)
today = str(date.today())
if name not in history:
history[name] = []
history[name].append({"date": today, **stats})
with open(history_file, "w") as f:
json.dump(history, f, indent=2)
if len(history[name]) >= 2:
prev = history[name][-2]
delta_views = stats["views"] - prev["views"]
delta_videos = stats["videos"] - prev["videos"]
print(f"#{name}: +{delta_views:,} views, +{delta_videos:,} videos "
f"since {prev['date']}")
return statsCampaign Benchmarking
For branded hashtag campaigns, track your campaign hashtag alongside competitor campaign hashtags. Compare video counts, view counts, and average engagement per video. Run the tracking script daily via cron to build a growth curve. This replaces manual TikTok Creative Center checks and gives you historical data that TikTok does not expose natively.
Cost
Tracking 20 hashtags daily costs $0.10/day ($3/month). Adding video feed pulls for the top 5 hashtags (3 pages each) adds $0.075/day. Total monthly cost for a comprehensive hashtag monitoring setup: under $6. EnsembleData charges $100+/month for similar coverage.