TikTok Profile Videos API Scraper & Search Keywords avatar

TikTok Profile Videos API Scraper & Search Keywords

Pricing

from $3.99 / 1,000 results

Go to Apify Store
TikTok Profile Videos API Scraper & Search Keywords

TikTok Profile Videos API Scraper & Search Keywords

Scrapes videos from any public TikTok profile via API, capturing video URLs, captions, hashtags, metrics, thumbnails, sounds, and publish dates. Ideal for influencer analysis, trend research, competitor tracking, and automated large-scale TikTok video data extraction

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

Scrapio

Scrapio

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

0

Monthly active users

a day ago

Last modified

Share

TikTok Profile Scraper โ€” Videos, Search Keywords & Categories

TikTok Profile Scraper reads a public creator's video feed and, for every video, opens the video page to pull the search terms TikTok itself attaches to that upload โ€” not the creator's hashtags, but the phrases TikTok's own discovery system associates with the content. Alongside each term list, it reads TikTok's diversificationLabels content-category tags. Unlike scraping frameworks that return raw HTML, TikTok Profile Scraper returns typed JSON โ€” one row per video, ready for a spreadsheet, a database, or an LLM context window without any parsing. This guide covers every input and output field and how SEO, growth and research teams actually deploy it.

๐Ÿงญ What Does TikTok Profile Scraper Do?

TikTok Profile Scraper takes one or more public TikTok creator profiles and returns one dataset row per video in that creator's feed, enriched with the search terms and content-category labels TikTok attaches to it. No TikTok account, cookie, or session token is used anywhere in the run โ€” every request targets a page TikTok already serves to a logged-out visitor. It returns:

  • The full video record TikTok's own feed API returns โ€” caption, engagement counts, media and sound metadata, hashtag ("challenge") records โ€” passed through key-for-key
  • search_keywords[] and first_search_keyword โ€” TikTok's own suggested search terms for the video, read from the video's detail page
  • contentCategories[] and first_content_category โ€” TikTok's diversificationLabels topical classification
  • search_keyword_status โ€” whether the keyword page was read at all, and what it found
  • Two within-run filters, one on keyword terms and one on content-category labels, so you only pay for the rows you actually keep
  • sortOrder, so the scanned window can be emitted newest-first (TikTok's native feed order) or reversed to oldest-first locally

โšก Features & Capabilities

TikTok Profile Scraper combines a standard creator-feed crawl with a per-video keyword lookup that none of the leading TikTok Store listings document.

Core features

  • TikTok's own suggested search terms, not the caption's hashtags โ€” search_keywords[] comes from suggestedWords on the video's detail page, a different signal than the textExtra/hashtag data any profile scraper already returns.
  • A second, independent targeting axis โ€” contentCategories[] (from diversificationLabels) lets you filter or group videos by TikTok's own topical classification, separate from the keyword filter.
  • Coverage is stated, not hidden โ€” the input schema itself records a measured 28/40 videos (70%) carrying search terms across the sampled set; the remaining videos return null keyword fields rather than a faked empty list.
  • A status field per row โ€” search_keyword_status (ok, no_keywords_on_this_video, video_page_unavailable, not_requested) separates "TikTok has no terms for this video" from "the page could not be read," so a null column never means one undifferentiated thing.
  • onlyVideosWithKeywords defaults to off โ€” roughly 30% of videos genuinely carry no terms; those rows are still returned, with null keyword fields, rather than silently dropped.
  • Two in-run filters, not two extra runs โ€” keywordFilter and categoryFilter both apply case-insensitive substring matching against the fetched keyword data before a row is written, so filtering costs nothing beyond the keyword-fetch request already being made.
  • A body-shape-aware engine, not a status-code check โ€” TikTok answers HTTP 200 for real pages, WAF challenges, and reputation-gated refusals alike; this Actor classifies every response by its byte shape instead of trusting the status code.
  • Automatic proxy escalation โ€” the run starts direct and only escalates through a datacenter, then a residential, proxy tier when a response comes back shaped like a block.

How TikTok Profile Scraper compares to other TikTok scrapers

FeatureTikTok Profile Scraperget-leads/all-in-one-tiktok-scraperthescrapelab/tiktok-scraper-2-0
ScopeOne entity: a creator's video feed11 modes (profiles, videos, comments, hashtags, search, live, music)Profiles, video URLs, and keyword/hashtag search in one input
TikTok suggested search terms (suggestedWords)Yes, per videoNot documented on the listing (checked 2026-07-30)Not documented on the listing (checked 2026-07-30)
Content-category labels (diversificationLabels)Yes, per videoNot documentedNot documented
Keyword/category in-run filterYes (keywordFilter, categoryFilter)Not applicable to this scopeNot documented
Transcript extractionNot offeredNot documentedYes, with a caption-text fallback (as of 2026-07-30)
Output formatTyped JSON, raw TikTok item preserved key-for-keyTyped JSON, Clockworks-compatible field names (per listing)Typed JSON, normalized field names
Proxy requirementOptional; escalates automatically on a blocked responseClaims no proxy needed for most modes (per listing, 2026-07-30)HTTP-first with a browser fallback for failed inputs (per listing)

If your use case is TikTok keyword research or competitor discovery-term analysis, the search-term and category rows above are the decision-maker โ€” a scraper that only returns captions and hashtags cannot tell you what TikTok itself thinks a video is about.

When another tool might suit you better

If you need TikTok comments, live-room snapshots, hashtag or keyword-search discovery, or multiple scraping modes behind one integration, a broader suite like get-leads' all-in-one TikTok scraper covers more entity types in a single actor, at the cost of not documenting a dedicated search-keyword or content-category lookup on any of them. If spoken-word transcripts are the priority rather than TikTok's own discovery terms, thescrapelab's scraper extracts caption/subtitle transcript text, which this Actor does not attempt.

TikTok Profile Scraper within the Scrapio data stack

TikTok Profile Scraper covers a creator's video feed filtered by search keyword and content category. For hashtag audits with per-video sound-rights and DSP linkage, use TikTok Hashtag Scraper: Music Rights & Streaming Links. For live-stream discovery instead of a creator's upload history, use TikTok Discover Scraper: Live Stream Finder. For platform-wide trending-video discovery rather than one creator at a time, use TikTok Trending Videos Scraper Plus.

Why do developers and data teams scrape TikTok search keywords?

TikTok's suggested search terms and content categories serve very different jobs depending on who is pulling them โ€” an SEO researcher building a content calendar is not doing the same work as an AI team indexing video captions.

๐Ÿข TikTok SEO and content strategy teams

Feed a creator's profile (your own account, or a competitor's) into startUrls, leave fetchSearchKeywords on, and read search_keywords[] back per video. Because these terms come from TikTok's own discovery system rather than the caption, they surface associations โ€” competitor names, adjacent niches, misspellings โ€” a creator never typed. Group the results by first_search_keyword to see which discovery term TikTok weights highest across a catalogue, and target captions and on-screen text at the ones you want to own.

