TikTok Scraper: Profiles, Latest Videos & Monitoring avatar

TikTok Scraper: Profiles, Latest Videos & Monitoring

Pricing

from $0.60 / 1,000 videos

Go to Apify Store
TikTok Scraper: Profiles, Latest Videos & Monitoring

TikTok Scraper: Profiles, Latest Videos & Monitoring

Scrape TikTok profiles and videos: followers, likes, bio, the latest 10 to 12 videos of each profile, and full stats for any video link. Monitoring returns only new videos.

Pricing

from $0.60 / 1,000 videos

Rating

0.0

(0)

Developer

Stratum ICS

Stratum ICS

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

TikTok Scraper collects TikTok profiles and videos: followers, following, likes, video count, bio and bio link for each profile, plus the profile's latest 10 to 12 videos with views, likes, comments, shares, saves, caption, hashtags, sound and cover. Paste usernames, profile links or video links (short share links and photo posts included) and get clean rows you can export, so it works as a TikTok profile scraper and TikTok video scraper without a TikTok account.

It reads public pages only and never logs in.

What does TikTok Scraper do?

  • Profiles: give it @nasa, nasa or https://www.tiktok.com/@nasa and get one profile row with exact follower, following, like and video counts, the bio, the bio link, the verified badge and the avatar.
  • Latest videos of each profile: the 10 to 12 videos TikTok shows publicly for the profile, pinned ones first, then newest first, each with full stats and a pinned flag.
  • Video links: any video or photo post link, short share links from the app (vm.tiktok.com, vt.tiktok.com) and plain video ids, each giving one video row.
  • Monitoring: run it on a schedule and get only the videos posted since the last run, per profile.

What it does not do: it does not read a profile's full video history, hashtag pages or TikTok search. TikTok only serves those lists to signed requests from a logged-in browser, so this scraper sticks to what public pages show. If you need hundreds of videos per account, this is not the right tool; if you need the latest posts of many accounts, cheaply and on a schedule, it is.

