Developer Guide

TikTok LIVE Analytics API

Track viewer counts, gift revenue, chat volume, and engagement metrics in real-time for any TikTok LIVE stream. Build dashboards, alert systems, and analytics tools.

tiktok.com/@
Stream offlineEnter a live TikTok username above
Connecting to @ live
Offline
Live Stream Monitor
@
<50msLatency
99.9%Uptime
FreeTo Test

What Analytics Data Is Available?

TikTok does not provide a public analytics API for LIVE streams. The TikTool Live API fills this gap by delivering every stream event in real-time via WebSocket. You can compute any metric from these raw events:

  • Viewer count - real-time viewer count updates every few seconds
  • Gift revenue - every gift event includes diamond value (1 diamond ≈ $0.005)
  • Chat volume - messages per minute, unique chatters, keyword frequency
  • Engagement rate - likes, shares, follows per time period
  • Peak viewership - track high-water marks across the session
  • Gift leaderboard - top supporters ranked by total diamond spend

Quick Start: Real-Time Dashboard Data

This example collects all analytics data in real-time. Plug it into any frontend framework or save to a database:

import { TikTokLive } from '@tiktool/live'

const client = new TikTokLive({
  uniqueId: 'target_username',
  apiKey: process.env.TIKTOOL_API_KEY
})

// ── Analytics State ──
const stats = {
  viewerCount: 0,
  peakViewers: 0,
  totalMessages: 0,
  totalGifts: 0,
  totalDiamonds: 0,
  totalLikes: 0,
  totalFollows: 0,
  totalShares: 0,
  uniqueChatters: new Set(),
  giftLeaderboard: new Map(),
  startTime: Date.now()
}

// Viewer count tracking
client.on('viewer_count', (event) => {
  stats.viewerCount = event.viewerCount
  if (event.viewerCount > stats.peakViewers) {
    stats.peakViewers = event.viewerCount
  }
})

// Chat analytics
client.on('chat', (event) => {
  stats.totalMessages++
  stats.uniqueChatters.add(event.userId)
})

// Gift revenue tracking
client.on('gift', (event) => {
  stats.totalGifts++
  stats.totalDiamonds += event.diamondCount

  const current = stats.giftLeaderboard.get(event.nickname) || 0
  stats.giftLeaderboard.set(event.nickname, current + event.diamondCount)
})

// Engagement tracking
client.on('like', (event) => {
  stats.totalLikes = event.totalLikeCount
})

client.on('follow', () => { stats.totalFollows++ })
client.on('share', () => { stats.totalShares++ })

await client.connect()
console.log('📊 Analytics tracking started!')

// Print summary every 60 seconds
setInterval(() => {
  const minutes = (Date.now() - stats.startTime) / 60000
  const revenue = (stats.totalDiamonds * 0.005).toFixed(2)

  console.log('\n── Stream Analytics ──')
  console.log(`Viewers: ${stats.viewerCount} (peak: ${stats.peakViewers})`)
  console.log(`Messages: ${stats.totalMessages} (${(stats.totalMessages / minutes).toFixed(1)}/min)`)
  console.log(`Unique chatters: ${stats.uniqueChatters.size}`)
  console.log(`Gifts: ${stats.totalGifts} (${stats.totalDiamonds} 💎 ≈ $${revenue})`)
  console.log(`Likes: ${stats.totalLikes} | Follows: ${stats.totalFollows} | Shares: ${stats.totalShares}`)
}, 60000)

Expected Output

📊 Analytics tracking started!

── Stream Analytics ──
Viewers: 2,347 (peak: 3,891)
Messages: 487 (81.2/min)
Unique chatters: 203
Gifts: 34 (12,450 💎 ≈ $62.25)
Likes: 45,230 | Follows: 89 | Shares: 23

Save to a Database

Store events in PostgreSQL, MongoDB, or any database for historical analysis:

import { TikTokLive } from '@tiktool/live'

// Example: save to PostgreSQL with Prisma
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()

const client = new TikTokLive({
  uniqueId: 'target_username',
  apiKey: process.env.TIKTOOL_API_KEY
})

client.on('gift', async (event) => {
  await prisma.giftEvent.create({
    data: {
      streamer: 'target_username',
      senderNickname: event.nickname,
      senderUserId: event.userId,
      giftName: event.giftName,
      diamondCount: event.diamondCount,
      repeatCount: event.repeatCount,
      timestamp: new Date()
    }
  })
})

client.on('viewer_count', async (event) => {
  await prisma.viewerSnapshot.create({
    data: {
      streamer: 'target_username',
      viewerCount: event.viewerCount,
      timestamp: new Date()
    }
  })
})

await client.connect()
console.log('💾 Saving events to database...')

Raw WebSocket (Any Language)

Build analytics in Python, Go, Rust, or any language with WebSocket support:

# Python example using websockets library
import asyncio, json, websockets

async def track_analytics():
    url = "wss://api.tik.tools?uniqueId=target_username&apiKey=YOUR_API_KEY"

    async with websockets.connect(url) as ws:
        total_diamonds = 0
        peak_viewers = 0

        async for raw in ws:
            msg = json.loads(raw)

            if msg["event"] == "viewer_count":
                viewers = msg["data"]["viewerCount"]
                peak_viewers = max(peak_viewers, viewers)
                print(f"Viewers: {viewers} (peak: {peak_viewers})")

            elif msg["event"] == "gift":
                diamonds = msg["data"]["diamondCount"]
                total_diamonds += diamonds
                revenue = total_diamonds * 0.005
                print(f"Gift revenue: {total_diamonds} 💎 (${revenue:.2f})")

asyncio.run(track_analytics())

FAQ

Does TikTok have an official analytics API for LIVE streams?

No. TikTok provides in-app analytics via LIVE Center for creators, but there is no public API to access this data programmatically. The TikTool Live API delivers raw events in real-time that you can use to build your own analytics.

Can I track multiple streams simultaneously?

Yes. Create multiple TikTokLive clients - one per stream. The Pro tier supports up to 50 simultaneous WebSocket connections.

How accurate is the viewer count?

The viewer count is provided directly by TikTok's internal data and updates every few seconds. It matches the count shown in the TikTok app.