TikTok Profile Posts Scraper - Creator Feed Data avatar

TikTok Profile Posts Scraper - Creator Feed Data

Pricing

from $1.50 / 1,000 post scrapeds

Go to Apify Store
TikTok Profile Posts Scraper - Creator Feed Data

TikTok Profile Posts Scraper - Creator Feed Data

Scrape public TikTok profile posts with captions, engagement, media, hashtags, music, and creator metadata. Provider-backed, no cookies, MCP ready.

Pricing

from $1.50 / 1,000 post scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

9

Total users

3

Monthly active users

4 days ago

Last modified

Share

TikTok Profile Posts Scraper is an Apify Actor for public creator feeds. It accepts TikTok profile handles or full profile URLs and returns one normalized dataset row per post. Each record can include the post caption, engagement counts, media URLs, creator metadata, hashtags, music details, and source metadata such as provider, profile handle, feed sort order, result position, and page number. The Actor is usable through Apify MCP and is built for workflows that need structured TikTok profile-post data from public profiles.

The accepted input is a list of public creator profiles, either as handles like nike and @nike or as profile URLs like https://www.tiktok.com/@nike. One dataset record means one normalized TikTok post from a creator profile feed. Valuable fields include caption, playCount, likeCount, commentCount, shareCount, collectCount, hashtags, musicTitle, authorNickname, authorVerified, videoUrl, and createdAt. The outcome is a clean post dataset that can be read directly by spreadsheets, BI tools, and AI agents.

Best fit and connected workflows

This Actor fits workflows that start from a known TikTok creator profile and need that creator's public posts in a clean, machine-readable form.

Use it when you want to:

  • collect recent or popular posts from one or more public profiles,
  • enrich creator research with captions, views, likes, comments, shares, saves, and music metadata,
  • track public profile feeds for social listening or content analysis,
  • feed creator-post rows into spreadsheets, BI tools, automations, or AI agents,
  • chain discovery into enrichment by pairing it with related TikTok discovery Actors.

For discovery-first workflows, start with one of these verified related Actors and pass the verified public profile URL or ID into this Actor for profile-feed enrichment:

  • Use [TikTok Search Scraper - [Videos, Hashtags & Users]](the referenced Actor page) for discovering TikTok records before profile enrichment.
  • TikTok Trending Videos Scraper for finding trending TikTok records that can then be followed up at the creator profile level.

Practical scenario

Maya, a social media analyst, starts with the handle stoolpresidente and wants a structured view of public creator-post activity. She runs the Actor with the handle, a latest-first sort order, and a small page cap for a quick review. The dataset returns fields such as caption, playCount, likeCount, commentCount, shareCount, musicTitle, createdAt, and videoUrl. Maya uses those rows to spot a recent post theme, then opens the returned video URLs and shares the feed export with her team for follow-up analysis.

Input

The Actor accepts public TikTok creator profile handles or profile URLs.

Input fields

FieldTypeDefaultDescription
profileHandlesarray of stringsrequiredPublic TikTok handles or profile URLs for one or more creator profiles.
providerOrderstringscrapecreators-firstProvider order for public-data requests.
maxPostsPerProfileinteger50Maximum posts saved from each profile.
maxPagesPerProfileinteger10Safety cap for provider pagination per profile.
maxTotalPostsinteger10000Whole-run cap across all profiles in the input.
sortBystringlatestCreator-feed ordering: latest or popular.
regionstringUSAlpha-2 region code used in provider requests.
trimbooleantrueRequests smaller provider payloads when supported.
includeRawDatabooleanfalseAttaches the original provider payload to each row when enabled.

Focused input example

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

Output

Each dataset item is one normalized TikTok profile post record. The default dataset stores the rows, while OUTPUT and RUN_SUMMARY are available in the key-value store for run-level status, counts, provider diagnostics, and billing context.

Output fields

FieldDescription
recordTypeRecord category for the dataset row.
sourceTypeSource context for the row, such as profile feed.
providerPublic-data provider that returned the feed page.
inputOriginal handle or profile URL that produced the row.
profileHandleRequested creator handle for the row.
sortByFeed order used for the row.
resultPositionPosition within the requested creator feed.
pageProvider page number that returned the row.
videoIdTikTok video ID.
videoUrlCanonical TikTok video URL when available.
captionTikTok video caption text.
createdAtVideo publish timestamp in ISO format when returned.
authorUsernameTikTok creator handle.
authorNicknameTikTok creator display name.
authorVerifiedVerification flag returned for the creator.
authorAvatarUrlCreator avatar image URL when returned.
authorFollowerCountCreator follower count when returned.
regionTikTok region code returned for the row.
languageCaption or description language code when returned.
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.
hasWatermarkWatermark flag when known.
isAdAd flag returned by TikTok.
isPhotoPostIndicates a photo carousel post.
imageUrlsImage URLs for photo posts when returned.
playCountTikTok play count.
likeCountTikTok like count.
commentCountTikTok comment count.
shareCountTikTok share count.
collectCountTikTok save or collect count.
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.
musicAuthorMusic artist or sound owner.
musicOriginalIndicates whether the sound is marked as original.
scrapedAtISO timestamp when the row was normalized.
rawResultOriginal provider response when raw data is enabled.

Illustrative output record

