The Analytics Dashboard provides comprehensive insights into creator performance, engagement metrics, and audience analytics. Track key metrics across all your TikTok creators in one centralized view.
Dashboard Overview
Access the dashboard at /creators to view all tracked creators:
Total Creators Track the total number of creators across all platforms
Average Followers Monitor aggregate follower counts and growth trends
Average Engagement Track overall engagement rates across your creator portfolio
Key Metrics
The dashboard tracks essential performance metrics for each creator:
Profile Metrics
// From components/creators/browse-creators-tab.tsx
interface CreatorMetrics {
username : string
nickName : string
followerCount : number
posts30d : number // Posts in last 30 days
views30d : number // Total views in last 30 days
likes30d : number // Total likes in last 30 days
comments30d : number // Total comments in last 30 days
shares30d : number // Total shares in last 30 days
engagementRate : number // Calculated engagement percentage
verified : boolean
lastUpdated : Date
}
Engagement Calculations
// From lib/services/tiktok-apify-service.ts
async getUserInsights ( username : string ): Promise < TikTokEngagementMetrics > {
const profile = await this . getUserProfile ( username )
const videosResponse = await this . getUserVideos ( username , 50 )
const videos = videosResponse . data
// Calculate averages
const averageLikes = videos . reduce (( sum , v ) => sum + v . stats . diggCount , 0 ) / videos . length
const averageComments = videos . reduce (( sum , v ) => sum + v . stats . commentCount , 0 ) / videos . length
const averageShares = videos . reduce (( sum , v ) => sum + v . stats . shareCount , 0 ) / videos . length
const averageViews = videos . reduce (( sum , v ) => sum + v . stats . playCount , 0 ) / videos . length
// Calculate engagement rate
const engagementRate = profile . followerCount > 0
? ((averageLikes + averageComments + averageShares) / profile.followerCount) * 100
: 0
return {
averageLikes ,
averageComments ,
averageShares ,
averageViews ,
engagementRate ,
viewToFollowerRatio: averageViews / profile . followerCount
}
}
Data Table Features
The dashboard uses a powerful data table component:
// Interactive data table with sorting and filtering
< DataTable
columns = { tiktokColumns }
data = { creators }
loading = { isLoading }
onRowSelectionChange = { handleSelection }
enableRowSelection = { true }
/>
Table Capabilities
Sorting
Click any column header to sort creators by that metric. Supports ascending and descending order. const handleSortingChange = ( newSorting : any []) => {
const sort = newSorting [ 0 ]
if ( sort ) {
params . append ( 'sortBy' , sort . id )
params . append ( 'sortOrder' , sort . desc ? 'desc' : 'asc' )
}
}
Filtering
Filter creators by:
Search query (username or name)
Category (content niche)
Follower range (min/max)
Verification status
Pagination
Large datasets are automatically paginated for performance. The system loads up to 10,000 creators per page.
Row Selection
Select multiple creators for bulk actions like export or status updates.
Search and Filters
The dashboard includes powerful search and filtering:
// Search input
< Input
placeholder = "Search creators..."
value = { searchQuery }
onChange = {(e) => setSearchQuery (e.target.value)}
/>
// Category filter
< Select value = { categoryFilter } onValueChange = { setCategoryFilter } >
< SelectTrigger >
< SelectValue placeholder = "All categories" />
</ SelectTrigger >
< SelectContent >
< SelectItem value = "all" > All Categories </ SelectItem >
{ categories . map ( cat => (
< SelectItem key = {cat. value } value = {cat. value } >
{ cat . value } ({cat. count })
</ SelectItem >
))}
</ SelectContent >
</ Select >
// Follower range filter
< Input
type = "number"
placeholder = "Min followers"
value = {minFollowers || '' }
onChange = {(e) => setMinFollowers ( parseInt (e.target.value))}
/>
< Input
type = "number"
placeholder = "Max followers"
value = {maxFollowers || '' }
onChange = {(e) => setMaxFollowers ( parseInt (e.target.value))}
/>
Real-time Data Updates
The dashboard uses SWR for automatic data revalidation:
import useSWR from 'swr'
const { data , error , isLoading , mutate } = useSWR (
swrKey ,
async () => {
const response = await fetch ( `/api/creators? ${ params } ` )
return response . json ()
},
{
revalidateOnFocus: false ,
dedupingInterval: 0 ,
}
)
// Manual refresh
const handleRefresh = async () => {
setIsRefreshing ( true )
await mutate ()
setIsRefreshing ( false )
}
Creator Profiles
Click any creator to view their detailed profile page:
Profile picture
Username and display name
Verification badge
Platform badges
Total followers
Profile bio
Metrics Cards
Followers Total follower count with growth indicators
Engagement Rate Average engagement percentage
Avg Views Average views per video
Post Frequency Posts per week/month
Recent Content
View the creator’s recent posts with metrics:
// Recent content table
< VideoPerformanceTable videos = { recentVideos } />
Each video shows:
Thumbnail
Caption/description
Views, likes, comments, shares
Post date
Engagement rate
Link to original video
The dashboard includes advanced analytics views:
< PieChart >
< Pie
data = { platformData }
dataKey = "count"
nameKey = "platform"
label = {({ platform , count }) => ` ${ platform } : ${ count } ` }
/>
</ PieChart >
Engagement Trends
< LineChart data = { engagementHistory } >
< XAxis dataKey = "date" />
< YAxis />
< Line type = "monotone" dataKey = "engagement" stroke = "#10b981" />
< Tooltip />
</ LineChart >
< BarChart data = { categoryData } >
< XAxis dataKey = "category" />
< YAxis />
< Bar dataKey = "avgEngagement" fill = "#3b82f6" />
< Tooltip />
</ BarChart >
View the highest-performing creators:
// From creator-analysis-dashboard.tsx
const topCreators = [ ... creators ]
. sort (( a , b ) => b . engagementRate - a . engagementRate )
. slice ( 0 , 10 )
// Display top performers
{ topCreators . map (( creator , index ) => (
< div key = {creator. id } className = "flex items-center justify-between" >
< div className = "flex items-center space-x-3" >
< div className = "w-8 h-8 bg-blue-100 rounded-full" >
< span >#{index + 1 } </ span >
</ div >
< div >
< div className = "font-semibold" > {creator. name } </ div >
< div className = "text-sm" > {creator. platform } • { creator . category } </ div >
</ div >
</ div >
< div className = "flex items-center space-x-4" >
< div >
< div className = "font-semibold" > { formatNumber (creator.followers)} </ div >
< div className = "text-sm" > followers </ div >
</ div >
< div >
< div className = "font-semibold" > { formatPercent (creator.engagementRate)} </ div >
< div className = "text-sm" > engagement </ div >
</ div >
</ div >
</ div >
))}
Sync Status
Track when creator data was last updated:
// Sync status indicator
< SyncStatusIndicator
lastSync = {creator. lastUpdated }
status = {creator. syncStatus }
/>
Status values:
Synced : Data is up to date
Syncing : Currently refreshing data
Stale : Data needs refresh
Error : Last sync failed
Export Functionality
Export creator data directly from the dashboard:
// Export button
< Button onClick = {() => setShowExportDialog ( true )} >
< Download className = "h-4 w-4 mr-2" />
Export ({selectedRows. size })
</ Button >
// Export dialog
< ExportDialog
open = { showExportDialog }
onOpenChange = { setShowExportDialog }
creatorIds = {Array.from(selectedRows)}
onExportComplete = { handleExportComplete }
/>
See Data Export for detailed export options.
Best Practices
Refresh creator data regularly to ensure metrics are up to date. Set up automated refresh schedules for active campaigns.
Large datasets (10,000+ creators) may take time to load. Use filters to narrow down the view for better performance.
Use the sort and filter features to quickly identify top performers or creators that need attention.
Creator Discovery Discover new creators automatically
Data Export Export creator data in multiple formats
Keyword Search Search for specific creators