scope_not_authorized: fix TikTok data access permissions
Resolve missing authorization when fetching TikTok profiles and statistics, and distinguish user consent problems from Research API approval requirements.
scope_not_authorized Short answer
Resolve missing authorization when fetching TikTok profiles and statistics, and distinguish user consent problems from Research API approval requirements.
Diagnosis checked 2026-11-12; sources below.Do this now
- If the data is yours or your use fits the official terms, switch to the official route: TikTok APIs (Limited access). Separate products have their own terms; general access is not sold as a self-serve per-call API.
- For public TikTok data at volume, run a hosted route instead of patching your own requests: TikTok Account Stats & Repost History Scraper. The request below runs it with its published example input through the Apify API (your token, billed at the Store price).
- Compare every route, with fields and prices, on the TikTok page.
Python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"usernames": [
"natgeo"
],
"contentTypes": [
"profile",
"videos",
"reposts"
],
"maxPostsPerProfile": 10,
"maxItems": 0,
"includeProfileInfo": True,
"includeLiveStatus": True,
"computedStats": False,
"onlyNewVideos": False,
"pinnedFirst": False
}
run = client.actor("vexaloom-labs/tiktok-account-stats-and-repost-history-scraper").call(run_input=run_input)
if run is None:
raise RuntimeError("The Actor run was not found.")
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item) pip install apify-client
JavaScript
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "<YOUR_APIFY_TOKEN>" });
const input = {
"usernames": [
"natgeo"
],
"contentTypes": [
"profile",
"videos",
"reposts"
],
"maxPostsPerProfile": 10,
"maxItems": 0,
"includeProfileInfo": true,
"includeLiveStatus": true,
"computedStats": false,
"onlyNewVideos": false,
"pinnedFirst": false
};
const run = await client.actor("vexaloom-labs/tiktok-account-stats-and-repost-history-scraper").call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items); npm install apify-client
cURL
curl -X POST "https://api.apify.com/v2/actors/vexaloom-labs~tiktok-account-stats-and-repost-history-scraper/run-sync-get-dataset-items" -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" -d '{"usernames":["natgeo"],"contentTypes":["profile","videos","reposts"],"maxPostsPerProfile":10,"maxItems":0,"includeProfileInfo":true,"includeLiveStatus":true,"computedStats":false,"onlyNewVideos":false,"pinnedFirst":false}' Waits for the run and returns the dataset items (runs over 300 seconds return HTTP 408; start an async run instead).
MCP (AI agents)
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=vexaloom-labs/tiktok-account-stats-and-repost-history-scraper",
"headers": {
"Authorization": "Bearer <YOUR_APIFY_TOKEN>"
}
}
}
} Adds this Actor as a tool in an MCP client that takes a remote server URL (Cursor, VS Code, Claude Code) through Apify's hosted MCP server. OAuth sign-in also works without the header. Clients that only start local servers can wrap the URL with npx mcp-remote.
Open TikTok Account Stats & Repost History Scraper in Apify Store
Routes that work for TikTok data
The official route first, then the catalogue Actors that fit this problem, by their published fields. Store figures are the publisher's public numbers.
| Route | Core fields | Price / 1K | Success, 30 days | Link |
|---|---|---|---|---|
| Limited accessTikTok APIs | not compared | below | Official docs | |
| TikTok Account Stats & Repost History Scraper | 1/8 | $0.99 | 100% of 27 runs | Open in Apify Store |
| TikTok Keyword Search & Discovery Scraper | 5/8 | $0.99 | 75% of 65 runs | Open in Apify Store |
| TikTok Comment & Reply Thread Extractor | 2/8 | $0.99 | 94% of 31 runs | Open in Apify Store |
Official price: Separate products have their own terms; general access is not sold as a self-serve per-call API. Compare all 25 TikTok routes.
The facts behind the error
| Fact | Value |
|---|---|
| Meaning | The user has not granted a scope required by the request. |
| HTTP status | TikTok documents HTTP 401 for this error. |
| Recovery | Ask the user to authorize the required scope, then retry. |
| Profile permissions | bio_description and is_verified require user.info.profile. |
| Statistics permissions | follower_count and video_count require user.info.stats. |
| Research API cause | The Research API FAQ also associates this error with an application that has not passed the required access approval. |
| Working route | Fetch authorized profile fields through GET https://open.tiktokapis.com/v2/user/info/ with the user's bearer token. |
Website pages
Sources
Every dated claim on this page comes from the public sources below. Check the source before you make a business decision on it.
- TikTok API error handling — checked 2026-11-12
- TikTok user information fields and required scopes — checked 2026-11-12
- TikTok Research API access FAQ — checked 2026-11-12
Get TikTok data with a catalogue Actor
TikTok Keyword & Brand Mention Monitor returns 5 of 8 core TikTok fields at $0.99 per 1,000 results. Compare all 25 TikTok routes.