
Security News
The Changelog Podcast: Practical Steps to Stay Safe on npm
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.
@tobyg74/tiktok-api-dl
Advanced tools
Scraper for downloading media in the form of videos, images and audio from Tiktok. Also for stalking Tiktok Users, getting user posts, likes, comments, followers and following.
Note : This project uses the API from Tiktok & Unofficial Tiktok API from Another Website. This project is not affiliated with Tiktok. 
Install using our automated script:
curl -o install.sh https://raw.githubusercontent.com/TobyG74/tiktok-api-dl/master/install.sh
chmod +x install.sh
./install.sh
The script automatically:
npm install @tobyg74/tiktok-api-dl
yarn add @tobyg74/tiktok-api-dl
npm install github:TobyG74/tiktok-api-dl
COOKIE: "YOUR_COOKIE"npm install -g @tobyg74/tiktok-api-dl
tiktokdl [command] [options]
git clone https://github.com/TobyG74/tiktok-api-dl.git
cd tiktok-api-dl
npm install
npx ts-node src/cli/index.ts [command] [options]
npm run cli  [command] [options]
$ tiktokdl -h
Usage: tiktokdl [options] [command]
Tiktok downloader and search CLI tool
Options:
  -V, --version                output the version number
  -h, --help                   display help for command
Commands:
  download [options] <url>     Download Tiktok Video / Slide / Music
  cookie                       Cookie Manager
  search                       Search Tiktok users or live streams
  getvideocomments [options] <url>  Get comments from a Tiktok video
  getuserposts [options] <username>  Get posts from a Tiktok user
  getuserreposts [options] <username>  Get reposts from a Tiktok user
  stalk [options] <username>   Stalk a Tiktok user
  help [command]               display help for command
