TikTok Video Scraper - Video Details & Profile Feeds avatar

TikTok Video Scraper - Video Details & Profile Feeds

Pricing

from $5.00 / 1,000 scraped tiktok videos

Go to Apify Store
TikTok Video Scraper - Video Details & Profile Feeds

TikTok Video Scraper - Video Details & Profile Feeds

Scrape TikTok video details, captions, metrics, direct video URLs, transcripts, music, hashtags, and creator profile videos. Provider-backed, no cookies required, perfect for SEO and AI agents, MCP optimized.

Pricing

from $5.00 / 1,000 scraped tiktok videos

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

21 hours ago

Last modified

Share

Scrape TikTok video details from direct video URLs and creator profile feeds. This Apify Actor returns one normalized record per video with captions, engagement metrics, author fields, music metadata, hashtags, direct video URLs, transcript text when requested, and provider-hosted media URLs when enabled. The dataset is designed for AI agents, SEO workflows, social listening, creator research, and structured downstream processing through Apify or Apify MCP.

Accepted input includes one or more TikTok video URLs, creator profile handles, or profile URLs. For each returned video, one dataset item represents a single TikTok record, including fields such as videoUrl, caption, authorUsername, playCount, likeCount, commentCount, shareCount, musicTitle, and scrapedAt. The outcome is a clean dataset of TikTok video rows plus a run summary with provider usage and billing counters.

Best fit and connected workflows

This Actor fits workflows that start with a known TikTok video or a known creator profile and need structured video details.

Common routing patterns:

  • Start with TikTok Search Scraper - [Videos, Hashtags & Users] when you need discovery by query, hashtag, or user search, then pass the verified video URL into this Actor for detailed extraction.
  • Start with TikTok Trending Videos Scraper when you need trending discovery, then hand selected video URLs to this Actor for normalized records.
  • Use this Actor when the workflow already has a direct video URL or a creator feed and the next step is enrichment for analytics, content review, or agent reasoning.

Practical scenario

Maya, a social media analyst, already has a TikTok video URL from a campaign report and a creator handle from the same account. She runs this Actor with the video URL, the profile handle, getTranscript enabled, and sortBy set to latest.

The returned row includes the caption, author username, verified status, views, likes, comments, shares, music title, and transcript text when available. Maya uses the caption, transcript, and engagementRate fields to compare messaging across posts, then sends the most relevant video URL to a content team for review.

Input

Input fields

FieldTypeDefaultPurpose
videoUrlsarray[]Direct TikTok video URLs to inspect one by one.
profileHandlesarray[]Creator handles or profile URLs for recent or popular profile-feed videos.
providerOrderstringscrapecreators-firstProvider order for public-data lookup.
maxVideosPerProfileinteger50Cap for saved videos from each profile.
maxPagesPerProfileinteger10Pagination cap for provider-backed profile feeds.
maxTotalVideosinteger10000Whole-run safety and billing guard.
sortBystringlatestProfile sorting when supported by the provider.
regionstringUSAlpha-2 region code used in provider requests.
getTranscriptbooleanfalseInclude transcript text for direct video URLs when available.
downloadMediabooleanfalseRequest provider-hosted permanent media URLs.
trimbooleantrueRequest a smaller provider payload.
includeRawDatabooleanfalseAttach the original provider payload to each dataset row.

Focused input example

{
"videoUrls": [
"https://www.tiktok.com/@stoolpresidente/video/7324105620095765765"
],
"profileHandles": [
"stoolpresidente"
],
"providerOrder": "scrapecreators-first",
"maxVideosPerProfile": 5,
"maxPagesPerProfile": 1,
"maxTotalVideos": 100,
"sortBy": "latest",
"region": "US",
"getTranscript": true,
"downloadMedia": false,
"trim": true,
"includeRawData": false
}

Output

Each dataset item is one normalized TikTok video record. The overview dataset view highlights videoUrl, authorUsername, caption, views, likes, comments, shares, noWatermarkUrl, musicTitle, and createdAt.

Output fields

