TikTok Scraper With Repost Insights Data avatar

TikTok Scraper With Repost Insights Data

Pricing

from $2.99 / 1,000 results

Go to Apify Store
TikTok Scraper With Repost Insights Data

TikTok Scraper With Repost Insights Data

TikTok Scraper With Repost Insights Data extracts TikTok videos and repost insights, including captions, creators, views, likes, comments, shares, repost counts, hashtags, timestamps, and engagement metrics. Ideal for content research, trend tracking, competitor analysis, and audience insights.

Pricing

from $2.99 / 1,000 results

Rating

0.0

(0)

Developer

SimpleAPI

SimpleAPI

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

a day ago

Last modified

Share

TikTok Scraper — Videos, Reposts and Engagement Analytics

TikTok Scraper With Repost Insights Data pulls profile videos, reposts, and hashtag or keyword search results from TikTok's public pages and returns them as structured JSON — no login required. Every repost row also carries a derived repostAnalytics object (engagement rate, like/view ratio, above-profile-average flag), and an optional per-profile repost_summary row adds repost cadence and a repost-vs-own-video engagement delta. Built for teams who need repost behavior, not just raw video counts, from social analysts to influencer-vetting and competitor-monitoring workflows.

🧭 What is TikTok Scraper With Repost Insights Data?

It's an Apify Actor that scrapes TikTok's public web pages — profile pages, the repost tab, and the general search surface — and returns normalized JSON rows to an Apify dataset. No TikTok account, login, or cookie is used or required; profile data is read from the public page HTML and TikTok's own web API endpoints.

Key features:

  • 👤 Profile targeting by full URL or bare username, with profileUrls and the legacy startUrls alias merged (not overridden) so old input JSON keeps working
  • 🔍 Keyword or hashtag search via searchType, against TikTok's own general-search surface
  • 🔄 Repost collection matched to TikTok's dedicated /api/repost/item_list endpoint — not a generic feed sniff that could mislabel a profile's own videos as reposts
  • 📈 Derived repost analyticsrepostAnalytics on every repost row, plus an optional repost_summary aggregate row per profile
  • 🌐 Optional Apify Proxy with automatic escalation (direct connection → datacenter → residential) when a request is blocked
  • 📦 Live dataset writes — rows appear as they're collected, not batched at the end of the run

📊 What data can I extract with TikTok Scraper With Repost Insights Data?

Each dataset row carries a type field, a flat set of top-level columns for quick filtering, and the full raw payload nested under video, repost, or item.

FieldExample valueUse case
type"profile_repost"Filter the dataset by row kind: profile_video, profile_repost, repost_summary, hashtag_search, keyword_search, error
username"mrbeast"Profile this row belongs to (profile rows)
query"cooking tips"Search term this row belongs to (search rows)
successtrueWhether this row's collection succeeded
videoId"7234567890123456789"Own-video identifier
videoTitle"My weekend cooking vlog"Own-video caption/title
videoUrl"https://www.tiktok.com/@mrbeast/video/7234..."Direct link to the video
videoCreatedAt"2026-05-01T12:00:00Z"Publish timestamp (ISO 8601)
videoAuthor"mrbeast"Uploading account
videoViews / videoLikes / videoComments / videoShares9000000 / 500000 / 8000 / 12000Own-video engagement counts
repostId"7234567890123456789"Reposted video's identifier
repostText"caption text"Reposted video's caption
repostUrl"https://www.tiktok.com/@mrbeast/video/7234..."Direct link to the reposted video
repostCreatedAt"2026-05-01T12:00:00Z"Original post timestamp of the repost
repostAuthor"MrBeast"Original creator of the reposted video
repostViews / repostLikes9000000 / 500000Reposted video's engagement counts
itemId"7234567890123456789"Search-result item identifier
itemText"cooking tips for beginners"Search-result caption
itemUrl"https://www.tiktok.com/@user/video/7234..."Direct link to the search-result video
itemCreatedAt"2026-04-20T09:00:00Z"Search-result publish timestamp
itemViews / itemLikes / itemComments250000 / 18000 / 900Search-result engagement counts
video{ … }Full raw video payload (see below) — present on profile_video rows
repost{ … }Full raw repost payload, including repostAnalytics — present on profile_repost rows
item{ … }Full raw search-item payload — present on hashtag_search/keyword_search rows
repostCount14Number of reposts collected for this profile (repost_summary rows)
repostCadenceDays4.32Average days between reposts (repost_summary rows)
repostAvgEngagementRate0.061Mean repostAnalytics.engagementRate across the profile's reposts (repost_summary rows)
ownVideoAvgEngagementRate0.048Mean engagement rate across the profile's own videos collected in this run (repost_summary rows)
ownVideoSampleSize40Number of own videos the ownVideoAvgEngagementRate was computed from (repost_summary rows; 0 if includeVideos was off)
repostVsOwnEngagementDelta0.013repostAvgEngagementRate - ownVideoAvgEngagementRate; positive means reposts outperform the profile's own uploads
error"BlockedError"Present only on success: false rows
scrapedAt"2026-08-15T10:12:03Z"UTC timestamp the row was written

