TikTok Public Post Scraper avatar

TikTok Public Post Scraper

Pricing

from $2.99 / 1,000 posts

Go to Apify Store
TikTok Public Post Scraper

TikTok Public Post Scraper

Scrape visible public TikTok video cards from a hashtag or search page with Playwright and return captions, creators, visible engagement text, music, duration, and thumbnails.

Pricing

from $2.99 / 1,000 posts

Rating

0.0

(0)

Developer

w3crawler

w3crawler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

TikTok Public Search Video Scraper

Scrape visible public TikTok video cards from a hashtag page or TikTok search page. The Actor uses Playwright, bounded scrolling, and public DOM selectors to extract video IDs, URLs, creator information, captions, visible engagement text, music, duration, and thumbnails.

Despite the historical directory name, this implementation does not accept individual post URLs. It is a public search/hashtag card scraper and does not use account cookies, access private content, or bypass authentication, CAPTCHAs, or other access controls.

Example input

{
"query": "street food",
"maxItems": 10,
"proxyConfiguration": {
"useApifyProxy": true
}
}

Hashtag mode:

{
"hashtag": "dance",
"maxItems": 10
}

If both hashtag and query are supplied, hashtag mode takes precedence.

Example output

{
"recordType": "tiktok-video",
"status": "success",
"dataAvailable": true,
"source": "tiktok.com",
"provenance": "public_search_or_hashtag_page",
"sourceTransport": "playwright",
"extractionMethod": "search_card_dom",
"sourceUrl": "https://www.tiktok.com/search?q=street%20food",
"videoId": "1234567890",
"url": "https://www.tiktok.com/@creator/video/1234567890",
"authorUsername": "creator",
"description": "A public caption",
"playCount": "12K",
"likeCount": "900",
"commentCount": "45",
"shareCount": "20",
"searchType": "search",
"scrapedAt": "2026-08-18T00:00:00.000Z"
}

When TikTok returns a challenge, the page has no recognizable cards, or the request fails, a tiktok-post-access-diagnostic record is written. The OUTPUT key-value record reports the final status.

Input

  • query (string): Public TikTok search phrase, maximum 120 characters.
  • hashtag (string): Hashtag without the leading #; letters, numbers, underscores, and hyphens are accepted. Hashtag takes precedence.
  • maxItems (integer, 1–200): Maximum unique visible video records. Default: 30.
  • proxyConfiguration (object, optional): Apify Proxy configuration for public page access.

At least one of query or hashtag is required.

Output and storage

Video records and access diagnostics are written to the default dataset. The Output tab links to the dataset and to OUTPUT in the default key-value store. A bounded debug_html key may also be written when a page is blocked or empty.

OUTPUT contains the selected public URL, search mode, query/hashtag, requested limit, stored video count, failed URLs, empty-page count, blocked-page count, and final status.

Limitations and cost

The Actor reads visible cards after bounded scrolling. TikTok may return different markup, partial results, or a challenge page. Engagement values remain visible text such as 12K or 1.2M; they are not silently converted to numbers.

Browser compute and proxy traffic are the main costs. Start with a small maxItems value and avoid high-frequency retries.

FAQ and disclaimer

Does this Actor scrape an individual post URL?

No. Use a public search phrase or hashtag; the current implementation extracts cards from that result page.

Why are there no video rows?

TikTok may have returned a challenge, an empty page, or markup that no longer matches the selectors. Check the diagnostic and OUTPUT record.

Does it bypass bot detection?

No. It detects challenge pages and records them; it does not solve or defeat them.

Use results only for a legitimate purpose, follow TikTok terms and robots guidance, and review privacy and data-protection obligations. For support, use the Actor Issues tab.