TikTok Profile Posts Scraper - Creator Feed Data
Pricing
from $1.50 / 1,000 post scrapeds
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
Maintained by CommunityActor stats
0
Bookmarked
9
Total users
3
Monthly active users
4 days ago
Last modified
Categories
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
| Field | Type | Default | Description |
|---|---|---|---|
profileHandles | array of strings | required | Public TikTok handles or profile URLs for one or more creator profiles. |
providerOrder | string | scrapecreators-first | Provider order for public-data requests. |
maxPostsPerProfile | integer | 50 | Maximum posts saved from each profile. |
maxPagesPerProfile | integer | 10 | Safety cap for provider pagination per profile. |
maxTotalPosts | integer | 10000 | Whole-run cap across all profiles in the input. |
sortBy | string | latest | Creator-feed ordering: latest or popular. |
region | string | US | Alpha-2 region code used in provider requests. |
trim | boolean | true | Requests smaller provider payloads when supported. |
includeRawData | boolean | false | Attaches 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
| Field | Description |
|---|---|
recordType | Record category for the dataset row. |
sourceType | Source context for the row, such as profile feed. |
provider | Public-data provider that returned the feed page. |
input | Original handle or profile URL that produced the row. |
profileHandle | Requested creator handle for the row. |
sortBy | Feed order used for the row. |
resultPosition | Position within the requested creator feed. |
page | Provider page number that returned the row. |
videoId | TikTok video ID. |
videoUrl | Canonical TikTok video URL when available. |
caption | TikTok video caption text. |
createdAt | Video publish timestamp in ISO format when returned. |
authorUsername | TikTok creator handle. |
authorNickname | TikTok creator display name. |
authorVerified | Verification flag returned for the creator. |
authorAvatarUrl | Creator avatar image URL when returned. |
authorFollowerCount | Creator follower count when returned. |
region | TikTok region code returned for the row. |
language | Caption or description language code when returned. |
durationMs | Video duration in milliseconds when available. |
width | Video width in pixels when returned. |
height | Video height in pixels when returned. |
coverUrl | Static cover image URL. |
dynamicCoverUrl | Animated cover image URL when returned. |
playUrl | Direct signed TikTok play URL when returned. |
downloadUrl | Direct signed TikTok download URL when returned. |
noWatermarkUrl | No-watermark video URL when returned. |
hasWatermark | Watermark flag when known. |
isAd | Ad flag returned by TikTok. |
isPhotoPost | Indicates a photo carousel post. |
imageUrls | Image URLs for photo posts when returned. |
playCount | TikTok play count. |
likeCount | TikTok like count. |
commentCount | TikTok comment count. |
shareCount | TikTok share count. |
collectCount | TikTok save or collect count. |
downloadCount | TikTok download count when returned. |
engagementRate | Approximate engagement rate from likes, comments, shares, and views. |
hashtags | Hashtag names attached to the video. |
mentions | Mentioned TikTok handles parsed from caption metadata. |
musicId | TikTok sound or music ID. |
musicTitle | TikTok sound or song title. |
musicAuthor | Music artist or sound owner. |
musicOriginal | Indicates whether the sound is marked as original. |
scrapedAt | ISO timestamp when the row was normalized. |
rawResult | Original 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:
ScrapeCreatorsas the recommended primary providerSociaVaultas 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 scrapedevent 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
stoolpresidenteandnike, 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:
resultsis the default dataset of normalized post rows.runSummarycontains provider usage, counts, stop reason, and billing context.outputis the compact machine-readable run record.rawResultappears only whenincludeRawDatais 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:
maxPagesPerProfileis a safety cap for provider pagination.maxPostsPerProfileis the main per-profile billing guard.maxTotalPostscaps 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
- Then use TikTok Profile Scraper — Followers, Bio, Engagement & Videos to extend TikTok Profile Posts Scraper - Creator Feed Data research with a complementary enrichment contract.
- Then use TikTok Profile Videos Scraper - Creator Feed Data to extend TikTok Profile Posts Scraper - Creator Feed Data research with a complementary enrichment contract.
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.
How is this different from TikTok Search Scraper or Trending Videos Scraper?
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.