FieldDescription
recordTypeRecord category, such as video.
sourceTypedirect for video URLs, profile for creator feeds.
providerProvider that returned the source data.
inputOriginal URL or handle that produced the row.
profileHandleCreator handle for profile-feed rows.
sortBySort order used for the profile-feed row.
resultPositionPosition in the returned result set.
pageProvider page number for the row.
videoIdTikTok video ID.
videoUrlCanonical TikTok video page URL.
captionTikTok caption text.
createdAtPublished timestamp when returned.
authorUsernameTikTok creator handle.
authorNicknameTikTok creator display name.
authorVerifiedVerified status returned by TikTok.
authorFollowerCountCreator follower count when provided.
regionRegion code returned for the video.
durationMsVideo duration in milliseconds when available.
coverUrlStatic cover image URL.
playUrlDirect signed play URL.
downloadUrlDirect signed download URL when returned.
noWatermarkUrlNo-watermark video URL when returned.
downloadedMediaUrlsProvider-hosted permanent media URLs when enabled.
transcriptTranscript text, usually WEBVTT, for direct URL requests when enabled.
isAdAd marker returned by TikTok.
isPhotoPostIndicates a photo carousel.
imageUrlsImage URLs for photo posts.
playCountViews.
likeCountLikes.
commentCountComments.
shareCountShares.
collectCountSaves.
engagementRateApproximate engagement rate.
hashtagsHashtags attached to the video.
musicIdSound or music ID.
musicTitleSound or song title.
musicAuthorMusic artist or sound owner.
scrapedAtTimestamp when the row was normalized.

Illustrative output record

{
"recordType": "video",
"sourceType": "direct",
"provider": "scrapecreators",
"input": "https://www.tiktok.com/@stoolpresidente/video/7324105620095765765",
"profileHandle": null,
"sortBy": null,
"resultPosition": 1,
"page": 1,
"videoId": "7324105620095765765",
"videoUrl": "https://www.tiktok.com/@stoolpresidente/video/7324105620095765765",
"caption": "All right. Pizza review time",
"createdAt": "2024-01-14T23:51:05.000Z",
"authorUsername": "stoolpresidente",
"authorNickname": "Dave Portnoy",
"authorVerified": true,
"authorFollowerCount": 3900000,
"region": "US",
"durationMs": 210155,
"coverUrl": "https://p16-sign.tiktokcdn-us.com/...",
"playUrl": "https://v45.tiktokcdn-eu.com/...",
"downloadUrl": "https://v45.tiktokcdn-eu.com/...",
"noWatermarkUrl": "https://v45.tiktokcdn-eu.com/...",
"downloadedMediaUrls": [],
"transcript": "WEBVTT\n\n00:00:00.140 --> 00:00:04.020\nAll right. Pizza review time",
"isAd": false,
"isPhotoPost": false,
"imageUrls": [],
"playCount": 589745,
"likeCount": 62522,
"commentCount": 618,
"shareCount": 3585,
"collectCount": 1633,
"engagementRate": 0.1132,
"hashtags": ["pizza", "review"],
"musicId": "7324105763793668870",
"musicTitle": "Never Gonna Give You Up",
"musicAuthor": "Rick Astley",
"scrapedAt": "2026-06-12T10:30:00.000Z"
}

How it works

This Actor uses provider-backed public-data APIs rather than browser scraping. The live contract shows these provider options:

  • scrapecreators-first
  • sociavault-first
  • scrapecreators-only
  • sociavault-only

The default execution behavior prefers ScrapeCreators and falls back to SociaVault. The Actor supports:

  • direct video URL requests,
  • creator profile feed pagination,
  • transcript retrieval for direct video URLs when enabled,
  • optional permanent media URLs,
  • optional raw provider payloads for debugging.

Normalized rows are written to the default dataset. Run-level diagnostics are stored in the key-value store under RUN_SUMMARY, including provider usage, counts, billing counters, and stop reason.

Pricing

This Actor uses Pay per event plus Apify platform usage.

Charged events from the live contract:

  • apify-actor-start - charged once per run, scaled by allocated memory
  • video-scraped - charged for each normalized TikTok video row saved
  • media-downloaded - charged when permanent provider-hosted media URLs are returned

