How to get TikTok audience demographics
GET request to /v1/tiktok/audience-demographics with your input. You get clean JSON back in seconds for 3 credits per call — no OAuth, scraping or platform SDKs. Audience country + language mix for a TikTok creator — engagement sample, not a follower census.How to get TikTok audience demographics (step by step)
- 1
Get a free API key
Create a free Captapi account (100 credits, no card) and generate an API key from the dashboard.
- 2
Call the TikTok Audience Demographics API
Send an authenticated GET request to /v1/tiktok/audience-demographics with your input. No OAuth, no scraping setup.
- 3
Read the JSON response
Parse the clean JSON response. Pass cache=true for a free 24h cache hit; default is always fresh.
Code example
curl "https://api.captapi.com/v1/tiktok/audience-demographics?url=https%3A%2F%2Fwww.tiktok.com%2F%40khaby.lame" \
-H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."What the response looks like
{
"success": true,
"data": {
"platform": "tiktok",
"username": "khaby.lame",
"url": "https://www.tiktok.com/@khaby.lame",
"videosSampled": 12,
"sampleSize": 269,
"audienceLocations": [
{
"country": "Pakistan",
"countryCode": "PK",
"count": 70,
"percentage": 26.02,
"percentageText": "26.02%"
},
{
"country": "United States",
"countryCode": "US",
"count": 33,
"percentage": 12.27,
"percentageText": "12.27%"
}
],
"basis": {
"language": "commenters",
"region": "repliers"
},
"videosRequested": 12,
"totalCountries": 23,
"confidence": "low",
"other": {
"count": 129,
"percentage": 47.96,
"percentageText": "47.96%"
},
"audienceLanguages": [
{
"language": "en",
"count": 142,
"percentage": 52.79,
"percentageText": "52.79%"
},
{
"language": "ur",
"count": 61,
"percentage": 22.68,
"percentageText": "22.68%"
}
],
"languageSampleSize": 269,
"regionSampleParents": 41,
"regionSampleVideos": 11
}
}Billing metadata (credits charged, cache hit/miss) is returned in the X-Captapi-Credits and X-Captapi-Cache response headers.
Request parameters
| Name | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | TikTok profile URL, @handle, or username, e.g. https://tiktok.com/@username. Not a YouTube channel URL. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble. |
| videos | integer | No | How many recent videos to sample comments from: 12 (default, 3 credits), 30 (5 credits), or 60 (8 credits). |
| countriesLimit | integer | No | Max countries in audienceLocations; remainder folds into other{count,percentage}. Omit for the full list (other is omitted when unused). |
| cache | boolean | No | Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh. Envelope includes cached + cachedAt on hits. |
Frequently asked questions
What does the TikTok Audience Demographics API do?
The TikTok Audience Demographics API lets you fetch profile or page details and audience stats from a public TikTok profile or page using one GET request to /v1/tiktok/audience-demographics. It returns clean JSON — no OAuth or infrastructure setup required.
How many credits does the TikTok Audience Demographics API cost?
Each successful call costs 3 credits. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Hits include cached + cachedAt. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.
Do I need a TikTok API key or OAuth?
No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle proxies, rate limits, retries, and authentication for you.
Is this follower geography?
No. TikTok does not publish follower country. We sample people engaging with recent videos and report sampleSize, videosSampled, and confidence. Percentages are numeric. Use videos=12|30|60 for deeper samples (3/5/8 credits). Do not treat this as a full follower census.
Why does basis have two values?
The two signals come from two populations. audienceLanguages[] are tallied from top-level commenters (basis.language="commenters"); audienceLocations[] come from repliers under the most-replied parent comments (basis.region="repliers") — the only public surface that reliably exposes user.region. Repliers are people in conversation, so treat the country mix as engagement geography, not a census.
What does confidence mean?
A sample-strength label that starts from sampleSize (low <400, medium 400–999, high ≥1000) and is then CAPPED for clustering: replies concentrate under a few popular parent comments, so when regionSampleParents <8 or regionSampleVideos <4 the label drops to low, and below 20 parents / 8 videos it caps at medium. 400 repliers from 6 threads are not 400 independent observations — check regionSampleParents / regionSampleVideos alongside sampleSize.
Why did I get degraded:true with empty audienceLocations?
That is a posts-timeout: the video-list fetch hit its deadline (see timings.postsMs vs postsDeadlineMs) on a profile that exists. The call costs 0 credits — retry later or with fewer videos. A 404 NOT_FOUND means the profile was positively confirmed absent, which is a different outcome.
Is the TikTok Audience Demographics API suitable for production use?
Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Hits include cached + cachedAt. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.
Ready to get TikTok audience demographics?
Start free with 100 credits — no credit card required.
Get your free API key