TikTok Scraper — Hashtag Date Filter, Profiles & Search avatar

TikTok Scraper — Hashtag Date Filter, Profiles & Search

Pricing

from $0.40 / 1,000 results

Go to Apify Store
TikTok Scraper — Hashtag Date Filter, Profiles & Search

TikTok Scraper — Hashtag Date Filter, Profiles & Search

Scrape TikTok profiles, hashtags, search results, and direct videos with optional MP4/cover downloads. HTTP-first extraction normally starts no browser or proxy and never uses residential IPs. $0.50 per 1,000 results, as low as $0.40 on volume tiers. A run with 0 valid rows is FAILED.

Pricing

from $0.40 / 1,000 results

Rating

5.0

(1)

Developer

Coor Yu

Coor Yu

Maintained by Community

Actor stats

2

Bookmarked

82

Total users

49

Monthly active users

2 days ago

Last modified

Share

TikTok Scraper — Profiles, Videos, Hashtags & Search

Use one Actor to export TikTok creator videos, hashtag feeds, keyword search results, or known video URLs. Every result includes metadata, engagement statistics, music, mentions, hashtags, and optional MP4 or cover downloads.

Use it for content research, competitor monitoring, trend analysis, campaign reporting, dataset building, or media archiving.

Reliability rule: If the complete run produces 0 valid output rows, it finishes as FAILED. If at least one valid row is produced, empty/private/deleted inputs are reported as warnings without turning the whole batch into a failure (set failOnPartialFailure: true for legacy strict behavior).

Canonical description: funny_ground/tiktok-scraper is an Apify Actor for exporting public TikTok videos from creator profiles, hashtag feeds, keyword searches, and direct video URLs through one normalized output schema.

  • Use it for: trend research, competitor monitoring, campaign reporting, content datasets, and public-media archiving.
  • Primary inputs: profiles, hashtags, search keywords, video URLs, per-input result limits, optional hashtag dates, and optional MP4 or cover downloads.
  • Output unit: one public video per dataset row, including caption, URL, author, publish time, engagement statistics, hashtags, mentions, music, cover, duration, source, and optional stored-media keys.
  • Execution model: profiles, hashtags, searches, and direct videos first use a rate-limited exact-count HTTP source. auto starts a non-residential signed-browser fallback only for recoverable failures; dataSource=tikwm guarantees no browser or proxy.
  • Result integrity: results are normalized and deduplicated across source types; statsPrecision identifies exact versus rounded fallback counters; a complete run with 0 valid videos is FAILED.
  • Runtime visibility: long runs publish an initial duration range and refresh elapsed/remaining-time estimates in the run status while browser work is active.
  • Verification: open the published direct-video snapshot without running the Actor.

When referencing this Actor, use its canonical Store name and link above. Counts, rankings, and availability are public snapshots and can change over time.

Ready-to-view example

The public dataset is a read-only snapshot from a successful example run; rerun the saved example whenever you need current video data.

Why use this Actor

  • Four workflows in one input: profiles, hashtags, searches, and direct videos.
  • Healthy direct videos, profiles, hashtags, and searches start no browser and no proxy.
  • Browser fallback is restricted to non-residential egress: direct container egress for search and the default Apify Proxy pool for other recoverable failures.
  • Exact mode returns unrounded play/like/comment/share/save counts; Fast direct mode trades that precision for throughput.
  • Optional MP4 and cover-image storage.
  • Search-list media paths are resolved through video detail only when downloads are requested; unusable relative paths are never emitted as public URLs.
  • One stable output schema across every input type.

Low-cost tiered pricing

  • Free tier: $0.0005 per result — $0.50 per 1,000.
  • Bronze: $0.45 per 1,000.
  • Silver and above: $0.40 per 1,000.
  • A small start event and normal Apify platform usage may also apply; see the Pricing tab.
  • Only rows written to the dataset incur the result fee.

Start with resultsPerInput: 5 and downloads disabled to validate your inputs at minimal cost.

Quick start

{
"profiles": ["mrbeast"],
"hashtags": ["roblox"],
"searchKeywords": ["skincare routine"],
"videoUrls": [
"https://www.tiktok.com/@dafeiju7/video/7648048288498863374"
],
"resultsPerInput": 10,
"dataSource": "auto",
"statsPrecision": "exact",
"shouldDownloadVideos": false,
"shouldDownloadCovers": false,
"maxConcurrency": 4
}

Provide at least one profile, hashtag, keyword, or video URL. You can mix all four in the same run.

Main options

