# Changelog of TikTok Hashtag Scraper (`clockworks/tiktok-hashtag-scraper`) Actor

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

This changelog summarizes all changes of the TikTok actors provided by the [Clockworks organization](https://apify.com/store?search=clockworks). The specific actors that are affected are listed for each change.

#### 2026-09-04

*Features*

- Added `hasTikTokShopProduct`, which is `true` when the video has a TikTok Shop product attached. **Only trust the field when it is present** - TikTok does not expose the signal on every route, so an omitted value means we could not determine it, not that the video has no product. It is reliably set for individual videos and profile listings, and often omitted for search results (`tiktok-scraper`, `free-tiktok-scraper`, `tiktok-profile-scraper`, `tiktok-video-scraper`, `tiktok-hashtag-scraper`, `tiktok-sound-scraper`, `tiktok-explore-scraper`, `tiktok-discover-scraper`, `tiktok-user-search-scraper`)

*Fixes*

- `isSponsored` is now also outputted for search results, where it was previously always missing (`tiktok-scraper`, `free-tiktok-scraper`)

#### 2026-08-05

*Features*

- Added `aiVideoDescription` and `aiVideoSummary` input options that enrich each video with an AI-generated, time-segmented description and/or a short summary of its content. The content would be output under `videoMeta`. Both are off by default and billed per video-second (`tiktok-scraper`)

#### 2026-07-27

*Fixes*

- Increases the maximum amount and consistency of results for explore scraper (`tiktok-explore`)

#### 2026-07-14

*Fixes*

- Partially handle login-walled short drama series videos failures.
  - Output `shortDramaSeriesInfo` for the short drama series information.

#### 2026-06-12

*Fixes*

- A rare occurrence of the Actor stopping profile scroll early is fixed (`tiktok-profile`, `tiktok-paid`, `tiktok-data-extractor`)

#### 2026-05-14

*Fixes*

- A rare case when user info of comment authors is missing will be retried (`tiktok-comments-scraper`, `tiktok-scraper`)

#### 2026-04-27

*Fixes*

- `searchSorting` and `searchDatePosted` filters now accept human readable values. The change is backward compatible.

#### 2026-04-09

*Fixes*

- Fixed date filters for >24h in /video search (`tiktok-scraper`)

#### 2026-03-24

*Features*

- Added `topLevelCommentsPerPost` input to limit non-reply comments collected per post (`tiktok-comments-scraper`, `tiktok-scraper`)

#### 2026-03-3

*Fixes*

- Fixed a bug when downloading medias from search with filters.

#### 2026-02-18

*Fixes*

- Fixed status message when submitting slideshows via shortened links for comments scraping (`tiktok-scraper`)

#### 2026-02-19

*Features*

- It's possible to transcribe TikToks without subtitles, see the new subtitles & transcripts option in the input (`tiktok-scraper`)

#### 2026-02-13

*Fixes*

- Fixed intermittent not found errors that occasionally appeared for valid sounds (`tiktok-sound-scraper`)

#### 2026-02-09

*Fixes*

- Relieved blocking for related videos scraping (`tiktok-paid`)

#### 2026-02-06

*Features*

- You can now get `createTime` of accounts in `authorMeta` data.

*Fixes*

- Fixed a race condition pushing multiple error items for profiles (`tiktok-profile`, `tiktok-paid`, `tiktok-data-extractor`)

#### 2026-02-04

*Fixes*

- `BR` proxies are not blocked anymore and are able to scrape TikTok correctly, including all the download options.

#### 2026-01-29

*Fixes*

- Related video scraping is fixed (`tiktok-paid`)

#### 2026-01-16

*Changes*

- Max-result style inputs now have explicit defaults to avoid empty values and improve clarity in the UI (`tiktok-scraper`). Specifically:
  - `maxFollowersPerProfile` → prefill/default set to 0 (no followers data unless set)
  - `maxFollowingPerProfile` → prefill/default set to 0 (no following data unless set)
  - `commentsPerPost` → prefill/default set to 0 (no comments unless set)
    This ensures users understand the default behavior.

#### 2026-01-05

*Fixes*

- Inputs that are incompatible with any type of run because of missing properties will now push an error item.

#### 2025-12-29

*Fixes*

- Posts with no media urls (available only on Mobile App) will be scraped without them. Video or slideshow download for these posts is not available.

#### 2025-12-18

*Fixes*

- Added followersDatasetUrl to output
- Rename `followersDataset` to `followDataset` since it contains both followers and following results.

#### 2025-12-18

*Features*

- You can now customize you search on video tab (`tiktok-scraper`):
  - Sort by relevance, date or number of likes (add-on event `Search video sorting`)
  - Use a strict date filter to get video only from today, last week etc (add-on eventL `Date filter`).

#### 2025-12-11

*Changes*

- `adsCountryCode` is now only responsible for the hashtags region. For profiles, sounds and videos use `adsCreatorsCountryCode`, `adsSoundsCountryCode`, `adsVideosCountryCode` respectively. (`tiktok-trends-scraper`)

*Features*

- Added `repostCount` to video output. Set `statsV2` as the main source instead of `stats`.

#### 2025-12-08

*Features*

- You can now scrape for comments in the main scraper (`tiktok-scraper`)
  *Changes*
- If you scrape for related videos, you get the main video pushed as well

#### 2025-10-30

*Fixes*

- Slightly increased number of scraped profiles from search (`tiktok-paid`, `tiktok-data-extractor`)

#### 2025-10-07

*Fixes*

- Relieved blocking for search & profile scraping (`tiktok-profile`, `tiktok-paid`, `tiktok-data-extractor`)

#### 2025-09-11

*Fixes*

- Conflict between "New to Top 100" filter and "Surging" rank type is not prevented by disabling "New to Top 100" when "Surging" is selected (`tiktok-trends-scraper`)

#### 2025-09-10

*Fixes*

- "New to Top 100 (Hashtags/Songs)" filter is now correctly applied to songs (`tiktok-trends-scraper`)

#### 2025-09-08

*BREAKING*

- Now you can scrape the followers and the following profiles of a specific user by specifying the `maxFollowersPerProfile` and `maxFollowingPerProfile` input property. The `profileConnectionTypes` input property is removed and the input property `resultsPerPage` no longer influences this type of runs (`tiktok-scraper`, `tiktok-followers-scraper`, `tiktok-profile`).

#### 2025-09-05

*Fixes*

- Fixed de-duplication issues for the same posts coming from multiple sources (e.g. hashtags - #cats and #dogs)

#### 2025-09-04

*Changes*

- A dataset item with error description is pushed when a trending list is empty (`tiktok-trending`)

#### 2025-09-02

*Performance*

- Improved overall performance of all runs, especially those requiring a lot of concurrency

#### 2025-09-01

*Fixes*

- Fixed deduplication of hashtag inputs for lower and upper case (`tiktok-hashtag`, `tiktok-paid`, `tiktok-data-extractor`)
  - e.g. TikTok treats #hashtag and #HASHTAG as the same thing, so the scraper will deduplicate it for you :)

#### 2025-08-24

*Fixes*

- Fixed a rare case when the result count would exceed Maximum results limit

#### 2025-08-18

*Fixes*

- A case when a profile could not be scraped because of a broken video is now fixed (`tiktok-profile`, `tiktok-paid`, `tiktok-data-extractor`)

#### 2025-08-15

*Fixes*

- Handle blocking in rare case when the scraper would get stuck mid-run (`tiktok-comments-scraper`)

#### 2025-08-13

*Fixes*

- From now it's not possible to select from the Input Schema proxies that are not able to connect to TikTok (e.g. `IN`)
- Proxy country codes `IT` and `BR` are now partially limited from TikTok. Following this, download is not available with this proxy.

### 2025-08-08

*Changes*

- When downloading media, the KVStore links have extensions

### 2025-08-07

*Fixes*

- Now can scrape channels with invisible Unicode in their usernames from user search

#### 2025-07-10

*Fixes*

- Fixed comment replies sometimes not being scraped and missed (`tiktok-comments-scraper`)

#### 2025-07-04

*Fixes*

- Profile blocking is relieved (`tiktok-profile`, `tiktok-paid`, `tiktok-data-extractor`)

#### 2025-07-03

*Fixes*

- Fixes broken subtitles downloading bug caused internally by an incorrect PPE event charging (`tiktok-paid`)

#### 2025-06-24

*Features*

- Added new related videos scraping `scrapeRelatedVideos` feature (`tiktok-video`, `tiktok-paid`)

#### 2025-06-09

*Fixes*

- Blocking when downloading videos is bypassed better

#### 2025-06-09

*Features*

- Added `mentions` and `detailedMentions` output fields for tagged users data for comments (`tiktok-comments-scraper`)

#### 2025-05-29

*Features*

- You can now scrape followers and followed profiles of users, see profile section of the input schema (`tiktok-profile`, `tiktok-paid`)

### 2025-05-26

*Fixes*

- Improved pagination for comment scraping (`tiktok-comments-scraper`)

## 2025-05-19

*Fixes*

- Rare case when a channel is incorrectly detected as "not found" is now fixed (`tiktok-channel-scraper`)

#### 2025-05-16

*Changes*

- Popularity filters (`mostDiggs` and `leastDiggs`) have been removed from TikTok Data Extractor's input schema. If you'd like to continue using
  them in the input UI editor, consider using TikTok Scraper (Pay per Event) (`tiktok-data-extractor`)

#### 2025-05-05

*Fixes*

- A rare case when a video is falsely detected as non-existent is now fixed (`tiktok-video`, `tiktok-paid`, `tiktok-data-extractor`)

#### 2025-04-29

*Features*

- `mostDiggs` + `leastDiggs` input options to filter by number of hearts (profiles only) (`tiktok-profile`, `tiktok-paid`, `tiktok-data-extractor`)

#### 2025-04-28

*Changes*

- Initial comment requests are handled as a priority in order to see first results faster (`tiktok-comments-scraper`)

#### 2025-04-25

*Input*

- Input schemas now have `oldestPostDateUnified` superseding `oldestPostDate` and `scrapeLastNDays` fields. See input UI for details. Old input is still valid

#### 2025-04-22

*Deprecations*

- `scrapeEmptyChannelInfo` input field is fully removed

#### 2025-04-04

*Fixes*

- Will retry when TikTok falsely says that a profile has 0 videos

#### 2025-03-31

*Features*

- Subtitle infos now contain `source` (e.g. a machine translation or speech recognition) and `version` (carried over directly from TikTok's API responses)

#### 2025-03-17

*Features*

- Added info about whether a comment is pinned/liked by the author (`tiktok-comments-scraper`)

#### 2025-03-05

*Features*

- The `input` property present in the `tiktok-comments` dataset to link the dataset item to the input element that prompted the search

#### 2025-03-06

*Fixes*

- Will now retry requests when TikTok returns faulty data with 0 play count

#### 2025-02-25

*Fixes*

- Rare bug when scraping profile would gather 0 or few videos (`tiktok-profile`, `tiktok-paid`, `tiktok-data-extractor`)

#### 2025-02-19

*Fixes*

- Fixed a rare bug when some videos would not get pushed to the output (`tiktok-paid`, `tiktok-data-extractor`)

#### 2025-02-17

*Features*

- The `tiktok-comments` Actor now also accepts profiles as input like `tiktok-paid` and scrape the comments from their videos.

#### 2025-02-17

*Changes*

- When you provide invalid URLs/inputs (that don't pass a regex check), we now push a single item for ALL invalid URLs
  (instead of one item per each invalid input entry), to spare your credits. That single item has an `error` and `invalidUrls` output fields.

#### 2025-02-13

*Fixes*

- When providing many incorrect URLs, you will not encounter crawler crash with a 429 status code

#### 2025-02-11

*Fixes*

- Fixed a rare occurrence when few comments would get scraped (`tiktok-comments-scraper`)

#### 2025-01-29

*Features*

- Videos from profiles now have `fromProfileSection` property with a `reposts` or `videos` value (`tiktok-profile`, `tiktok-paid`, `tiktok-data-extractor`)
  *Fixes*
- All repost posts should now be scraped (`tiktok-profile`, `tiktok-paid`, `tiktok-data-extractor`)

#### 2025-01-23

*Fixes*

- Fixed rare case when hashtag would be determined as "not found" despite existing (`tiktok-hashtag`, `tiktok-paid`, `tiktok-data-extractor`)

#### 2025-01-23

*Features*

- Tiktok scrapers now output `LocationMeta` if the video or slideshow is tagged to a location

#### 2025-01-22

*Fixes*

- Channel scraping is operational again (`tiktok-channel-scraper`)

#### 2025-01-19

*Fixes*

- TikTok scrapers were partially broken due to the US TikTok ban. This has been fixed by forcing access from outside of the US.

#### 2025-01-07

*Features*

- The format of the video description is now persisted

#### 2024-12-06

*Features*

- You can now sort profile videos (`tiktok-profile`, `tiktok-paid`, `tiktok-data-extractor`)

#### 2024-12-03

*Fixes*

- Subtitles are now again downloaded when they were missing previously

#### 2024-11-29

*Fixes*

- When reaching "Maximum results" for "Pay per result" actors, downloads will still start (`tiktok-profile`, `tiktok-hashtag`, `tiktok-sound`, `tiktok-video`)

#### 2024-11-21

*Features*

- Added `postUrl` property to items in `detailedMentions` if a mention is a specific post

#### 2024-11-19

*Changes*

- Changed comment collection behaviour - more comments are collected, but it might take more time (`tiktok-comments-scraper`)

#### 2024-11-20

*Fixes*

- Friend count and `commerceUserInfo` is now extracted again for post scraping

#### 2024-11-18

*Features*

- Can now scrape reposted videos of a user. You can now specify what profile tabs you'd like to scrape in the input. If some section has no videos,
  you will get an item with profile information and the note that the section is empty
- Output items now contain a `detailedMentions` array, which will (if a post has mentions) have links to profiles and their usernames
  *Changes*
- Dataset items for an empty video section of a profile now contain 'Profile has no videos' message instead of 'Profile is empty'

#### 2024-11-11

*Features*

- Can now download profile avatars (`tiktok-profile`, `tiktok-paid`) and music cover images (`tiktok-sound`, `tiktok-paid`)
- Can now filter profile videos with a "From:" date filter (to scrape old videos)

#### 2024-10-29

*Fixes*

- Can now scrape slideshows from shortened links again

#### 2024-10-27

*Changes*

- Slightly decreased the number of collected hashtag videos (up to 25%), but the cost should go around 3 times down (`tiktok-paid`)

#### 2024-10-14

*Fixes*

- Profile info is now pushed when a user only has pinned videos that do not match date filters

#### 2024-10-11

*Fixes*

- Fixed rare cases of detecting a profile as "not found", despite it existing, and of collecting 0 videos

#### 2024-10-03

*Changes*

- Slightly improved waiting times when scraping profiles and post details

#### 2024-09-30

*Changes*

- Hashtag scraping logic is updated to collect more results, although at a lower speed

*Features*

- Added extraction of post's "Paid partnership" status under the new `isSponsored` output field
  - (Works for all input options, except for search by queries, because of a limitation on TikTok's side)

#### 2024-09-20

*Fixes*

- Profiles can now scrape more than 30 videos (`tiktok-profile`, `tiktok-paid`, `tiktok-data-extractor`)
- Geo-blocking (e.g. for India) is now detected and an attempt to rotate proxies is made

#### 2024-09-17

*Fixes*

- Captcha when scraping profiles is now quickly detected and RESIDENTIAL proxy is used to bypass it (`tiktok-profile`)

#### 2024-09-11

*Features*

- Posts now have a profile link under `authorMeta`

#### 2024-09-03

*BREAKING*

- Info for empty profiles is now under `authorMeta` property
  *Fixes*
- `input` field is now correct for empty profiles

#### 2024-08-28

*Fixes*

- Mentions are now correctly extracted

#### 2024-08-19

*Fixes*

- Decreased cases when less than 100 results would be scraped from a sound page, even though there were more videos (`tiktok-sound`)

#### 2024-08-08

*Fixes*

- Fixed a very rare case when a profile with just 1 video would get stuck in an infinite retry loop (`tiktok-profile`)
  *Features*
- A new input option to exclude pinned posts from profiles is now present (`tiktok-profile`, `tiktok-paid`, `tiktok-data-extractor`)

#### 2024-08-06

*Fixes*

- Profile scraping has been fixed for certain proxy groups (`tiktok-profile`)

#### 2024-07-26

*Changes*

- Somewhat improved speed of comment scraping (`tiktok-comments-scraper`)

#### 2024-07-19

*Fixes*

- Hashtag scraping is more consistent at scraping at least 100 results (if it has this many videos) (`tiktok-hashtag`, `tiktok-paid`, `tiktok-data-extractor`)

#### 2024-07-16

*Fixes*

- Hashtag scrape should now again scrape at least 100 results (`tiktok-hashtag`, `tiktok-paid`, `tiktok-data-extractor`)

#### 2024-07-12

*Fixes*

- Fixed rare cases when the whole account scrape would fail if a profile contained a faulty video (`tiktok-profile`)
- Handled rare cases when profile scraping would get stuck with "No videos returned, but cursor is updated, retrying..." (`tiktok-profile`)
- Handled rare cases when profile would timeout waiting for initial user details (`tiktok-profile`)

#### 2024-07-11

*Fixes*

- Reduced number of cases when search scrapes timed out without results (`tiktok-paid`, `tiktok-data-extractor`)
- Pinned posts are scraped again

#### 2024-07-04

*Fixes*

- `input` output field is now present again for missing profiles (`tiktok-profile`)

#### 2024-07-01

*Fixes*

- Improved success rate for search (`tiktok-paid`, `tiktok-data-extractor`)

#### 2024-06-26

*Fixes*

- Slight improvement of pagination logic (`tiktok-comments`)
- `input` field is back for output items (`tiktok-profile`)

#### 2024-06-13

*Fixes*

- Search scrapes again collect more than one page of results (`tiktok-paid`, `tiktok-data-extractor`)
- Profiles are now scraped in full again (`tiktok-profile`)

#### 2024-06-11

*Fixes*

- Updated Crawlee version to avoid "TargetClosedError" error and added retries in case it happens anyway
- Fixed cases when comment scrape would end too early (`tiktok-comments`)

#### 2024-06-10

*Fixes*

- Improved video download for some proxy groups
- Fixed cases when covers would fail to be downloaded
- Hashtag scrape will now try scraping more results: up to 800-900 for some tags as opposed to 20-50 previously (`tiktok-hashtag`)

#### 2024-06-07

*Fixes*

- Covers are now stored correctly in the Key-Value store
- Rare cases of scraper thinking video is not found when it is actually found eliminated

#### 2024-06-04

*Changes*

- If you provide an incorrect URL, the actor won't fail, but will push an error result to the dataset and carry on with valid URLs

#### 2024-05-31

*Fixes*

- Fixed rare crash occurrence when search crawling fails (`tiktok-search`)

#### 2024-05-29

*Fixes*

- Fixed account search functionality (`tiktok-paid`, `tiktok-data-extractor`)
- Fixed scraping of posts from shortened post URLs

#### 2024-05-27

*Changes*

- During a run, you can see periodic aggregated statistics in the status message: how many profiles/hashtags/etc. have been finished, how many media has been downloaded.

#### 2024-05-28

*Changes*

- Downloaded media now have the author's name and date posted in the 2nd and 3rd segments of filenames

#### 2024-05-27

*Fixes*

- Correctly push results for accounts with no videos (`tiktok-profile`)

#### 2024-05-24

*Fixes*

- A rare occurrence when profile scraping would end prematurely is now fixed (`tiktok-profile`)

#### 2024-05-20

*Fixes*

- Fixed a bug when the scraper would fail if a profile contained sensitive content (`tiktok-profile`)
- Fixed an early scraper finish related to the above bug (`tiktok-profile`)
- Fixed scraping of slideshows with `vm.` URL shortened format (`tiktok-video`)

#### 2024-05-07

*Features*

- You can now select country for proxy if you want to scrape geolocked videos under "Proxy settings" section. This will increase costs of scraping (`tiktok-paid`)

#### 2024-05-03

*Fixes*

- Data duplication is prevented in some cases of post detail scraping (`tiktok-video`)

#### 2024-05-02

*Fixes*

- Video download links are now not created for slideshow posts

#### 2024-04-30

*Fixes*

- Fixed faulty video download in some cases

#### 2024-04-16

*Fixes*

- When downloading videos, fixed cases when the actor would crash from a discovered malformed URL

#### 2024-04-08

*Fixes*

- Posts with sensitive content are now correctly handled again (`tiktok-video`, `tiktok-data-extractor`, `tiktok-paid`)

#### 2024-04-05

*Fixes*

- Improved navigation speed for post scraping (`tiktok-video`, `tiktok-data-extractor`, `tiktok-paid`)

#### 2024-04-04

*Fixes*

- Fixed cases when input terms/queries would not be listed in the output items (`tiktok-profile`, `tiktok-paid`, `tiktok-data-extractor`)
- Author info is collected fully, if it is missing

#### 2024-04-03

*Fixes*

- Fixed a bug when the actor would fail for some profile links that do not exist (`tiktok-profile`)
  *Features*
- Subtitle download is now supported (where it's present on the video) (tiktok-video, tiktok-paid, tiktok-free, tiktok-sound, tiktok-hashtag, tiktok-profile)

#### 2024-04-01

*Changes*

- Download logic changes to speed up the process (`*`)

#### 2024-03-25

*BREAKING CHANGES*

- Max memory limit is now 4GB (`tiktok-data-extractor`)
  *Features*
- If a profile doesn't have videos that match your date filter, it will push an item to the dataset anyway with account information (`tiktok-profile`)

#### 2024-03-22

*Fixes*

- Video downloading is restored (tiktok-profile, tiktok-hashtag)

#### 2024-03-21

*Fixes*

- Cases where search returns captcha are now retried (it used to tell that there are 0 results) (tiktok-search)
  *Features*
- Erroneous outputs (e.g. empty profiles or not-found hashtags) now contain `input` field that matches your exact input for that item (e.g. profile name or URL)

#### 2024-03-19

*Features*

- For comments you now can see a link to the commenter's avatar thumbnail (`tiktok-comments`)

#### 2024-03-06

*Fixes*

- For some proxy groups the reliability of profile scraping has been improved (tiktok-profile)

#### 2024-03-05

*BREAKING CHANGES*

- For profiles, hashtags, and posts that are not found, and for search queries that return no results, you will now get an item in the dataset with the URL property and the reason this profile/tag has not been scraped

#### 2024-02-22

*Fixes*

- Videos are now properly downloaded again (\*)

#### 2024-02-21

*Fixes*

- A rare case of the Actor failing is now fixed (tiktok-comments)

#### 2024-02-19

*Fixes*

- API boosting has been unblocked

#### 2024-02-12

*Changes*

- API boosting is temporarily disabled as TikTok has introduced some blocking that is being worked on (tiktok-hashtag, tiktok-profile)

#### 2024-01-31

*Fixes*

- Hashtag name from input is now again in the output items (`searchHashtag`) (tiktok-hashtag)

#### 2024-01-29

*Changes*

- New feature for improved scraping speed is now applied by default for 50% of users as part of A/B testing (tiktok-profile, tiktok-hashtag)

#### 2024-01-29

*Fixes*

- URLs that contain "/photo/" in them are now correctly handled (tiktok-video)
- Several improvements for comment scraping that prevent the actor from getting stuck (tiktok-comments)

#### 2024-01-17

*Changes*

- Input fields for enabling experimental API scraping have been removed. This behaviour will be enabled by default once it is more polished, and for now you can manualy enable it by passing in `"enableCheerioBoost": true` in the JSON editor.

#### 2024-01-04

*Features*

- Experimental boosting can now be applied to hashtags. As with profile boosting (see 2023-12-29), tick the option "Boost hashtag scraping" and a faster version will be deployed (`tiktok-hashtag`)

#### 2023-12-29

*Features*

- Boosting for profiles is back: tick the "Boost profile scraping" option and it will be faster. Its con is that TikTok might suddenly change their website and this way of scraping will likely start failing then. Under the hood it uses API requests as opposed to launching a full-blown browser simulation. (`tiktok-profile`)

#### 2023-12-15

*Fixes*

- Fixed an issue with validating profile URLs. (`tiktok-profile`, `tiktok-comments`, `tiktok-paid`, `tiktok-free`)

#### 2023-12-15

*Fixes*

- Fixed bug where waiting for page reload when blocked could crash the actor with `TimeoutError`. (`All TikTok actors`)

#### 2023-12-14

*Fixes*

- Fixed a bug where the Actor is failing to query author data. (`All TikTok actors`)
- Fixed issue where the actor sometimes gets stuck (`tiktok-profile`, `tiktok-comments`, `tiktok-paid`, `tiktok-free`)

#### 2023-12-12

*Fixes*

- Fixed a bug where the Actor is failing to scrape profiles. (`All TikTok actors`)

*Changes*

- Plain HTTP stopped working for start URLs so instead use full browser for everything. This will make profiles -> posts runs significantly slower and more costly. We are looking into options on how to enable plain HTTP again

#### 2023-11-18

*Fixes*

- Fixed a bug where scraping comments and profiles fail. (`tiktok-profile`, `tiktok-comments`, `tiktok-paid`)

#### 2023-09-29

*Features*

- You can now search for profiles (Accounts) by username. You can pass a list of "Profile Queries" (`profilesQueries`) and set a limit for each query by providing the "Max profiles per query" (`maxProfilesPerQuery`). The actor will then search for the profiles and scrape the videos of each profile. (`tiktok-profile`)

#### 2023-08-29

*Fixes*

- Cheerio has been unblocked, you can now scrape posts quickly again, if you request <= 15 videos for `tiktok-hashtag`, `tiktok-sound`
  or <= 30 for `tiktok-profile`
  *Features*
- You can now disable cheerio/HTTP querying in the input by setting `disableCheerioBoost` and `disableEnrichAuthorStats` to `true`.
  This will help if the problem with quick scraping arises ever again. (`tiktok-hashtag`, `tiktok-profile`, `tiktok-sound`, `tiktok-free`, `tiktok-paid`)

#### 2023-08-21

*Changes*

- Temporarily, boosting with Cheerio and additional querying for missing author stats has been disabled.
  It will be returned soon, once TikTok blocking is bypassed

#### 2023-08-15

*Fixes*

- The crawler will rotate proxies if a sound is unavailable under the current country (`tiktok-sound`)

#### 2023-08-14

*Features*

- If a sound is blocked in some country, the scraper will retry (`tiktok-sound`)

#### 2023-08-10

*Features*

- You can now download slideshow images by toggling a corresponding input (all, except for `tiktok-comments`)
- Output videos now have a field telling whether they are slideshows (all, except for `tiktok-comments`)
- If fast Cheerio crawler fails to load a page even with retries, the slower crawler will be used as a fallback (all, except for `tiktok-comments`)

#### 2023-07-28

*Features*

- Output now contains `submittedVideoUrl` in addition to `webVideoUrl`. It copies
  the post url in the input and may differ from the `webVideoUrl`, but both would lead to the same post.
  Will be present if you input direct post URLs. (`tiktok-video`, `tiktok-comments-scraper`)

#### 2023-07-26

*Fixes*

- Videos with sensitive content, which require a login, are now skipped
  gracefully (`tiktok-video`, `tiktok-comments-scraper`)

#### 2023-07-25

*BREAKING CHANGES*

- Proxies have been removed from input. Apify's datacenter proxies are always chosen,
  as they used to be by default (for all scrapers)
- `Scrape info about private/empty channels` has also been removed from input,
  and set to `true` by default. If you applied this option and set it to `false` previously,
  you should experience no changes (`tiktok-profile`, `tiktok-paid`, `tiktok-free`)

*Changes*

- The maximum memory is now limited to 4096 MBs for all pay-per-result actors
  (`tiktok-hashtag`, `tiktok-profile`, `tiktok-sound`, `tiktok-video`)

#### 2023-07-11

*Fixes*

- Now URLs in the format of `https://www.tiktok.com/t/.../` are also recognized as post URLs.

#### 2023-07-04

*Features*

- Now URLs in the format of `vt.tiktok.com` are also supported as post URLs.

#### 2023-06-29

*Fixes*

- Now correctly utilizes proxy settings when boosting the scraper with Cheerio
  and querying for author stats. Previously it would often fail. (`tiktok-profile-scraper`, `tiktok-hashtag-scraper`, `tiktok-sound-scraper`)

#### 2023-06-26

*Fixes*

- Fixed a bug when in some cases it would not return any comments. (`tiktok-comments-scraper`)
- Fixed a bug during reply counting. Previously it would sometimes stop too early, especially if the requested number is low. (`tiktok-comments-scraper`)
- If the author stats are missing, the scraper will now make an additional quick request to the author page to get them.
  These stats get cached, so the query is made only one time. (`tiktok-profile-scraper`, `tiktok-hashtag-scraper`, `tiktok-sound-scraper`)

#### 2023-06-23

*Features*

- You can now scrape replies. Note that currently it's not guaranteed that all of them are going to get scraped. (`tiktok-comments-scraper`)
- Scraping is up to 4x faster if you limit `maxResultsPerPage` to 30 for posts and 15 for hashtags. This is because the scraper can utilize non-browser requests without the need to scroll. (`tiktok-profile-scraper`, `tiktok-hashtag-scraper`, will be added to `tiktok-scraper` once it is converted to a price-per-result system).
- Added `oldestPostDate` and `scrapeLastNDays` to only scrape posts from now up to a certain date. (`tiktok-profile-scraper`)

#### 2023-05-25

*Features*

- You can now scrape videos using some music at URLs like https://www.tiktok.com/music/plan-7214283318660073474 (`tiktok-sound-scraper`)

#### 2023-05-19

*Features*

- You can now enable the flag in input (`scrapeEmptyChannelInfo`) that will allow you to save info about private or empty channels even if they don't contain any posts (`tiktok-profile-scraper`)

#### 2023-04-19

*Fixes*

- Won't wait for the first XHR response with hashtags if the data in the initial script is enough.
- Doesn't try to retry on 404 pages or private accounts anymore

#### 2023-04-12

*Features*

- Progress now tracks the last video reached while scrolling at a certain page (both for hashtags and profiles) and the comments scraped for a post. If scrolling fails (e.g. due to a captcha) the crawler will try to restore the scroll at the last video/comment, so as not to scroll all the way down again. If restoration fails though, it should fall back to the old behavior and print a warning.
- Change default `shouldRetryStuckComments` to `true`, since now it's possible to restore scroll in such cases.
- When comment or post list crawlers manage to scrape new videos by scrolling, `retryCount` is reset to 0.

*Fixes*

- The hashtag route now catches the initial XHR response that adds usually up to 15 new videos which previously weren't scraped
- Added failed request handler to post detail route, so that no matter what error happens during comment scrape, it's going to push partial results if retries are exhausted.

#### 2023-04-03

*Features*

- New option to download cover images. Can also specify an optional KVStore name (shared with video download). Analogous to video download from 2023-03-27. If opted in, will replace the link in `videoMeta.coverUrl` with link to kvStore. Also added `originalCoverUrl` pointing to tiktok CDN cover url.

#### 2023-03-27

*Features*

- New option to download videos. Can also specify optional KVStore name. If opted in, will replace the link in `mediaUrls` with link to kvStore. Will also place `downloadAddr` in `videoMeta` pointing to kvstore and `originalDownloadAddr` pointing to tiktok CDN

#### 2023-03-07

*Fixes*

- Hotfixed broken post URLs

#### 2023-03-06

*Fixes*

- Don't stop scrolling if there are still more videos to load (this happened when the initial videos count was less than exptected, now we check dynamically if there are more videos to load)

#### 2023-02-22

*Fixes*

- Don't get stuck if all videos or comments were already loaded before scrolling (this bug happened when there were less than 20 videos or comments)

#### 2023-02-03

*Fixes*

- Improved scrolling for videos that got stuck on 30 videos loaded. It is still a bit clunky and there is a lot of blocking but should work with few retries.

#### 2023-01-27

Features

- `loginCookies` are no longer required for scraping comments
- The comment crawling is rewritten to scrape from underneath the post
- no login sessions are created or managed anymore by the actor
- `loginCookies` on input are deprecated and generate warning in the log

#### 2022-8-14

Features

- Output was updated to include more properties.
  New properties:

```json
{
  "locationCreated": "CA",
  "isAd": false,
  "isMuted": false,
  "authorMeta": {
    "bioLink": "https://www.thewhiskyexplorer.ca",
    "commerceUserInfo": {
      "commerceUser": true,
      "category": "Food/Beverage",
      "categoryButton": false
    },
    "isUnderAge18": false,
    "privateAccount": false,
    "region": "CA",
    "roomId": "",
    "ttSeller": false
  },
  "musicMeta": {
    "coverMediumUrl": ...,
    "musicId": "7105825676251351814"
  },
  "videoMeta": {
    "coverUrl": ...,
    "definition": "720p",
    "format": "mp4"
  },
}
```

#### 2022-2-1

*Features*

- Add the possibility to scrape comments under login using loginCookies
- Add login session management to avoid blocking of the account used for scraping comments
- Searching hashtag and number of views for this hashtag are now stored in the output

*Fixes*

- Actor does not deduplicate videos for different hashtags - improves the accuracy of the number of outputted items
- Improved logs

#### 2022-1-14

*Fixes*

- fixed scraping of `authorMeta` data from scripts - affected: post urls and first batch of videos for hashtag and profile

#### 2022-1-10

*Fixes*

- updated scraping of hashtags and profiles - TikTok randomly displays two types of scripts with data
- fixed number of output items to be the same as `resultsPerPage`
- fixed `Timed out error` when waiting for the xhr response with data - the scraper now scrolls until it receives
  the response or the waiting/scrolling times out
- more readable error messages
- **fixed progress caching**
- empty strings are no longer accepted as `hashtag`, `postUrl` or `profile`

#### 2022-1-4

*Fixes*

- updated scraping of individual posts - TikTok randomly displays two types of scripts with data

#### 2021-10-20

*Fixes*

- when `page.waitingForResponse` timeouts, it retires the session and restarts browser. This should prevent
  looping of timeouts on request retries

*Features*

- TikTok sometimes sends a request for the same data two times. This behavior won't affect total number of
  outputted data, specified on input. (Also duplicity videos for a hashtag/profile searches will
  be scraped only once, but won't be counted into the number of
  outputted data for the specific search)
- Sometimes there are more than 6 videos loaded on the search page. The scraper won't push them into the
  outputted results, so that the number of results remains consistent according to the specification on
  input.

#### 2021-10-18

*Fixes*

- computation of `outputLength` is no longer dependent on persisted progress,
  meaning scraping of more than one hashtag/profile is now working properly

#### 2021-10-15

*Fixes*

- `handlePageFunction` does not timeout when `resultsPerPage` are set low

#### 2021-10-14

*Features*

- New output structure
- Added the possibility to scrape more than the first page of results (regulated by `resultsPerPage` input)
- Scrapes user profiles defined on input by username in `profiles`
- Added optional attributes `maxConcurrency`, `maxRequestRetries` and `resultsPerPage` to input
- If `resultsPerPage` is not specified, it defaults to 10 and minimal value is 1
