TikTok Live Scraper — rooms, viewers, streams avatar

TikTok Live Scraper — rooms, viewers, streams

Pricing

from $2.70 / 1,000 live rooms

Go to Apify Store
TikTok Live Scraper — rooms, viewers, streams

TikTok Live Scraper — rooms, viewers, streams

Find live TikTok rooms by keyword with playable HLS/FLV/DASH stream links, check whether specific creators are live, or re-check a watchlist of rooms.

Pricing

from $2.70 / 1,000 live rooms

Rating

0.0

(0)

Developer

Mu0i

Mu0i

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

TikTok Live Scraper — rooms, viewers, streams

Find live TikTok rooms by keyword and get playable stream links — HLS, FLV and DASH — plus the stream title, viewer count and host. Or check whether specific creators are live right now. Or re-check a watchlist of rooms in a single request.

No login, no cookies, no browser.

Each room comes with its full quality ladder. The links are fetched and verified, not just passed along:

recommendedHlsUrlreturns 200 application/x-mpegURL and a real #EXTM3U playlist — paste it into a browser player, ffmpeg or VLC
flvOriginUrlreturns 200 video/x-flv with real FLV magic bytes — this is what TikTok's own app pulls
dashreturns 200 application/dash+xml, a real MPD
flvAudioOnlyUrlaudio-only pull, for transcription or monitoring without the video bandwidth

Why recommendedHlsUrl exists rather than just handing you the ladder. TikTok's HLS origin quality returns 404 — reproducibly, on every room tested — while uhd_60, hd_60, hd, sd and ld all serve properly. origin is exactly the key you would reach for first, so this Actor picks the best quality that actually works and tells you which one it chose in recommendedHlsQuality.

Prefer HLS or DASH over FLV. The FLV pull is HEVC/H.265, which most players and every browser refuse. HLS and DASH are what will actually play. When a room has no HLS the row says so and points you at the FLV links.

One page per keyword — a real limit, stated up front

TikTok's live search returns one page. Any offset above zero returns an empty list, while the response still reports has_more: 1 and advances its own cursor — so it looks like working pagination and is not. The ceiling is therefore 30 rooms per keyword; use more keywords for more rooms.

The input schema caps maxRoomsPerKeyword at 30 rather than accepting a number it cannot honour.

How to use

  1. Click Try for free at the top of this page. Apify creates a free account if you do not have one — no card is needed to run this.
  2. Put what you want scraped into Keywords — one per line.
  3. Set Max rooms per keyword to bound the run, then press Start. You are billed per row, so this field is also your budget.
  4. Rows show up in the Dataset tab while the run is still going. Export to JSON, CSV, Excel or XML from there, or read them over the API.

Live rooms end. Rows carry expiresAt for the stream links, and re-checking a list of roomIds later is the cheap way to poll.

Three ways in, combinable in one run

Every field, with its default — paste the whole block and delete what you do not need:

{
"keywords": [
"gaming"
],
"maxRoomsPerKeyword": 20,
"creators": [],
"roomIds": [],
"streamFormats": [
"hls",
"flv"
]
}
inputwhat it gives you
keywordsup to 30 live rooms each, with stream links, titles and viewer counts
creatorsone row per creator: are they streaming, and in which room. Handles, URLs or numeric IDs
roomIdsone request re-checks the whole list — the cheap way to poll rooms from an earlier run
maxRoomsPerKeywordcaps each keyword's search. Default 30, which is also as deep as one page goes
streamFormatswhich stream links to include. Default HLS + FLV

On streamFormats: HLS (.m3u8) plays in browsers and in ffmpeg or VLC and is the one to keep if you only keep one. FLV is what TikTok's own app pulls, and it is HEVC — many players cannot decode it. DASH (.mpd) is the browser-native alternative to HLS and is off by default.

Stream links come only from keyword search. A creator check tells you they are live and gives you the room ID; the row says so plainly rather than leaving you to wonder where the links went.

Output

Every row carries source (search, creator or roomCheck) so mixed runs stay readable.

field
roomId, title, viewers, isLive
ownerUsername, ownerNickname, ownerId, ownerSecUid, profileUrl, liveUrl
qualities[]every quality the room offers
recommendedHlsUrl, recommendedHlsQualitythe HLS link that works
hls, flv, dashthe full ladders, per format you asked for
flvOriginUrl, flvAudioOnlyUrl
expiresAtwhen the link signatures lapse
keyword, notewhich term found it, and anything worth knowing

One row, exactly as it lands in your dataset (long signed CDN links shortened here for readability):

