TikTok Live Status Scraper & Monitor - Go-Live Alerts, Viewers avatar

TikTok Live Status Scraper & Monitor - Go-Live Alerts, Viewers

Pricing

from $3.65 / 1,000 live status row returneds

Go to Apify Store
TikTok Live Status Scraper & Monitor - Go-Live Alerts, Viewers

TikTok Live Status Scraper & Monitor - Go-Live Alerts, Viewers

Check whether TikTok accounts are live right now: viewer count, total enters, stream title, start time, playback URLs and follower count. Turn monitoring on and a run returns an account only when it goes live or ends a stream, for a small fee per account checked.

Pricing

from $3.65 / 1,000 live status row returneds

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

7 days ago

Last modified

Share

TikTok Live Status Scraper & Monitor - go-live alerts, priced per check

Check whether TikTok accounts are live right now - viewer count, total enters, stream title, start time, how long they have been live, playback URLs and follower count - and, with monitoring on, receive a row only when something happens: an account goes live, ends a stream, or starts a new one. A poll on which nothing changed returns a single free no-change row.

In monitoring mode you pay a small fee per account checked, $0.30 per 1,000 checks, and the normal row price only for the rows that report a change. Watching 10 creators every 5 minutes is 86,400 checks a month, which is $25.92 in check fees, plus the change rows you receive.

Best for

  • Go-live alerts - schedule a run every few minutes, send the dataset to Slack, Discord, Telegram or a webhook, and every row you receive is an event worth sending.
  • Sponsored-live verification - confirm that a paid creator actually went live, when, for roughly how long, and the highest viewer count seen while you were watching.
  • Live-commerce and competitor tracking - log when a roster of accounts streams and how big those streams get.
  • "Who is live now" lists - check a roster once with onlyLive and receive only the accounts that are live.

