TikTok Profile Videos Scraper avatar

TikTok Profile Videos Scraper

Pricing

from $1.50 / 1,000 video scrapeds

Go to Apify Store
TikTok Profile Videos Scraper

TikTok Profile Videos Scraper

Scrape public TikTok profile videos with captions, metrics, video URLs, music, hashtags, and creator metadata. Provider-backed, no cookies required, MCP ready.

Pricing

from $1.50 / 1,000 video scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

2

Monthly active users

4 days ago

Last modified

Share

TikTok Profile Videos Scraper - Creator Feed Data

TikTok Profile Videos Scraper is an Apify Actor for audiences who already know the creator profile they want to inspect. It accepts one or more public TikTok profile handles or profile URLs and returns one normalized dataset row per video. Each record can include the caption, video URL, publish time, creator metadata, music metadata, hashtags, metrics, and media URLs such as play, download, and no-watermark links when returned by the provider. The result is a creator-feed dataset that is easy to use in spreadsheets, BI tools, and AI workflows through Apify MCP or the Apify API.

Best fit and connected workflows

This Actor fits workflows centered on public TikTok creator feeds:

  • Creator research: gather public profile videos, captions, sounds, and engagement metrics from a known shortlist of creators.
  • Influencer and brand monitoring: track profile-level video activity for public creator accounts.
  • Content analysis: review hashtags, mentions, music, and posting patterns across a profile feed.
  • Lead generation workflows: collect creator metadata for downstream qualification and enrichment.
  • AI-agent pipelines: fetch structured profile-video rows through Apify MCP for summarization, extraction, or routing.

A natural workflow is to start with discovery Actors such as [TikTok Search Scraper - [Videos, Hashtags & Users]](the referenced Actor page) or TikTok Trending Videos Scraper, then pass verified public profile URLs or IDs into this Actor for profile-feed collection.

Practical scenario

Maya is building a weekly creator brief for a marketing team. She starts with a list of public TikTok handles, such as stoolpresidente, and submits them to the Actor with sortBy set to latest and a small maxVideosPerProfile value for a fast review.

The dataset returns rows that include caption, createdAt, playCount, likeCount, shareCount, musicTitle, and videoUrl. Maya spots a post with strong engagement and a relevant hashtag set, then passes the video URL to a reporting workflow for summary and follow-up.

Input

Use profileHandles with handles like nike, @nike, or profile URLs like https://www.tiktok.com/@nike. The other fields help shape feed ordering, pagination, and run size.

Input fields

FieldTypeDefaultDescription
profileHandlesarrayrequiredPublic TikTok creator handles or profile URLs.
providerOrderstringscrapecreators-firstProvider order. ScrapeCreators is the primary provider and SociaVault is the fallback.
maxVideosPerProfileinteger50Maximum videos saved from each profile.
maxPagesPerProfileinteger10Safety cap for provider pagination on each profile.
maxTotalVideosinteger10000Maximum videos across the whole run.
sortBystringlatestProfile feed order, either latest or popular.
regionstringUSAlpha-2 region code used for provider requests.
trimbooleantrueRequests smaller provider payloads when supported.
includeRawDatabooleanfalseAttaches the original provider result to each dataset row.

Focused input example

{
"profileHandles": [
"stoolpresidente"
],
"providerOrder": "scrapecreators-first",
"maxVideosPerProfile": 10,
"maxPagesPerProfile": 1,
"maxTotalVideos": 50,
"sortBy": "latest",
"region": "US",
"trim": true,
"includeRawData": false
}

Output

Each dataset item represents one normalized TikTok profile video record. The schema is flat and consistent so downstream tools can read it without navigating nested provider payloads.

Output fields

FieldDescription
recordTypeRecord category, set to a video row.
sourceTypeRequest source, set to profile feed videos.
providerPublic-data provider that returned the row.
inputOriginal creator handle or profile URL used for the row.
profileHandleRequested creator handle.
sortByFeed order used for the row.
resultPositionPosition within the requested profile feed.
pageProvider page number.
videoIdTikTok video ID.
videoUrlCanonical TikTok video page URL when available.
captionTikTok video caption text.
createdAtPublish timestamp in ISO 8601 format when returned.
authorUsernameTikTok creator handle.
authorNicknameTikTok creator display name.
authorVerifiedCreator verification status when returned.
authorAvatarUrlCreator avatar URL when returned.
authorFollowerCountCreator follower count when returned.
regionRegion code returned for the video.
languageCaption or description language code returned by TikTok.
durationMsVideo duration in milliseconds when available.
widthVideo width in pixels when returned.
heightVideo height in pixels when returned.
coverUrlStatic cover image URL.
dynamicCoverUrlAnimated cover image URL when returned.
playUrlDirect signed TikTok play URL when returned.
downloadUrlDirect signed TikTok download URL when returned.
noWatermarkUrlNo-watermark video URL when returned.
hasWatermarkWhether the returned video URL appears to include a watermark.
isAdWhether TikTok marks the item as an ad.
isPhotoPostWhether the item is a TikTok photo carousel.
imageUrlsImage URLs for photo posts when returned.
playCountTikTok play count.
likeCountTikTok like count.
commentCountTikTok comment count.
shareCountTikTok share count.
collectCountTikTok saves or collects.
downloadCountTikTok download count when returned.
engagementRateApproximate engagement rate from likes, comments, shares, and views.
hashtagsHashtag names attached to the video.
mentionsMentioned TikTok handles parsed from caption metadata.
musicIdTikTok sound or music ID.
musicTitleTikTok sound or song title.
musicAuthorTikTok music artist or sound owner.
musicOriginalWhether the sound is marked as an original TikTok sound.
scrapedAtISO 8601 timestamp when the row was normalized.
rawResultOriginal provider result when raw data is enabled.

