TikTok Explore Video Scraper avatar

TikTok Explore Video Scraper

Pricing

from $2.99 / 1,000 explore videos

Go to Apify Store
TikTok Explore Video Scraper

TikTok Explore Video Scraper

Fetch the public TikTok Explore page and return source-backed page snapshots, structured entities, links, images, metadata, and access diagnostics.

Pricing

from $2.99 / 1,000 explore videos

Rating

0.0

(0)

Developer

w3crawler

w3crawler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

TikTok Explore Video Scraper reads the public TikTok Explore page and returns a bounded sample of source-backed video cards exposed by that page. It preserves public titles or captions, creator identity, hashtags, visible metrics, thumbnails, canonical video URLs, and observed position. It does not log in, access private accounts, or turn a blocked page into an empty successful result.

Get started

  1. Open the Actor Store page and select Try for free or open the Input tab.
  2. Set limit to the number of public video cards you want, up to 20.
  3. Keep the default limits for the first run. Enable includeDiagnostics only if you want a single minimal row when the page is blocked or empty.
  4. Start the Actor, open the dataset, and export records as JSON, CSV, or Excel. Open Run summary (OUTPUT_SUMMARY) to see the access outcome and transport.

Input

All fields are optional; the defaults below are ready to use. Unsupported fields and out-of-range values are rejected before requests start.

FieldTypeRequired?DefaultMeaning
limitintegerOptional10Maximum distinct public video records to emit, from 1 to 20.
includeDiagnosticsbooleanOptionalfalseEmit one minimal {url,error,errorCode,scrapedAt} row when the public page is blocked or empty.
requestTimeoutSecsintegerOptional20Bounded timeout for the public page request, from 10 to 120 seconds.
maxRequestRetriesintegerOptional1Bounded retry count for the direct public page request, from 0 to 2.
proxyConfigurationobjectOptionalNot suppliedOptional Apify Proxy or custom HTTP(S) proxy. Proxy use does not bypass access controls.
fixturePathstringOptionalNot suppliedQA-only relative path below test/fixtures, up to 240 characters. Fixture mode is explicit and is never used as a live fallback.

Full default input, excluding the optional proxy object:

{
"limit": 10,
"includeDiagnostics": false,
"requestTimeoutSecs": 20,
"maxRequestRetries": 1
}

The Actor requests the public Explore URL once and parses only the video cards present in that response. It does not scroll, paginate, sign in, or use a personalized recommendation endpoint.

Output

The dataset contains one row per source-backed video card, or one minimal diagnostic row when includeDiagnostics is enabled and the page is blocked or empty. In the saved 2026-10-25 local run, TikTok returned an access challenge and includeDiagnostics was false, so no rows were written. The saved dataset is an empty array:

[]

The fields below describe the row shape when public data is available; none was observed in that run. Optional values are omitted when the page does not expose them, and no placeholder rows are written.

FieldTypeAvailabilityMeaning
videoIdstringWhen publishedPublic TikTok video identifier.
videoUrlstringWhen publishedPublic TikTok video URL.
videoTitlestringWhen publishedPublic title or caption shown for the video.
creatorNamestringWhen publishedPublic creator display name or handle.
creatorUrlstringWhen publishedPublic creator profile URL.
descriptionstringWhen publishedPublic video description or caption.
hashtagsstring arrayWhen publishedHashtags visible in the public caption or structured card data.
durationSecondsintegerWhen publishedPublic duration in seconds when exposed.
durationTextstringWhen publishedPublic duration text when exposed.
playCountintegerWhen publishedPublic play or view count when exposed.
likeCountintegerWhen publishedPublic like count when exposed.
commentCountintegerWhen publishedPublic comment count when exposed.
shareCountintegerWhen publishedPublic share count when exposed.
metricTextstringWhen publishedSource metric text when it cannot be safely converted to an integer.
thumbnailUrlstringWhen publishedPublic video thumbnail URL.
sourcestringWhen publishedProvenance source label.
sourceUrlstringWhen publishedPublic Explore URL that produced the record.
pageNumintegerWhen publishedObserved source page number; Explore is a single bounded page.
positionintegerWhen publishedPosition in the observed Explore batch.
scrapedAtstringWhen publishedUTC record timestamp.
urlstringIn a diagnostic rowRequested URL in a minimal diagnostic row.
errorstringIn a diagnostic rowBounded diagnostic message.
errorCodestringIn a diagnostic rowStable diagnostic code, such as ACCESS_BLOCK.

