TikTok Scraper: Videos, Profiles, Comments, Sounds & Places
Tauqeer Abbas · @nextgensda
Scrape TikTok videos, profiles, hashtag feeds, keyword searches, sounds, places, followers, Shop products and comments. Full metadata: description, author, plays, likes, comments, shares, saves, music, video URLs, covers. No browser and no login; 256 MB.
About
TikTok Scraper: Videos, Profiles, Comments, Sounds, Places & Shop
One rental for all of TikTok: videos, profiles, keyword search, hashtags, sounds, places, followers/following lists, user search, comments, replies and TikTok Shop products.
No browser, no login, no device. 256 MB. Runs in seconds.
Why this actor
| This actor | Browser-based TikTok scrapers | |
|---|---|---|
| One actor for every surface | yes: one rental | usually split into 5–10 actors |
| Usage per 1,000 videos | ~$0.13 (measured on Bytewells) | several times more: Chrome + residential proxy |
| Browser / Chrome | none | Chromium + residential proxy per session |
| Memory | 256 MB | 1 – 4 GB |
| Login required | no | often |
| Output compatibility | native, Clockworks-style or apidojo-style keys | one fixed shape |
Because there is no browser in the loop, runs start in seconds and stay inside a quarter of a gigabyte. De-duplication is applied across all inputs, so the same video never comes twice.
Built for AI datasets
Every row is stable, flat and de-duplicated — ready for training, evaluation and retrieval pipelines without a cleaning pass:
- Pre-training and fine-tuning corpora — descriptions, hashtags, mentions and author metadata with stable ids and timestamps.
- Multimodal datasets — a playable video URL, cover and dynamic cover, music metadata and duration for every item.
- Sentiment and topic models — comment text with likes, reply counts, language and the video it belongs to.
- Trend and engagement forecasting — plays, likes, comments, shares and saves per video, plus creation time, so you can build time series.
- Retrieval and RAG — search results, hashtag feeds and profiles as a knowledge base for agents.
- Commerce and recommendation — TikTok Shop products behind each video (product id, title, seller) for recommendation and demand models.
- Geo and spatial models — place pages with coordinates, city and category.
- Audio and sound matching — sound pages with title, author, duration and play URL for audio fingerprints and sound recommendation.
Export as JSON, CSV, Excel or XML, stream to your warehouse on a schedule, or
deliver through webhooks and the Bytewells API (Apify-compatible: apify-client
works with its base URL).
What you get
One row per item, with dataType:
dataType | Fields |
|---|---|
video | id, URL, description, created date, author (id, @handle, nickname, sec uid, verified, bio, avatar), plays, likes, comments, shares, saves, reposts, music (id, title, author, original, play URL), video URL, download URL, cover, dynamic cover, dimensions, definition, hashtags, mentions, discovery source |
profile | id, URL, @handle, nickname, sec uid, bio, verified, private, avatar, followers, following, hearts, video count |
comment | id, video id/URL, text, created date, likes, reply count, pinned, language, author |
sound | id, URL, title, author, owner, duration, original, commerce flag, video count, cover, play URL, created date |
location | place id, URL, name, address, city, country, category, latitude/longitude, video count, favourite count, cover |
product | product id, title, seller ids, image, anchor type, and the video it was found on |
Duplicates are removed across all inputs. includeComments adds one row per
comment of every delivered video; includeReplies adds their replies.
Quick start
- Videos — paste video URLs (
https://www.tiktok.com/@user/video/123…) or numeric IDs. - Profiles — paste profile URLs,
@handlesorsec_uids. Each profile comes with its recent videos (up to Max videos per profile). - Searches — keywords; ~110 videos per broad query, plus Search variants for more.
- Hashtags —
cats,#catsor a tag URL. - Sounds — sound URLs or ids: the sound's page plus the videos using it.
- Locations — place URLs or ids: the place plus the videos posted there.
- Followers of / Following of — profiles whose follower list to read.
- User searches — keywords to find users by name or handle.
- For You feed — N videos from the algorithmic feed (optional).
Everything can be combined in one run.
Input
| Input | Default | Notes |
|---|---|---|
videos | — | video URLs or IDs |
profiles | — | URLs, @handles, sec_uids |
searches | — | keywords |
hashtags | — | tags |
sounds | — | sound URLs or ids |
locations | — | place URLs or ids |
followersOf | — | profiles whose followers to list |
followingOf | — | profiles whose following to list |
userSearches | — | user keywords |
feedItems | 0 | feed items (0 = off) |
maxVideosPerProfile | 20 | 0 = profile rows only |
maxItemsPerSearch | 120 | search depth per keyword or hashtag |
maxItemsPerSound | 100 | 0 = the sound row only |
maxItemsPerLocation | 100 | 0 = the location row only |
maxFollowersPerProfile | 200 | accounts listed per profile |
maxUsersPerSearch | 20 | profile rows per user keyword |
region | US | ISO code whose catalogue to read |
postedWithinDays | 0 | 0 = any date; 1/7/30/90/180 days |
sortBy | relevance | relevance, likes or latest (searches) |
searchVariants | 2 | extra requests per keyword for more depth |
outputFormat | native | native, clockworks or apidojo |
includeComments | false | one row per comment of each video |
maxCommentsPerVideo | 50 | |
includeReplies | false | also read replies |
maxRepliesPerComment | 0 | 0 = no reply reads |
includeProducts | false | one product row per Shop-anchored video |
maxItems | 1000 | total rows |
requestDelayMs | 250 | pacing between requests |
proxyConfiguration | platform proxy | datacenter by default |
Output formats
outputFormat changes the row's field names, not what is scraped:
| Value | Shape |
|---|---|
native | this actor's flat schema (dataType, authorUniqueId, playCount, …) |
clockworks | authorMeta, musicMeta, videoMeta, diggCount, playCount, webVideoUrl, createTimeISO; comments use cid, awemeUrl |
apidojo | views, likes, comments, shares, bookmarks, channel, video, song, postPage |
The mappings are field-compatible, not byte-identical: values that TikTok does
not publish (a video's author follower counts, song album, hashtag ids) stay
null instead of being invented. sound, location and product rows are
always in the native shape.
Pricing
One monthly rental, no per-row fees: every surface, as many rows as you need. Runs use Bytewells compute from your credit, and this actor needs very little of it.
Measured on Bytewells (256 MB, datacenter proxy):
| Run | Rows | Time | Usage |
|---|---|---|---|
| 2 keyword searches | 39 videos | 28 s | $0.005 (~$0.13 / 1,000) |
| A video's comments | 50 comments + the video | 12 s | $0.0003 |
Notes and limits
- A keyword search returns up to ~110 videos; Search variants asks the topic's own hashtags again for more (measured 110 → 130+). Narrow, multi-word keywords return fewer.
postedWithinDaysuses TikTok's own date filter, which narrows the same result pool: short windows return far fewer videos. Hashtag feeds are filtered locally because TikTok ignores the filter there.regionselects the catalogue to read (measured: two runs in one region share ~90% of their videos, two regions ~55%).- The For You feed is algorithmic: not reproducible run to run.
vm.tiktok.comshort links are not expanded: open the link and use the redirected URL.- Private or deleted videos and profiles are skipped.
- Shop products come from the video's own Shop anchor; TikTok does not publish a product catalogue to a logged-out session.
Input
Preview of the input form. Rent the Actor to fill it in and start runs from the console.
Use any combination of the inputs below. Results are de-duplicated across them.
videosTikTok video URLs (https://www.tiktok.com/@user/video/123…) or numeric video IDs. Full metadata, including the playable video URL. vm.tiktok.com short links are not supported: open the link and copy the redirected URL.
profilesProfile URLs, @handles or sec_uids. A row per profile (followers, following, hearts, videos, bio), plus its recent videos up to Max videos per profile.
searchesVideo results for each keyword, in TikTok's order. TikTok returns about 80 distinct videos per query; use more specific queries for more.
hashtagsVideos in each hashtag's feed (cats, #cats or a tiktok.com/tag/… URL).
soundsSound URLs (tiktok.com/music/…-123) or numeric sound ids. One sound row (title, author, duration, cover, play URL, video count) plus the videos that use it, up to Max videos per sound.
locationsPlace URLs (tiktok.com/place/…-123) or numeric place ids. One location row (name, address, city, category, coordinates, video count, cover) plus the videos posted there, up to Max videos per location.
userSearchesKeywords to find users by (name or handle): a profile row per match, up to Max users per search.
followersOfProfiles whose followers to list (URL, @handle or sec_uid): one profile row per follower, up to Max followers per profile. Works without a TikTok login.
followingOfProfiles whose following list to read: one profile row per account they follow.
feedItemsVideos from the For You feed, in TikTok's algorithmic order for the selected region (US by default). 0 disables it; the feed is not reproducible between runs.
maxVideosPerProfileRecent videos to read for each profile above. 0 = profile rows only.
Applies to searches, hashtags, user searches and the For You feed.
regionTwo-letter country code (US, GB, DE, JP…) whose catalogue to read. Empty = US. This is a data filter, not a proxy setting: results differ (two runs in one region share ~90% of their videos, two regions ~55%).
postedWithinDays0 = any date. Otherwise TikTok's own search filter is used (1, 7, 30, 90 or 180 days). It filters the same candidate pool the search would return, so a short window returns far fewer videos (measured: 1–4 for a generic keyword in 1–30 days). Hashtags are filtered on our side because their stream ignores the filter.
sortByTikTok's search ordering. Applies to keyword searches only.
searchVariantsExtra requests per keyword, one per hashtag that two or more results carry (for example cat #catsoftiktok), which returns a different slice of the topic. One request answers ~50–110 videos and does not paginate, so this is the depth lever: each variant adds ~10–15 videos. 0 = the single stream only.
outputFormatField layout of each row. Native is this actor's own flat schema. Clockworks emits authorMeta, musicMeta, videoMeta, diggCount, webVideoUrl, createTimeISO. apidojo emits views/likes, channel, video, song, postPage. Values TikTok does not publish (a video's author follower counts, song album, hashtag ids) are null, not invented.
maxItemsPerSearchVideos kept per keyword or hashtag. One search stream answers ~50–110 videos; Search variants adds more.
maxUsersPerSearchProfile rows kept per keyword in User searches.
maxItemsPerSoundVideos read for each sound above. 0 = the sound row only.
maxItemsPerLocationVideos read for each place above (9 per API request). 0 = the location row only.
maxFollowersPerProfileAccounts listed per input in Followers of / Following of (20 per API request).
maxItemsThe run stops after this many rows (videos, profiles and comments together).
requestDelayMsMilliseconds between API requests. Raising it is gentler on TikTok; lowering it makes runs faster.
includeCommentsRead each video's comments and save one row per comment. Applies to every video this run delivers.
maxCommentsPerVideoComments read per video, in TikTok's order. 0 reads video rows without comments.
includeRepliesAlso read replies to each comment (one extra request per comment with replies). Needs Include comments.
maxRepliesPerCommentReplies saved per comment; 0 disables reply reads even when Include replies is on.
includeProductsEmit one product row per product a delivered video sells (product id, title, seller, image), read from the video's own Shop anchor. TikTok does not serve a product catalogue to a logged-out app, so products come from videos.
proxyConfigurationThe default is Apify Proxy (datacenter): TikTok answers from it directly. If TikTok starts refusing the exits, switch to the RESIDENTIAL group — a new session is used automatically when a request is refused.
API
Bytewells speaks the Apify API. Existing integrations keep working: point apify-client at https://bytewells.com/api and use your Bytewells API token (Console → Settings → API access). The Actor ID is nextgensda/tiktok-scraper (or nextgensda~tiktok-scraper in URLs).
JavaScript · apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.BYTEWELLS_TOKEN,
baseUrl: 'https://bytewells.com/api',
});
const input = {
"searches": [
"funny cats",
"cat videos"
],
"maxItemsPerSearch": 20,
"maxItems": 40
};
const run = await client.actor('nextgensda/tiktok-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Python · apify-client
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["BYTEWELLS_TOKEN"], api_url="https://bytewells.com/api")
run_input = {
"searches": [
"funny cats",
"cat videos"
],
"maxItemsPerSearch": 20,
"maxItems": 40
}
run = client.actor("nextgensda/tiktok-scraper").call(run_input=run_input)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)HTTP · curl
curl -X POST "https://bytewells.com/api/v2/acts/nextgensda~tiktok-scraper/runs" \
-H "Authorization: Bearer $BYTEWELLS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searches":["funny cats","cat videos"],"maxItemsPerSearch":20,"maxItems":40}'Runs are billed as compute from your credit balance. Paid Actors need an active rental or trial; otherwise the API answers 402 rental-required.
Related
More Actors from the same publisher.