Why use this TikTok scraper?

  • Cheap per result. About $1 per 1,000 videos on the Free plan, a fraction of what the most popular TikTok scrapers charge.
  • No demo limits. Free plan users get the same features and depth as everyone else.
  • Monitoring built in. Turn on "Only new videos" and schedule the run: each run returns only videos posted since you started following the profile, so you never pay twice for the same video.
  • Exact profile counts. Profile rows carry TikTok's exact numbers (2,100,343 followers, not "2.1M").
  • Pinned videos marked. Each profile video says whether the creator pinned it to the top of the profile.
  • Photo posts and short links. Slideshows come with all their image links; short links from the app are followed to the video.
  • Checked against the live site. In testing, 10 of 10 videos had the same author and caption as their pages in Chrome, and likes, comments, shares and saves were within 1% of the numbers the pages showed minutes later (beyond the page's own rounding: 1,015,028 saves show as "1M").
  • You pay for results only. Deleted or private videos, missing accounts, filtered-out videos and errors are never charged.
  • Restart-safe. If the platform moves a run to another server, it continues where it stopped and never stores or charges a row twice.

On top of that you get the Apify platform: scheduled runs, an API, webhooks, run history, and exports to JSON, CSV, Excel and more.

What data can you extract from TikTok?

FieldWhat it holdsExample
typevideo or profilevideo
id, urlTikTok id and link7665075736742530317
description, hashtags, mentionsCaption, its hashtags and @mentionsSomething big just landed on TikTok.
createdAtPosting time, ISO 8601 in UTC2026-07-21T20:09:02.000Z
playCount, likeCount, commentCount, shareCount, collectCount, repostCountViews, likes, comments, shares, saves, reposts1600000, 105200, 3070
duration, width, heightLength in seconds and size in pixels25, 720, 1280
musicId, musicTitle, musicAuthor, musicOriginalThe sound and whether it is the creator's ownoriginal sound, NASA, true
coverUrl, dynamicCoverUrl, videoUrlCover, animated cover and video file links (they expire)https://p19-common-sign.tiktokcdn-us.com/...
isPinned, isAd, isSlideshow, imageUrlsPinned to the profile, ad flag, photo post and its imagestrue, false, false, []
location, locationCreatedTagged place, and the country TikTok gives for the postnull, US
authorUsername, authorNickname, authorFollowers, authorLikes, authorVideoCount, authorBio, authorBioLinkThe creator, on every video rownasa, NASA, 2100000
username, followers, following, likes, videoCount, bio, bioLink, verified, privateAccountProfile rowsnasa, 2100343, 23, 11154945, 57
searchInput, scrapedAtThe input the row came from, and when it was collectednasa

The full list of fields, with descriptions, is on the Dataset tab of the output.

How to scrape TikTok profiles and videos

  1. Open TikTok Scraper in Apify Console and click Try for free.
  2. In Profiles, paste usernames or profile links, one per line.
  3. In Video links, paste video or photo post links, short share links or video ids, one per line.
  4. Optionally set Max videos per profile, a date in Only videos newer than, or turn on monitoring.
  5. Click Start. When the run finishes, download the data as JSON, CSV or Excel, or read it through the API.

How much does it cost to scrape TikTok?

The scraper uses pay-per-event pricing: you pay for each row saved to your dataset, plus a start fee of $0.0005 per run.

EventFree and StarterScaleBusiness
Video saved$1.00 per 1,000 ($0.001 each)$0.80 per 1,000$0.60 per 1,000
Profile saved$2.00 per 1,000 ($0.002 each)$1.50 per 1,000$1.00 per 1,000

The Pricing tab always shows the current prices.

Worked examples on the Free or Starter plan:

  • 100 profiles with their latest videos: 100 profile rows ($0.20) plus about 1,150 videos ($1.15) cost about $1.35.
  • 1,000 video links cost $1.00.
  • A daily monitor of 20 accounts that post one video a day each, with profile rows turned off, saves about 600 videos a month: about $0.62 a month, start fees included.

Set Maximum cost per run in the run options to cap your spend. The scraper stops cleanly at that amount and keeps everything collected so far.

Input

See the Input tab for every option. A typical input:

{
"profiles": ["https://www.tiktok.com/@nasa", "@duolingo"],
"videos": ["https://www.tiktok.com/@duolingo/video/7031193165658950917", "6718335390845095173"],
"maxVideosPerInput": 12,
"includeProfileRows": true,
"newerThan": "30 days"
}
  • Profiles: usernames with or without @, or profile links with or without a query.
  • Video links: full links (/@user/video/<id> or /@user/photo/<id>), short share links, embed links, mobile links or 15 to 21 digit ids. Links that lead to profiles, hashtags or search pages are rejected with a message in the log and the run summary.
  • Max videos per profile: up to 50, but TikTok's public list shows 10 to 12 per profile. Set 0 for profile rows only.
  • Only videos newer than: a date (2026-10-01), an ISO date-time in UTC, or a relative value such as 7 days. It applies to profile videos; video links are always returned.
  • Monitoring: turn on Only new videos and give each schedule its own Monitor name.

Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. Three rows from a real run (long links and the long caption shortened): a profile row, the profile's pinned video, and a photo post.

[
{
"type": "profile",
"id": "7664638705177150477",
"username": "nasa",
"nickname": "NASA",
"url": "https://www.tiktok.com/@nasa",
"secUid": "MS4wLjABAAAAU9BRVzC8oCaegVnia8IbqWhPb_-dbU7s00Y3wS1_Nx8g5RUaYvyXrpejgjdxTwd6",
"verified": true,
"privateAccount": false,
"followers": 2100343,
"following": 23,
"likes": 11154945,
"videoCount": 57,
"avatar": "https://p19-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/e5143212a59c09a008bf50f487d54d1f~...",
"bio": "Making the seemingly impossible, possible.✨",
"bioLink": "https://science.nasa.gov/feature/artemis-ii-preliminary-lunar-science-report",
"language": "en",
"searchInput": "nasa",
"scrapedAt": "2026-10-18T05:57:15.342Z"
},
{
"type": "video",
"id": "7665075736742530317",
"url": "https://www.tiktok.com/@nasa/video/7665075736742530317",
"description": "Something big just landed on TikTok.",
"hashtags": [],
"mentions": [],
"createdAt": "2026-07-21T20:09:02.000Z",
"duration": 25,
"playCount": 1600000,
"likeCount": 105200,
"commentCount": 3070,
"shareCount": 3275,
"collectCount": 7637,
"repostCount": 0,
"musicId": "7665075815390645006",
"musicTitle": "original sound",
"musicAuthor": "NASA",
"musicOriginal": true,
"coverUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast5-p-0068-tx/oAUhkWfCZC7g6ALj2HZgOeELFvIrALeFYOoGI4~...",
"dynamicCoverUrl": "https://p16-common-sign.tiktokcdn-us.com/tos-useast5-p-0068-tx/ogCUKkOrAAd2Hj0YAgL4vokGZeO7Ze6IHICFfg~...",
"videoUrl": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c001-tx/okRjOkUA6WdCIZ4fGHgZ7vLlpMACrAe2IoIzOf/?...",
"width": 720,
"height": 1280,
"isAd": false,
"isPinned": true,
"isSlideshow": false,
"imageUrls": [],
"location": null,
"locationCreated": "US",
"authorUsername": "nasa",
"authorNickname": "NASA",
"authorId": "7664638705177150477",
"authorSecUid": "MS4wLjABAAAAU9BRVzC8oCaegVnia8IbqWhPb_-dbU7s00Y3wS1_Nx8g5RUaYvyXrpejgjdxTwd6",
"authorVerified": true,
"authorFollowers": 2100000,
"authorLikes": 11200000,
"authorVideoCount": 57,
"authorAvatar": "https://p19-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/e5143212a59c09a008bf50f487d54d1f~...",
"authorBio": "Making the seemingly impossible, possible.✨",
"authorBioLink": "https://science.nasa.gov/feature/artemis-ii-preliminary-lunar-science-report",
"searchInput": "nasa",
"scrapedAt": "2026-10-18T05:57:16.686Z"
},
{
"type": "video",
"id": "7691751766538341663",
"url": "https://www.tiktok.com/@scout2015/photo/7691751766538341663",
"description": "Yesterday Shelly and I went out to lunch. The weather was perfect, we ordered lobster rolls, ...",
"hashtags": [],
"mentions": [],
"createdAt": "2026-10-01T17:25:36.000Z",
"duration": null,
"playCount": 2714,
"likeCount": 182,
"commentCount": 13,
"shareCount": 0,
"collectCount": 12,
"repostCount": 0,
"musicId": "7674965718159084308",
"musicTitle": "original sound",
"musicAuthor": "user19384491",
"musicOriginal": true,
"coverUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast8-i-photomode-tx2/67c4634c1e524052b05d91703afb9341~...",
"dynamicCoverUrl": null,
"videoUrl": null,
"width": 2160,
"height": 2880,
"isAd": false,
"isPinned": false,
"isSlideshow": true,
"imageUrls": [
"https://p19-common-sign.tiktokcdn-us.com/tos-useast8-i-photomode-tx2/67c4634c1e524052b05d91703afb9341~...",
"https://p16-common-sign.tiktokcdn-us.com/tos-useast8-i-photomode-tx2/724b03bbda68462e94539c4e15d7aa76~...",
"https://p19-common-sign.tiktokcdn-us.com/tos-useast8-i-photomode-tx2/441778df082141369b7615203dc49fbe~...",
"https://p19-common-sign.tiktokcdn-us.com/tos-useast8-i-photomode-tx2/a0dbf490f11f4c60b9c5dfb006b153b2~..."
],
"location": null,
"locationCreated": "US",
"authorUsername": "scout2015",
"authorNickname": "Scout, Suki & Stella",
"authorId": "53279706535428096",
"authorSecUid": "MS4wLjABAAAAPZWNdkF_cmVSPCvV0Y6MCsH29mlAOlMOX3ikzGvlfMm3K6OMZv-JrRImpEHxdIMI",
"authorVerified": true,
"authorFollowers": 9000000,
"authorLikes": 108300000,
"authorVideoCount": 3076,
"authorAvatar": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-avt-0068-tx2/4cbe05e194623e3f19aef975d9fdf26c~...",
"authorBio": "🐾Click follow to join the PAWsitive Pack🐾\nMore👇💞",
"authorBioLink": "https://Scout2015.com",
"searchInput": "@scout2015",
"scrapedAt": "2026-10-18T05:57:18.048Z"
}
]

Each run also saves a SUMMARY record in its key-value store with, for every input, its status, where the profile row came from, how many videos were listed, chosen and saved, and any problem.

Monitoring new videos

  1. Turn on Only new videos (monitoring mode) and enter a Monitor name, for example competitors.
  2. Run it once. This first run sets the starting point and returns the profiles' videos like a normal run.
  3. Schedule the same input (hourly or daily). Each later run returns only videos posted after the first run that it has not delivered before. When there is nothing new, the run ends with "No new videos since the last run".

New posts appear at the top of a profile's public list, so the latest 10 to 12 videos are enough to catch them, as long as an account posts fewer than about 10 videos between two runs. The memory is a key-value store in your account named tiktok-scraper-monitor-<name>. Video links are not affected by monitoring and are returned on every run. Turn off Save a profile row per profile if you only want the new videos.

Tips for scraping TikTok

  • Track growth over time. Schedule a daily run with profile rows on and compare followers, likes and videoCount between runs.
  • Follow competitors' posts. Use monitoring with profile rows off: you pay only for the new videos.
  • Need the images or covers? Download them right after the run: TikTok signs media links and they stop working after a few hours to a day.
  • Mixing many accounts? Every video row carries the creator's username, followers and bio, so you can group and filter in one sheet.

Integrations and API

  • API: start runs and read results over HTTP from any language. See the API tab for ready-made requests.
  • JavaScript:
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('stratumics/tiktok-scraper').call({
profiles: ['@nasa', '@duolingo'],
maxVideosPerInput: 12,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((item) => item.type === 'video').map((item) => [item.authorUsername, item.playCount]));
  • Python:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("stratumics/tiktok-scraper").call(
run_input={"profiles": ["nasa"], "videos": ["https://www.tiktok.com/@duolingo/video/7031193165658950917"]}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item["type"] == "profile":
print(item["username"], item["followers"], item["videoCount"])
else:
print(item["createdAt"], item["likeCount"], (item["description"] or "")[:60])
  • No-code tools: connect runs to Zapier, Make, n8n, Google Sheets, Slack or your own webhook from the Integrations tab, for example to post every new video of a competitor into a team channel.
  • AI agents: add the Actor to any agent or chat app that supports the Model Context Protocol through the Apify MCP server at https://mcp.apify.com?tools=stratumics/tiktok-scraper, then ask in plain words, such as "get the latest videos of these five accounts and tell me which one got the most views per follower".

FAQ

Why do I get only 10 to 12 videos per profile?

That is how many videos TikTok shows to anyone who is not signed in, through the profile's public embed. TikTok serves longer lists only to signed requests made by a logged-in browser session, which this scraper does not use. The 10 to 12 are the profile's pinned videos and its newest posts.

No. TikTok gives hashtag and search lists only to signed requests, so they are not supported. Paste profiles or video links instead.

Why are some numbers round, like 105,200 likes?

TikTok itself rounds video counts on its web pages once they pass 10,000 (it shows "105.2K"), and the scraper returns what TikTok sends. Comment and save counts are often exact. Profile rows use TikTok's exact profile counts; the creator counts on video rows are TikTok's rounded ones.

Does it need a TikTok account, cookies or a proxy?

No account and no cookies. No proxy by default: TikTok's public pages answered Apify's servers without one in testing (over 150 requests in one run, none refused). If TikTok starts refusing, the scraper switches to Apify datacenter proxy by itself, and you can pick your own proxy in the input.

What happens with private accounts, deleted videos or wrong usernames?

A username that does not exist, or an account TikTok banned, is skipped with a message. Deleted, private and age-restricted videos (which TikTok shows only to signed-in viewers) are skipped with the reason. None of them are charged, and the rest of the run carries on.

Can I download the video files?

The videoUrl field holds TikTok's video link, but it expires within hours and may need TikTok's cookies to play. The scraper does not download video files.

Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

The personal data in the output is the public profile information of the accounts you ask for and of the creators of the videos you ask for: username, display name, user id, avatar link, bio, bio link and public counts. No followers, commenters, contact details or private data are collected. TikTok is a trademark of its owner, and this tool is not affiliated with or endorsed by TikTok.

Something looks wrong. Where do I report it?

Open an issue on the Issues tab with the run link and the profile or video. Most problems can be reproduced and fixed quickly.

Other tools from Stratum ICS

  • Airbnb Scraper: Get every Airbnb listing in a city or from listing links: price per night, rating, reviews, guests, bedrooms, host and Superhost status.
  • App Store Reviews Scraper: Get Apple App Store reviews with star ratings, titles, text, app versions, helpful votes and developer replies, well past Apple's 500-review limit, for any country, plus app ratings.
  • Bilibili Scraper: Scrape Bilibili videos by search, link or uploader without logging in: views, likes, coins, tags, uploader profiles, comments with replies and danmaku, in clean rows.
  • Facebook Ads Library Scraper: Get ads from the Meta (Facebook) Ad Library by keyword, advertiser page or library link: texts, images, videos, dates, platforms and versions, plus spend for political ads.
  • Facebook Posts Scraper: Get posts from public Facebook pages: text, reactions by type, comments, shares, views and media, plus page details with followers, contacts, rating and creation date.
  • Google Ads Transparency Scraper: Get the ads any advertiser runs on Google Search, YouTube, Shopping, Maps and Play, from the Ads Transparency Center: images, formats, dates, regions and EU reach.
  • Google Maps Reviews Scraper: Get the Google Maps reviews of any place: rating, full text, exact date, photos, owner reply, reviewer details and food or service scores.
  • Google Maps Scraper: Get the businesses on Google Maps for any search and area: name, address, phone, website, rating, review count, opening hours, plus emails and social profiles.
  • Google News Scraper: Get Google News articles with real publisher URLs (not Google redirects), source, date, image, author and optional full text.
  • Google Play Reviews Scraper: Get Google Play reviews with star ratings, text, app versions, thumbs-up counts, developer replies and feature ratings in any language, plus app details with installs and star histogram.
  • Google Trends Scraper: Get Google Trends data as JSON, CSV or Excel: interest over time, interest by region and city, related queries, and trending searches by country.
  • Instagram Scraper: Scrape public Instagram profiles, posts, reels and comments without logging in: followers, bio, posts count, captions, likes, video views, media links, tags and music.
  • LinkedIn Jobs Scraper: Scrape LinkedIn jobs with full descriptions, salary ranges, seniority, job type and applicant counts.
  • Reddit Scraper: Get Reddit posts and full comment threads from subreddits, searches, user profiles and post links: titles, text, scores, flair, media and replies.
  • Telegram Channel Scraper: Get messages from public Telegram channels with views, dates, media, reactions, polls and forwards, plus channel info with exact subscriber counts.
  • Threads Scraper: Scrape Threads profiles, posts, replies and keyword search: followers, bio, post text, likes, replies, reposts, quotes, media and links.
  • TikTok Comments Scraper: Export TikTok comments and replies from any video or photo post: text, date, likes, reply count, commenter, pinned and creator-liked flags, plus video stats.
  • Website Contact Scraper: Turn a list of websites into one row per company with verified emails, formatted phone numbers, social profiles (LinkedIn, Facebook, Instagram, X), address and contact page.
  • YouTube Scraper: Get YouTube videos from searches, channels, playlists and links with exact views, likes, comment counts, dates and tags, plus channel profiles and comments.
  • YouTube Transcript Scraper: Get YouTube transcripts and captions as plain text, timed segments, SRT or WebVTT, from video links, whole channels or playlists, in any language YouTube offers.