A diagnostic row contains only url, error, errorCode, and scrapedAt. It is written only when includeDiagnostics is true; the saved run kept the default false, which is why the dataset is empty.

Run summary

Run summary is stored separately from the dataset in the run's key-value store under OUTPUT_SUMMARY. It records the access outcome, transport, response format, and retry attempts even when no dataset row is written.

FieldMeaning
sourceSource label recorded for the run, tiktok.com.
sourceUrlPublic Explore URL requested.
statusRun outcome: success, blocked, empty, or failed.
normalCountNumber of video records saved.
diagnosticCountNumber of diagnostic dataset rows saved; zero unless includeDiagnostics is enabled.
responseFormatDetected page format, such as embed_state_json, html, or unknown.
transportTransport used for the request, such as direct_http, proxy, or apify_proxy.
readerFallbackWhether a reader fallback was used.
responseStatusHTTP status of the last response, when one was received.
responseBytesSize of the last response body in bytes, when reported.
contentTypeContent type of the last response, when reported.
accessSignalAccess-challenge signal detected in the response, when present.
attemptsArray of route attempts with status, transport, size, and outcome.
completedAtTime the summary was written, in ISO UTC.

Optional response fields appear only when the route reports them; the saved run did not expose responseStatus, responseBytes, contentType, or accessSignal.

StatusMeaning
successPublic video cards were saved without an extraction problem.
blockedTikTok returned an access challenge or denial, so no video cards were saved.
emptyThe page loaded without an access challenge but exposed no usable public video cards.
failedA request or parse failure occurred before any usable record was saved.

Example OUTPUT_SUMMARY from the saved 2026-10-25 run:

{
"source": "tiktok.com",
"sourceUrl": "https://www.tiktok.com/explore",
"status": "blocked",
"normalCount": 0,
"diagnosticCount": 0,
"responseFormat": "unknown",
"transport": "apify_proxy",
"readerFallback": false,
"attempts": [
{
"route": "direct_public_page",
"transport": "apify_proxy",
"statusCode": 200,
"responseBytes": 369235,
"contentType": "text/html; charset=utf-8",
"outcome": "blocked",
"error": "HTTP 200 (captcha)"
}
],
"completedAt": "2026-10-25T21:32:40.650Z"
}

Coverage and limitations

Explore is a single public page, not a complete or personalized feed. The Actor captures only the cards present in the response it receives, up to limit; it does not scroll, paginate, or follow creator profiles. Position is the order observed in that response and can change between requests.

TikTok can respond with a CAPTCHA, login wall, empty shell, or generic error. Those outcomes stop the run and are recorded in OUTPUT_SUMMARY; when includeDiagnostics is enabled, the same outcome is also written as one minimal dataset row with url, error, errorCode, and scrapedAt. A blocked response is never converted into a successful empty result. fixturePath exists only for offline QA and is never used as a live fallback. Proxy use does not bypass access controls.

Usage and support

Cost depends on Apify compute, request time, dataset size, and any proxy traffic. Keep limit small, start with the default single request, and inspect OUTPUT_SUMMARY before scheduling repeated runs. See the Actor's Pricing tab for current account rates.

Use the Actor Issues page to report a problem. Include the run ID, the input used, and the run summary; do not include tokens, cookies, or private data. This Actor is not affiliated with, endorsed by, or sponsored by TikTok. Use it only for public data and in accordance with the source's terms, robots guidance, and applicable law. Public pages can contain personal information; use the output only for lawful purposes.