{
"recordType": "post",
"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,
"authorFollowerCount": 3900000,
"region": "US",
"language": "en",
"durationMs": 210155,
"width": 1080,
"height": 1920,
"coverUrl": "https://p16-sign.tiktokcdn-us.com/cover.jpeg",
"dynamicCoverUrl": "https://p16-sign.tiktokcdn-us.com/dynamic-cover.webp",
"playUrl": "https://v45.tiktokcdn-eu.com/video.mp4",
"downloadUrl": "https://v45.tiktokcdn-eu.com/download.mp4",
"noWatermarkUrl": "https://v45.tiktokcdn-eu.com/no-watermark.mp4",
"hasWatermark": false,
"isAd": false,
"isPhotoPost": false,
"imageUrls": [],
"playCount": 589745,
"likeCount": 62522,
"commentCount": 618,
"shareCount": 3585,
"collectCount": 1633,
"downloadCount": 82,
"engagementRate": 0.1132,
"hashtags": [
"pizza",
"review"
],
"mentions": [
"barstoolsports"
],
"musicId": "7324105763793668870",
"musicTitle": "Never Gonna Give You Up",
"musicAuthor": "Rick Astley",
"musicOriginal": false,
"scrapedAt": "2026-07-08T10:30:00.000Z"
}

How it works

This Actor uses public-data providers instead of browser sessions. The live contract shows two provider paths:

  • ScrapeCreators as the recommended primary provider
  • SociaVault as the fallback provider

The Actor requests public creator-feed pages, normalizes the provider response into one record per post, and writes those records to the default dataset. The output schema also exposes OUTPUT and RUN_SUMMARY, which makes it practical to inspect the run outcome, provider usage, counts, and billing context after execution.

The input schema also exposes a trim option for smaller provider payloads and an optional raw-data mode for debugging field drift or custom parsing.

Pricing

This Actor uses Pay per event pricing and also follows Apify platform usage billing. The live Pricing tab is the source of truth for current pricing details.

Billing is event-based:

  • one Actor start event is charged per run, scaled by allocated memory,
  • one Post scraped event is charged for each validated normalized TikTok profile post persisted to the dataset.

For example, a run that persists ten posts charges ten post-scraped events plus one Actor start event, and a run that persists one hundred posts charges one hundred post-scraped events plus one Actor start event. Check the live Pricing tab in Apify Console for current event prices and platform usage details.

Use with AI agents (MCP)

This Actor is available through Apify MCP, which means an AI agent can call it as a tool to fetch structured TikTok creator-feed rows.

Tool description: retrieve normalized public TikTok profile-post records from one or more creator handles or profile URLs, with captions, engagement metrics, media URLs, hashtags, music metadata, and creator metadata.

Exact Actor identity: khadinakbar/tiktok-profile-posts-scraper

Scrape these public TikTok creator profiles and return the latest posts as structured rows. Use the profile handles stoolpresidente and nike, keep the page cap low for a quick check, and include the dataset output so I can read captions, views, likes, comments, shares, music, and post URLs.

Output interpretation:

  • results is the default dataset of normalized post rows.
  • runSummary contains provider usage, counts, stop reason, and billing context.
  • output is the compact machine-readable run record.
  • rawResult appears only when includeRawData is enabled.

Provenance and scope:

  • Each row comes from a public creator feed request.
  • The dataset row preserves the provider source and request context.
  • The Actor focuses on profile feeds, so it is a good fit when the agent already knows the creators to inspect.

Pagination and cost guidance:

  • maxPagesPerProfile is a safety cap for provider pagination.
  • maxPostsPerProfile is the main per-profile billing guard.
  • maxTotalPosts caps the whole run across all profile inputs.
  • For agent flows, start small and increase the caps only when the workflow needs more rows.

API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const run = await client.actor('khadinakbar/tiktok-profile-posts-scraper').call({
profileHandles: ['stoolpresidente'],
providerOrder: 'scrapecreators-first',
maxPostsPerProfile: 10,
maxPagesPerProfile: 1,
maxTotalPosts: 50,
sortBy: 'latest',
region: 'US',
trim: true,
includeRawData: false,
});
const dataset = await client.dataset(run.defaultDatasetId).listItems();
console.log(dataset.items[0]);

Best results and outcome guidance

Use one handle or a small list first when you are checking feed shape, provider behavior, or a new integration. Keep the page cap aligned with the amount of history you actually need, and use the total-post cap when you are running multiple creators in one batch. If you want a narrower payload for automation, keep trim enabled. If you need provider payload inspection for debugging or custom parsing, enable includeRawData for that run.

I found that the output schema includes OUTPUT and RUN_SUMMARY alongside the dataset, which makes it straightforward to combine row-level post data with run-level diagnostics in one workflow.

Continue the workflow

Design note

I found that profileHandles is the only required input field, while providerOrder, sortBy, trim, and includeRawData are all optional defaults. That makes the Actor easy to start with a single creator handle and then tune for pagination, payload size, and provider selection as needed.

FAQ

Can I use profile URLs instead of handles?

Yes. The input accepts public profile handles like nike or @nike, as well as full profile URLs.

Which provider runs first?

The default order is scrapecreators-first, with SociaVault as fallback. You can also choose a single provider or reverse the order in the input.

Does the Actor return one record per post?

Yes. The dataset contract says this Actor returns one normalized TikTok post record per dataset item.

Those verified related Actors are discovery-oriented. This Actor is profile-feed oriented and works well after you already know the creator handle or profile URL you want to enrich.

Can I use this in an Apify MCP workflow?

Yes. This Actor is MCP ready and can be called as an Apify MCP tool for structured profile-feed retrieval.

What fields are most useful for analysis?

Common analysis fields include caption, createdAt, playCount, likeCount, commentCount, shareCount, engagementRate, hashtags, musicTitle, authorNickname, and videoUrl.

How does the pricing model relate to dataset rows?

Each validated normalized post persisted to the dataset is charged as a Post scraped event, while the run itself also includes one Actor start event. The live Pricing tab shows the current event prices and Apify platform usage details.

Responsible use

Use this Actor only for public TikTok profile data and handle the output in line with applicable laws, platform terms, privacy obligations, and content rights. The direct media URLs in the dataset can expire, so capture or process them promptly if your workflow depends on them.