# Set Tiktok Cookie to use in commands
tiktokdl cookie set "YOUR_COOKIE"
# Get Tiktok Cookie
tiktokdl cookie get
# Delete Tiktok Cookie
tiktokdl cookie delete
git clone https://github.com/TobyG74/tiktok-api-dl.git
cd tiktok-api-dl
npm install
npm run build
const Tiktok = require("@tobyg74/tiktok-api-dl")
const url = "https://vt.tiktok.com/xxxxxxxx"
Tiktok.Downloader(url, {
  version: "v1", // "v1" | "v2" | "v3"
  proxy: "YOUR_PROXY", // optional
  showOriginalResponse: true // optional, v1 only
}).then((result) => console.log(result))
# Download Tiktok Video
tiktokdl download "https://vt.tiktok.com/xxxxxxxx"
# Download Tiktok Video with version
tiktokdl download "https://vt.tiktok.com/xxxxxxxx" -v v1
# Download Tiktok Video with Custom Output Directory Path
tiktokdl download "https://vt.tiktok.com/xxxxxxxx" -v v1 -o "/path/to/save/video.mp4"
# Download Tiktok Video with Proxy
tiktokdl download "https://vt.tiktok.com/xxxxxxxx" -v v1 -proxy "http://your-proxy-url"
# Download Collection or Playlist
tiktokdl download "https://www.tiktok.com/@username/collection/name-id"
tiktokdl download "https://www.tiktok.com/@username/playlist/name-id"
# Download Collection or Playlist with Count
tiktokdl download "https://www.tiktok.com/@username/collection/name-id" -c 5
tiktokdl download "https://www.tiktok.com/@username/playlist/name-id" -c 5
# Download Collection or Playlist with Proxy
tiktokdl download "https://www.tiktok.com/@username/collection/name-id" -c 5 -proxy "http://your-proxy-url"
tiktokdl download "https://www.tiktok.com/@username/playlist/name-id" -c 5 -proxy "http://your-proxy-url"
const Tiktok = require("@tobyg74/tiktok-api-dl")
Tiktok.Search("username", {
  type: "user", // "user" | "live" | "video"
  page: 1,
  cookie: "YOUR_COOKIE", // needed
  proxy: "YOUR_PROXY" // optional
}).then((result) => console.log(result))
# Search Tiktok Users
tiktokdl search user <username>
# Search Tiktok Users with pagination
tiktokdl search user <username> -p 1
# Search Tiktok Users with proxy
tiktokdl search user <username> -p 1 -proxy "http://your-proxy-url"
# Search Tiktok Live Streams
tiktokdl search live <username>
# Search Tiktok Live Streams with pagination
tiktokdl search live <username> -p 1
# Search Tiktok Live Streams with proxy
tiktokdl search live <username> -p 1 -proxy "http://your-proxy-url"
# Search Tiktok Videos
tiktokdl search video <query>
# Search Tiktok Videos with pagination
tiktokdl search video <query> -p 1
# Search Tiktok Videos with proxy
tiktokdl search video <query> -p 1 -proxy "http://your-proxy-url"
const Tiktok = require("@tobyg74/tiktok-api-dl")
const username = "Tobz2k19"
Tiktok.StalkUser(username, {
  proxy: "YOUR_PROXY" // optional
}).then((result) => console.log(result))
# Stalk User Profile
tiktokdl stalk <username>
# Stalk User Profile with proxy
tiktokdl stalk <username> -proxy "http://your-proxy-url"
const Tiktok = require("@tobyg74/tiktok-api-dl")
const url = "https://vt.tiktok.com/xxxxxxxx"
Tiktok.GetVideoComments(url, {
  commentLimit: 10, // optional, default is 30
  proxy: "YOUR_PROXY" // optional
}).then((result) => console.log(result))
# Get Video Comments
tiktokdl getvideocomments "https://vt.tiktok.com/xxxxxxxx"
# Get Video Comments with limit of comments
tiktokdl getvideocomments "https://vt.tiktok.com/xxxxxxxx" -l 10
# Get Video Comments with proxy
tiktokdl getvideocomments "https://vt.tiktok.com/xxxxxxxx" -l 10 -proxy "http://your-proxy-url"
const Tiktok = require("@tobyg74/tiktok-api-dl")
const username = "Tobz2k19"
Tiktok.GetUserPosts(username, {
  postLimit: 10, // optional, default is 30
  proxy: "YOUR_PROXY" // optional
}).then((result) => console.log(result))
# Get User Posts
tiktokdl getuserposts <username>
# Get User Posts with limit of posts
tiktokdl getuserposts <username> -l 10
# Get User Posts with proxy
tiktokdl getuserposts <username> -l 10 -proxy "http://your-proxy-url"
const Tiktok = require("@tobyg74/tiktok-api-dl")
const username = "Tobz2k19"
Tiktok.GetUserReposts(username, {
  postLimit: 10, // optional, default is 30
  proxy: "YOUR_PROXY" // optional
}).then((result) => console.log(result))
# Get User Reposts
tiktokdl getuserreposts <username>
# Get User Reposts with limit of reposts
tiktokdl getuserreposts <username> -l 10
# Get User Reposts with proxy
tiktokdl getuserreposts <username> -l 10 -proxy "http://your-proxy-url"
const Tiktok = require("@tobyg74/tiktok-api-dl")
const username = "Tobz2k19"
Tiktok.GetUserLiked(username, {
  postLimit: 10, // optional, default is 30
  cookie: "YOUR_COOKIE", // needed
  proxy: "YOUR_PROXY" // optional
})
# Get User Liked Videos
tiktokdl getuserliked <username>
# Get User Liked Videos with limit of posts
tiktokdl getuserliked <username> -l 10
# Get User Liked Videos with proxy
tiktokdl getuserliked <username> -l 10 -proxy "http://your-proxy-url"
Get videos from a TikTok collection (supports collection ID or URL)
const Tiktok = require("@tobyg74/tiktok-api-dl")
// Using collection ID
const collectionId = "7507916135931218695"
Tiktok.Collection(collectionId, {
  page: 1, // optional, default is 1
  count: 5, // optional, default is 5
  proxy: "YOUR_PROXY" // optional
}).then((result) => console.log(result))
// Using collection URL
const collectionUrl = "https://www.tiktok.com/@username/collection/name-id"
Tiktok.Collection(collectionUrl, {
  page: 1,
  count: 5,
  proxy: "YOUR_PROXY"
}).then((result) => console.log(result))
# Using download command with collection URL
tiktokdl download "https://www.tiktok.com/@username/collection/name-id"
# Using download command with count
tiktokdl download "https://www.tiktok.com/@username/collection/name-id" -c 5
# Using collection ID
tiktokdl collection 7507916135931218695 -c 5
# Using collection URL
tiktokdl collection "https://www.tiktok.com/@username/collection/name-id"
# Using collection URL with count
tiktokdl collection "https://www.tiktok.com/@username/collection/name-id" -c 5
# With page for pagination
tiktokdl collection 7507916135931218695 -p 1 -c 5
# With proxy
tiktokdl collection 7507916135931218695 -c 5 -proxy "http://your-proxy-url"
Get videos from a TikTok playlist (supports playlist ID or URL)
const Tiktok = require("@tobyg74/tiktok-api-dl")
const playlistIdOrUrl = "https://www.tiktok.com/@username/playlist/name-id"
Tiktok.Playlist(playlistIdOrUrl, {
  page: 1,
  count: 5,
  proxy: "YOUR_PROXY"
}).then((result) => console.log(result))
# Using download command with playlist URL
tiktokdl download "https://www.tiktok.com/@username/playlist/name-id"
# Using download command with count
tiktokdl download "https://www.tiktok.com/@username/playlist/name-id" -c 5
# Using playlist ID
tiktokdl download 7507916135931218695 -c 5
# Using playlist URL
tiktokdl playlist "https://www.tiktok.com/@username/playlist/name-id" -c 5
# With page for pagination
tiktokdl playlist 7507916135931218695 -p 1 -c 5
# With proxy
tiktokdl playlist 7507916135931218695 -c 5 -proxy "http://your-proxy-url"
Get trending content and creators from TikTok's discovery/explore page
const Tiktok = require("@tobyg74/tiktok-api-dl")
// Get all trending content (full data structure)
Tiktok.Trending({
  proxy: "YOUR_PROXY" // optional
}).then((result) => console.log(result))
// Get trending creators only (simplified data)
Tiktok.TrendingCreators({
  proxy: "YOUR_PROXY" // optional
}).then((result) => console.log(result))
# Get trending content
tiktokdl trending
# Get trending creators only
tiktokdl trending-creators
# With proxy
tiktokdl trending -proxy "http://your-proxy-url"
tiktokdl trending-creators -proxy "http://your-proxy-url"
Get videos that use a specific music/audio track by providing the music ID
const Tiktok = require("@tobyg74/tiktok-api-dl")
const musicId = "7034143722082192134"
Tiktok.GetVideosByMusicId(musicId, {
  page: 1, // optional, default is 1
  count: 30, // optional, default is 30
  proxy: "YOUR_PROXY" // optional
}).then((result) => console.log(result))
# Get videos by music ID
tiktokdl getmusicvideos 7034143722082192134
# Get videos by music ID with page and count
tiktokdl getmusicvideos 7034143722082192134 -p 1 -c 20
# Get videos by music ID with proxy
tiktokdl getmusicvideos 7034143722082192134 -p 1 -c 20 -proxy "http://your-proxy-url"
interface TiktokAPIResponse {
  status: "success" | "error"
  message?: string
  result?: {
    type: "video" | "image"
    id: string
    createTime: number
    desc: string
    author: {
      uid: number
      username: string
      nickname: string
      signature: string
      region: string
      avatarThumb: string[]
      avatarMedium: string[]
      url: string
    }
    statistics: {
      playCount: number
      downloadCount: number
      shareCount: number
      commentCount: number
      likeCount: number
      collectCount: number
      forwardCount: number
      whatsappShareCount: number
      loseCount: number
      loseCommentCount: number
      repostCount: number
    }
    hashtag: string[]
    isTurnOffComment: boolean
    isADS: boolean
    cover?: string[]
    dynamicCover?: string[]
    originCover?: string[]
    video?: {
      ratio: string
      duration: number
      playAddr: string[]
      downloadAddr: string[]
      cover: string[]
      dynamicCover: string[]
      originCover: string[]
    }
    images?: string[]
    music: {
      id: number
      title: string
      author: string
      album: string
      playUrl: string[]
      coverLarge: string[]
      coverMedium: string[]
      coverThumb: string[]
      duration: number
      isCommerceMusic: boolean
      isOriginalSound: boolean
      isAuthorArtist: boolean
    }
  }
  resultNotParsed?: any
}
interface SSSTikResponse {
  status: "success" | "error"
  message?: string
  result?: {
    type: "image" | "video" | "music"
    desc?: string
    author?: {
      avatar: string
      nickname: string
    }
    statistics?: {
      likeCount: string
      commentCount: string
      shareCount: string
    }
    images?: string[]
    video?: {
      playAddr: string
    }
    music?: {
      playUrl: string
    }
    direct?: string
  }
}
interface MusicalDownResponse {
  status: "success" | "error"
  message?: string
  result?: {
    type: "video" | "image"
    desc?: string
    author?: {
      avatar?: string
      nickname?: string
    }
    music?: string
    images?: string[]
    videoHD?: string
    videoWatermark?: string
  }
}
interface TiktokUserSearchResponse {
  status: "success" | "error"
  message?: string
  result?: Array<{
    uid: string
    username: string
    nickname: string
    signature: string
    followerCount: number
    avatarThumb: string
    isVerified: boolean
    secUid: string
    url: string
  }>
  page?: number
  totalResults?: number
}
interface TiktokLiveSearchResponse {
  status: "success" | "error"
  message?: string
  result?: Array<{
    id: string
    title: string
    cover: string[]
    squareCover: string[]
    rectangleCover: string[]
    liveTypeThirdParty: boolean
    hashtag: string
    startTime: number
    stats: {
      totalUser: number
      viewerCount: number
      likeCount: number
    }
    owner: {
      id: string
      nickname: string
      username: string
      signature: string
      avatarThumb: string[]
      avatarMedium: string[]
      avatarLarge: string[]
      modifyTime: number
      stats: {
        followingCount: number
        followerCount: number
      }
      isVerified: boolean
    }
  }>
  page?: number
  totalResults?: number
}
interface TiktokVideoSearchResponse {
  status: "success" | "error"
  message?: string
  result?: Array<{
    id: string
    desc: string
    createTime: number
    author: {
      id: string
      uniqueId: string
      nickname: string
      avatarThumb: string
      avatarMedium: string
      avatarLarger: string
      signature: string
      verified: boolean
      secUid: string
      openFavorite: boolean
      privateAccount: boolean
      isADVirtual: boolean
      tiktokSeller: boolean
      isEmbedBanned: boolean
    }
    stats: {
      collectCount: number
      commentCount: number
      likeCount: number
      playCount: number
      shareCount: number
    }
    video: {
      id: string
      ratio: string
      cover: string
      originCover: string
      dynamicCover: string
      playAddr: string
      downloadAddr: string
      format: string
    }
    music: {
      id: string
      title: string
      playUrl: string
      coverThumb: string
      coverMedium: string
      coverLarge: string
      authorName: string
      original: boolean
      album: string
      duration: number
      isCopyrighted: boolean
    }
  }>
  page?: number
  totalResults?: number
}
interface TiktokStalkUserResponse {
  status: "success" | "error"
  message?: string
  result?: {
    user: {
      username: string
      nickname: string
      avatar: string
      signature: string
      verified: boolean
      region: string
    }
    stats: {
      followerCount: number
      followingCount: number
      heartCount: number
      videoCount: number
      likeCount: number
    }
  }
}
interface TiktokVideoCommentsResponse {
  status: "success" | "error"
  message?: string
  result?: Array<{
    cid: string
    text: string
    commentLanguage: string
    createTime: number
    likeCount: number
    isAuthorLiked: boolean
    isCommentTranslatable: boolean
    replyCommentTotal: number
    replyComment: []
    user: User
    url: string
  }>
  totalComments?: number
}
interface TiktokUserPostsResponse {
  status: "success" | "error"
  message?: string
  result?: Array<{
    id: string
    desc: string
    createTime: number
    digged: number
    duetEnabled: number
    forFriend: number
    officalItem: number
    originalItem: number
    privateItem: number
    shareEnabled: number
    stitchEnabled: number
    stats: {
      collectCount: number
      commentCount: number
      likeCount: number
      playCount: number
      shareCount: number
    }
    author: {
      id: string
      username: string
      nickname: string
      avatarLarger: string
      avatarThumb: string
      avatarMedium: string
      signature: string
      verified: boolean
      openFavorite: boolean
      privateAccount: boolean
      isADVirtual: boolean
      isEmbedBanned: boolean
    }
    video?: {
      id: string
      duration: number
      ratio: string
      cover: string
      originCover: string
      dynamicCover: string
      playAddr: string
      downloadAddr: string
      format: string
      bitrate: number
    }
    music: {
      authorName: string
      coverLarge: string
      coverMedium: string
      coverThumb: string
      duration: number
      id: string
      title: string
      playUrl: string
      original: boolean
    }
    images?: string[]
  }>
  totalPosts?: number
}
interface TiktokUserRepostsResponse {
  status: "success" | "error"
  message?: string
  result?: Array<{
    id: string
    desc: string
    createTime: number
    digged: boolean
    duetEnabled?: boolean
    forFriend: boolean
    officalItem: boolean
    originalItem: boolean
    privateItem: boolean
    secret: boolean
    shareEnabled: boolean
    stitchEnabled?: boolean
    stats: {
      shareCount: number
      collectCount?: number
      commentCount?: number
      likeCount?: number
      playCount?: number
      repostCount?: number
    }
    author: {
      id: string
      username: string
      nickname: string
      avatarLarger: string
      avatarThumb: string
      avatarMedium: string
      signature: string
      verified: boolean
      openFavorite?: boolean
      privateAccount?: boolean
      isADVirtual?: boolean
      isEmbedBanned?: boolean
    }
    video?: {
      id: string
      duration: number
      ratio: string
      cover: string
      originCover: string
      dynamicCover: string
      playAddr: string
      downloadAddr: string
      format: string
      bitrate: number
    }
    music: {
      authorName?: string
      coverLarge?: string
      coverMedium?: string
      coverThumb?: string
      duration?: number
      id?: string
      title?: string
      playUrl?: string
      original?: boolean
      tt2dsp?: any
    }
    imagePost?: {
      title: string
      images?: Array<{
        imageURL: {
          urlList: string[]
        }
      }>
    }
    AIGCDescription?: string
    CategoryType?: number
    collected?: boolean
    contents?: any[]
    challenges?: any[]
    textExtra?: any[]
    textLanguage?: string
    textTranslatable?: boolean
    titleLanguage?: string
    titleTranslatable?: boolean
    isAd?: boolean
    isReviewing?: boolean
    itemCommentStatus?: number
    item_control?: {
      can_repost?: boolean
      can_share?: boolean
    }
    duetDisplay?: number
    stitchDisplay?: number
    diversificationId?: number
    backendSourceEventTracking?: string
    stickersOnItem?: any[]
    videoSuggestWordsList?: any
  }>
  totalReposts?: number
}
interface TiktokUserFavoriteVideosResponse {
  status: "success" | "error"
  message?: string
  result?: Array<{
    id: string
    desc: string
    createTime: string
    duetEnabled: boolean
    digged: boolean
    forFriend: boolean
    isAd: boolean
    originalItem: boolean
    privateItem: boolean
    officialItem: boolean
    secret: boolean
    shareEnabled: boolean
    stitchEanbled: boolean
    textTranslatable: boolean
    author: {
      id: string
      username: string
      nickname: string
      avatarLarger: string
      avatarThumb: string
      avatarMedium: string
      signature: string
      verified: string
      openFavorite: string
      privateAccount: string
      isADVirtual: string
      isEmbedBanned: string
    }
    stats: {
      collectCount: string
      commentCount: string
      likeCount: string
      playCount: string
      repostCount: string
      shareCount: string
    }
    video?: {
      id: string
      videoID: string
      duration: number
      ratio: string
      cover: string
      originCover: string
      dynamicCover: string
      playAddr: string
      downloadAddr: string
      format: string
      bitrate: number
      bitrateInfo: any[]
    }
    imagePost?: Array<{
      title: string
      images: string[]
    }>
    music: {
      id: string
      title: string
      playUrl: string
      coverThumb: string
      coverMedium: string
      coverLarge: string
      authorName: string
      original: boolean
      album: string
      duration: number
      isCopyrighted: boolean
      private: boolean
    }
  }>
  totalPosts?: number
}
interface TiktokCollectionResponse {
  status: "success" | "error"
  message?: string
  result?: {
    itemList: Array<{
      id: string
      desc: string
      createTime: number
      author?: {
        id: string
        uniqueId: string
        nickname: string
        avatarThumb: string
        avatarMedium: string
        avatarLarger: string
        signature: string
        verified: boolean
      }
      statistics?: {
        playCount: number
        diggCount: number
        shareCount: number
        commentCount: number
        collectCount: number
      }
      video?: {
        id: string
        height: number
        width: number
        duration: number
        ratio: string
        cover: string
        originCover: string
        dynamicCover: string
        playAddr: string
        downloadAddr: string
        format: string
        bitrate: number
      }
      textExtra?: Array<{
        hashtagName: string
        hashtagId: string
        type: number
      }>
    }>
    hasMore: boolean
    cursor: string
  }
}
status: "success" | "error"
message?: string
result?: {
  hasMore: boolean
  itemList: Array<{
    id: string
    desc: string
    createTime: number
    author: PlaylistAuthor
    stats: Statistics
    video: VideoTiktokAPI
    music: MusicTiktokAPI
    challenges: Array<{
      id: string
      title: string
      desc: string
      coverLarger: string
      coverMedium: string
      coverThumb: string
      profileLarger: string
      profileMedium: string
      profileThumb: string
    }>
    collected: boolean
    digged: boolean
    duetDisplay: number
    forFriend: boolean
    officalItem: boolean
    originalItem: boolean
    privateItem: boolean
    shareEnabled: boolean
    stitchDisplay: number
    textExtra: Array<{
      awemeId: string
      end: number
      hashtagName: string
      isCommerce: boolean
      start: number
      subType: number
      type: number
    }>
  }>
  extra?: {
    fatal_item_ids: string[]
    logid: string
    now: number
  }
}
interface TiktokTrendingResponse {
  status: "success" | "error"
  message?: string
  result?: Array<{
    exploreList: Array<{
      cardItem: {
        id: string
        type: number
        cover: string
        title: string
        subTitle: string
        description: string
        link: string
        round: boolean
        playToken: string
        keyToken: string
        extraInfo: {
          verified: boolean
          fans: number
          likes: number
          userId: string
          secUid: string
          relation: number
          video: number
          following: number
          heart: number
          digg: number
        }
      }
    }>
    pageState: {
      regionAppId: number
      os: string
      region: string
      baseURL: string
      appType: string
      fullUrl: string
    }
  }>
}
interface TrendingCreatorsResponse {
  status: "success" | "error"
  message?: string
  result?: Array<{
    id: string
    username: string
    nickname: string
    avatarThumb: string
    description: string
    verified: boolean
    followerCount: number
    likeCount: number
    videoCount: number
    followingCount: number
    heartCount: number
    diggCount: number
    secUid: string
    link: string
  }>
}
interface TiktokMusicVideosResponse {
  status: "success" | "error"
  message?: string
  result?: {
    music?: {
      id: string
      title: string
      authorName: string
      author?: string
      duration?: number
      original?: boolean
      playUrl?: string[]
      coverThumb?: string
      coverLarge?: string
      coverMedium?: string
    }
    videos?: Array<{
      id: string
      desc?: string
      createTime: number
      digged?: boolean
      duetEnabled?: boolean
      forFriend?: boolean
      officalItem?: boolean
      originalItem?: boolean
      privateItem?: boolean
      shareEnabled?: boolean
      stitchEnabled?: boolean
      stats: {
        collectCount?: number
        commentCount: number
        diggCount: number
        playCount: number
        shareCount: number
      }
      author: {
        id: string
        uniqueId: string
        nickname: string
        avatarLarger?: string
        avatarThumb?: string
        avatarMedium?: string
        signature?: string
        verified?: boolean
        openFavorite?: boolean
        privateAccount?: boolean
        isADVirtual?: boolean
        isEmbedBanned?: boolean
      }
      video?: {
        id: string
        duration: number
        ratio?: string
        cover?: string
        originCover?: string
        dynamicCover?: string
        playAddr?: string
        downloadAddr?: string
        format?: string
        bitrate?: number
      }
      music: {
        id: string
        title: string
        authorName: string
        duration: number
        playUrl?: string[]
        coverLarge?: string
        coverMedium?: string
        coverThumb?: string
        original?: boolean
      }
      imagePost?: string[]
      effectStickers?: Array<{
        id: string
        name: string
        type?: number
      }>
    }>
    totalVideos?: number
  }
}
FAQs
Scraper for downloading media in the form of videos, images and audio from Tiktok. Also for stalking Tiktok Users, getting user posts, likes, comments, followers and following.
The npm package @tobyg74/tiktok-api-dl receives a total of 1,725 weekly downloads. As such, @tobyg74/tiktok-api-dl popularity was classified as popular.
We found that @tobyg74/tiktok-api-dl demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.

Security News
Experts push back on new claims about AI-driven ransomware, warning that hype and sponsored research are distorting how the threat is understood.

Security News
Ruby's creator Matz assumes control of RubyGems and Bundler repositories while former maintainers agree to step back and transfer all rights to end the dispute.