{
"source": "search",
"keyword": "music",
"roomId": "7673903898944375566",
"title": "FEEL GOOD FRI DJ LIVE",
"viewers": 138,
"isLive": true,
"ownerUsername": "thelovelythicki",
"ownerNickname": "♡ THiCKiANA ♡",
"ownerId": "6532034235442692097",
"ownerSecUid": "MS4wLjABAAAAdy_TEP2jMKBhoIIEmVTqd5d9-fNXvL7D7ZMpBLl_IGPgXAY4qqb90yn5rm09-hIW",
"profileUrl": "https://www.tiktok.com/@thelovelythicki",
"liveUrl": "https://www.tiktok.com/@thelovelythicki/live",
"qualities": [
"uhd",
"hd",
"origin",
"…"
],
"recommendedHlsUrl": "https://pull-hls-f16-tt01.tiktokcdn-us.com/game/stream-357866927008619…?…",
"recommendedHlsQuality": "hd",
"expiresAt": "2026-08-28T19:31:54.000Z",
"note": "hls.origin returns 404 on every room measured — use recommendedHlsUrl",
"hls": {
"uhd": "https://pull-hls-f16-tt01.tiktokcdn-us.com/game/stream-357866927008619…?…",
"hd": "https://pull-hls-f16-tt01.tiktokcdn-us.com/game/stream-357866927008619…?…",
"origin": "https://pull-hls-f16-tt01.tiktokcdn-us.com/game/stream-357866927008619…?…",
"sd": "https://pull-hls-f16-tt01.tiktokcdn-us.com/game/stream-357866927008619…?…",
"ld": "https://pull-hls-f16-tt01.tiktokcdn-us.com/game/stream-357866927008619…?…"
},
"flv": {
"uhd": "https://pull-f5-tt01.tiktokcdn-us.com/game/stream-3578669270086190012_…?…",
"hd": "https://pull-f5-tt01.tiktokcdn-us.com/game/stream-3578669270086190012_…?…",
"origin": "https://pull-f5-tt01.tiktokcdn-us.com/game/stream-3578669270086190012.…?…",
"sd": "https://pull-f5-tt01.tiktokcdn-us.com/game/stream-3578669270086190012_…?…",
"ld": "https://pull-f5-tt01.tiktokcdn-us.com/game/stream-3578669270086190012_…?…",
"ao": "https://pull-f5-tt01.tiktokcdn-us.com/game/stream-3578669270086190012.…?…"
},
"flvOriginUrl": "https://pull-f5-tt01.tiktokcdn-us.com/game/stream-3578669270086190012.…?…",
"flvAudioOnlyUrl": "https://pull-f5-tt01.tiktokcdn-us.com/game/stream-3578669270086190012.…?…"
}

Notes

  • Links are session tokens, not permalinks. The signature lasts around two weeks, but a live room ends long before that — treat a link as good for this stream only, and re-run to find what is live now.
  • You get links; the stream itself is pulled directly from TikTok's CDN by your own player or downloader.
  • Chat, gifts and anything interactive genuinely need an account and are not available here. Watching does not.
  • Rooms are region-dependent: these are what a US viewer sees.
  • Only public data. There is no login, so nothing hidden from a logged-out visitor is reachable.

Run it from your own code

Every Actor is an API endpoint. This starts a run, waits for it, and returns the rows in one call — swap in your token from Settings → Integrations:

curl -X POST 'https://api.apify.com/v2/acts/mu0i~tiktok-live-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"keywords": [
"gaming"
],
"maxRoomsPerKeyword": 20,
"creators": [],
"roomIds": [],
"streamFormats": [
"hls",
"flv"
]
}'

Pricing

Pay per result — you are billed for rows you receive, not for time or compute.

EventPer 1,000What one unit is
room$6.00one live room in the dataset

Paid Apify plans pay less than this. The table above is the free-plan rate. Starter, Scale and Business each get a lower per-unit price — up to 55% off on Business — and the Actor's Pricing tab shows every tier before you run anything.

Starting a run costs $0.00001 — a cent per thousand runs — and there is no run minimum. You are never billed for a run that found nothing. If an input has nothing to collect the run says so in a row of the dataset — never a silently empty result, and never a charge. A run that fails because the data could not be reached fails loudly, because that one is worth retrying.

Fourteen Actors covering the whole public TikTok surface. Same billing rules and the same guarantees throughout: billed once for each row you receive, never billed for a run that found nothing, and told in the dataset why it found nothing.

ActorWhat it does
TikTok Search Scraper — videos, users, hashtagsKeyword search across every tab, deduplicated.
TikTok Hashtag Scraper — videos by hashtagEvery video under a hashtag, walked deep.
TikTok Trending Scraper — the real Explore feedThe app's real Explore feed, not Creative Center.
TikTok Profile Scraper — followers, likes, bioFollowers, likes, bio for any public account.
TikTok User Posts Scraper — every video + statsEvery video an account posted, with stats.
TikTok Comments Scraper — replies, no duplicatesEvery comment and reply, no duplicate pages.
TikTok Video Downloader — no watermark MP4/MP3No-watermark MP4, MP3, covers and subtitles.
TikTok Transcript Scraper — no AI, no waitingSubtitles from TikTok's own caption track.
TikTok Sound Scraper — videos using a soundVideos that actually use a sound, filtered.
TikTok Places Scraper — locations and reviewsLocations with addresses, coordinates and reviews.
TikTok Shop Scraper — Products, Sellers & ReviewsShop search, product detail, seller catalogue.
TikTok Shop Category Scraper — every productEvery product in a Shop category and its subcategories.
TikTok Shop Reviews Scraper — full archiveThe full review archive for a Shop product.