Reddit Scraper: Posts, Comments, Users, Search & Explore
Tauqeer Abbas · @nextgensda
Scrape Reddit posts, full comment threads, users, communities and comment search by keyword, plus the Explore tab's recommended communities. API-grade JSON with no login or browser, unaffected by Reddit's 2026 .json shutdown. Monitor brands and keywords with only-new runs.
Social mediaLead generationAI$29/mo3-day free trial
Google Maps Full Suite — Places, Reviews & Grid Search
Tauqeer Abbas · @nextgensda
Google Maps places, full details, reviews, People Also Search For and directions in one Actor.
AutomationLead generationMarketing$19/mo7-day free trial
Google Shopping Scraper: Prices, Stores, Price History & GTIN
Tauqeer Abbas · @nextgensda
Search Google Shopping in any country: products with prices, merchants and ratings; details and specs, every store's offer, per-store price history and reviews; look products up by GTIN/UPC/EAN. Filters for price, rating, brand, store and sale. Pay per result.
E-commerceLead generationAI$49/mo3-day free trial
Google Travel Scraper: Flights, Hotels & Vacation Rentals
Tauqeer Abbas · @nextgensda
Scrape Google Flights, Google Hotels and vacation rentals in one run: every itinerary with price, stops, layovers, CO2 and return flights; hotels and rentals with nightly price, rating, class, bedrooms and every booking site's offer. Price insights included. Fast HTTP scraper, no browser.
Travel$39/mo3-day free trial