# Ultimate TikTok Scraper (no-limit) (`novi/tiktok-scraper-ultimate`) Actor

Scrape TikTok profiles, videos, and hashtags to extract key data. Use search queries or direct URLs to gather post details, shares, hearts, followers, music data, and user info.

- **URL**: https://apify.com/novi/tiktok-scraper-ultimate.md
- **Developed by:** [Novi](https://apify.com/novi) (community)
- **Categories:** Social media, Lead generation, Videos
- **Stats:** 774 total users, 88 monthly users, 100.0% runs succeeded, 22 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.28 / 1,000 each videos

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

This is a TikTok scraper that helps you extract video data. You can give it a list of TikTok URLs (like videos, user
profiles, or hashtags) or just a list of keywords to search for.

One of the best features is that you get direct video URLs **without the watermark**.

You also **don't need to pay for proxies**, which saves you money.

### Features

- Scrape data using a list of URLs (supports Video, User, Hashtag, Music, and Search links).
- Search for new videos using a list of keywords.
- Filter your searches by date (like "This Week" or "This Month").
- Filter searches by a specific country or region.
- Sort search results by "Most Liked," "Most Recent," or "Relevance."
- Runs without needing separate proxies.
- (Advanced) Use your own JavaScript code to reformat the output data.
- Only scrapes public data.
- Access the results using the Apify SDK or REST API.

### How to Use It

To learn the basics of how to run this tool, the best place to start is
the [official Apify guide on running actors](https://docs.apify.com/platform/actors/running).

### Support

If you run into any trouble or have questions, you can file an issue under the "Issues" tab here on the actor page or
ask the community on the Apify Discord server.

### Bugs and Updates

This actor is actively developed. We keep it updated to fix any bugs and make sure it keeps working as TikTok changes.
It's built to be light on memory, so you can scrape a lot of data efficiently.

### Input Settings

Here is a breakdown of the settings you can configure for the scraper.

| Field                       | Type               | Description                                                                                                                                                                                                                                |
|:----------------------------|:-------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **`startUrls`**             | Array (of strings) | Paste the TikTok URLs you want to scrape. You can mix video links, user profiles (`@user`), hashtag pages, etc.  ⚠️ ⚠️ ⚠️ Please note that you are charged even when URL is 404 Not Found. Please verify your URL when input data ⚠️ ⚠️ ⚠️ |
| **`maxItems`**              | Number             | The maximum number of results you want to get back. (Default is 1000).                                                                                                                                                                     |
| **`keywords`**              | Array (of strings) | (Optional) A list of search terms. Use this to run new searches instead of scraping specific URLs.                                                                                                                                         |
| **`dateRange`**             | String             | (Search only) A time filter for your keyword search (e.g., "WEEK," "MONTH"). Default is "ALL_TIME".                                                                                                                                       |
| **`location`**              | String             | (Search only) A 2-letter country code (like "US" or "GB") to get results from that region. Default is "US".                                                                                                                                |
| **`sortType`**              | String             | (Search only) How to sort your search results. Options are "RELEVANCE" (Default), "MOST_LIKED," or "MOST_RECENT."                                                                                                                        |
| **`customMapFunction`**     | String             | (Advanced) Lets you write a bit of JavaScript code to change the output data for every single item.                                                                                                                                        |
| **`includeSearchKeywords`** | Boolean            | (Advanced) If you check this, the final results will include a field showing which keyword was used to find that item.                                                                                                                     |

### Input Examples

Here are a couple of ways to run it.

**1. Scraping a list of different URLs**
(This uses the default prefill settings from the actor)

```json
{
  "startUrls": [
    "https://www.tiktok.com/@billieeilish/video/7050551461734042926",
    "https://www.tiktok.com/@gordonramsayofficial",
    "https://www.tiktok.com/search?q=Recipes",
    "https://www.tiktok.com/tag/duet"
  ],
  "maxItems": 1000
}
```

**2. Running a new keyword search**
(This ignores `startUrls` and uses the "Query Builder" fields instead)

```json
{
  "keywords": [
    "Artificial Intelligence",
    "podcast"
  ],
  "maxItems": 500,
  "dateRange": "WEEK",
  "location": "GB",
  "sortType": "MOST_LIKED"
}
```

### Output Examples

```json

[
  {
    "added_sound_music_info": {
      "album": "",
      "artists": [],
      "audition_duration": 54,
      "author": "VTV Giai Tri Official",
      "author_deleted": false,
      "author_position": null,
      "avatar_medium": {
        "height": 720,
        "uri": "tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/aweme/720x720/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.webp?x-expires=1683439200&x-signature=Nq4qV8EaKGCuXuy1BNauD7klTH0%3D",
          "https://p16-sign-sg.tiktokcdn.com/aweme/720x720/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.jpeg?x-expires=1683439200&x-signature=x8tIQWWiY3wzNiefIUjhh8g9q9o%3D"
        ],
        "width": 720
      },
      "avatar_thumb": {
        "height": 720,
        "uri": "tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/aweme/100x100/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.webp?x-expires=1683439200&x-signature=FHXsU3jZ8YKoyxCWYxnwF3W3o2w%3D",
          "https://p16-sign-sg.tiktokcdn.com/aweme/100x100/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.jpeg?x-expires=1683439200&x-signature=AbJ3SuoZHmlN4DCbqkYoVmpbci8%3D"
        ],
        "width": 720
      },
      "binded_challenge_id": 0,
      "can_not_reuse": false,
      "collect_stat": 0,
      "commercial_right_type": 2,
      "cover_large": {
        "height": 720,
        "uri": "tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/aweme/1080x1080/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.webp?x-expires=1683439200&x-signature=y9%2Fv5Fnzgc6JHvd%2Fu7gW2Pvz6L4%3D",
          "https://p16-sign-sg.tiktokcdn.com/aweme/1080x1080/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.jpeg?x-expires=1683439200&x-signature=7FvoANBrpBQ6BeEnRWZzFg8gCHY%3D"
        ],
        "width": 720
      },
      "cover_medium": {
        "height": 720,
        "uri": "tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/aweme/720x720/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.webp?x-expires=1683439200&x-signature=Nq4qV8EaKGCuXuy1BNauD7klTH0%3D",
          "https://p16-sign-sg.tiktokcdn.com/aweme/720x720/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.jpeg?x-expires=1683439200&x-signature=x8tIQWWiY3wzNiefIUjhh8g9q9o%3D"
        ],
        "width": 720
      },
      "cover_thumb": {
        "height": 720,
        "uri": "tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/aweme/100x100/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.webp?x-expires=1683439200&x-signature=FHXsU3jZ8YKoyxCWYxnwF3W3o2w%3D",
          "https://p16-sign-sg.tiktokcdn.com/aweme/100x100/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.jpeg?x-expires=1683439200&x-signature=AbJ3SuoZHmlN4DCbqkYoVmpbci8%3D"
        ],
        "width": 720
      },
      "dmv_auto_show": false,
      "duration": 54,
      "duration_high_precision": {
        "audition_duration_precision": 54.7,
        "duration_precision": 54.7,
        "shoot_duration_precision": 54.7,
        "video_duration_precision": 54.7
      },
      "external_song_info": [],
      "extra": "{\"aed_music_dur\":1,\"beats\":{},\"can_read\":true,\"can_reuse\":true,\"erase_type\":0,\"erase_uid\":0,\"from_user_id\":0,\"has_edited\":0,\"is_ugc_mapping\":false,\"is_used\":0,\"owner_id\":6812490744957256705,\"resource_status\":0,\"review_unshelve_reason\":0,\"reviewed\":0,\"schedule_search_time\":0}",
      "id": 7229168247013182210,
      "id_str": "7229168247013182210",
      "is_audio_url_with_cookie": false,
      "is_author_artist": false,
      "is_commerce_music": true,
      "is_matched_metadata": false,
      "is_original": false,
      "is_original_sound": true,
      "is_pgc": false,
      "is_play_music": false,
      "is_shooting_allow": true,
      "lyric_short_position": null,
      "mid": "7229168247013182210",
      "multi_bit_rate_play_info": null,
      "mute_share": false,
      "offline_desc": "",
      "owner_handle": "vtvgiaitriofficial",
      "owner_id": "6812490744957256705",
      "owner_nickname": "VTV Giai Tri Official",
      "play_url": {
        "height": 720,
        "uri": "https://sf16-ies-music-sg.tiktokcdn.com/obj/tiktok-obj/7229168238650166018.mp3",
        "url_list": [
          "https://sf16-ies-music-sg.tiktokcdn.com/obj/tiktok-obj/7229168238650166018.mp3"
        ],
        "width": 720
      },
      "position": null,
      "prevent_download": false,
      "preview_end_time": 0,
      "preview_start_time": 0,
      "recommend_status": 100,
      "search_highlight": null,
      "sec_uid": "MS4wLjABAAAAcmWx88_xRFU57rY2YUYFPBarAgam7vOnfxR-TvpyfvKtkFEAsihLpdILoRLvqYjV",
      "shoot_duration": 54,
      "source_platform": 24,
      "status": 1,
      "tag_list": null,
      "title": "original sound - vtvgiaitriofficial",
      "tt_to_dsp_song_infos": null,
      "user_count": 0,
      "video_duration": 54
    },
    "anchors": null,
    "anchors_extras": "",
    "author": {
      "accept_private_policy": false,
      "account_labels": null,
      "account_region": "",
      "ad_cover_url": null,
      "advance_feature_item_order": null,
      "advanced_feature_info": null,
      "apple_account": 0,
      "authority_status": 0,
      "avatar_168x168": {
        "height": 720,
        "uri": "tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d~c5_168x168.webp?x-expires=1683439200&x-signature=EZgY2zBsY%2FsguEcz5u9%2FZsZ78f8%3D",
          "https://p16-sign-sg.tiktokcdn.com/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d~c5_168x168.jpeg?x-expires=1683439200&x-signature=pYatTidlUIwOx%2Bf6w99kydOl%2Fss%3D"
        ],
        "width": 720
      },
      "avatar_300x300": {
        "height": 720,
        "uri": "tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d~c5_300x300.webp?x-expires=1683439200&x-signature=8%2BSgQSGrkVrU9GhImQQMSDnKu5w%3D",
          "https://p16-sign-sg.tiktokcdn.com/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d~c5_300x300.jpeg?x-expires=1683439200&x-signature=Dpu9ST3GbZxtmhGvEWXtOQG7VX4%3D"
        ],
        "width": 720
      },
      "avatar_larger": {
        "height": 720,
        "uri": "tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/aweme/1080x1080/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.webp?x-expires=1683439200&x-signature=y9%2Fv5Fnzgc6JHvd%2Fu7gW2Pvz6L4%3D",
          "https://p16-sign-sg.tiktokcdn.com/aweme/1080x1080/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.jpeg?x-expires=1683439200&x-signature=7FvoANBrpBQ6BeEnRWZzFg8gCHY%3D"
        ],
        "width": 720
      },
      "avatar_medium": {
        "height": 720,
        "uri": "tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/aweme/720x720/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.webp?x-expires=1683439200&x-signature=Nq4qV8EaKGCuXuy1BNauD7klTH0%3D",
          "https://p16-sign-sg.tiktokcdn.com/aweme/720x720/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.jpeg?x-expires=1683439200&x-signature=x8tIQWWiY3wzNiefIUjhh8g9q9o%3D"
        ],
        "width": 720
      },
      "avatar_thumb": {
        "height": 720,
        "uri": "tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/aweme/100x100/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.webp?x-expires=1683439200&x-signature=FHXsU3jZ8YKoyxCWYxnwF3W3o2w%3D",
          "https://p16-sign-sg.tiktokcdn.com/aweme/100x100/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.jpeg?x-expires=1683439200&x-signature=AbJ3SuoZHmlN4DCbqkYoVmpbci8%3D"
        ],
        "width": 720
      },
      "avatar_uri": "tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d",
      "aweme_count": 0,
      "bind_phone": "",
      "bold_fields": null,
      "can_message_follow_status_list": null,
      "can_set_geofencing": null,
      "cha_list": null,
      "comment_filter_status": 1,
      "comment_setting": 0,
      "commerce_user_level": 0,
      "cover_url": [
        {
          "height": 720,
          "uri": "musically-maliva-obj/1612555907887110",
          "url_list": [
            "https://p16-amd-va.tiktokcdn.com/obj/musically-maliva-obj/1612555907887110"
          ],
          "width": 720
        }
      ],
      "create_time": 0,
      "custom_verify": "Verified account",
      "cv_level": "",
      "download_prompt_ts": 0,
      "download_setting": 3,
      "duet_setting": 0,
      "enterprise_verify_reason": "",
      "events": null,
      "favoriting_count": 0,
      "fb_expire_time": 0,
      "follow_status": 0,
      "follower_count": 0,
      "follower_status": 0,
      "followers_detail": null,
      "following_count": 0,
      "friends_status": 0,
      "gender": 0,
      "geofencing": null,
      "google_account": "",
      "has_email": false,
      "has_facebook_token": false,
      "has_insights": false,
      "has_orders": false,
      "has_twitter_token": false,
      "has_youtube_token": false,
      "hide_search": false,
      "homepage_bottom_toast": null,
      "ins_id": "",
      "is_ad_fake": false,
      "is_block": false,
      "is_discipline_member": false,
      "is_phone_binded": false,
      "is_star": false,
      "item_list": null,
      "language": "en",
      "live_agreement": 0,
      "live_commerce": false,
      "live_verify": 0,
      "mention_status": 1,
      "mutual_relation_avatars": null,
      "need_points": null,
      "need_recommend": 0,
      "nickname": "VTV Giai Tri Official",
      "platform_sync_info": null,
      "prevent_download": false,
      "react_setting": 0,
      "region": "VN",
      "relative_users": null,
      "room_id": 0,
      "search_highlight": null,
      "sec_uid": "MS4wLjABAAAAcmWx88_xRFU57rY2YUYFPBarAgam7vOnfxR-TvpyfvKtkFEAsihLpdILoRLvqYjV",
      "secret": 0,
      "share_info": {
        "now_invitation_card_image_urls": null,
        "share_desc": "",
        "share_desc_info": "",
        "share_qrcode_url": {
          "height": 720,
          "uri": "",
          "url_list": [],
          "width": 720
        },
        "share_title": "",
        "share_title_myself": "",
        "share_title_other": "",
        "share_url": ""
      },
      "share_qrcode_uri": "",
      "shield_comment_notice": 0,
      "shield_digg_notice": 0,
      "shield_edit_field_info": null,
      "shield_follow_notice": 0,
      "short_id": "0",
      "show_image_bubble": false,
      "signature": "Mời các bạn tải ứng dụng VTV GiảiTrí để xem trọn bộ phim hay độc quyền",
      "special_account": {
        "special_account_list": null
      },
      "special_lock": 1,
      "status": 1,
      "stitch_setting": 0,
      "total_favorited": 0,
      "tw_expire_time": 0,
      "twitter_id": "",
      "twitter_name": "",
      "type_label": null,
      "uid": "6812490744957256705",
      "unique_id": "vtvgiaitriofficial",
      "unique_id_modify_time": 1683353131,
      "user_canceled": false,
      "user_mode": 1,
      "user_period": 0,
      "user_profile_guide": null,
      "user_rate": 1,
      "user_tags": null,
      "verification_type": 0,
      "verify_info": "",
      "video_icon": {
        "height": 720,
        "uri": "",
        "url_list": [],
        "width": 720
      },
      "white_cover_url": null,
      "with_commerce_entry": false,
      "with_shop_entry": false,
      "youtube_channel_id": "UCuJ5k3GndbHnXLYyiIR6Z8Q",
      "youtube_channel_title": "VTV Giải Trí Official",
      "youtube_expire_time": 0
    },
    "author_user_id": 6812490744957256705,
    "aweme_acl": {
      "download_general": {
        "code": 1,
        "extra": "101",
        "mute": false,
        "show_type": 0,
        "transcode": 1
      },
      "download_mask_panel": {
        "code": 1,
        "extra": "101",
        "mute": false,
        "show_type": 0,
        "transcode": 1
      },
      "platform_list": null,
      "share_general": {
        "code": 1,
        "extra": "101",
        "mute": false,
        "show_type": 1,
        "toast_msg": "This action isn't allowed for this post",
        "transcode": 1
      },
      "share_list_status": 0
    },
    "aweme_id": "7229167805625847041",
    "aweme_type": 0,
    "behind_the_song_music_ids": null,
    "behind_the_song_video_music_ids": null,
    "bodydance_score": 0,
    "branded_content_accounts": null,
    "cc_template_info": {
      "author_name": "",
      "clip_count": 0,
      "desc": "",
      "duration_milliseconds": 0,
      "related_music_id": "",
      "template_id": ""
    },
    "cha_list": [
      {
        "author": {
          "account_labels": null,
          "ad_cover_url": null,
          "advance_feature_item_order": null,
          "advanced_feature_info": null,
          "bold_fields": null,
          "can_message_follow_status_list": null,
          "can_set_geofencing": null,
          "cha_list": null,
          "cover_url": null,
          "events": null,
          "followers_detail": null,
          "geofencing": null,
          "homepage_bottom_toast": null,
          "item_list": null,
          "mutual_relation_avatars": null,
          "need_points": null,
          "platform_sync_info": null,
          "relative_users": null,
          "search_highlight": null,
          "shield_edit_field_info": null,
          "type_label": null,
          "user_profile_guide": null,
          "user_tags": null,
          "white_cover_url": null
        },
        "banner_list": null,
        "cha_attrs": null,
        "cha_name": "cuocdoivandepsao",
        "cid": "1670903934915585",
        "collect_stat": 0,
        "connect_music": [],
        "desc": "",
        "extra_attr": {
          "is_live": false
        },
        "hashtag_profile": "",
        "is_challenge": 0,
        "is_commerce": false,
        "is_pgcshow": false,
        "schema": "aweme://aweme/challenge/detail?cid=1670903934915585",
        "search_highlight": null,
        "share_info": {
          "bool_persist": 0,
          "now_invitation_card_image_urls": null,
          "share_desc": "Check out #cuocdoivandepsao on TikTok!",
          "share_desc_info": "Check out #cuocdoivandepsao on TikTok!",
          "share_quote": "",
          "share_signature_desc": "",
          "share_signature_url": "",
          "share_title": "It is a becoming a big trend on TikTok now! Click here: cuocdoivandepsao",
          "share_title_myself": "",
          "share_title_other": "",
          "share_url": "https://www.tiktok.com/tag/cuocdoivandepsao?_r=1&name=cuocdoivandepsao&u_code=0&_d=e7km4e8ee8j7d2&share_challenge_id=1670903934915585&sharer_language=en&source=h5_m"
        },
        "show_items": null,
        "sub_type": 0,
        "type": 1,
        "use_count": 0,
        "user_count": 0,
        "view_count": 0
      }
    ],
    "challenge_position": null,
    "cmt_swt": false,
    "collect_stat": 0,
    "commerce_config_data": null,
    "commerce_info": {
      "adv_promotable": false,
      "auction_ad_invited": false,
      "with_comment_filter_words": false
    },
    "content_desc": "",
    "content_desc_extra": [],
    "cover_labels": null,
    "create_time": 1683171893,
    "desc": "Cô chủ trọ cho thuê căn phòng hết nước chấm thật #Cuocdoivandepsao",
    "desc_language": "vi",
    "disable_search_trending_bar": false,
    "distance": "",
    "distribute_type": 1,
    "follow_up_publish_from_id": 0,
    "geofencing": null,
    "geofencing_regions": null,
    "green_screen_materials": null,
    "group_id": "7228596161530039558",
    "group_id_list": {
      "GroupdIdList0": null,
      "GroupdIdList1": null
    },
    "has_vs_entry": false,
    "have_dashboard": false,
    "hybrid_label": null,
    "image_infos": null,
    "interact_permission": {
      "allow_adding_to_story": 1,
      "allow_create_sticker": {
        "status": 0
      },
      "duet": 0,
      "duet_privacy_setting": 0,
      "stitch": 0,
      "stitch_privacy_setting": 0,
      "upvote": 0
    },
    "interaction_stickers": null,
    "is_ads": false,
    "is_description_translatable": true,
    "is_hash_tag": 1,
    "is_on_this_day": 0,
    "is_pgcshow": false,
    "is_preview": 0,
    "is_relieve": false,
    "is_text_sticker_translatable": false,
    "is_top": 0,
    "is_vr": false,
    "item_comment_settings": 0,
    "item_duet": 0,
    "item_react": 0,
    "item_stitch": 0,
    "label_top": {
      "height": 720,
      "uri": "tiktok-obj/1598708589477025.PNG",
      "url_list": [
        "https://p16-sg.tiktokcdn.com/obj/tiktok-obj/1598708589477025.PNG"
      ],
      "width": 720
    },
    "label_top_text": null,
    "long_video": null,
    "mask_infos": [],
    "misc_info": "{}",
    "muf_comment_info_v2": null,
    "music": {
      "album": "",
      "artists": [],
      "audition_duration": 54,
      "author": "VTV Giai Tri Official",
      "author_deleted": false,
      "author_position": null,
      "avatar_medium": {
        "height": 720,
        "uri": "tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/aweme/720x720/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.webp?x-expires=1683439200&x-signature=Nq4qV8EaKGCuXuy1BNauD7klTH0%3D",
          "https://p16-sign-sg.tiktokcdn.com/aweme/720x720/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.jpeg?x-expires=1683439200&x-signature=x8tIQWWiY3wzNiefIUjhh8g9q9o%3D"
        ],
        "width": 720
      },
      "avatar_thumb": {
        "height": 720,
        "uri": "tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/aweme/100x100/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.webp?x-expires=1683439200&x-signature=FHXsU3jZ8YKoyxCWYxnwF3W3o2w%3D",
          "https://p16-sign-sg.tiktokcdn.com/aweme/100x100/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.jpeg?x-expires=1683439200&x-signature=AbJ3SuoZHmlN4DCbqkYoVmpbci8%3D"
        ],
        "width": 720
      },
      "binded_challenge_id": 0,
      "can_not_reuse": false,
      "collect_stat": 0,
      "commercial_right_type": 2,
      "cover_large": {
        "height": 720,
        "uri": "tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/aweme/1080x1080/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.webp?x-expires=1683439200&x-signature=y9%2Fv5Fnzgc6JHvd%2Fu7gW2Pvz6L4%3D",
          "https://p16-sign-sg.tiktokcdn.com/aweme/1080x1080/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.jpeg?x-expires=1683439200&x-signature=7FvoANBrpBQ6BeEnRWZzFg8gCHY%3D"
        ],
        "width": 720
      },
      "cover_medium": {
        "height": 720,
        "uri": "tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/aweme/720x720/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.webp?x-expires=1683439200&x-signature=Nq4qV8EaKGCuXuy1BNauD7klTH0%3D",
          "https://p16-sign-sg.tiktokcdn.com/aweme/720x720/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.jpeg?x-expires=1683439200&x-signature=x8tIQWWiY3wzNiefIUjhh8g9q9o%3D"
        ],
        "width": 720
      },
      "cover_thumb": {
        "height": 720,
        "uri": "tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/aweme/100x100/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.webp?x-expires=1683439200&x-signature=FHXsU3jZ8YKoyxCWYxnwF3W3o2w%3D",
          "https://p16-sign-sg.tiktokcdn.com/aweme/100x100/tos-alisg-avt-0068/e58bf19abf1c1badb25233ebb772283d.jpeg?x-expires=1683439200&x-signature=AbJ3SuoZHmlN4DCbqkYoVmpbci8%3D"
        ],
        "width": 720
      },
      "dmv_auto_show": false,
      "duration": 54,
      "duration_high_precision": {
        "audition_duration_precision": 54.7,
        "duration_precision": 54.7,
        "shoot_duration_precision": 54.7,
        "video_duration_precision": 54.7
      },
      "external_song_info": [],
      "extra": "{\"aed_music_dur\":1,\"beats\":{},\"can_read\":true,\"can_reuse\":true,\"erase_type\":0,\"erase_uid\":0,\"from_user_id\":0,\"has_edited\":0,\"is_ugc_mapping\":false,\"is_used\":0,\"owner_id\":6812490744957256705,\"resource_status\":0,\"review_unshelve_reason\":0,\"reviewed\":0,\"schedule_search_time\":0}",
      "id": 7229168247013182210,
      "id_str": "7229168247013182210",
      "is_audio_url_with_cookie": false,
      "is_author_artist": false,
      "is_commerce_music": true,
      "is_matched_metadata": false,
      "is_original": false,
      "is_original_sound": true,
      "is_pgc": false,
      "is_play_music": false,
      "is_shooting_allow": true,
      "lyric_short_position": null,
      "mid": "7229168247013182210",
      "multi_bit_rate_play_info": null,
      "mute_share": false,
      "offline_desc": "",
      "owner_handle": "vtvgiaitriofficial",
      "owner_id": "6812490744957256705",
      "owner_nickname": "VTV Giai Tri Official",
      "play_url": {
        "height": 720,
        "uri": "https://sf16-ies-music-sg.tiktokcdn.com/obj/tiktok-obj/7229168238650166018.mp3",
        "url_list": [
          "https://sf16-ies-music-sg.tiktokcdn.com/obj/tiktok-obj/7229168238650166018.mp3"
        ],
        "width": 720
      },
      "position": null,
      "prevent_download": false,
      "preview_end_time": 0,
      "preview_start_time": 0,
      "recommend_status": 100,
      "search_highlight": null,
      "sec_uid": "MS4wLjABAAAAcmWx88_xRFU57rY2YUYFPBarAgam7vOnfxR-TvpyfvKtkFEAsihLpdILoRLvqYjV",
      "shoot_duration": 54,
      "source_platform": 24,
      "status": 1,
      "tag_list": null,
      "title": "original sound - vtvgiaitriofficial",
      "tt_to_dsp_song_infos": null,
      "user_count": 0,
      "video_duration": 54
    },
    "music_begin_time_in_ms": 0,
    "music_selected_from": "",
    "music_title_style": 1,
    "need_trim_step": false,
    "need_vs_entry": false,
    "nickname_position": null,
    "no_selected_music": false,
    "origin_comment_ids": null,
    "playlist_blocked": false,
    "playlist_info": {
      "index": 6,
      "item_total": 43,
      "mix_id": "7220755092813777691",
      "name": "Cuộc đời vẫn đẹp sao"
    },
    "poi_re_tag_signal": 0,
    "position": null,
    "prevent_download": false,
    "products_info": null,
    "question_list": null,
    "rate": 12,
    "reference_tts_voice_ids": null,
    "reference_voice_filter_ids": null,
    "region": "VN",
    "risk_infos": {
      "content": "",
      "risk_sink": false,
      "type": 0,
      "vote": false,
      "warn": false
    },
    "search_highlight": null,
    "share_info": {
      "bool_persist": 0,
      "now_invitation_card_image_urls": null,
      "share_desc": "Check out VTV Giai Tri Official's video! #TikTok",
      "share_desc_info": "TikTok: Make Every Second CountCheck out VTV Giai Tri Official’s video! #TikTok > ",
      "share_link_desc": "",
      "share_quote": "",
      "share_signature_desc": "",
      "share_signature_url": "",
      "share_title": "Check out VTV Giai Tri Official’s video! #TikTok > ",
      "share_title_myself": "",
      "share_title_other": "",
      "share_url": "https://www.tiktok.com/@vtvgiaitriofficial/video/7229167805625847041?_r=1&u_code=0&preview_pb=0&sharer_language=en&_d=e7km4e8ee8j7d2&share_item_id=7229167805625847041&source=h5_m",
      "whatsapp_desc": "Download TikTok and watch more fun videos:"
    },
    "share_url": "https://www.tiktok.com/@vtvgiaitriofficial/video/7229167805625847041?_r=1&u_code=0&preview_pb=0&sharer_language=en&_d=e7km4e8ee8j7d2&share_item_id=7229167805625847041&source=h5_m",
    "sort_label": "",
    "statistics": {
      "aweme_id": "7229167805625847041",
      "collect_count": 743,
      "comment_count": 183,
      "digg_count": 25006,
      "download_count": 0,
      "forward_count": 0,
      "lose_comment_count": 0,
      "lose_count": 0,
      "play_count": 585709,
      "share_count": 492,
      "whatsapp_share_count": 0
    },
    "status": {
      "allow_comment": true,
      "allow_share": true,
      "aweme_id": "7229167805625847041",
      "download_status": 0,
      "in_reviewing": false,
      "is_delete": false,
      "is_prohibited": false,
      "private_status": 0,
      "review_result": {
        "review_status": 0
      },
      "reviewed": 1,
      "self_see": false
    },
    "text_extra": [
      {
        "end": 66,
        "hashtag_id": "1670903934915585",
        "hashtag_name": "cuocdoivandepsao",
        "is_commerce": false,
        "sec_uid": "",
        "start": 49,
        "type": 1,
        "user_id": ""
      }
    ],
    "text_sticker_major_lang": "un",
    "tts_voice_ids": null,
    "uniqid_position": null,
    "user_digged": 0,
    "video": {
      "CoverTsp": 47,
      "ai_dynamic_cover": {
        "uri": "tos-alisg-p-0037/ad27d3bd0b00480d860c9e22f87b3ac5_1683171895",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/obj/tos-alisg-p-0037/ad27d3bd0b00480d860c9e22f87b3ac5_1683171895?x-expires=1683439200&x-signature=8Dfb9ZLKsy0h2BMmAKuEOpwyl7w%3D&s=CHALLENGE_AWEME&se=false&sh=&sc=dynamic_cover&l=20230506060531760EDB96FF74C50AB8A9"
        ]
      },
      "ai_dynamic_cover_bak": {
        "uri": "tos-alisg-p-0037/ad27d3bd0b00480d860c9e22f87b3ac5_1683171895",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/obj/tos-alisg-p-0037/ad27d3bd0b00480d860c9e22f87b3ac5_1683171895?x-expires=1683439200&x-signature=8Dfb9ZLKsy0h2BMmAKuEOpwyl7w%3D&s=CHALLENGE_AWEME&se=false&sh=&sc=dynamic_cover&l=20230506060531760EDB96FF74C50AB8A9"
        ]
      },
      "animated_cover": {
        "uri": "tos-alisg-p-0037/ad27d3bd0b00480d860c9e22f87b3ac5_1683171895",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/obj/tos-alisg-p-0037/ad27d3bd0b00480d860c9e22f87b3ac5_1683171895?x-expires=1683439200&x-signature=8Dfb9ZLKsy0h2BMmAKuEOpwyl7w%3D&s=CHALLENGE_AWEME&se=false&sh=&sc=dynamic_cover&l=20230506060531760EDB96FF74C50AB8A9"
        ]
      },
      "big_thumbs": [],
      "bit_rate": [
        {
          "HDR_bit": "",
          "HDR_type": "",
          "bit_rate": 720348,
          "dub_infos": null,
          "gear_name": "adapt_540_1",
          "is_bytevc1": 1,
          "play_addr": {
            "data_size": 4919529,
            "file_cs": "c:0-46577-c445",
            "file_hash": "9728438cd1b5d434a4f2406088dfcb11",
            "height": 1024,
            "uri": "v10025g50000ch9ik0jc77ub16qqnnjg",
            "url_key": "v10025g50000ch9ik0jc77ub16qqnnjg_bytevc1_540p_720348",
            "url_list": [
              "https://v19.tiktokcdn-us.com/422f47cb49d0e1ec92bc607815c11cfb/645642c1/video/tos/alisg/tos-alisg-pve-0037/oQRhWKrsICLBo5KA3TBzNAnKUBAfQsZwEpxyEb/?a=1233&ch=0&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=1406&bt=703&cs=2&ds=6&ft=kLx3-yygZGf0PD1.cYyXg9wa5FdavEeC~&mime_type=video_mp4&qs=11&rc=O2k5PGc2NWk7O2g0Zzc7M0BpanF0OWU6ZjNsazMzODgzNEBeLmIyLTQ2NmAxMy40Xl40YSNna24ucjRnaDZgLS1kLy1zcw%3D%3D&l=20230506060531760EDB96FF74C50AB8A9",
              "https://v16m.tiktokcdn-us.com/ea4a3ce313ed5bc55ba0850bad2aa0af/645642c1/video/tos/alisg/tos-alisg-pve-0037/oQRhWKrsICLBo5KA3TBzNAnKUBAfQsZwEpxyEb/?a=1233&ch=0&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=1406&bt=703&cs=2&ds=6&ft=kLx3-yygZGf0PD1.cYyXg9wa5FdavEeC~&mime_type=video_mp4&qs=11&rc=O2k5PGc2NWk7O2g0Zzc7M0BpanF0OWU6ZjNsazMzODgzNEBeLmIyLTQ2NmAxMy40Xl40YSNna24ucjRnaDZgLS1kLy1zcw%3D%3D&l=20230506060531760EDB96FF74C50AB8A9",
              "https://api16-normal-useast5.us.tiktokv.com/aweme/v1/play/?video_id=v10025g50000ch9ik0jc77ub16qqnnjg&line=0&is_play_url=1&source=PackSourceEnum_CHALLENGE_AWEME&file_id=70a8a47d116e48c89f92730d59e61fa8"
            ],
            "width": 576
          },
          "quality_type": 28
        },
        {
          "HDR_bit": "",
          "HDR_type": "",
          "bit_rate": 433533,
          "dub_infos": null,
          "gear_name": "lower_540_1",
          "is_bytevc1": 1,
          "play_addr": {
            "data_size": 2960761,
            "file_cs": "c:0-46577-3aaa",
            "file_hash": "43bb5f5414642afe67a889a0676d4f40",
            "height": 1024,
            "uri": "v10025g50000ch9ik0jc77ub16qqnnjg",
            "url_key": "v10025g50000ch9ik0jc77ub16qqnnjg_bytevc1_540p_433533",
            "url_list": [
              "https://v19.tiktokcdn-us.com/41d17fc3ea00730d9fc0bc04843557fa/645642c1/video/tos/alisg/tos-alisg-pve-0037/oUaBohneeFvCUVmgpVbOABXCEWtQIQgbgky2XD/?a=1233&ch=0&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=846&bt=423&cs=2&ds=6&ft=kLx3-yygZGf0PD1.cYyXg9wa5FdavEeC~&mime_type=video_mp4&qs=4&rc=O2hnOzlpOjNnZ2dnODZpaUBpanF0OWU6ZjNsazMzODgzNEBhMzQ0LTJhXjUxLjZiNS4xYSNna24ucjRnaDZgLS1kLy1zcw%3D%3D&l=20230506060531760EDB96FF74C50AB8A9",
              "https://v16m.tiktokcdn-us.com/f9b6970b26af4979e5554971270e3a8a/645642c1/video/tos/alisg/tos-alisg-pve-0037/oUaBohneeFvCUVmgpVbOABXCEWtQIQgbgky2XD/?a=1233&ch=0&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=846&bt=423&cs=2&ds=6&ft=kLx3-yygZGf0PD1.cYyXg9wa5FdavEeC~&mime_type=video_mp4&qs=4&rc=O2hnOzlpOjNnZ2dnODZpaUBpanF0OWU6ZjNsazMzODgzNEBhMzQ0LTJhXjUxLjZiNS4xYSNna24ucjRnaDZgLS1kLy1zcw%3D%3D&l=20230506060531760EDB96FF74C50AB8A9",
              "https://api16-normal-useast5.us.tiktokv.com/aweme/v1/play/?video_id=v10025g50000ch9ik0jc77ub16qqnnjg&line=0&is_play_url=1&source=PackSourceEnum_CHALLENGE_AWEME&file_id=4f1f83e59d1d4d8da0d75f06787d6ed8"
            ],
            "width": 576
          },
          "quality_type": 24
        },
        {
          "HDR_bit": "",
          "HDR_type": "",
          "bit_rate": 326575,
          "dub_infos": null,
          "gear_name": "lowest_540_1",
          "is_bytevc1": 1,
          "play_addr": {
            "data_size": 2230308,
            "file_cs": "c:0-46577-dc2c",
            "file_hash": "92afe33b36efdff5e79191a20bc47b58",
            "height": 1024,
            "uri": "v10025g50000ch9ik0jc77ub16qqnnjg",
            "url_key": "v10025g50000ch9ik0jc77ub16qqnnjg_bytevc1_540p_326575",
            "url_list": [
              "https://v19.tiktokcdn-us.com/b686f9936cb312033f0f3981868a71d6/645642c1/video/tos/alisg/tos-alisg-pve-0037/o0WTB3wKNAIYxUJNQzKybwAnKhAofBIrCZCEEL/?a=1233&ch=0&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=636&bt=318&cs=2&ds=6&ft=kLx3-yygZGf0PD1.cYyXg9wa5FdavEeC~&mime_type=video_mp4&qs=5&rc=NWhlZDY6M2Y2ZTVnOmc0ZkBpanF0OWU6ZjNsazMzODgzNEAzYi9iXl8vNi0xNC82MTQxYSNna24ucjRnaDZgLS1kLy1zcw%3D%3D&l=20230506060531760EDB96FF74C50AB8A9",
              "https://v16m.tiktokcdn-us.com/ec78270a56e33141e23bc7071b410ab9/645642c1/video/tos/alisg/tos-alisg-pve-0037/o0WTB3wKNAIYxUJNQzKybwAnKhAofBIrCZCEEL/?a=1233&ch=0&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=636&bt=318&cs=2&ds=6&ft=kLx3-yygZGf0PD1.cYyXg9wa5FdavEeC~&mime_type=video_mp4&qs=5&rc=NWhlZDY6M2Y2ZTVnOmc0ZkBpanF0OWU6ZjNsazMzODgzNEAzYi9iXl8vNi0xNC82MTQxYSNna24ucjRnaDZgLS1kLy1zcw%3D%3D&l=20230506060531760EDB96FF74C50AB8A9",
              "https://api16-normal-useast5.us.tiktokv.com/aweme/v1/play/?video_id=v10025g50000ch9ik0jc77ub16qqnnjg&line=0&is_play_url=1&source=PackSourceEnum_CHALLENGE_AWEME&file_id=4c714d972d724b039c20b7a3ea2bee62"
            ],
            "width": 576
          },
          "quality_type": 25
        }
      ],
      "cdn_url_expired": 0,
      "cla_info": {
        "caption_infos": [
          {
            "caption_format": "webvtt",
            "cla_subtitle_id": 7229169230560692994,
            "complaint_id": 7229169230560692994,
            "expire": 1683374785,
            "is_auto_generated": true,
            "is_original_caption": true,
            "lang": "vie-VN",
            "language_code": "vi",
            "language_id": 10,
            "sub_id": -1289841497,
            "sub_version": "1",
            "translator_id": 0,
            "url": "https://v19.tiktokcdn-us.com/01f200890f3cb8c887707356082a3871/645642c1/video/tos/alisg/tos-alisg-pv-0037/4f2d9320a67e422e91c906d5337bf903/?a=1233&ch=0&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=16336&bt=8168&cs=0&ds=6&ft=kLx3-yygZGf0PD1.cYyXg9wa5FdavEeC~&mime_type=video_mp4&qs=13&rc=anF0OWU6ZjNsazMzODgzNEBpanF0OWU6ZjNsazMzODgzNEBna24ucjRnaDZgLS1kLy1zYSNna24ucjRnaDZgLS1kLy1zcw%3D%3D&l=20230506060531760EDB96FF74C50AB8A9"
          }
        ],
        "captions_type": 1,
        "creator_edited_caption_id": 0,
        "enable_auto_caption": 0,
        "has_original_audio": 0,
        "hide_original_caption": false,
        "original_language_info": {
          "can_translate_realtime": true,
          "is_burnin_caption": false,
          "lang": "vie-VN",
          "language_code": "vi",
          "language_id": 10,
          "original_caption_type": 1
        },
        "vertical_positions": null
      },
      "cover": {
        "height": 720,
        "uri": "tos-alisg-p-0037/e9f6d5a15ef4490d95a3c0229c6be3b1_1683171894",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/obj/tos-alisg-p-0037/e9f6d5a15ef4490d95a3c0229c6be3b1_1683171894?x-expires=1683439200&x-signature=apgWeewzC2eGSiqMHuoKkU1WBLY%3D&s=CHALLENGE_AWEME&se=false&sh=&sc=cover&l=20230506060531760EDB96FF74C50AB8A9"
        ],
        "width": 720
      },
      "cover_is_custom": true,
      "download_addr": {
        "data_size": 9472112,
        "height": 720,
        "uri": "v10025g50000ch9ik0jc77ub16qqnnjg",
        "url_list": [
          "https://v19.tiktokcdn-us.com/9f47f3002207837dc9085f8832348578/645642c1/video/tos/alisg/tos-alisg-pve-0037/ogbKkQJnyJAYv3WTALfhwUzBBKAKyACEICNroZ/?a=1233&ch=0&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=2708&bt=1354&cs=0&ds=3&ft=kLx3-yygZGf0PD1.cYyXg9wa5FdavEeC~&mime_type=video_mp4&qs=0&rc=PGc3ZjQ2M2dlNjg8aWg0ZkBpanF0OWU6ZjNsazMzODgzNEBfMGIyLjIyNjIxMmMtNWAxYSNna24ucjRnaDZgLS1kLy1zcw%3D%3D&l=20230506060531760EDB96FF74C50AB8A9",
          "https://v16m.tiktokcdn-us.com/71ed404409cee1d7fbe4e8e4598a4465/645642c1/video/tos/alisg/tos-alisg-pve-0037/ogbKkQJnyJAYv3WTALfhwUzBBKAKyACEICNroZ/?a=1233&ch=0&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=2708&bt=1354&cs=0&ds=3&ft=kLx3-yygZGf0PD1.cYyXg9wa5FdavEeC~&mime_type=video_mp4&qs=0&rc=PGc3ZjQ2M2dlNjg8aWg0ZkBpanF0OWU6ZjNsazMzODgzNEBfMGIyLjIyNjIxMmMtNWAxYSNna24ucjRnaDZgLS1kLy1zcw%3D%3D&l=20230506060531760EDB96FF74C50AB8A9",
          "https://api16-normal-useast5.us.tiktokv.com/aweme/v1/play/?video_id=v10025g50000ch9ik0jc77ub16qqnnjg&line=0&watermark=1&logo_name=tiktok&source=CHALLENGE_AWEME&file_id=4cc18e0ff955435b9d5053115ce43db9"
        ],
        "width": 720
      },
      "duration": 54635,
      "dynamic_cover": {
        "height": 720,
        "uri": "tos-alisg-p-0037/7470f3cebdb5428894c22558722f2750_1683171896",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/obj/tos-alisg-p-0037/7470f3cebdb5428894c22558722f2750_1683171896?x-expires=1683439200&x-signature=7CfAUZzdG7lTZBB9jXgK2SnoCGo%3D&s=CHALLENGE_AWEME&se=false&sh=&sc=dynamic_cover&l=20230506060531760EDB96FF74C50AB8A9"
        ],
        "width": 720
      },
      "has_watermark": true,
      "height": 1024,
      "is_bytevc1": 0,
      "is_callback": true,
      "meta": "{\"LoudnessRange\":\"8.9\",\"LoudnessRangeEnd\":\"-9\",\"LoudnessRangeStart\":\"-17.9\",\"MaximumMomentaryLoudness\":\"-4.2\",\"MaximumShortTermLoudness\":\"-8.3\",\"Version\":\"1\",\"loudness\":\"-12.4\",\"peak\":\"0.75858\",\"qprf\":\"1.000\",\"sr_score\":\"1.000\"}",
      "need_set_token": false,
      "origin_cover": {
        "height": 720,
        "uri": "tos-alisg-p-0037/278eaa2b69a14fe5a60023b2d346274f_1683171895",
        "url_list": [
          "https://p16-sign-sg.tiktokcdn.com/tos-alisg-p-0037/278eaa2b69a14fe5a60023b2d346274f_1683171895~tplv-tiktokx-360p.webp?x-expires=1683439200&x-signature=cRSpX0ao1fthh1cvt2jJrDvxn8I%3D&s=CHALLENGE_AWEME&se=false&sh=&sc=feed_cover&l=20230506060531760EDB96FF74C50AB8A9",
          "https://p16-sign-sg.tiktokcdn.com/tos-alisg-p-0037/278eaa2b69a14fe5a60023b2d346274f_1683171895~tplv-tiktokx-360p.jpeg?x-expires=1683439200&x-signature=9zK6VcQmZAYacl83EPR3gqv61HM%3D&s=CHALLENGE_AWEME&se=false&sh=&sc=feed_cover&l=20230506060531760EDB96FF74C50AB8A9"
        ],
        "width": 720
      },
      "play_addr": {
        "data_size": 8551288,
        "file_cs": "c:0-45895-c30a",
        "file_hash": "743e48020c822e45589068c0a4b3418a",
        "height": 1024,
        "uri": "v10025g50000ch9ik0jc77ub16qqnnjg",
        "url_key": "v10025g50000ch9ik0jc77ub16qqnnjg_h264_540p_1252133",
        "url_list": [
          "https://v19.tiktokcdn-us.com/6373f23af037658bc17665c99e337e37/645642c1/video/tos/alisg/tos-alisg-pve-0037/oEZBbKQ5CfrnAAoJWyLBKYwIUhIBNA3zETKj6j/?a=1233&ch=0&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=2444&bt=1222&cs=0&ds=6&ft=kLx3-yygZGf0PD1.cYyXg9wa5FdavEeC~&mime_type=video_mp4&qs=0&rc=OmhnaDloZDU8ZGdpPGU3aEBpanF0OWU6ZjNsazMzODgzNEA2Yy9jMF5fX2ExMmJjXl8vYSNna24ucjRnaDZgLS1kLy1zcw%3D%3D&l=20230506060531760EDB96FF74C50AB8A9",
          "https://v16m.tiktokcdn-us.com/b3c988bb1b3ea317427b66a2e94dbee8/645642c1/video/tos/alisg/tos-alisg-pve-0037/oEZBbKQ5CfrnAAoJWyLBKYwIUhIBNA3zETKj6j/?a=1233&ch=0&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=2444&bt=1222&cs=0&ds=6&ft=kLx3-yygZGf0PD1.cYyXg9wa5FdavEeC~&mime_type=video_mp4&qs=0&rc=OmhnaDloZDU8ZGdpPGU3aEBpanF0OWU6ZjNsazMzODgzNEA2Yy9jMF5fX2ExMmJjXl8vYSNna24ucjRnaDZgLS1kLy1zcw%3D%3D&l=20230506060531760EDB96FF74C50AB8A9",
          "https://api16-normal-useast5.us.tiktokv.com/aweme/v1/play/?video_id=v10025g50000ch9ik0jc77ub16qqnnjg&line=0&is_play_url=1&source=PackSourceEnum_CHALLENGE_AWEME&file_id=2eb4abf9ef5d4ad9b2baae36fe2dfe97"
        ],
        "width": 576
      },
      "play_addr_bytevc1": {
        "data_size": 4919529,
        "file_cs": "c:0-46577-c445",
        "file_hash": "9728438cd1b5d434a4f2406088dfcb11",
        "height": 1024,
        "uri": "v10025g50000ch9ik0jc77ub16qqnnjg",
        "url_key": "v10025g50000ch9ik0jc77ub16qqnnjg_bytevc1_540p_720348",
        "url_list": [
          "https://v19.tiktokcdn-us.com/422f47cb49d0e1ec92bc607815c11cfb/645642c1/video/tos/alisg/tos-alisg-pve-0037/oQRhWKrsICLBo5KA3TBzNAnKUBAfQsZwEpxyEb/?a=1233&ch=0&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=1406&bt=703&cs=2&ds=6&ft=kLx3-yygZGf0PD1.cYyXg9wa5FdavEeC~&mime_type=video_mp4&qs=11&rc=O2k5PGc2NWk7O2g0Zzc7M0BpanF0OWU6ZjNsazMzODgzNEBeLmIyLTQ2NmAxMy40Xl40YSNna24ucjRnaDZgLS1kLy1zcw%3D%3D&l=20230506060531760EDB96FF74C50AB8A9",
          "https://v16m.tiktokcdn-us.com/ea4a3ce313ed5bc55ba0850bad2aa0af/645642c1/video/tos/alisg/tos-alisg-pve-0037/oQRhWKrsICLBo5KA3TBzNAnKUBAfQsZwEpxyEb/?a=1233&ch=0&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=1406&bt=703&cs=2&ds=6&ft=kLx3-yygZGf0PD1.cYyXg9wa5FdavEeC~&mime_type=video_mp4&qs=11&rc=O2k5PGc2NWk7O2g0Zzc7M0BpanF0OWU6ZjNsazMzODgzNEBeLmIyLTQ2NmAxMy40Xl40YSNna24ucjRnaDZgLS1kLy1zcw%3D%3D&l=20230506060531760EDB96FF74C50AB8A9",
          "https://api16-normal-useast5.us.tiktokv.com/aweme/v1/play/?video_id=v10025g50000ch9ik0jc77ub16qqnnjg&line=0&is_play_url=1&source=PackSourceEnum_CHALLENGE_AWEME&file_id=70a8a47d116e48c89f92730d59e61fa8"
        ],
        "width": 576
      },
      "play_addr_h264": {
        "data_size": 8551288,
        "file_cs": "c:0-45895-c30a",
        "file_hash": "743e48020c822e45589068c0a4b3418a",
        "height": 1024,
        "uri": "v10025g50000ch9ik0jc77ub16qqnnjg",
        "url_key": "v10025g50000ch9ik0jc77ub16qqnnjg_h264_540p_1252133",
        "url_list": [
          "https://v19.tiktokcdn-us.com/6373f23af037658bc17665c99e337e37/645642c1/video/tos/alisg/tos-alisg-pve-0037/oEZBbKQ5CfrnAAoJWyLBKYwIUhIBNA3zETKj6j/?a=1233&ch=0&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=2444&bt=1222&cs=0&ds=6&ft=kLx3-yygZGf0PD1.cYyXg9wa5FdavEeC~&mime_type=video_mp4&qs=0&rc=OmhnaDloZDU8ZGdpPGU3aEBpanF0OWU6ZjNsazMzODgzNEA2Yy9jMF5fX2ExMmJjXl8vYSNna24ucjRnaDZgLS1kLy1zcw%3D%3D&l=20230506060531760EDB96FF74C50AB8A9",
          "https://v16m.tiktokcdn-us.com/b3c988bb1b3ea317427b66a2e94dbee8/645642c1/video/tos/alisg/tos-alisg-pve-0037/oEZBbKQ5CfrnAAoJWyLBKYwIUhIBNA3zETKj6j/?a=1233&ch=0&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=2444&bt=1222&cs=0&ds=6&ft=kLx3-yygZGf0PD1.cYyXg9wa5FdavEeC~&mime_type=video_mp4&qs=0&rc=OmhnaDloZDU8ZGdpPGU3aEBpanF0OWU6ZjNsazMzODgzNEA2Yy9jMF5fX2ExMmJjXl8vYSNna24ucjRnaDZgLS1kLy1zcw%3D%3D&l=20230506060531760EDB96FF74C50AB8A9",
          "https://api16-normal-useast5.us.tiktokv.com/aweme/v1/play/?video_id=v10025g50000ch9ik0jc77ub16qqnnjg&line=0&is_play_url=1&source=PackSourceEnum_CHALLENGE_AWEME&file_id=2eb4abf9ef5d4ad9b2baae36fe2dfe97"
        ],
        "width": 576
      },
      "ratio": "540p",
      "source_HDR_type": 0,
      "tags": null,
      "width": 576
    },
    "video_control": {
      "allow_download": true,
      "allow_duet": true,
      "allow_dynamic_wallpaper": true,
      "allow_music": true,
      "allow_react": true,
      "allow_stitch": true,
      "draft_progress_bar": 1,
      "prevent_download_type": 0,
      "share_type": 1,
      "show_progress_bar": 1,
      "timer_status": 1
    },
    "video_labels": [],
    "video_text": [],
    "voice_filter_ids": null,
    "with_promotional_music": false,
    "without_watermark": false
  }
]
```

### During the Run and Getting Results

While it's running, the tool will log what it's doing in the console. If you give it bad input, it will stop and post an
error message explaining what went wrong.

Your results are saved in a dataset. You can download them as JSON, CSV, Excel, etc., from the "Storage" tab, or access
them using the API.

### Limitations

- This scraper only gets public data. It cannot access private accounts or data that isn't public.
- It doesn't currently support pagination (clicking "Next Page" on a profile or search). It only scrapes the initial
  list of videos loaded.
- You must use the scraper in a way that respects TikTok's terms of use.

### Scrape any TikTok data you need with dedicated scrapers

If you want to get specific data from TikTok, you can use the scrapers below. Each scraper is made to help you get
different kinds of TikTok data, like hashtags, search results, profiles, or everything at once. You can look at them to
see which one you need.

| Scraper                    | Link                                                                                |
|:---------------------------|:------------------------------------------------------------------------------------|
| 👥 TikTok Followers API    | [TikTok Followers API](https://apify.com/novi/tiktok-followers-api?fpr=7hce1m)      |
| 🎙 TikTok Comment API      | [TikTok Comment API](https://apify.com/novi/tiktok-comment-api?fpr=7hce1m)          |
| 📹 TikTok Trend API        | [TikTok Trend API](https://apify.com/novi/tiktok-trend-api?fpr=7hce1m)              |
| 🔍 TikTok Search API       | [TikTok Search API](https://apify.com/novi/tiktok-search-api?fpr=7hce1m)            |
| 🧛 TikTok User API         | [TikTok User API](https://apify.com/novi/tiktok-user-api?fpr=7hce1m)                |
| 🎸 TikTok Music API        | [TikTok Music API](https://apify.com/novi/tiktok-sound-api?fpr=7hce1m)              |
| 🧛 TikTok User Info API    | [TikTok User Info API](https://apify.com/novi/tiktok-user-info-api?fpr=7hce1m)      |
| #️⃣ TikTok Hashtag API     | [TikTok Hashtag API](https://apify.com/novi/tiktok-hashtag-api?fpr=7hce1m)          |
| 🛍 TikTok Shop API         | [TikTok Shop API](https://apify.com/novi/tiktok-shop-scraper?fpr=7hce1m)            |
| 🐦 Twitter - X.com Scraper | [🐦 Twitter - X.com Scraper](https://apify.com/xtdata/twitter-x-scraper?fpr=7hce1m) |

### Ethical Use and Data Practices

We designed this tool to be fair and responsible.

- It **does not require a login**. This means it only accesses data that is already public for everyone to see, just
  like a normal visitor.
- The tool only scrapes publicly available information and does not collect sensitive personal data or anything behind a
  login wall.
- Because this runs on Apify (an EU-based company), it is designed to follow EU data rules (like GDPR).
- The scraper also runs gently to make sure it doesn't overload TikTok's servers.

For more on this topic, Apify wrote a good article about the legality of web
scraping: <https://blog.apify.com/is-web-scraping-legal/>

# Actor input Schema

## `startUrls` (type: `array`):

Paste the TikTok URLs, and get the results immediately. Video, User, Search, Tag, Music are supported.

## `maxItems` (type: `integer`):

Maximum number of items that you want as output. Min: 20. Default: 200

## `keywords` (type: `array`):

Search keywords/terms you want to search from TikTok.

## `dateRange` (type: `string`):

Date range for search. It uses the standard date filtering of TikTok search.

## `location` (type: `string`):

Enables the actor to retrieve the results from that specific region/location, given by an ISO 3166-1 alpha-2 country code.

## `sortType` (type: `string`):

Sort type for search.

## `customMapFunction` (type: `string`):

Function that takes each of the objects as argument and returns data that will be mapped by the function itself. This function is not intended for filtering, please don't use it for filtering purposes or you will get banned automatically.

## `includeSearchKeywords` (type: `boolean`):

If selected, a field will be added to each tweets about the search keyword that was used to find it.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.tiktok.com/@billieeilish/video/7050551461734042926",
    "https://www.tiktok.com/@gordonramsayofficial",
    "https://www.tiktok.com/search?q=Recipes",
    "https://www.tiktok.com/tag/duet",
    "https://www.tiktok.com/music/original-sound-Newcastle-United-7297730198175402784"
  ],
  "maxItems": 20,
  "keywords": [
    "Artificial Intelligence",
    "podcast"
  ],
  "dateRange": "DEFAULT",
  "location": "US",
  "sortType": "DEFAULT",
  "customMapFunction": "(object) => { return {...object} }"
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        "https://www.tiktok.com/@billieeilish/video/7050551461734042926",
        "https://www.tiktok.com/@gordonramsayofficial",
        "https://www.tiktok.com/search?q=Recipes",
        "https://www.tiktok.com/tag/duet",
        "https://www.tiktok.com/music/original-sound-Newcastle-United-7297730198175402784"
    ],
    "maxItems": 20,
    "keywords": [
        "Artificial Intelligence",
        "podcast"
    ],
    "dateRange": "DEFAULT",
    "location": "US",
    "sortType": "DEFAULT",
    "customMapFunction": (object) => { return {...object} }
};

// Run the Actor and wait for it to finish
const run = await client.actor("novi/tiktok-scraper-ultimate").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [
        "https://www.tiktok.com/@billieeilish/video/7050551461734042926",
        "https://www.tiktok.com/@gordonramsayofficial",
        "https://www.tiktok.com/search?q=Recipes",
        "https://www.tiktok.com/tag/duet",
        "https://www.tiktok.com/music/original-sound-Newcastle-United-7297730198175402784",
    ],
    "maxItems": 20,
    "keywords": [
        "Artificial Intelligence",
        "podcast",
    ],
    "dateRange": "DEFAULT",
    "location": "US",
    "sortType": "DEFAULT",
    "customMapFunction": "(object) => { return {...object} }",
}

# Run the Actor and wait for it to finish
run = client.actor("novi/tiktok-scraper-ultimate").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.tiktok.com/@billieeilish/video/7050551461734042926",
    "https://www.tiktok.com/@gordonramsayofficial",
    "https://www.tiktok.com/search?q=Recipes",
    "https://www.tiktok.com/tag/duet",
    "https://www.tiktok.com/music/original-sound-Newcastle-United-7297730198175402784"
  ],
  "maxItems": 20,
  "keywords": [
    "Artificial Intelligence",
    "podcast"
  ],
  "dateRange": "DEFAULT",
  "location": "US",
  "sortType": "DEFAULT",
  "customMapFunction": "(object) => { return {...object} }"
}' |
apify call novi/tiktok-scraper-ultimate --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,novi/tiktok-scraper-ultimate"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/VDFct6Acrk3b5yjVa/builds/SK9rFiVzy6rd5kdeU/openapi.json
