# Changelog of Tiktok Video Scraper (`fertech/tiktok-video-scraper`) Actor

- **URL**: https://apify.com/fertech/tiktok-video-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/fertech/tiktok-video-scraper.md

## Changelog

### 0.2.0 — 2026-09-23

#### Changed — pricing

- **Every submitted URL is now charged exactly once, whatever the outcome** —
  delivered, `not-found`, `invalid-url`, `blocked`, `unsupported-page` or
  `network`. Previously only delivered videos were charged and error records
  were free. A URL retried several times is still charged once, not once per
  attempt. See the README's pricing section.

#### Added — slideshow ("photo") posts now work

- **Slideshow posts are supported.** TikTok serves these at both
  `/photo/<id>` and `/video/<id>`, but only the `/video/` form carries the data.
  `/photo/` URLs are now accepted and rewritten automatically. Previously they
  were rejected as invalid.
- **Short links are resolved before crawling**, through the proxy, so a share
  link pointing at a slideshow reaches the right page. Most TikTok share links
  point at slideshows, so this affected the majority of real-world input.
- `tiktok.com/t/<code>` share links are now recognised alongside
  `vm.tiktok.com` and `vt.tiktok.com`.
- URLs with an empty handle (`tiktok.com/@/video/<id>`), which TikTok itself
  emits in some share redirects, are now accepted.

#### Added — clearer failure reporting

- New error code `unsupported-page` for a page that loaded but carried no
  recognisable video payload. These now **fail immediately instead of retrying
  four times**, since re-fetching returns an identical page. The error
  description names the page's hydration scopes and size so an unsupported page
  type is diagnosable from the dataset.
- New error code `network` for connection, TLS, DNS and timeout failures.
  Previously these were reported as `blocked`, which wrongly blamed TikTok for
  an infrastructure problem.
- Anti-bot challenges and unrecognised pages are now described differently in
  the run log instead of both reading as "WAF challenge".
- Runs log the proxy configuration in effect at startup, and print a diagnostic
  summary when every request in a run fails.

#### Changed — input

- **Removed the proxy configuration field.** TikTok blocks datacenter IPs at
  close to 100%, so the Actor always uses Apify residential proxies. Offering
  the choice only allowed runs to be configured in a way that could not work.
  The input form is now just `postURLs` and `maxAttemptsPerUrl`.

#### Added — output presentation

- Dataset views for the Console: **Overview**, **Content & discovery**, and
  **Failed URLs**, so results render as tables rather than raw JSON.
- Output and key-value store schemas, documenting the run summary.

#### Fixed — billing correctness

- A run whose charge budget is exhausted now stops rather than continuing to
  deliver results that cannot be billed.
- The Actor refuses to start if its pay-per-event pricing is misconfigured,
  rather than running and silently charging nothing.

#### Changed — internal

- Default memory reduced to 512 MB. The Actor is an HTTP crawler with a
  measured peak of well under 100 MB, and the platform default was several
  times larger than needed.

### 0.1.0 — 2026-09-22

Initial release.

- Scrape TikTok videos by URL, including short `vm.`/`vt.tiktok.com` links
- Output uses Clockworks-compatible field names
- Returns subtitles, TikTok content categories (`diversificationLabels`) and
  associated search keywords (`suggestedWords`) alongside the standard fields
- Automatic retry on transient anti-bot challenges, on a new proxy session
- Failed, blocked and not-found URLs are reported in the dataset but never charged
- Run summary written to the key-value store with delivery and block-rate counts