Illustrative output record

{
"recordType": "video",
"sourceType": "profile",
"provider": "scrapecreators",
"input": "stoolpresidente",
"profileHandle": "stoolpresidente",
"sortBy": "latest",
"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,
"region": "US",
"language": "en",
"playCount": 589745,
"likeCount": 62522,
"commentCount": 618,
"shareCount": 3585,
"collectCount": 1633,
"engagementRate": 0.1132,
"hashtags": [
"pizza",
"review"
],
"mentions": [
"barstoolsports"
],
"musicTitle": "Never Gonna Give You Up",
"musicAuthor": "Rick Astley",
"musicOriginal": false,
"scrapedAt": "2026-07-08T10:30:00.000Z"
}

How it works

This Actor uses provider-backed public-data endpoints instead of browser sessions. The live contract specifies ScrapeCreators as the recommended primary provider, with SociaVault available as a fallback. It accepts public profile handles or profile URLs, requests a creator feed in the selected sort order and region, normalizes each returned video into a flat dataset row, and records run-level details in the key-value store.

The dataset holds the normalized video rows. The run summary in RUN_SUMMARY captures provider diagnostics, counts, billing counters, and the stop reason.

Pricing

This Actor uses Pay per event pricing plus Apify platform usage.

  • apify-actor-start is charged once per run, scaled by allocated memory.
  • video-scraped is charged for each normalized TikTok profile video record saved to the dataset.

For the current event prices and Apify platform usage, check the live Pricing tab on the Actor page. As an example, a run that saves ten video records triggers ten video-scraped events plus one run-start event.

Use with AI agents (MCP)

This Actor is usable through Apify MCP. It is the Actor khadinakbar/tiktok-profile-videos-scraper, which returns normalized profile-feed video rows that AI agents can read directly from the default dataset.

Tool description: fetch public TikTok creator profile videos from handles or profile URLs, then return structured rows with captions, metrics, media URLs, music, hashtags, and creator metadata.

"Scrape the public TikTok profile feed for @stoolpresidente, return the latest 10 videos, and summarize the captions, engagement metrics, hashtags, and sound metadata for each row."

Output interpretation:

  • Each dataset row represents one video record from a public creator profile.
  • provider shows which public-data provider returned the feed page.
  • videoUrl, playUrl, downloadUrl, and noWatermarkUrl are media pointers returned when available.
  • scrapedAt identifies when the row was normalized.
  • rawResult is available when includeRawData is enabled.

Provenance and scope:

  • Input is limited to public TikTok creator profile handles or profile URLs.
  • The normalized records come from the provider response and are stored in the default dataset.
  • The run summary in RUN_SUMMARY provides provider usage and billing context.

Pagination and cost guidance:

  • maxVideosPerProfile caps how many rows are stored for each creator.
  • maxPagesPerProfile acts as a pagination safety cap.
  • maxTotalVideos caps the entire run across all profile inputs.
  • For agent runs, trim: true and includeRawData: false keep payloads smaller.

API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const run = await client.actor('khadinakbar/tiktok-profile-videos-scraper').call({
profileHandles: ['stoolpresidente', 'nike'],
providerOrder: 'scrapecreators-first',
maxVideosPerProfile: 20,
maxPagesPerProfile: 2,
maxTotalVideos: 100,
sortBy: 'latest',
region: 'US',
trim: true,
includeRawData: false,
});
const dataset = await client.dataset(run.defaultDatasetId).listItems();
console.log('First item:', dataset.items[0]);

Best results and outcome guidance

Use a focused creator list when the goal is profile analysis. A smaller set of public handles makes it easier to compare captions, engagement counts, and posting patterns. When you need a quick review, keep maxPagesPerProfile low and set maxVideosPerProfile to the number of rows you actually plan to inspect. For agent workflows, sortBy: "latest" works well for monitoring fresh posts, while sortBy: "popular" is useful when the workflow centers on higher-performing feed items.

If your workflow begins with discovery rather than known handles, route discovery outputs from the linked search or trending Actors into this Actor using verified public profile URLs or IDs.

Continue the workflow

Design note

I found that the dataset contract includes a normalized engagementRate field alongside playCount, likeCount, commentCount, and shareCount, which makes the output practical for downstream ranking and comparison without extra transformation.

FAQ

When should I use this Actor instead of a search Actor?

Use this Actor when you already have public creator handles or profile URLs and want the profile feed. Use a discovery Actor when you are still searching for accounts, hashtags, or videos.

Can I pass a TikTok profile URL instead of a handle?

Yes. The input accepts handles such as nike, @nike, and full profile URLs such as https://www.tiktok.com/@nike.

Which provider should I choose first?

ScrapeCreators is the recommended primary provider in the live contract, with SociaVault as fallback. You can also set provider-only modes for testing.

What output should I expect for AI workflows?

Each dataset row is one normalized video record with creator metadata, caption text, metrics, music fields, hashtags, and media URLs when returned. That shape works well for extraction, summarization, and routing in AI-agent pipelines.

Responsible use

This Actor is intended for public TikTok profile data. Use the output in line with applicable laws, platform terms, privacy obligations, and content rights. Handle direct media URLs with care because signed URLs can expire. When building automations, keep the run scope aligned with the creator profiles you actually need and review the live Pricing tab before large runs.