Scavio exposes TikTok follower and following lists via two paginated endpoints at 1 credit per page. Map creator networks, find audience overlap between influencers, and identify micro-influencer clusters without scraping.
Pagination Model
TikTok follower/following endpoints use a token-based pagination system different from the cursor-based pagination used by other TikTok endpoints. Each response returns a next_page_token and a min_time value. Pass both to the next request. Stop when has_more is false.
Exporting Followers
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 get_followers(sec_user_id, max_pages=10):
all_followers = []
params = {"sec_user_id": sec_user_id, "count": 20}
for _ in range(max_pages):
resp = requests.post(f"{BASE}/api/v1/tiktok/user/followers",
headers=HEADERS, json=params)
data = resp.json()["data"]
for f in data.get("followers", []):
all_followers.append({
"username": f["unique_id"],
"nickname": f["nickname"],
"followers": f["follower_count"],
"videos": f["aweme_count"],
"sec_uid": f["sec_uid"],
})
if not data.get("has_more"):
break
params["page_token"] = data["next_page_token"]
params["min_time"] = data["min_time"]
return all_followersFinding High-Value Followers
def find_influencer_followers(username, min_followers=10000):
# First get the sec_user_id
resp = requests.post(f"{BASE}/api/v1/tiktok/profile",
headers=HEADERS, json={"username": username})
sec_uid = resp.json()["data"]["user"]["sec_uid"]
followers = get_followers(sec_uid, max_pages=20)
influencers = [f for f in followers if f["followers"] >= min_followers]
influencers.sort(key=lambda x: x["followers"], reverse=True)
return influencers
# Find influencers who follow a competitor
big_followers = find_influencer_followers("competitor_brand", min_followers=50000)
for f in big_followers[:10]:
print(f"@{f['username']} ({f['followers']:,} followers)")Audience Overlap Analysis
def audience_overlap(username_a, username_b, pages=20):
# Get followers for both creators
profile_a = requests.post(f"{BASE}/api/v1/tiktok/profile",
headers=HEADERS, json={"username": username_a}).json()
profile_b = requests.post(f"{BASE}/api/v1/tiktok/profile",
headers=HEADERS, json={"username": username_b}).json()
followers_a = get_followers(profile_a["data"]["user"]["sec_uid"], pages)
followers_b = get_followers(profile_b["data"]["user"]["sec_uid"], pages)
set_a = {f["username"] for f in followers_a}
set_b = {f["username"] for f in followers_b}
overlap = set_a & set_b
return {
"creator_a": username_a,
"creator_b": username_b,
"sampled_a": len(set_a),
"sampled_b": len(set_b),
"overlap_count": len(overlap),
"overlap_pct": len(overlap) / min(len(set_a), len(set_b)) * 100
if min(len(set_a), len(set_b)) > 0 else 0,
}Followings: What Creators Watch
def get_followings(sec_user_id, max_pages=5):
all_followings = []
params = {"sec_user_id": sec_user_id, "count": 20}
for _ in range(max_pages):
resp = requests.post(f"{BASE}/api/v1/tiktok/user/followings",
headers=HEADERS, json=params)
data = resp.json()["data"]
for f in data.get("followings", []):
all_followings.append({
"username": f["unique_id"],
"followers": f["follower_count"],
})
if not data.get("has_more"):
break
params["page_token"] = data["next_page_token"]
params["min_time"] = data["min_time"]
return all_followingsCost and Limits
Each page of 20 followers costs 1 credit ($0.005). Exporting 1,000 followers costs $0.25. Audience overlap for two creators with 1,000 sampled followers each costs roughly $0.52 (profile lookups + follower pages). TikTok does not expose full follower lists for very large accounts; the API returns what TikTok allows, which is typically the most recent followers.