๐ต 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
16
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
TikTok Trending Scraper โ Extract Videos, Creators and Music Data
TikTok Trending Videos Scraper Plus pulls 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 is built by parsing the video page's own embedded SIGI_STATE / rehydration JSON, so it 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 the video-page harvest and its fallback chain 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 trending short-form videos from TikTok's own Creative Center trend surface, 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 and its public Creative Center trend page, or a headless-browser render of the same public pages when the HTTP path is blocked.
- ๐ 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
- Full
SIGI_STATE/ rehydration parsing. Every detailed video fetch 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 feed the same field-mapping function, so the output schema doesn't change depending on which TikTok page variant responds. - Three-tier fetch fallback per video. For each video needing detail data, the Actor tries a proxied
aiohttpGET 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. - 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(falling back toid) twice: once while merging the browser-captured and paginated trending lists, 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.
proxyConfigurationis passed into both theaiohttpclient and the Playwright browser launch for the anti-bot-sensitive per-video page fetches. The Creative Center trending-list endpoint itself is fetched without a proxy, since thatads.tiktok.comsurface does not route reliably through datacenter or residential proxy IPs in practice.
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"}
With includeDetailedVideoData: false (the default) in trending mode, a row carries only the base listing fields โ type, country_code, cover, duration, id, item_id, item_url, region, title, webVideoUrl, scrapedAt โ since the video page is never fetched. Video-URL mode always fetches the video page, so its rows never omit these fields, but they also never include country_code, duration (the raw listing value), or region, since those come only from the trending-list endpoint, not the video page.
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 are two different fields: duration is the raw, unprocessed value TikTok's Creative Center listing returns for a trending video, while videoDuration is a numeric seconds value parsed from the detailed video page and is what the minDuration/maxDuration filters actually check. Only videoDuration is guaranteed to be a clean integer.
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's page, 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.
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 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, a video whose detail-page fetch fails is simply dropped โ never written to the dataset at all โ and only counted in the run's log output.
๐ก 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 hits TikTok's public Creative Center trend page, and video detail fetches 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?
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. The Playwright browser launches with --disable-blink-features=AutomationControlled and a script that overrides navigator.webdriver. Trending-list discovery via the Creative Center retries up to 3 times if no sign header or video data is captured on the first attempt.
Can I run TikTok Trending Videos Scraper Plus at scale without getting blocked?
maxItems accepts up to 1000 per run (schema maximum), and detail fetches for a trending run 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)). Video-URL mode processes each startUrls entry sequentially rather than concurrently. 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 Creative Center 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.