๐Ÿ“Š AI training data and RAG indexing

desc/description (the caption text), search_keywords[], and contentCategories[] give an LLM structured context about a video without an HTML-parsing step. For RAG enrichment, index the caption text alongside search_keywords so a query about a topic or competitor name resolves to the videos TikTok already associates with it. For training data, playCount, diggCount, commentCount, shareCount, and collectCount arrive as typed integers (or null when TikTok's stats object omits the counter) with a stable key set across runs.

๐Ÿ“ฑ Competitive and market intelligence

Run a rival creator's profile through startUrls and read search_keywords[] โ€” TikTok routinely lists competing brands and creators inside a video's own suggested terms, which is a direct signal of whose audience the algorithm has decided you share. Track contentCategories[] over repeated runs to see whether TikTok reclassifies a competitor's content into a new vertical.

๐Ÿ”ฌ Research and academic use

Social-media researchers studying how TikTok's discovery layer associates search intent with public video content can build a corpus from search_keywords[], contentCategories[], and the underlying engagement counts. This Actor extracts only what TikTok serves publicly to a logged-out visitor โ€” no private accounts, no login-gated data.

๐ŸŽฅ Product and SaaS development

The keyword and category projection is structured enough to sit behind a TikTok discovery-term lookup tool or a content-classification API: search_keywords[] and first_search_keyword as the primary signal, contentCategories[] as a secondary axis, and search_keyword_status so a downstream product can distinguish "TikTok has no terms here" from "the page failed to load" instead of guessing.

๐Ÿš Input Parameters

Every parameter below is read directly from the Actor's input schema, in schema order.

ParameterRequiredTypeDescriptionExample Value
startUrlsYesarray of stringsTikTok profile URLs (https://www.tiktok.com/@username) or bare usernames (mrbeast), one per line.["https://www.tiktok.com/@mrbeast"]
maxVideosNointeger (min 0, default 10)How many videos are read from the profile feed per creator. 0 = no cap (the whole feed). Keyword and category filters can still reduce the rows actually returned, so this is a scan budget, not a guaranteed row count.20
fetchSearchKeywordsNoboolean (default true)Reads suggestedWords[] and diversificationLabels[] from each video's detail page โ€” one extra request per video. Turn it off for a plain, fast video dump with no keyword data.true
keywordFilterNoarray of strings (default [])Keeps a video if any entry here is a case-insensitive substring of any of its search keywords (e.g. fortnite matches FORTNITE gameplay). Leave empty to keep everything. Applies only within this run, not as a cross-run diff.["fortnite"]
categoryFilterNoarray of strings (default [])Same substring-match rule, applied to contentCategories instead โ€” e.g. Food & Drink, Lifestyle, Gaming. Independent of keywordFilter; leave empty to keep everything.[]
onlyVideosWithKeywordsNoboolean (default false)Drops any video that carries no search terms at all. Left off by default, since roughly 30% of videos genuinely carry none โ€” those rows still come back with null keyword fields.false
sortOrderNostring enum: newest, oldest (default newest)newest emits rows in feed order. oldest reverses the scanned window locally and emits it oldest-first, since TikTok's own sort parameter is a no-op; with maxVideos: 0 this yields the creator's true first video first."newest"
proxyConfigurationNoobject (proxy editor, prefill {"useApifyProxy": false})No proxy by default. If TikTok's WAF blocks the exit IP, the run escalates none โ†’ datacenter โ†’ residential automatically based on the response body shape; a residential group is the most reliable choice for large scans.{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}

A note on fetchSearchKeywords: if you set it to false but also supply keywordFilter, categoryFilter, or onlyVideosWithKeywords, the Actor switches it back on automatically and logs a warning โ€” filtering over data that was never fetched would drop every row, so the input is corrected rather than silently returning an empty dataset.

Example input

{
"startUrls": [
"https://www.tiktok.com/@mrbeast",
"khaby.lame"
],
"maxVideos": 20,
"fetchSearchKeywords": true,
"keywordFilter": ["fortnite"],
"categoryFilter": [],
"onlyVideosWithKeywords": false,
"sortOrder": "newest",
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Supported URL types and input formats

startUrls accepts, one per line:

  • A full profile URL with the handle: "https://www.tiktok.com/@mrbeast"
  • A bare username, with or without the @: "khaby.lame" or "@khaby.lame"
  • Any tiktok.com/<segment> URL that resolves to a handle โ€” matched by pattern before falling back to a plain string, so a malformed or unusual URL still degrades to whatever text follows the last @ or slash rather than failing the whole run

Entries that resolve to no usable username are skipped and logged, and the profile is counted as failed rather than silently producing zero rows.

๐Ÿ“ฆ Output Format

Every field below is read from the row-building code (src/parsers.py, src/main.py), not just the dataset view โ€” the view described afterward is a display subset.

Output for a video row

Each pushed row starts as TikTok's own creator-feed item, passed through key-for-key, with the fields below added or normalized on top. The example below is trimmed to the fields this Actor's code explicitly reads or writes โ€” the real row also carries whatever additional keys TikTok's feed sends for that video (for example textExtra, statsV2, or platform flags), since the row begins life as a full copy of TikTok's item rather than a hand-picked subset:

{
"id": "7651447222449556767",
"aweme_id": "7651447222449556767",
"url": "https://www.tiktok.com/@mrbeast/video/7651447222449556767",
"desc": "I gave away a private island",
"description": "I gave away a private island",
"createTime": 1784649627,
"createTimeISO": "2026-07-19T14:40:27Z",
"profile_username": "mrbeast",
"profile_url": "https://www.tiktok.com/@mrbeast",
"playCount": 28400000,
"diggCount": 3100000,
"commentCount": 41200,
"shareCount": 18700,
"collectCount": 92100,
"stats": {
"playCount": 28400000,
"diggCount": 3100000,
"commentCount": 41200,
"shareCount": 18700,
"collectCount": 92100
},
"search_keywords": ["Mrbeast", "Dude perfect", "My Life As Eva", "FORTNITE"],
"first_search_keyword": "Mrbeast",
"search_keyword_count": 4,
"has_search_keywords": true,
"contentCategories": ["Entertainment", "Lifestyle"],
"first_content_category": "Entertainment",
"search_keyword_status": "ok",
"author": {
"uniqueId": "mrbeast",
"nickname": "MrBeast",
"verified": true,
"secUid": "MS4wLjABAAAAexampleSecUidValue",
"avatarThumb": {
"uri": "1080x1080/tos-useast5",
"url_list": ["https://p16-sign.tiktokcdn-us.com/example-thumb"],
"width": 720,
"height": 720
}
},
"video": {
"duration": 612,
"ratio": "1080p",
"playAddr": {
"uri": "v0200fg10000example",
"url_list": ["https://v16-webapp-prime.tiktok.com/example"],
"data_size": 41200000,
"width": 1080,
"height": 1920,
"file_hash": "a1b2c3",
"file_cs": "example"
}
},
"music": {
"id": 7651447200000000000,
"id_str": "7651447200000000000",
"title": "original sound",
"author": "MrBeast",
"album": null,
"duration": 612,
"owner_id": null,
"owner_nickname": null,
"owner_handle": null,
"sec_uid": null,
"is_original": true,
"is_original_sound": true,
"is_commerce_music": false,
"is_pgc": null,
"play_url": {
"uri": "",
"url_list": ["https://sf16-ies-music.tiktokcdn.com/example.mp3"],
"data_size": null,
"width": null,
"height": null,
"file_hash": "",
"file_cs": ""
},
"user_count": null,
"status": null
},
"cha_list": [
{
"id": "228104",
"title": "ocean",
"desc": null,
"view_count": null,
"user_count": null,
"is_challenge": null
}
],
"challenges": [
{
"id": "228104",
"title": "ocean",
"desc": null,
"view_count": null,
"user_count": null,
"is_challenge": null
}
]
}

Every counter and nested field TikTok does not send is emitted as null, never a fabricated 0, false, or empty string โ€” that applies to the flattened playCount/diggCount/commentCount/shareCount/collectCount columns, the music object's 28 normalized keys, and every challenges/cha_list entry's 16 keys alike.

Output view: Videos & keywords

The dataset ships one named view, ๐Ÿ”‘ Videos & keywords, which surfaces 11 of the fields above as a display table: url, profile_username, createTimeISO, first_search_keyword, search_keywords, search_keyword_count, contentCategories, desc, playCount, diggCount, and id. Switching to this view in the Apify Console changes only which columns are displayed and exported by default โ€” it does not change what was collected. To get every field, including the full author, video, music, and stats objects, export the raw dataset instead of the named view.

Schema stability and export options

Field names stay stable across runs even as TikTok changes its front-end markup, since the engine classifies TikTok's own responses by content shape rather than by scraping HTML selectors. Results are available as an Apify dataset in the Console, exportable to JSON, CSV, Excel, or XML, or retrievable directly through the Apify API or the apify-client SDK.

This Actor bills on the Apify pay-per-event model with a single charged event, row_result. The only place the source code writes to the dataset is one Actor.push_data(row, charged_event_name="row_result") call, made once per video that survives every filter โ€” so every row that lands in your dataset was charged, and there is no separate uncharged accounting-row path. A video dropped by onlyVideosWithKeywords, keywordFilter, or categoryFilter never reaches that call and is never charged; a profile that fails outright (private, deleted, or unreadable on every proxy tier) produces zero rows and is billed nothing beyond the platform's own compute usage.

๐Ÿ’ก TikTok Profile Scraper Strategy Guide

๐ŸŽฏ Strategy 1: Real-time keyword enrichment pipeline

Trigger a run whenever new creator profiles enter your pipeline โ€” a CRM record, a lead list, or a campaign shortlist. Feed the profile URLs into startUrls, leave fetchSearchKeywords on, and read search_keywords[], first_search_keyword, and contentCategories[] back from the dataset to append TikTok's own discovery-term and category context to that record before it moves to the next stage of your workflow.

๐ŸŽฏ Strategy 2: Scheduled keyword-drift monitoring

Set up an Apify Schedule to re-run a fixed watchlist of creator profiles on a recurring cadence. Diff each new run's dataset against the previous one, keyed on id (video), and alert on any video whose search_keywords[] or first_search_keyword changed between runs โ€” TikTok's discovery-term assignment is not static, so a one-off check goes stale.

๐ŸŽฏ Strategy 3: Bulk keyword-research dataset build

For a catalogue-scale audit, pass the full list of target profiles into a single startUrls array โ€” one run scans every profile up to maxVideos each. For larger batches than one run comfortably covers, split profiles across multiple runs launched via the Apify API and aggregate each run's dataset export into a shared CSV or database table, keyed on id (video) and profile_username (creator).

Strategy comparison at a glance

StrategyBest forRun patternOutput format
Real-time keyword enrichmentEnriching inbound creator or lead records as they arriveOn-demand single run per record or small batchDataset row per video, read via Console or API
Scheduled keyword-drift monitoringWatching a fixed creator watchlist for keyword changes over timeApify Schedule, recurring run, diffed on idPer-run dataset export, compared externally
Bulk keyword-research dataset buildResearch corpora or catalogue-scale keyword auditsOne run per profile batch, or multiple API-triggered runsAggregated CSV/database export across runs
ScraperWhat it extracts
TikTok Hashtag Scraper: Music Rights & Streaming LinksHashtag videos enriched with sound-rights flags and Apple Music/Spotify linkage
TikTok Discover Scraper: Live Stream FinderLive TikTok streams surfaced through Discover
TikTok Trending Videos Scraper PlusPlatform-wide trending videos with trend insights
Instagram Profile Reels Scraper - Tagged Places & CoordinatesThe same creator-video-feed use case on Instagram, with tagged-place and coordinate data
TikTok Hashtag Scraper (base)Hashtag- or keyword-driven video discovery, if you need videos beyond one creator's feed

How to integrate TikTok Profile Scraper with your stack

TikTok Profile Scraper works with any language or tool that can make an HTTP request, since every run and every dataset sits behind the standard Apify API.

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"startUrls": ["https://www.tiktok.com/@mrbeast", "khaby.lame"],
"maxVideos": 20,
"fetchSearchKeywords": True,
"keywordFilter": [],
"onlyVideosWithKeywords": False,
"sortOrder": "newest",
}
run = client.actor("scrapio/tiktok-profile-videos-api-scraper-search-keywords").call(
run_input=run_input
)
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
import csv
with open("tiktok_keywords.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(
f, fieldnames=["profile_username", "id", "first_search_keyword",
"search_keyword_count", "contentCategories", "playCount"]
)
writer.writeheader()
for row in rows:
writer.writerow({k: row.get(k) for k in writer.fieldnames})

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('scrapio/tiktok-profile-videos-api-scraper-search-keywords').call({
startUrls: ['https://www.tiktok.com/@mrbeast', 'khaby.lame'],
maxVideos: 20,
fetchSearchKeywords: true,
sortOrder: 'newest',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const row of items) {
console.log(row.profile_username, row.first_search_keyword, row.search_keyword_count);
}

Async and scheduled pipelines

For fire-and-forget large jobs, start the run with client.actor(...).start() instead of .call() and poll client.run(runId).get() or client.run(runId).waitForFinish() until the status is SUCCEEDED, or attach an Apify webhook to fire on ACTOR.RUN.SUCCEEDED so a downstream service is notified without polling. For recurring keyword-drift monitoring, an Apify Schedule runs the Actor on a cron expression without any external trigger.

๐ŸŽฏ Who Needs TikTok Profile Scraper? (Use Cases & Industries)

๐Ÿข TikTok SEO and growth marketers

Build a content calendar around the terms TikTok already associates with a creator's catalogue, using search_keywords[] and first_search_keyword to see which discovery terms carry the account today, then target captions and on-screen text at the ones worth reinforcing.

๐Ÿ“Š AI and data teams

Feed desc, search_keywords[], and contentCategories[] into a classification pipeline or RAG index โ€” every field arrives as typed JSON with a stable key set, so no HTML parsing or per-record schema cleanup sits between the scrape and the model.

๐Ÿ“ฑ Competitive intelligence and brand-monitoring teams

Run a competitor's profile through startUrls and read back which brand and creator names appear inside their own videos' search_keywords[] โ€” a signal TikTok's algorithm publishes about shared audience, not something the competitor chose to disclose.

๐Ÿ”ฌ Researchers

Study how TikTok's discovery layer assigns search intent to public creator content, using only what TikTok already serves to a logged-out visitor โ€” no private accounts, no login-gated data, no data collection beyond the public profile and video pages.

๐ŸŽฅ Product and analytics builders

Build a TikTok discovery-term lookup or content-classification feature on top of search_keywords[], contentCategories[], and search_keyword_status, using the status field to distinguish "no terms exist" from "the page could not be read" instead of collapsing both into a null.

Scraping publicly accessible web pages is broadly legal in the United States; the Ninth Circuit's hiQ Labs v. LinkedIn (2019, reaffirmed 2022) held that scraping data a site makes publicly available does not violate the Computer Fraud and Abuse Act. Separately, TikTok's Terms of Service prohibit automated data collection, so scraping TikTok can put an account or IP in violation of those terms โ€” a civil contract matter between the scraper and TikTok, not a criminal one. Because this Actor's rows include public creator information (username, nickname, follower-facing profile fields inside author) that can constitute personal data under GDPR and CCPA, anyone storing or reusing that data is responsible for their own lawful basis and retention practice in their jurisdiction. TikTok Profile Scraper returns only publicly accessible data. What you do with that data is your responsibility โ€” consult legal counsel for commercial applications involving personal data.

โ“ Frequently asked questions

Does TikTok Profile Scraper work without a TikTok account?

Yes. No credential of any kind is accepted or stored anywhere in the source code โ€” every request, including the video-detail keyword lookup, runs against TikTok's logged-out public surfaces.

How does it handle TikTok's anti-scraping measures?

TikTok answers HTTP 200 for real pages, WAF challenges, and reputation-gated refusals alike, so the Actor never trusts a status code โ€” every response is classified by its body shape (empty, a small WAF-challenge page, or a real multi-hundred-KB payload). A Chromium browser opens the target profile once to solve TikTok's WAF challenge and mint session cookies (run headful rather than headless, since the Apify image runs the browser under Xvfb and a headless Chromium fails these checks in-container); every following request replays through a curl_cffi client impersonating Chrome, carrying those cookies. A WAF-shaped response triggers up to two session re-warms before the Actor escalates one rung up its proxy ladder โ€” none โ†’ datacenter โ†’ residential.

Can I run TikTok Profile Scraper at scale without getting blocked?

The engine retries a blocked profile on a fresh proxy tier and a freshly re-warmed session, but only until that profile has produced its first row โ€” once any row is emitted for a profile, the run will not restart it from scratch, so a later failure only stops that profile with the videos already collected rather than duplicating rows. There is no published success rate or uptime figure for this behavior; how many profiles clear on a given run depends on TikTok's response at the time.

How fresh is the data TikTok Profile Scraper returns?

Every run is a live fetch against TikTok's public feed and video pages at the time it runs โ€” nothing is cached or replayed from a prior run. A video's search_keywords[] and contentCategories[] reflect TikTok's assignment as of that run.

Why do some videos have no search keywords?

Because TikTok itself has not attached any to that video โ€” the input schema's own coverage measurement found 28 of 40 sampled videos (70%) carrying terms, meaning roughly 30% genuinely carry none. Those rows still come back, with null keyword fields, unless onlyVideosWithKeywords is enabled.

Which fields work best for AI training and RAG indexing?

For RAG, index desc/description (the caption) alongside search_keywords[] so a query about a topic or competitor name resolves to the videos TikTok already associates with it. For training data, playCount, diggCount, commentCount, shareCount, and collectCount return as typed integers (or null when TikTok's own stats object omits the counter) with a stable key set across runs, requiring no normalization before use.

Does this Actor return personal data, and who is responsible for it?

Yes โ€” creator username, nickname, and other public profile fields inside author are personal data under TikTok's own privacy settings. The Actor extracts only what TikTok already serves to a logged-out visitor; lawful basis for storing, processing, or reusing that data under GDPR, CCPA, or another regime sits with whoever runs the Actor, not with the Actor itself.

Does TikTok Profile Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes, as a callable HTTP endpoint. Any agent framework that can call the Apify API โ€” including through apify_client โ€” can start a run and read the dataset back as tool output; every response is typed JSON, so no HTML parsing step sits between the scrape and the model's context window.

How does TikTok Profile Scraper compare to other TikTok scrapers?

As observed on the Apify Store on 2026-07-30: get-leads' all-in-one TikTok scraper spans 11 modes (profiles, videos, comments, hashtags, search, live streams, music) but does not document a search-keyword or content-category lookup on any of them; thescrapelab's TikTok scraper covers profiles, video URLs, and keyword/hashtag search with a transcript-extraction feature this Actor does not offer. TikTok Profile Scraper is scoped to one job โ€” a creator's video feed enriched with TikTok's own suggested search terms and content categories โ€” and keeps TikTok's complete raw video record on every row rather than trimming it to a fixed field list.

โ„น๏ธ Disclaimer

TikTok Profile Scraper extracts only publicly available data from TikTok. This tool is intended for lawful use cases only. Users are responsible for complying with TikTok's terms of service and applicable data protection laws in their jurisdiction.