๐ต TikTok Trending Videos Scraper Plus
Pricing
$14.99/month + usage
๐ต TikTok Trending Videos Scraper Plus
Scrapes trending TikTok videos by region or category, capturing video URLs, captions, hashtags, creators, sounds, metrics, and publish dates. Ideal for trend research, content strategy, influencer insights, and automated discovery of high-performing viral videos
Pricing
$14.99/month + usage
Rating
0.0
(0)
Developer
Scrapio
Maintained by CommunityActor stats
0
Bookmarked
17
Total users
0
Monthly active users
14 days ago
Last modified
Categories
Share
TikTok Trending Scraper โ Extract Videos, Creators and Music Data
TikTok Trending Videos Scraper Plus pulls currently-trending TikTok videos by country, sort order, and time window โ or scrapes any list of specific TikTok video URLs โ and returns typed JSON rows, not raw HTML. Each row carries full metadata: views, likes, comments, shares, author identity, music details, hashtags, the complete caption, timestamps, and video specs, plus locally computed engagement ratios. Unlike scraping frameworks that hand back an unflattened TikTok payload, this Actor returns flat, ready-to-use fields your pipeline can consume without a parsing step. This guide covers every input and output field, how trending discovery and the video-page harvest actually work, and three concrete ways teams put trending TikTok data into production.
๐งญ What Does TikTok Trending Videos Scraper Plus Do?
TikTok Trending Videos Scraper Plus collects real, currently-recommended TikTok videos for a region and locally ranks them by views/likes/comments/shares, or scrapes specific video URLs you supply directly. It returns three kinds of data in every full row: the video itself, the creator who posted it, and the music/sound track attached to it. No TikTok account, login, or API token is required โ every request is either an unauthenticated HTTP fetch against TikTok's public video pages, or a headless-browser session against TikTok's own public, logged-out web app when a signed request is required.
Note on trending discovery (2026 update): TikTok retired the old public Creative Center trending API (
ads.tiktok.com/business/creativecenter/.../popular_trend/list) this Actor previously used โ that URL now redirects to a rebuilt page that shows anonymous visitors at most 4 blurred videos with no permalink, behind a login wall. Trending discovery now instead drives TikTok's own anonymous "For You" web client (www.tiktok.com/foryou) headlessly, capturing the sameitemStructvideo objects TikTok's own signed requests return, across several short-lived browser sessions, then ranks/filters that pool locally by the requestedsortBy. This yields real, live, fully-detailed videos (not a 4-item teaser), but anonymous access caps total unique videos at roughly 100-150 per run โ see Schema stability and export options below.
- ๐ Trending discovery by country, sort, and period โ pick a country (
countryCode), a ranking (sortBy: views, likes, comments, or shares), and a window (period: last 7 or 30 days) - ๐ Video-URL mode โ supply
startUrlsto scrape specific TikTok videos instead of the trending list, skipping discovery entirely - ๐ Full video-page metadata harvest โ
views,likes,comments,shares,bookmarks, the full caption (desc),hashtags, author fields, music fields, and video specs, parsed from the video's own embedded state rather than a trimmed API response - ๐ Locally computed engagement metrics โ
engagementRate,likesPerView,commentsPerView,sharesPerView,bookmarksPerView, andtotalEngagement, all derived from the raw counts at no extra cost - ๐ Post-harvest filtering โ drop videos outside view/like/comment/duration ranges, keep only verified authors, or restrict to a publish-date window
- ๐ค Optional multi-provider AI enrichment โ caption sentiment, topics, keywords, and language via seven LLM providers
- ๐งน Deduplication and canonical URLs โ duplicate videos are dropped by
item_idbefore they're ever charged, and every row carries a canonicalwebVideoUrl
โก Features & Capabilities
TikTok Trending Videos Scraper Plus is built around three things: parsing the video page's full embedded state instead of a trimmed listing response, a proxy-first fallback chain for anti-bot resilience, and cost control through pre-charge deduplication and optional filtering.
Core features
- For-You capture for trending discovery.
sortBy/period/countryCode/maxItemsdrive a headless Playwright fan-out across several short-lived, unauthenticatedwww.tiktok.com/foryousessions, capturing theitemStructpayloads TikTok's own signedapi/recommend/item_listrequests return, deduplicating by video id, then ranking the resulting pool locally by the requested metric and truncating tomaxItems. - Full
SIGI_STATE/ rehydration parsing for URL mode. EverystartUrlsfetch parses the page'sSIGI_STATEscript tag first, merging itsItemModuleandUserModuleblocks into one normalized record; if that tag is missing, it falls back to parsing__UNIVERSAL_DATA_FOR_REHYDRATION__and walking the payload for the firstitemStruct. Both paths โ and the For-You capture above โ feed the same field-mapping function, so the output schema doesn't change depending on which source produced the row. - Three-tier fetch fallback per URL-mode video. For each
startUrlsentry, the Actor tries a proxiedaiohttpGET first, falls back to a direct (unproxied)aiohttpGET if the proxied one fails to parse, and finally falls back to rendering the page in a headless Playwright browser (--disable-blink-features=AutomationControlled, anavigator.webdriveroverride script) if both HTTP attempts fail. Trending mode doesn't need this โ the For-You capture above already returns full itemStruct data per video. - Hashtag extraction from three sources.
hashtagsis built by merging TikTok's ownchallenges[].titleandtextExtra[].hashtagNamearrays with a regex fallback (#([^\s#@]+)) run over the caption text, deduplicated case-insensitively โ so a hashtag is still captured even when TikTok's structured fields omit it. - Pre-charge deduplication. Videos are deduplicated by
item_id/idwhile merging For-You sessions (trending mode) and again immediately before a row is pushed to the dataset โ so a duplicate never generates a secondrow_resultcharge. - Multi-provider AI enrichment. When
aiEnhancementis on, each video's caption is classified for sentiment, topics, keywords, and language by whichever provideraiModelmaps to โ Anthropic, OpenAI, Google, xAI, DeepSeek, Perplexity, or Mistral โ auto-detected from the model name prefix. - Real proxy wiring, with automatic country targeting.
proxyConfigurationis passed into theaiohttpclient, the URL-mode Playwright fallback, and โ with a fresh Apify Proxy session per browser context for IP diversity โ the trending-mode For-You capture. When you enable Apify Proxy without pinningapifyProxyCountryyourself, the Actor injects the requestedcountryCodeautomatically so trending discovery is geo-targeted. Without a proxy, discovery reflects wherever the Apify run's own container IP is (normally a US datacenter), regardless ofcountryCode.
How TikTok Trending Videos Scraper Plus compares to other TikTok scrapers
| Feature | TikTok Trending Videos Scraper Plus | lexis-solutions/tiktok-trending-videos-scraper | igview-owner/tiktok-data-scarper |
|---|---|---|---|
| Trending sort options | Views, likes, comments, or shares (sortBy) | Views, engagement rate, or 6-second view-through rate (observed on the Apify Store, 2026-07-26) | Not documented โ fixed region/count only (observed 2026-07-26) |
| Full result set without extra auth | Yes โ no login or cookies needed | Requires TikTok Creative Center session cookies to unlock beyond "the top few public trending videos" (observed 2026-07-26) | Not documented as requiring auth (observed 2026-07-26) |
| Video-URL / single-video input mode | Yes โ startUrls | Not documented (observed 2026-07-25) | Not documented (observed 2026-07-26) |
| Full video-page metadata (caption, hashtags, music, video specs) | Yes, via SIGI_STATE parsing | Only adds top comments via includeDetailedVideoData; no hashtags/video-spec fields documented (observed 2026-07-26) | Music and download-link fields documented; no hashtags, full caption, or video-dimension fields (observed 2026-07-26) |
| Post-harvest filters (views/likes/comments/duration/verified/date) | 11 filter keys, via top-level fields or a filters object | Not documented (observed 2026-07-26) | Not documented (observed 2026-07-26) |
| AI caption enrichment | Optional โ sentiment, topics, keywords, language across 7 providers | Not documented (observed 2026-07-26) | Not documented (observed 2026-07-26) |
| Pricing model | Pay per event (row_result) | Flat price per month (observed on the Apify Store, 2026-07-26) | Pay per event (observed on the Apify Store, 2026-07-26) |
If your use case is feeding structured data to an LLM or a downstream database, the metadata-depth row is the decision-maker โ a listing response with no caption, hashtags, or music fields means every consumer has to make its own follow-up request to fill the gap, which is a reliability failure mode inside an agent loop, not a feature.
When another tool might suit you better
If you specifically need direct watermark-free, watermarked, and HD video-file variants with file sizes as first-class output fields, igview-owner/tiktok-data-scarper documents play, wmplay, hdplay, size, wm_size, and hd_size fields for exactly that (observed on the Apify Store, 2026-07-26); this Actor's videoUrl returns TikTok's own single playAddr/downloadAddr link without separating quality variants. If you'd rather run dedicated single-purpose actors for creators, songs, and hashtags instead of one combined video actor, lexis-solutions maintains a matching suite โ Trending Creators, Trending Songs, and Trending Hashtags scrapers (observed 2026-07-26) โ which can be simpler to bill and schedule independently if you only ever need one of those entity types.
TikTok Trending Videos Scraper Plus within the Scrapio data stack
This is currently the only TikTok Actor in the Scrapio catalogue โ there is no separate Scrapio Actor for TikTok creators, hashtags, or music trends to link to here. For comparable short-form-video and engagement-analytics workflows on other platforms, Scrapio also offers Facebook Reels Scraper Plus for Facebook's short-form video format, Instagram Hashtag Scraper Posts Likes and Comments for hashtag-driven Instagram trend discovery, and Pinterest Scraper With Engagement Analytics for Pinterest pin engagement.
Why do developers and data teams scrape TikTok trending videos?
๐ข Social media and marketing teams
Agencies and in-house teams set countryCode and sortBy to match a target market, turn on includeDetailedVideoData, and pull views, likes, comments, shares, engagementRate, and hashtags for the current trending set. The output lands directly in the Apify dataset for export to a reporting deck or a content-calendar tool โ no manual scrolling through TikTok's Creative Center to see what's working in a given market this week.
๐ AI training data and RAG indexing
desc (the full caption) is the highest-information text field for a video, and hashtags, musicTitle, and authorNickname are pre-extracted structured entities alongside it. For RAG enrichment, index desc together with webVideoUrl, authorUniqueId, and createTimeISO so a retrieval hit can be traced back to the source video and its creator. For training data, videoDuration, hashtags, isAd, and engagementRate form a consistently typed feature set across rows, since every count returns as an integer or float rather than a display string like TikTok's own "1.4M".
๐ฑ Competitive and market intelligence
Run the same countryCode/sortBy/period combination on a schedule and diff successive runs on item_id to catch videos newly entering the trending set, or on views/engagementRate to catch which existing trending videos are still climbing. isAd separates paid/sponsored content from organic trending videos, so a monitoring pipeline can segment ad-driven trends from organic ones without manual review.
๐ฌ Research and academic use
Content-analysis and virality research on short-form video can build a structured dataset from the public trending set across any of the 24 supported countries, or from a fixed list of public video URLs via startUrls. Every field documented in this README comes from a video page or trend surface TikTok serves to an unauthenticated visitor โ no private, follower-only, or login-gated content is accessible to this Actor.
๐ฅ Product and SaaS development
Because output is typed JSON with a stable field set, it's a direct fit for a trend-tracking dashboard, a creator-analytics tool, or a content-discovery product built on top of scheduled runs. videoUrl, musicPlayUrl, and cover give a downstream product playable/referenceable media URLs without re-deriving them from TikTok's page markup โ though see the CDN-expiry note in Schema stability and export options below before relying on them long-term.
๐ Input Parameters
All 22 parameters below are read directly from .actor/actor.json's input schema โ names, types, defaults, and constraints are reproduced exactly. None are required ("required": []).
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
countryCode | No | string (select, default "US") | Country to pull trending videos from. Ignored when startUrls is supplied. | "US" |
sortBy | No | string (select, default "vv") | How to sort trending results: vv (views), like, comment, or repost (shares). | "vv" |
period | No | string (select, default "7") | Trending window: "7" or "30" days. | "7" |
maxItems | No | integer (min 1, max 1000, default 10) | Maximum trending videos to scrape. Ignored in Video-URL mode, which scrapes every supplied URL regardless of this value. | 20 |
startUrls | No | array (stringList, default []) | Specific TikTok video URLs to scrape instead of trending. When set, countryCode/sortBy/period/maxItems are ignored. | ["https://www.tiktok.com/@scout2015/video/6718335390845095173"] |
includeDetailedVideoData | No | boolean (default false) | Fetch each video's page to harvest views, author, music, hashtags, full caption, timestamps, and video specs. Required for engagement metrics and filters. Always on in Video-URL mode regardless of this value. | true |
filters | No | object (json, default {}) | Post-harvest filter object. Keys: minViews, maxViews, minLikes, maxLikes, minComments, maxComments, minDuration, maxDuration, verifiedOnly, publishedAfter, publishedBefore. Only applied when detailed data is available. Leave a key out to disable it. | {"minViews": 100000, "verifiedOnly": true} |
minViews | No | integer (min 0) | Keep only videos with at least this many views. Needs includeDetailedVideoData. | 100000 |
maxViews | No | integer (min 0) | Keep only videos with at most this many views. Needs includeDetailedVideoData. | 5000000 |
minLikes | No | integer (min 0) | Keep only videos with at least this many likes. Needs includeDetailedVideoData. | 1000 |
maxLikes | No | integer (min 0) | Keep only videos with at most this many likes. Needs includeDetailedVideoData. | 1000000 |
minComments | No | integer (min 0) | Keep only videos with at least this many comments. Needs includeDetailedVideoData. | 50 |
maxComments | No | integer (min 0) | Keep only videos with at most this many comments. Needs includeDetailedVideoData. | 50000 |
minDuration | No | integer (min 0) | Keep only videos at least this many seconds long. Needs includeDetailedVideoData. | 15 |
maxDuration | No | integer (min 0) | Keep only videos at most this many seconds long. Needs includeDetailedVideoData. | 60 |
verifiedOnly | No | boolean (default false) | Keep only videos from verified authors. Needs includeDetailedVideoData. | true |
publishedAfter | No | string (datepicker) | Keep only videos published on/after this date. Needs includeDetailedVideoData. | "2024-01-01" |
publishedBefore | No | string (datepicker) | Keep only videos published on/before this date. Needs includeDetailedVideoData. | "2025-12-31" |
aiEnhancement | No | boolean (default false) | Analyze each caption with an LLM to add sentiment, topics, keywords, and language. Requires an API key or the matching provider env var. | false |
aiModel | No | string (select, default "claude-haiku-4-5") | Model/provider for AI enrichment. Provider is auto-detected from the name prefix. | "claude-haiku-4-5" |
aiApiKey | No | string (textfield, secret) | API key for the selected provider. Falls back to ANTHROPIC_API_KEY / OPENAI_API_KEY / GEMINI_API_KEY / XAI_API_KEY / DEEPSEEK_API_KEY / PERPLEXITY_API_KEY / MISTRAL_API_KEY. Leave blank to skip AI enrichment. | "" |
proxyConfiguration | No | object (proxy editor, default {"useApifyProxy": false}) | Proxy used for all requests to individual video pages (aiohttp and Playwright). Apify Proxy is recommended for TikTok. | {"useApifyProxy": true} |
countryCode accepts: AU, BR, CA, EG, FR, DE, ID, IL, IT, JP, MY, PH, RU, SA, SG, KR, ES, TW, TH, TR, AE, GB, US, VN โ shown in the input editor by full country name (e.g. "United States (US)").
aiModel accepts 25 values grouped by provider prefix: claude-haiku-4-5, claude-sonnet-5, claude-opus-4-8, claude-fable-5 (Anthropic); gpt-4o-mini, gpt-4o, gpt-4.1-mini, gpt-4.1, o3-mini, o1 (OpenAI); gemini-2.0-flash-lite, gemini-2.0-flash, gemini-1.5-pro, gemini-2.5-flash, gemini-2.5-pro (Google); grok-2-latest, grok-3-mini, grok-3, grok-beta (xAI); deepseek-chat, deepseek-reasoner (DeepSeek); sonar, sonar-pro, sonar-reasoning (Perplexity); mistral-small-latest, mistral-large-latest (Mistral).
Example input
Trending mode, with detailed data, a view filter, and a proxy:
{"countryCode": "US","sortBy": "vv","period": "7","maxItems": 20,"includeDetailedVideoData": true,"minViews": 100000,"verifiedOnly": false,"proxyConfiguration": { "useApifyProxy": true }}
Video-URL mode, scraping specific videos (detailed data is always on; countryCode/sortBy/period/maxItems are ignored):
{"startUrls": ["https://www.tiktok.com/@scout2015/video/6718335390845095173"],"proxyConfiguration": { "useApifyProxy": true }}
Trending mode with AI caption enrichment:
{"countryCode": "GB","sortBy": "like","period": "30","maxItems": 15,"includeDetailedVideoData": true,"aiEnhancement": true,"aiModel": "claude-haiku-4-5","aiApiKey": "<your-provider-api-key>"}
Supported URL types and input formats
- A full TikTok video URL, e.g.
https://www.tiktok.com/@scout2015/video/6718335390845095173. The numeric video ID is extracted with the pattern/video/(\d+)/. - A plain string or an object with a
urlkey โstartUrlsentries are read as either"https://www.tiktok.com/@user/video/123..."directly or{"url": "https://www.tiktok.com/@user/video/123..."}, so both shapes work even though the input editor presents it as a simple list. countryCode,sortBy,period, andmaxItemsare silently ignored wheneverstartUrlsis non-empty โ the Actor switches entirely into Video-URL mode and scrapes every URL supplied, regardless ofmaxItems.
๐ฆ Output Format
Every video is pushed as one flat JSON row to the Apify dataset as it's processed. The dataset's default view surfaces 31 of the row's fields as table columns; a row fetched with includeDetailedVideoData: true carries up to 50 keys (54 with aiEnhancement on) โ video, creator, and music data are all embedded in the same row rather than returned as separate entities, since one video has exactly one creator and (usually) one music track.
Output for Videos
Full row shape with includeDetailedVideoData: true and aiEnhancement: true in trending mode. Every key is copied from map_video_fields(), compute_derived(), and the calling code in src/main.py:
{"type": "video","country_code": "US","cover": "https://p16-pu-sign-useast8.tiktokcdn-us.com/.../cover.jpeg","duration": "34","id": "7412345678901234567","item_id": "7412345678901234567","item_url": "https://www.tiktok.com/@scout2015/video/7412345678901234567","region": "US","title": "he's loving it #loveisland","webVideoUrl": "https://www.tiktok.com/@scout2015/video/7412345678901234567","views": 55083015,"playCount": 55083015,"likes": 3401200,"comments": 18422,"shares": 96311,"bookmarks": 210044,"authorId": "7065438769372987398","authorUniqueId": "scout2015","authorNickname": "Scout","authorVerified": true,"authorFollowers": 1195250,"authorAvatar": "https://p19-common-sign.tiktokcdn-us.com/.../avatar.jpeg","authorBio": "24 | NC","authorUrl": "https://www.tiktok.com/@scout2015","musicId": "7229168247013182210","musicTitle": "original sound","musicAuthor": "Scout","musicPlayUrl": "https://sf16-ies-music.tiktokcdn.com/....mp3","musicDuration": 34,"musicOriginal": true,"hashtags": ["loveisland"],"desc": "he's loving it #loveisland","createTime": 1780972749,"createTimeISO": "2026-06-08T14:32:29Z","videoWidth": 1080,"videoHeight": 1920,"videoDuration": 34,"videoRatio": "720p","videoDefinition": "720p","videoFormat": "mp4","videoBitrate": 1245678,"videoUrl": "https://v16m-default.tiktokcdn-us.com/....mp4","isAd": false,"totalEngagement": 3725977,"engagementRate": 6.7649,"likesPerView": 0.061755,"commentsPerView": 0.000334,"sharesPerView": 0.001749,"bookmarksPerView": 0.003814,"aiSentiment": "positive","aiTopics": ["reality TV", "romance", "TV commentary"],"aiKeywords": ["Love Island", "couple", "reaction"],"aiLanguage": "en","scrapedAt": "2026-07-26T00:00:00Z"}
includeDetailedVideoData no longer changes trending-mode output: the For-You capture that powers trending discovery (see Features & Capabilities) already returns a full itemStruct per video at no extra request cost, so every trending-mode row always carries the full field set shown above regardless of this flag. It's kept in the schema for backward compatibility and because Video-URL mode always behaves as if it were true anyway.
Output for Creators
Embedded in the same video row, not a separate dataset: authorId, authorUniqueId, authorNickname, authorVerified, authorFollowers, authorAvatar, authorBio, authorUrl (built as https://www.tiktok.com/@{authorUniqueId}). authorFollowers is read from the per-video author-stats block if present, falling back to the account's overall authorStats.followerCount when the per-video figure is absent.
Output for Music
Also embedded in the same row: musicId, musicTitle, musicAuthor, musicPlayUrl, musicDuration, musicOriginal (a boolean โ true when the track is the video's own original sound rather than a reused/licensed track).
Schema stability and export options
duration and videoDuration now always carry the same numeric-seconds value in both modes โ both are sourced from the same live itemStruct payload (there's no longer a separate, differently-formatted trending-listing response). videoDuration is what the minDuration/maxDuration filters check; duration is kept for backward compatibility with older integrations.
As with any TikTok CDN link, videoUrl, musicPlayUrl, cover, and authorAvatar are signed URLs โ TikTok may expire them after a period, so download the referenced media promptly if you need to persist it rather than just the URL. If a field TikTok's front end stops sending is genuinely absent from a video, the corresponding key is present on the row with a null value rather than being dropped, so downstream consumers can rely on a fixed key set. Results are stored in the run's default Apify dataset and can be exported from the Apify Console or API in JSON, CSV, Excel, XML, or HTML, or fetched programmatically via apify_client.
Trending-mode volume ceiling. Because trending discovery works by fanning out across several fresh, unauthenticated www.tiktok.com/foryou browser sessions (TikTok's own public Creative Center trending API no longer exists for anonymous callers โ see the note near the top of this README), each run can realistically surface roughly 100-150 unique videos, not the full maxItems: 1000 ceiling the schema allows. The Actor logs a warning when it returns fewer than maxItems. For larger volumes: run the Actor multiple times (optionally with different countryCode/proxy sessions) and merge datasets, or switch to startUrls if you already have the specific video links you need โ that path has no such ceiling.
Billing: each pushed video row is charged once under the row_result pay-per-event name. In Video-URL mode, a URL whose page can't be fetched or parsed (blocked, deleted, or invalid) is still written to the dataset as a type: "error" row with an error message โ but it is pushed without charged_event_name, so it is not billed. Filter these out of the dataset with type != "error" if you only want billed, successful rows. In trending mode, only successfully ranked/filtered videos are ever written to the dataset โ there's no separate error-row case since a video is either captured with full data or not collected at all.
๐ก TikTok Trending Videos Scraper Plus Strategy Guide
๐ฏ Strategy 1: Real-time enrichment pipeline
Trigger a run whenever a video URL enters your system โ a brand-mention alert, an influencer-outreach candidate, a UGC submission โ by passing it as a single startUrls entry with aiEnhancement: true. Read the finished row via the Apify API and write views, engagementRate, authorVerified, and aiSentiment back onto the source record as a fast credibility and relevance signal before a human reviews it.
๐ฏ Strategy 2: Scheduled monitoring and alerting
Set up an Apify schedule to run the same countryCode/sortBy/period combination daily. Diff each run's output against the previous one on item_id to catch videos newly entering the trending set, and on views/engagementRate for videos that appear in both runs to catch ones still climbing. Alert on the delta that matters to you โ a new item_id for trend-spotting teams, a jump in engagementRate for a specific creator or hashtag you're tracking.
๐ฏ Strategy 3: Bulk dataset build
For a research or training corpus, run several countries in parallel Actor runs with maxItems set to the per-country volume you need โ the schema caps it at 1000 โ and includeDetailedVideoData: true for full metadata. Aggregate the resulting datasets via the Apify API and export to CSV or load them into a database. No run-concurrency limit is documented for this Actor; any ceiling you hit comes from your Apify plan's concurrent-run allowance, not from the Actor's own code.
Strategy comparison at a glance
| Strategy | Best for | Run pattern | Output format |
|---|---|---|---|
| Real-time enrichment | Brand-mention or lead scoring on new video URLs | On-demand, single-URL startUrls, aiEnhancement on | JSON via API, written back to source system |
| Scheduled monitoring | Trend and creator tracking over time | Recurring Apify schedule, same country/sort/period each run | JSON/CSV, diffed run-over-run on item_id |
| Bulk dataset build | Research corpora, training data | Several parallel per-country runs, maxItems near the 1000 cap | CSV/JSON export or direct database load |
๐ด Related TikTok Scrapers & Tools
| Scraper | What it extracts |
|---|---|
| Facebook Reels Scraper Plus | Short-form video reels, engagement, and owner data from Facebook |
| Instagram Hashtag Scraper Posts Likes and Comments | Instagram posts, likes, and comments by hashtag |
| Pinterest Scraper With Engagement Analytics | Pin data with engagement metrics |
| YouTube Transcript Scraper With AI Enrichment | Video transcripts with AI-derived enrichment |
| Twitter Profile & Tweets Scraper | Profile and tweet data for cross-platform social monitoring |
How to integrate TikTok Trending Videos Scraper Plus with your stack
TikTok Trending Videos Scraper Plus works with any language or tool that can make an HTTP request to the Apify API. The examples below use the Actor name from .actor/actor.json: tiktok-trending-videos-scraper-plus.
Python
from apify_client import ApifyClientimport csvclient = ApifyClient("<APIFY_API_TOKEN>")run = client.actor("tiktok-trending-videos-scraper-plus").call(run_input={"countryCode": "US","sortBy": "vv","period": "7","maxItems": 20,"includeDetailedVideoData": True,"minViews": 100000,})rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())rows = [r for r in rows if r.get("type") != "error"]with open("tiktok_trending.csv", "w", newline="", encoding="utf-8") as f:writer = csv.DictWriter(f, fieldnames=rows[0].keys())writer.writeheader()writer.writerows(rows)print(f"Saved {len(rows)} video rows to tiktok_trending.csv")
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<APIFY_API_TOKEN>' });const run = await client.actor('tiktok-trending-videos-scraper-plus').call({countryCode: 'US',sortBy: 'vv',period: '7',maxItems: 20,includeDetailedVideoData: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();const videos = items.filter(r => r.type !== 'error');console.log(`Fetched ${videos.length} trending videos`);videos.forEach(v => console.log(v.item_id, v.views, v.engagementRate));
Async and scheduled pipelines
For a large startUrls list or a high maxItems, call the Actor via apify_client's .start() method to fire the run and return immediately, then poll the run status or read the dataset once it finishes. For recurring trend collection, use an Apify schedule rather than a self-managed cron job โ it runs this Actor with the same input on a fixed interval without you hosting anything. No webhook-delivery input is documented on this Actor's schema, so polling or a schedule is the supported pattern for fire-and-forget runs.
๐ฏ Who Needs TikTok Trending Videos Scraper Plus? (Use Cases & Industries)
๐ข Social media managers and agencies
Pull the current trending set for a client's target market with countryCode and sortBy set to match, then report views, likes, comments, shares, and engagementRate per video without manually browsing TikTok's Creative Center by hand.
๐ AI and data engineering teams
Index desc, hashtags, and authorUniqueId for RAG retrieval over what's currently trending, or use the full row set โ including the AI-derived aiSentiment/aiTopics/aiKeywords when aiEnhancement is on โ as a consistently typed feature table for a content-classification or trend-prediction model.
๐ฑ Competitive intelligence analysts
Track a country/sort combination on a schedule and flag new item_id values entering the trending set, or rising views/engagementRate on videos already in it, with isAd separating paid promotion from organic trending content.
๐ฌ Researchers
Build a public-data trending-video dataset across any of the 24 supported countries, or a fixed corpus from known video URLs via startUrls, for content-analysis or virality research; every field traces back to a page or trend surface TikTok serves without a login.
๐ฅ SaaS and product builders
Use the full field set โ including videoUrl, musicPlayUrl, and the computed engagement ratios โ as the data layer for a trend-tracking dashboard or a creator-discovery tool, scheduled through Apify rather than self-hosted infrastructure.
Is it legal to scrape TikTok?
Scraping publicly accessible web pages is generally lawful in the United States โ the Ninth Circuit's hiQ Labs v. LinkedIn (2019, reaffirmed 2022) held that scraping data a website makes available without a login does not violate the Computer Fraud and Abuse Act. That precedent concerns unauthorized-access law, not TikTok's own Terms of Service โ scraping in a way that violates a platform's ToS is a separate matter of civil contract risk, not a criminal one, and TikTok's terms do restrict automated data collection.
This Actor's output includes personal data about the video's creator โ authorNickname, authorUniqueId, authorBio, authorFollowers, authorAvatar, and authorVerified. If you store or process this data about identifiable people, data protection laws such as the GDPR (EU/UK) or the CCPA (California) may apply to what you do with it, depending on your jurisdiction and use case.
TikTok Trending Videos Scraper Plus 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 Trending Videos Scraper Plus work without a TikTok account?
Yes. No TikTok login, cookies, or API token are used or required. Trending discovery drives TikTok's own public, logged-out www.tiktok.com/foryou web client, and video detail fetches (Video-URL mode) hit TikTok's public video pages โ both as an unauthenticated visitor would see them.
How does TikTok Trending Videos Scraper Plus handle TikTok's anti-scraping measures?
For Video-URL mode, each detailed video fetch tries a proxied aiohttp request first, then a direct aiohttp request, then falls back to a headless Playwright browser render if both HTTP attempts fail to produce a parseable page. For trending discovery, the Actor never attempts to replicate TikTok's request-signing (X-Bogus/X-Gnarly/msToken) itself โ it drives a real headless Chromium session so the browser signs its own requests, and the Actor only reads the resulting response bodies. Both browser paths launch with --disable-blink-features=AutomationControlled and a script that overrides navigator.webdriver.
Can I run TikTok Trending Videos Scraper Plus at scale without getting blocked?
For Video-URL mode: detail fetches process concurrently โ up to 12 simultaneous aiohttp detail requests and up to 3 simultaneous Playwright fallback renders, with the shared HTTP connection pool capped at 50 connections (aiohttp.TCPConnector(limit=50)) โ with no practical ceiling on startUrls list size beyond your run's time/memory budget. For trending mode: maxItems accepts up to 1000 in the schema, but anonymous access to TikTok's For-You feed realistically caps a single run at roughly 100-150 unique videos (see Schema stability and export options) โ this is a platform-level ceiling from TikTok requiring a login for continued pagination, not a bug or a rate limit you can raise by retrying. No uptime or block-rate figure is published for this Actor; reliability in practice depends on your proxy pool, since TikTok's own anti-bot response is outside the Actor's control.
How fresh is the data TikTok Trending Videos Scraper Plus returns?
Every run fetches live from TikTok's For-You feed and video pages at the time it runs โ nothing is cached or served from a prior run. scrapedAt on every row records exactly when that row was collected.
Which fields work best for AI training and RAG indexing?
For RAG, index desc (the full caption) alongside authorUniqueId, createTimeISO, and webVideoUrl so a retrieval hit can be traced back to the source video and creator. For training data, videoDuration, hashtags, isAd, and engagementRate form a consistently typed feature set: every field returns as a typed primitive โ string, number, boolean, or array โ never a TikTok-style abbreviated display string like "1.4M" that needs parsing.
What happens to personal data returned by this Actor?
TikTok Trending Videos Scraper Plus returns only publicly available data, including public creator-profile fields (authorNickname, authorBio, authorFollowers, authorVerified) for the video's author. The lawful basis for storing and using that data โ and compliance with GDPR, CCPA, or other applicable data protection law โ sits with you as the operator of the run, not with the Actor.
Does TikTok Trending Videos Scraper Plus work with Claude, ChatGPT, and other AI agent tools?
There is no dedicated MCP server documented for this Actor. It is callable as an HTTP endpoint by any agent framework through the Apify API โ every response is typed JSON, so no HTML parsing step is required before passing a video row into an LLM's context window.
How does TikTok Trending Videos Scraper Plus compare to other TikTok scrapers?
lexis-solutions/tiktok-trending-videos-scraper documents a dedicated suite of separate creator/song/hashtag trend actors and a five-country-limited trending list unlocked further by session cookies (observed on the Apify Store, 2026-07-26); this Actor covers one country at a time from a 24-country list, needs no cookies, and adds a combined video-URL mode plus post-harvest filters. igview-owner/tiktok-data-scarper documents watermarked/HD video-file download-link variants this Actor does not separate out, but doesn't document hashtags, full captions, video-spec fields, or post-harvest filtering the way this Actor does (observed 2026-07-26). Where this Actor differs from both: full SIGI_STATE-sourced metadata by default when includeDetailedVideoData is on, 11 post-harvest filter keys, and optional multi-provider AI caption enrichment.
โน๏ธ Disclaimer
TikTok Trending Videos Scraper Plus 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.