What each row contains

  • What you asked for and what TikTok returned - inputUsername, username, usernameMatchesInput, userId, secUid, nickname, verified, profileUrl, liveUrl.
  • Live status - isLive, liveStatusCode (TikTok's own code: 2 = live, 4 = not live), roomId.
  • Only while live - startedAt, startedAtEpoch, liveDurationSeconds, roomTitle, viewerCount (people in the room now), totalEnterCount (entries since the stream started), coverUrl, streamUrls.
  • Only when not live - lastStreamStartedAt, lastStreamStartedAtEpoch (the start of the most recent stream TikTok reports).
  • Account - followerCount, followingCount.
  • Monitoring - change, isFirstCheck, previousCheckedAt, previousIsLive, previousRoomId, and for a stream that ended: endedAfter, endedBefore, streamDurationSecondsAtLeast, streamDurationSecondsAtMost, peakViewerCountSeen, lastSeenTotalEnterCount, checksWhileLive.

Measured on 2026-09-14 from Apify: @aljazeeraenglish was live with viewerCount 11154 and totalEnterCount 13693658; @tiktok was not live, and its most recent stream had started on 2026-08-28.

What is deliberately not returned for an account that is not live

When an account is not live, TikTok still sends the numbers of its previous room: on 2026-09-14 the room of @tiktok reported a current user count of 1, the enter count of a stream that had ended weeks earlier, and playback URLs for it. Returning those would tell you that one person is watching a stream that is not happening. So viewerCount, totalEnterCount, roomTitle, coverUrl and streamUrls are filled only while the account is live; for an account that is not live you get isLive: false and the start time of its most recent stream.

Follower count

followerCount is the whole number the live endpoint returns (for example 95730279 for @tiktok on 2026-09-14), not a rounded "95.7M". It has not been compared against the figure on the profile page, and it can differ slightly between requests.

Monitoring, and what it costs

Turn monitoring mode on and the Actor remembers each account's live status. On later runs an account comes back only with one of these change values:

changeMeaning
first-checkThe account had not been seen before. Every account is returned once on the first run, to set the baseline.
went-liveNot live at the previous run, live now.
endedLive at the previous run, not live now. The row says the stream ended between endedAfter (the previous run) and endedBefore (this run), gives the duration as a range (streamDurationSecondsAtLeast to streamDurationSecondsAtMost), and the highest viewer count seen by your runs while it was live.
new-streamLive at both runs, but in a different room: the previous stream ended and a new one started in between.
stream-between-checksNot live at either run, but the most recent stream is newer than the one remembered: the account went live and ended between two runs.

An account whose status did not change is not returned, so it costs no row price; the check fee for reading it still applies. While it stays live, the Actor keeps updating the highest viewer count it has seen, so the ended row can report it.

The duration of a stream is a range, not a single number, because the Actor only knows the status at the moments it runs. Run it more often for a narrower range.

The status is remembered per account, not per list, so adding a username does not reset the accounts already being watched. In monitoring mode maxProfiles does not cut changes: every change among the accounts read is returned. If the run's maximum total charge stops a change from being delivered, that change is not remembered, so the account still counts as changed the next time it is checked.

An account that comes back as no-live-profile (see below) is not remembered. If such an account later goes live and TikTok starts returning it, its first row is first-check, not went-live.

Do not put the same account in two schedules that can run at the same time. Each run writes back only the accounts it checked, merged into the statuses as they are at that moment, then reads them again and writes once more if another run overwrote them - so two overlapping runs over different accounts keep each other's history. But Apify's key-value store has no atomic update, so this cannot be made watertight: runs that finish at the same instant, or check the same account at the same time, can still overwrite each other's record, and the next run may return a first-check or a change a second time.

What monitoring costs

  • $0.30 per 1,000 account checks - charged in monitoring mode for every account whose live status was read, whether or not it changed. Names TikTok returns nothing for and bot checks are not charged.
  • The row price - charged only for the rows returned, which in monitoring mode means first-check rows and changes.

The Actor reads only as many accounts as the run's maximum total charge can pay for with both a check and a change row each, so a low limit cannot use up the budget on check fees and leave nothing for the rows. Accounts beyond that are not checked; a budget-reached row says how many, and raising the maximum total charge lets them be checked. Runs with monitoring off are charged per row only.

Rows that are never charged

When there is nothing to return, this Actor says why instead of returning an empty result:

  • no-live-profile - TikTok's live endpoint returned no user for that name (code 19881007, "user_not_found"). This is common for accounts that exist: on 2026-09-14, 33 of 83 accounts (40%) whose profile pages had been read on 2026-09-06 got this answer, among them @nasa, @duolingo, @nytimes and @taylorswift - exactly the same 114-byte answer TikTok gives for a name that does not exist. So this row does not claim the account is missing, and it does not report it as offline.
  • blocked - TikTok answered with a bot check or an empty response. The account is not reported as offline. Accounts are requested directly first, and only this answer makes the run switch to a proxy session and try again.
  • unreadable - the response could not be read, or TikTok sent a status code whose meaning has not been measured here (only room status 2 and 4 have been). The code is reported as-is and is not translated.
  • no-change - monitoring ran and no account changed. The row lists the accounts that are still live.
  • no-match - onlyLive is on and none of the accounts is live right now.
  • invalid-input - the text is not a TikTok username or profile URL, so nothing was requested.
  • budget-reached - the run's maximum charge was reached: the row says how many ready rows fit, or how many accounts were not checked in monitoring mode.
  • not-checked - the end of your list was not checked, because maxProfiles accounts had already been read (monitoring off), or because more than 1,000 usernames were given. The row says how many.

Playback URLs

For live accounts, streamUrls holds the playback URLs TikTok publishes for the room, per quality (FLV, HLS and CMAF where present; from Apify on 2026-09-14 TikTok returned only the hd quality with FLV and CMAF). They are signed; TikTok decides how long they work (the expire value in the URLs measured on 2026-09-14 was about 14 days after the request), and they do not play once the stream has ended. This Actor does not record, download or store any stream. Turn includeStreamUrls off for smaller rows.

How fast, and what it costs to run

Accounts are checked one at a time with a short pause between requests, about 0.7 seconds each (measured on Apify on 2026-09-14). One run checks up to 1,000 accounts, about 12 minutes.

Input

FieldWhat it does
usernamesThe accounts to check: @name, name, or a profile or live URL. Names are sent in lower case, as TikTok stores them, so @AlJazeeraEnglish and @aljazeeraenglish are the same account and are checked once. If empty, the example accounts @aljazeeraenglish and @tiktok are checked.
maxProfilesHow many charged rows to return in total (up to 1,000).
includeStreamUrlsReturn playback URLs for live accounts (on by default).
onlyLiveReturn only the accounts that are live right now.
monitoringModeRemember the status and return an account only when it changes.
resetMonitoringStateForget every remembered status and start a fresh baseline.
useProxyRetry through a proxy if TikTok answers with a bot check. Every account is requested directly first.

Questions

How do I get an alert when a creator goes live? Turn on monitoringMode, schedule the Actor, and send the run's dataset to your channel with an Apify integration or webhook. How often is a trade-off between how fast you hear about a stream and the check fee: 10 accounts every 5 minutes is 86,400 checks a month ($25.92); every 15 minutes is 28,800 ($8.64). Rows with change: "went-live" are go-live events; ended rows tell you the stream is over. Runs on which nothing changed return a single free no-change row.

Does monitoring charge me when nothing changed? Unchanged accounts are not returned and cost no row price. Each account checked costs the check fee ($0.30 per 1,000), changed or not - that is what pays for polling.

Why does an account come back as no-live-profile when it exists? Because TikTok's live endpoint answers "user_not_found" for many accounts that exist - 33 of 83 in a sample measured on 2026-09-14 - with the same code and the same body as for a name that does not exist. The Actor cannot tell the two apart from that answer, so it tells you exactly that instead of guessing. The row is not charged, including the check fee.

Why is the viewer count empty for an account that is not live? Because TikTok keeps sending the previous room's numbers after a stream ends, including a "current" user count of 1. Those are not returned as if they described a stream that is happening.

Can I record the stream? No. This Actor reports status and passes on the playback URLs TikTok publishes; it does not record or store anything.

Is viewerCount the same as what the app shows? It is the room's user count as TikTok's live endpoint returns it at the moment of the request. It has not been compared against the number displayed in the app.

Example input

{
"usernames": ["@aljazeeraenglish", "@tiktok"],
"monitoringMode": true,
"includeStreamUrls": true,
"maxProfiles": 100
}