Example in words: if a run saves twenty video rows and no permanent media URLs are returned, the billing includes twenty video-scraped events plus one actor start event. If permanent media URLs are returned for some rows, each of those rows also adds a media-downloaded event.

For current pricing details, always check the live Pricing tab on the Apify Actor page.

Use with AI agents (MCP)

This Actor is available through Apify MCP as a tool for retrieving structured TikTok video data from known video URLs and creator profile feeds.

Exact Actor identity: khadinakbar/tiktok-video-scraper

Tool description:

  • Input: direct TikTok video URLs and creator profile handles or profile URLs
  • Output: normalized TikTok video rows with metadata, metrics, media URLs, transcript text when requested, and source fields for provenance
  • Scope: public TikTok data returned by the configured provider order
  • Pagination: creator feeds can page through provider results up to maxPagesPerProfile
  • Cost guidance: each saved row triggers a video-scraped event; returned permanent media URLs trigger media-downloaded

Collect the video details for these TikTok URLs, include transcript text when available, and return the dataset rows in a structured format for downstream analysis.

When used by agents, the most useful interpretation is:

  • videoUrl and input identify provenance,
  • sourceType distinguishes direct URLs from profile-feed rows,
  • page and resultPosition show how the row was produced,
  • scrapedAt marks normalization time,
  • RUN_SUMMARY provides run-level diagnostics and billing context.

Apify API example

import { ApifyClient } from "apify-client";
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const actorId = "khadinakbar/tiktok-video-scraper";
const input = {
videoUrls: ["https://www.tiktok.com/@stoolpresidente/video/7324105620095765765"],
profileHandles: ["stoolpresidente"],
getTranscript: true,
providerOrder: "scrapecreators-first",
maxVideosPerProfile: 5,
maxPagesPerProfile: 1,
region: "US",
};
const run = await client.actor(actorId).call(input);
const datasetId = run.defaultDatasetId;
const { items } = await client.dataset(datasetId).listItems({ clean: true, limit: 100 });
console.log("Run ID:", run.id);
console.log("Rows:", items.length);
console.log(items);

Best results and outcome guidance

Use direct video URLs when the target video is already known. Use profileHandles when you want recent or popular videos from a creator feed. Set sortBy to latest for recency or popular when the provider supports popularity ordering. Use getTranscript for direct URL rows when transcript text helps with analysis or agent reasoning. Keep trim enabled for faster, smaller payloads, and enable includeRawData only when you need original provider payloads for debugging or field inspection.

For media work, playUrl, downloadUrl, and noWatermarkUrl are signed URLs and can expire. Permanent provider-hosted media URLs are returned only when downloadMedia is enabled and the provider returns them. region is an alpha-2 code used to localize provider requests.

Design note

I found that the live dataset contract returns one normalized video record per dataset item, and that the required fields are recordType, sourceType, provider, resultPosition, page, and scrapedAt. That shape makes the output easy to read in tables and easy for agents to process row by row.

FAQ

When should I use videoUrls versus profileHandles?

Use videoUrls when you already have the exact TikTok video page. Use profileHandles when you want a creator's feed, recent videos, or popular videos from a public profile.

Which provider order should I choose?

The default scrapecreators-first order is the standard path in the live contract. You can switch to sociavault-first, scrapecreators-only, or sociavault-only when you want a specific provider path.

How are direct video URLs different from profile feeds?

Direct video URLs return one row per requested video. Profile feeds return multiple rows, one for each saved video from the creator profile, controlled by maxVideosPerProfile and maxPagesPerProfile.

What output should AI agents use first?

Agents usually start with videoUrl, caption, authorUsername, playCount, likeCount, commentCount, shareCount, musicTitle, and transcript when transcript text is enabled.

Where is run-level billing and provider information stored?

The output schema points to RUN_SUMMARY in the key-value store. The live contract describes that summary as holding provider usage, counts, cost estimate, and stop reason.

Responsible use

Use this Actor for public TikTok data returned by the configured providers and for workflows that respect applicable laws, platform terms, privacy obligations, and content rights. Review the returned fields before republishing media or using the output in regulated or rights-sensitive workflows.