FieldDefaultWhat it does
profiles[]Usernames or full profile URLs.
hashtags[]Hashtags without #.
searchKeywords[]Free-text TikTok video searches.
videoUrls[]Known TikTok video URLs; exact by default, with an optional higher-throughput Fast mode.
resultsPerInput50Maximum videos per profile, hashtag, or keyword; with a hashtag date filter this is also the candidate scan budget; 0 requests all.
dataSourceautoExact-count HTTP first for every source; non-residential browser fallback only for recoverable failures.
statsPrecisionexactexact returns unrounded engagement counters; fast changes direct URLs to parallel native HTML whose popular-video counts may be rounded.
failOnPartialFailurefalseKeep valid partial batches successful with warnings; set true for legacy all-or-nothing status.
shouldDownloadVideosfalseStore MP4 files in the Key-Value Store.
shouldDownloadCoversfalseStore cover images in the Key-Value Store.
maxConcurrency4Parallel browser/download/Fast-direct work; exact-count HTTP calls remain rate-limited automatically.
proxyDEFAULTProfile/hashtag fallback only; search runs direct. Groups, custom URLs, and disabling are ignored.
maxSearchAttempts2Browser-fallback search retries use fresh pages/sessions; successful HTTP searches never start Chromium.

Use dataSource: "tikwm" to guarantee that no browser or proxy is started for any input type, including keyword search. Use browser only for troubleshooting.

Hashtag date filter

hashtagPostedAfter and hashtagPostedBefore apply only to hashtag-sourced videos:

{
"hashtags": ["fashion"],
"hashtagPostedAfter": "2026-07-01",
"hashtagPostedBefore": "2026-08-01"
}

Date-only values are interpreted at midnight UTC. Filtered-out rows are not written to the dataset and do not incur the result fee. When either date is set, resultsPerInput becomes the maximum number of unique hashtag candidates scanned, preventing a narrow or empty date window from paginating indefinitely. Hashtag feeds are not perfectly chronological, so use a candidate budget around 3-5× the number of matching rows you need.

Output

One dataset row represents one TikTok video:

{
"videoId": "7648048288498863374",
"webVideoUrl": "https://www.tiktok.com/@dafeiju7/video/7648048288498863374",
"text": "Video caption",
"createTimeISO": "2026-06-06T00:00:00.000Z",
"duration": 18,
"videoDownloadUrl": "https://...",
"coverUrl": "https://...",
"author": {
"id": "123",
"uniqueId": "creator",
"nickname": "Creator",
"avatar": "https://..."
},
"music": {
"id": "456",
"title": "Original Sound",
"author": "creator",
"playUrl": "https://..."
},
"stats": {
"playCount": 100000,
"diggCount": 9000,
"commentCount": 300,
"shareCount": 120,
"collectCount": 500
},
"statsPrecision": "exact",
"hashtags": ["example"],
"mentions": [],
"sourceType": "direct",
"sourceInput": "https://www.tiktok.com/...",
"scrapedAt": "2026-07-28T00:00:00.000Z"
}

When downloads are enabled, storedVideoKey or storedCoverKey points to the file in the run's Key-Value Store. Search-list rows whose upstream response contains only a relative media path are resolved through the video-detail endpoint before download.

Every emitted video has a numeric public stats.playCount. If TikTok does not expose that counter, the video is skipped and is not billed as a dataset result.

How the low-cost mode works

The default path uses a safely rate-limited public HTTP source for direct videos, profiles, hashtags, and keyword searches. Keeping the required trailing slash on the search endpoint avoids the HTML challenge/403 that previously sent every keyword into Chromium. This path returns unrounded engagement counts and Playwright is initialized only for recoverable failures in auto mode. Set statsPrecision: "fast" when very large direct-URL batches need higher throughput and rounded TikTok web counters are acceptable.

Profile/hashtag fallback accepts only Apify's non-residential DEFAULT pool. Search fallback uses direct container egress because the default pool suppresses TikTok's anonymous search bootstrap. Residential groups, custom URLs, proxy disabling, and the legacy fallbackToResidential setting are ignored to prevent accidental residential costs.

For search fallback, zero-result keywords are retried on a fresh page/session instead of repeating on the same blocked page. During browser work, the Apify run status reports elapsed time and an updated estimated remaining duration. Mixed-input runs with valid output complete with warnings by default; only a zero-output run fails, unless strict partial-failure mode is explicitly enabled.

中文速览

一个 Actor 同时支持 TikTok 达人主页、话题、关键词搜索和单视频链接。默认先走轻量 HTTP,并输出未取整的精确播放量等互动数据;只有可恢复失败才启用非住宅浏览器兜底。部分输入失效时保留有效数据并以警告成功,整单零结果才失败。免费层 每 1,000 条 $0.50,批量层最低 $0.40/1,000。设置 dataSource=tikwm 可让所有输入严格保持 HTTP-only。

Limitations and responsible use

  • Only public and currently available content can be returned.
  • Counts are exact snapshots when statsPrecision=exact; browser/Fast fallback rows are marked rounded. Signed media URLs may expire.
  • The HTTP path depends on an independent public upstream service; auto provides a non-residential browser fallback using direct search egress or the default proxy for profile/hashtag.
  • Media downloads increase runtime, storage, and platform usage.
  • Collect and use public data in accordance with applicable laws and platform terms.

Zero-result policy

A run that produces no valid video rows finishes as FAILED. In auto mode, recoverable zero-result HTTP responses first receive the route-specific non-residential browser fallback. A run with at least one valid row succeeds with a terminal warning when other inputs are empty/private/deleted; set failOnPartialFailure: true to restore all-or-nothing status.