├── 📈 Repost analytics — the decision-driving data

Every profile_repost row's nested repost object carries a repostAnalytics block: engagementRate ((likes + comments + shares) / views), likeViewRatio (likes / views), and aboveProfileAverage (a boolean comparing that repost's rate against the mean of every repost collected for the same profile in the same run). Both rates return null — never a fabricated 0 — when the underlying view count is 0. The repost_summary row rolls this up per profile: repostCadenceDays needs at least two reposts to compute (null otherwise), and repostVsOwnEngagementDelta needs includeVideos on for that run, or it stays null too.

└── 🎯 Targeting data — how you scope a run

profileUrls/startUrls pick which accounts to scrape; includeVideos/includeReposts (and the legacy, additive profileScrapeSections) pick which sections run per profile; searchQuery + searchType (keyword or hashtag) pick TikTok's general-search surface instead of or alongside a profile run; maxResults (1–1000) caps each section and each search independently.

🆚 How does TikTok Scraper With Repost Insights Data differ from the official TikTok API?

TikTok's own developer platform does not give a bulk-friendly path to this data. The Display API only returns videos for the TikTok account that has itself completed OAuth login and granted the video.list scope to your app — it has no endpoint for an arbitrary third party's public profile, no repost endpoint, and no keyword or hashtag search endpoint (as documented on TikTok's developer site, checked 2026-08-15). The Research API does cover reposted videos and public account/content search, but is restricted to applicants affiliated with academic or non-profit research institutions in the US, EEA, UK, Switzerland or Brazil, who must submit a research proposal, prove independence from commercial interests, and wait for approval — TikTok's own page describes a roughly four-week review (checked 2026-08-15). Neither path works for an agency, brand, or commercial analytics team that just wants a competitor's or influencer's repost activity today.

FeatureTikTok Display APITikTok Research APIThis Actor
Access requirementOAuth login by the account ownerApproved academic/non-profit research applicationPublic profile URL, username, or search query
Arbitrary third-party profiles❌ own account only✅ (approved researchers)
Repost data❌ not offered✅ (approved researchers)✅, with derived analytics
Keyword / hashtag search❌ not offered✅ (approved researchers)
Commercial/marketing useLimited to what OAuth users grant❌ non-commercial, non-profit only
Setup timeRegister app + OAuth flow per accountApplication + review (~4 weeks per TikTok)Add input, click Start

Why can't I just get repost data from TikTok's own API?

TikTok's public developer program simply doesn't expose reposts to commercial apps: the Display API's video endpoints only ever return the OAuth-authenticated user's own uploads, and the one TikTok API that does return reposted videos — the Research API — is gated to approved academic and non-profit researchers on a non-commercial basis. There is no TikTok-issued API key that a marketing team, agency, or analytics product can use today to pull an arbitrary profile's reposts. This Actor covers that gap by reading the same public pages a logged-out browser sees and matching TikTok's own /api/repost/item_list response precisely, so repost rows are never confused with a profile's regular video feed.

Use the Display API when you're building a feature inside your own product that shows a user their own TikTok videos after they log in. Use this Actor when you need any public profile's videos, reposts, or search results without asking that account to authorize anything.

💡 How to use data extracted from TikTok?

├── 📊 Social media analysts and brand teams

Add the profiles you track to profileUrls, leave includeReposts and repostAnalyticsEnabled on, and pull repostAvgEngagementRate and aboveProfileAverage straight into a dashboard. Because the analytics are computed fresh on every run from diggCount/commentCount/shareCount/playCount, you don't need a separate engagement-calculation step before charting repost performance against a profile's own uploads.

├── 🏢 Agencies monitoring client and competitor accounts

Run the same profileUrls list on a schedule (Apify Schedules) and diff repostCadenceDays and repostVsOwnEngagementDelta run over run to flag a client or competitor suddenly reposting more, or reposting content that's underperforming their own uploads — a concrete, recurring audit rather than a one-off pull.

├── 🔬 Market and trend research

Set searchType to hashtag and pull itemText, itemLikes, and itemViews across a set of hashtags to map which topics are trending, or set searchType to keyword to see what content ranks for a term your audience searches. Combine with the hashtags array parsed out of each item.textExtra payload to see which tags co-occur.

└── 🤖 AI agents and automated pipelines

Because the Actor runs as a standard Apify Actor with a JSON dataset output, an agent framework can call it, poll the run, and feed repostAnalytics and repost_summary rows straight into a downstream scoring or alerting step — no scraping or engagement-math logic needs to live in the agent itself.

🔼 Input sample

Required per schema: none — supply either profileUrls/startUrls, a searchQuery, or both.

ParameterRequiredTypeConstraintsDescription
profileUrlsNoArrayeditor: stringListTikTok profile URLs (e.g. https://www.tiktok.com/@username) or bare usernames. Supports bulk input.
searchQueryNoStringdefault ""Keyword or hashtag search term. Leave empty to skip search.
searchTypeNoStringdefault "keyword"; enum "keyword" (Keyword search), "hashtag" (Hashtag search)Which of TikTok's search modes to use.
maxResultsNoIntegerdefault 100; min 1; max 1000Max results per profile section and per search query — applied separately to videos and to reposts for each profile.
includeVideosNoBooleanprefill trueCollect each profile's own uploaded videos.
includeRepostsNoBooleanprefill trueCollect each profile's reposted videos. Required for repostAnalytics and repost_summary.
startUrlsNoArrayeditor: stringListLegacy, base-actor-compatible alias for profileUrls. Merged with profileUrls, not replaced.
profileScrapeSectionsNoArrayeditor: select; items enum "videos", "repost"Legacy alias for includeVideos/includeReposts. Values here add a section — use the toggles above to fully disable one.
repostAnalyticsEnabledNoBooleandefault trueAttach repostAnalytics (engagementRate, likeViewRatio, aboveProfileAverage) to every repost row.
includeRepostSummaryNoBooleandefault truePush one extra repost_summary row per profile.
proxyConfigurationNoObjecteditor: proxyApify Proxy configuration. No proxy is used by default; the Actor automatically escalates connection method if a request doesn't return the expected content.
{
"profileUrls": ["https://www.tiktok.com/@mrbeast"],
"searchQuery": "",
"searchType": "keyword",
"maxResults": 100,
"includeVideos": true,
"includeReposts": true,
"repostAnalyticsEnabled": true,
"includeRepostSummary": true,
"proxyConfiguration": { "useApifyProxy": true }
}

⚠️ Common pitfall: leaving profileUrls/startUrls and searchQuery both empty does not start an empty, harmless run — the Actor pushes one uncharged type: "error" row and fails the run outright. Supply at least one of the two before starting.

🔽 Output sample

Output is typed, normalized JSON written to the Actor's default dataset, one row at a time as data is collected. Export it as JSON, CSV, Excel, or XML from the Apify Console, or pull it with the Apify API/apify_client.

{
"type": "profile_repost",
"username": "mrbeast",
"repost": {
"id": "7234567890123456789",
"text": "caption text",
"createTime": 1746100800,
"createTimeISO": "2026-05-01T12:00:00Z",
"webVideoUrl": "https://www.tiktok.com/@mrbeast/video/7234567890123456789",
"authorMeta": {
"id": "6829267831662658",
"name": "mrbeast",
"nickname": "MrBeast",
"avatar": "https://p16-sign.tiktokcdn.com/...",
"signature": "SUBSCRIBE FOR A COOKIE",
"verified": true,
"fans": 105000000,
"heart": 15200000000
},
"videoMeta": {
"duration": 58,
"width": 1080,
"height": 1920,
"cover": "https://p16-sign.tiktokcdn.com/...",
"originCover": "https://p16-sign.tiktokcdn.com/...",
"dynamicCover": "https://p16-sign.tiktokcdn.com/...",
"playAddr": "https://v16.tiktokcdn.com/...",
"downloadAddr": "https://v16.tiktokcdn.com/..."
},
"musicMeta": {
"musicId": "7234500000000000000",
"musicName": "original sound",
"musicAuthor": "mrbeast",
"musicOriginal": true
},
"diggCount": 500000,
"shareCount": 12000,
"playCount": 9000000,
"commentCount": 8000,
"collectCount": 30000,
"repostAnalytics": {
"engagementRate": 0.058,
"likeViewRatio": 0.0556,
"aboveProfileAverage": true
}
},
"repostId": "7234567890123456789",
"repostText": "caption text",
"repostUrl": "https://www.tiktok.com/@mrbeast/video/7234567890123456789",
"repostCreatedAt": "2026-05-01T12:00:00Z",
"repostAuthor": "mrbeast",
"repostViews": 9000000,
"repostLikes": 500000,
"success": true,
"scrapedAt": "2026-08-15T10:12:03Z"
}

The nested item payload's internal shape is not identical between hashtag_search and keyword_search rows — the two modes call different TikTok endpoints and this Actor preserves each one's native field names rather than forcing a single shape. Both still get the same flat itemId/itemText/itemUrl/itemCreatedAt/itemViews/itemLikes/itemComments columns for consistent filtering.

Rows with success: false (a blocked or failed collection attempt) are pushed without the billed row_result event — you are not charged for failures. Filter the dataset on success == true to see only billed rows.

🎯 How do you filter and target specific videos and reposts?

Two independent targeting modes can run in the same job: profile mode (profileUrls/startUrls) pulls videos and/or reposts for named accounts; search mode (searchQuery + searchType) pulls from TikTok's general-search surface by keyword or hashtag. Both run together if you fill in both fields.

Within profile mode, includeVideos and includeReposts scope which sections run per profile — turn off includeVideos to skip a profile's own uploads and only pay for repost collection, or vice versa. The legacy profileScrapeSections field only ever adds a section on top of the toggles, so it can't be used to silently drop one. There is no rating- or quality-threshold input filter; instead, use the output's repostAnalytics.aboveProfileAverage boolean or repostVsOwnEngagementDelta to filter or sort results after the run.

maxResults (1–1000) is the volume control, and it applies separately to each section and each query — three profiles with includeVideos and includeReposts both on can return up to 3 × maxResults video rows plus 3 × maxResults repost rows. Actual counts can come in lower than maxResults if TikTok stops surfacing new items during scrolling, or if a profile's Reposts tab isn't reachable for that run.

{ "profileUrls": ["https://www.tiktok.com/@nike", "https://www.tiktok.com/@adidas"], "includeVideos": true, "includeReposts": false, "maxResults": 50 }
{ "profileUrls": ["https://www.tiktok.com/@nike"], "includeVideos": false, "includeReposts": true, "repostAnalyticsEnabled": true, "includeRepostSummary": true }
{ "searchQuery": "sustainable fashion", "searchType": "hashtag", "maxResults": 200 }

▶️ Want to try other TikTok scrapers?

ScraperWhat it extracts
Instagram-Post-Details-ScraperInstagram post details from public profiles
Snapchat-Popular-Accounts-ScraperPopular Snapchat account listings
Snapchat-Spotlight-ScraperSnapchat Spotlight video data
Snapchat-User-Spotlight-ScraperPer-user Snapchat Spotlight content
Reddit-ScraperReddit posts and thread data
youtube-video-subtitles-scraperYouTube video subtitle/transcript text

💻 How to extract TikTok data programmatically

This Actor runs as a standard Apify Actor: one API call starts a run, results land in a dataset you can page through as JSON.

Python example

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("<YOUR_USERNAME>/tiktok-scraper-with-repost-insights-data").call(
run_input={
"profileUrls": ["https://www.tiktok.com/@mrbeast"],
"includeReposts": True,
"repostAnalyticsEnabled": True,
"maxResults": 100,
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item.get("type") == "profile_repost" and item.get("success"):
analytics = item["repost"]["repostAnalytics"]
print(item["repostId"], analytics["engagementRate"], analytics["aboveProfileAverage"])

Export to spreadsheets or CRM

Use the Apify Console's dataset export (CSV/Excel) or the API's ?format=csv option to map flat columns — videoViews, repostAvgEngagementRate, repostVsOwnEngagementDelta, scrapedAt, and so on — directly to spreadsheet columns or CRM custom fields without touching the nested video/repost/item objects.

Yes — this Actor reads only what TikTok already serves to a logged-out visitor on a public profile or public search page; it does not access private accounts or bypass any login wall. That said, the data includes personal data about individual creators — usernames, nicknames, avatars, bios, and engagement counts tied to an identifiable account — so GDPR (if you're in or process data from the EU/UK) and CCPA (California) can apply to how you store and use it, not just how you collect it. TikTok's Terms of Service also govern automated access to the platform and should be reviewed before any commercial use. Consult legal counsel for commercial applications involving bulk storage of personal data.

❓ FAQ

├── What happens to a video that's been deleted or made private since it was posted?

The Actor doesn't retroactively detect deletion — it only reports what a request returns at scrape time. If a profile or video page fails to load the expected content (removed, private, or blocked), that row is pushed with success: false and an error value instead of a fabricated result.

├── Can I get repost data along with a profile's own videos in the same run?

Yes — includeVideos and includeReposts both default to true, so a single run against profileUrls returns both profile_video and profile_repost rows, and (with includeRepostSummary on) one repost_summary row per profile comparing the two.

├── How accurate is the engagement data?

The Actor returns diggCount/playCount/commentCount/shareCount exactly as TikTok's page reports them at request time. repostAnalytics and repost_summary are computed locally from that same data, so their accuracy tracks TikTok's own counters, not a separate source.

├── How many records can I get per run?

maxResults caps each section and each search at 1–1000, applied per profile and per query independently — so the total row count scales with how many profiles/sections/searches you request, not a single global cap. There's no separate limit on the number of profileUrls you can submit in one run.

├── ⚠️ What if a profile's Reposts tab isn't visible or reachable?

The Actor logs a warning and returns zero repost rows for that profile — it does not push a success: false error row for this case, since an absent tab isn't treated as a failed request. Check the run log for "no repost rows will be captured" if a profile you expect reposts from returns none.

├── Does this work with Claude, ChatGPT, and AI agent frameworks?

There's no dedicated MCP server documented for this Actor. It's callable as a standard Apify Actor run via the Apify API/apify_client from any agent framework that can make an HTTP request and poll a dataset.

└── Can I use this without a TikTok API key or developer account?

Yes. No TikTok login, API key, cookie, or developer account is required — only an Apify account to run the Actor.

Conclusion

TikTok Scraper With Repost Insights Data turns TikTok's public profile, repost, and search pages into structured JSON, with a repost-analytics layer computed on every run that most TikTok scrapers don't offer at all. It's built for social analysts, agencies, and researchers who need repost cadence and repost-vs-own-video engagement, not just raw video counts. Add a profile or a search term, run it from the Apify Console or API, and the dataset fills in live as results are collected.