TikTok Profile Scraper - Videos, Views, Likes and Captions avatar

TikTok Profile Scraper - Videos, Views, Likes and Captions

Pricing

from $0.40 / 1,000 results

Go to Apify Store
TikTok Profile Scraper - Videos, Views, Likes and Captions

TikTok Profile Scraper - Videos, Views, Likes and Captions

TikTok profile scraper for recent videos from public profiles: video URL, caption, views, likes, comments, shares, saves, duration, music, cover and post date in clean JSON. Add direct video URLs, keep only videos newer than a date, skip pinned videos, and add an optional follower stats row.

Pricing

from $0.40 / 1,000 results

Rating

0.0

(0)

Developer

TicTech

TicTech

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

19 days ago

Last modified

Features

Limited permissions

Share

Turn public TikTok profiles into clean metadata in one run. Paste one or more @handle URLs and get each profile's recent videos (likes, views, comments, shares, saves, captions, post dates) as snake_case JSON, plus optional profile stats once per account. No residential proxy needed.

Note: Only public profiles and videos. If a URL returns nothing, you get a free status row that says why (the run still completes).

Why Use This Tool?

  • Automate brand and creator tracking: stop copying TikTok stats by hand.
  • Several profiles per run: put multiple profile URLs in start_urls.
  • Optional profile metadata: turn on scrape_profile for followers, following, video count, verified badge, avatar and bio once per account.
  • Clean downstream data: consistent snake_case fields for Sheets, warehouses, n8n/Make or your own API.
  • Lightweight: plain HTTP, no browser farm, no residential proxy.

Why Choose This Actor?

  • Recent videos per profile from TikTok's public embed (about the 10 newest)
  • Date filter (until) for those recent videos, with pinned videos handled correctly
  • Pinned videos: flagged with is_pinned, or left out with skip_pinned
  • Clear empty results: every URL that returns nothing gets a free status row (older_than_until, no_videos, embed_unavailable, blocked, skipped) plus a run summary
  • Apify-native: Console, schedules, webhooks, API, Make, n8n, Zapier

Features

  • Scrape TikTok profile URLs (or bare @handles). A single video URL is also accepted and returns one row for that video
  • Multiple start_urls per run (deduped)
  • max_items caps the whole run, not each profile (see below)
  • Optional scrape_profile: one profile row per profile (followers, following, video count, likes, verified, avatar, display name)
  • Video fields: caption, likes, views, comments, shares, saves, author, author verified, post time, duration, cover, music title, is_pinned
  • Optional until date filter (ISO / YYYY-MM-DD): keeps videos posted after that date. A pinned old video never stops the filter
  • Optional skip_pinned: leave pinned videos out (not charged)
  • If TikTok rate-limits, the run waits and continues with the next profiles, then retries the limited ones once
  • Run summary in the OUTPUT key-value record: urls_ok, urls_empty, items, pinned_skipped, reasons
  • Dataset export: JSON, CSV, Excel

Use Cases

  • Social listening and brand monitoring across creator lists
  • Influencer vetting: follower counts plus recent engagement in one dataset
  • Competitive tracking for product, wellness and DTC accounts
  • Content ops: archive captions and URLs for briefs or RAG
  • Agency reporting: schedule runs into Sheets or BI

Input Example

{
"start_urls": [
"https://www.tiktok.com/@duolingo"
],
"max_items": 20,
"scrape_profile": false,
"until": "2026-10-01",
"skip_pinned": false,
"proxyConfiguration": {
"useApifyProxy": false
}
}
FieldWhat it does
start_urlsProfile URLs or @handles (required). A video URL returns that one video
max_itemsCap on rows for the whole run, across all URLs (video rows + profile rows; status rows don't count). Default 20; 0 = safe ceiling 5000. With 3 profiles and max_items: 20, later profiles may get nothing once 20 rows are reached. Free-tier tip: free tier max items per run ≤ 100
scrape_profileOptional. When true, emit one profile row before each profile's videos (default false)
untilOptional. Keep videos posted after this date. Pinned videos never end the filter; old pinned videos are dropped
skip_pinnedOptional. When true, pinned videos are left out and not charged. When false (default) they are kept with is_pinned: true
proxyConfigurationOptional Apify proxy. None or datacenter is fine

Output Examples

Video row:

{
"url": "https://www.tiktok.com/@tiktok/video/7500000000000000000",
"caption": "…",
"like_count": 12000,
"view_count": 250000,
"play_count": 250000,
"comment_count": 300,
"share_count": 150,
"save_count": 900,
"author": "TikTok",
"handle": "tiktok",
"author_verified": true,
"posted_at": "2026-10-10T17:00:00Z",
"is_pinned": false,
"media_type": "video",
"platform": "tiktok"
}

view_count and play_count are the same number: TikTok shows one public view counter. play_count stays for compatibility. save_count (alias collect_count) is an integer.

Profile row (only with scrape_profile: true):

{
"media_type": "profile",
"platform": "tiktok",
"handle": "healthwithanya",
"url": "https://www.tiktok.com/@healthwithanya",
"follower_count": 33800,
"following_count": 120,
"video_count": 358,
"like_count": 450000,
"verified": false,
"avatar_url": "https://…"
}

Status row (a URL that returned nothing; never billed):

{
"media_type": "status",
"platform": "tiktok",
"url": "https://www.tiktok.com/@some.account",
"handle": "some.account",
"status": "older_than_until",
"reason": "no videos newer than until=2026-10-01"
}

How to Run on Apify

  1. Open the Actor on Apify and click Try for free / Start.
  2. Paste one or more public TikTok profile URLs into start_urls.
  3. Set max_items for the whole run (free tier max items per run ≤ 100). Optionally set until and skip_pinned.
  4. Optionally enable Scrape profile metadata, then run and open the Dataset tab.
  5. Download JSON / CSV / Excel, or connect via API, schedule, Make, n8n or Zapier.

Run from your stack (API sketch)

curl -X POST "https://api.apify.com/v2/acts/tictechid~vanzi-tiktok-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"start_urls":["https://www.tiktok.com/@tiktok"],"max_items":20}'

Limitations

  • Public profiles only. Private, removed or region-blocked content returns a status row.
  • Videos come from TikTok's public embed: about the 10 newest per profile, not the full history. until cannot reach further back than that.
  • Some public accounts are not listed by TikTok's embed at all. They return embed_unavailable (the account has videos, but this Actor cannot list them). Accounts with 0 public videos return no_videos.
  • Pinned videos are detected from their position (TikTok does not label pins on public pages). A pinned video that is also the newest is treated as a normal video.
  • TikTok may rate-limit requests. The run slows down, pauses and continues; profiles that stay blocked get a blocked status row, and only if limiting persists after several pauses are the remaining URLs marked skipped.
  • No hashtag, keyword, comment or follower-list scraping.

Usage Limits

  • Free Apify accounts: use this Actor within your monthly platform credit. Free-tier tip: free tier max items per run ≤ 100.
  • Paid plans: runs follow your Apify plan limits.

See Apify Pricing.

FAQ

Do I need a TikTok login? No, public pages only.

Do I need a residential proxy? No. Use none or datacenter.

What am I charged for? One start fee per run, plus one result per video row, and per profile row when scrape_profile is on. Status rows and skipped pinned videos are free.

Why did a profile return a status row? Check its status: older_than_until (no video newer than until; move it earlier), no_videos (no public videos), embed_unavailable (TikTok's embed lists none for this account), blocked (TikTok refused the request, try again later), or skipped (not attempted because TikTok kept rate-limiting).

Support: open an Issue on the Actor page.


For more details, contact the maintainer or email us at contact@tictech.id