Tiktok Live Recorder
Pricing
from $1.00 / 1,000 recording-seconds
Tiktok Live Recorder
Record TikTok live streams to MP4 with full metadata, all stream quality URLs, and crash-resilient segmented recording, at a fraction of the cost.
Pricing
from $1.00 / 1,000 recording-seconds
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
263
Total users
12
Monthly active users
5 days ago
Last modified
Categories
Share
TikTok Live Recorder: Live Stream Capture, MP4 Files & Stream Metadata
TikTok Live Recorder captures a live broadcast on TikTok and turns it into a downloadable MP4 file plus structured metadata. Give it a username, a room ID, or a live URL, and it records the stream, converts it to MP4, and uploads the file to Apify's Key-Value Store, while a dataset record carries viewer counts, likes, creator profile details, commerce and replay flags, and every quality-level stream URL.
Why This Scraper?
- Three ways to start a recording. Give it a username, a room ID, or a live URL. No login is required for a public stream.
- A real MP4 file, not just metadata. The captured stream converts automatically into a playable video, alongside every quality-level stream URL TikTok exposes.
- Crash-resilient segmented recording. Split a long broadcast into timed chunks that each convert and upload as soon as they finish, so an interrupted run still leaves you with what was captured.
- Duration on your terms. Stop after a fixed number of seconds, or keep recording until the broadcast itself ends.
- Rich stream intelligence with every recording. Viewer counts, total viewers, likes, creator profile, commerce and replay flags come back alongside the file.
- Built-in geo-restriction handling. Pass session cookies or a residential proxy when TikTok blocks the request from Apify's cloud IPs.
Use Cases
- Archiving and moderation: keep a permanent MP4 record of a creator's live broadcasts for compliance or moderation review.
- Highlight and clip creation: pull the recording and its stream metadata to cut highlights for social or marketing use.
- Fan and community tools: build a "is this creator live right now" alert or highlight feed from the viewer count, likes and commerce flags.
- Scheduled monitoring: run the actor on a schedule against a creator who streams irregularly, and only pay for the seconds actually captured.
- Research and analytics: track viewer counts, total viewers and engagement across multiple creators over time.
Data You Get
Sample shape: values are illustrative placeholders, not from a live recording. The MP4 file itself lives in the run's Key-Value Store; this record only carries its key.
| Field | Example |
|---|---|
username | "sampleuser" |
roomId | "7348921047128372224" |
startedAt / endedAt | "2026-02-27T12:00:00.000000+00:00" / "2026-02-27T12:05:30.000000+00:00" |
durationSeconds | 330.5 |
fileKey | "TK_sampleuser_1772193600.mp4", the MP4's key in the run's Key-Value Store (in segmented mode, the last segment's key; see segments for all) |
fileSizeBytes | 52428800 |
status | "completed" (also "not_live" or "error") |
roomTitle | "Sample live session" |
viewerCount | 1523 |
totalViewers | 8420 |
likeCount | 34500 |
hasCommerce | false |
isReplay | false |
author | { "id": "6812345678", "uniqueId": "sampleuser", "nickname": "Sample User", "avatarUrl": "...", "followerCount": 155000000, "isVerified": true, "region": "US" } |
comment_count, share_count, follow_count, gift_users, fan_ticket, current_users | engagement counters from the room (flat fields, also available in the Engagement view) |
author_* | flat creator fields such as author_name, author_bio, author_followers, author_following, author_region (the Author view) |
streamUrls | every available quality's direct stream URL: [{ "quality": "Origin", "level": 4, "url": "..." }, ...] |
segments | file key, size and index of each chunk, only present when segmentDuration is set |
How to Use
- Provide one of Username, Room ID, or Live URL. If more than one is given, the live URL resolves first.
- Set Max Duration, or leave it at the default, which stops the recording after 20 seconds. Set it to
0to record until the broadcast ends. - Turn on Segment Duration to split a long recording into timed chunks that upload as they finish, so a crash never loses the whole recording.
- If TikTok blocks the run, add session Cookies or a Proxy Configuration, then click Start.
Record by username, a short default clip:
{"username": "sampleuser"}
Record up to 30 minutes by room ID, in crash-resistant segments:
{"roomId": "7348921047128372224","duration": 1800,"segmentDuration": 2}
Record by live URL through a residential proxy:
{"liveUrl": "https://www.tiktok.com/@sampleuser/live","duration": 600,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Record with session cookies for a region-locked stream:
{"username": "sampleuser","duration": 300,"cookies": { "sessionid": "your_session_id", "sessionid_ss": "your_session_id_ss" }}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/tiktok-live-recorder").call(run_input={"username": "sampleuser", "duration": 300})record = next(client.dataset(run["defaultDatasetId"]).iterate_items())video = client.key_value_store(run["defaultKeyValueStoreId"]).get_record(record["fileKey"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/tiktok-live-recorder').call({ username: 'sampleuser', duration: 300 });const { items } = await client.dataset(run.defaultDatasetId).listItems();const video = await client.keyValueStore(run.defaultKeyValueStoreId).getRecord(items[0].fileKey);
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Accepted input shapes
- Username:
sampleuser,@sampleuser, or a pasted profile or live link; the username is read out of it. - Live URL:
https://www.tiktok.com/@sampleuser/live, a profile linkhttps://www.tiktok.com/@sampleuser, a mobile link onm.tiktok.com, or a short share link onvm.tiktok.com/vt.tiktok.com. - Room ID: the numeric live room ID.
If a value cannot be read as a TikTok username or link, the run logs a warning and ignores it. When several are given, the live URL resolves first. If no username, room ID or live URL is supplied, the run uses the sample @tiktok and records it if live (previously such a run failed); a supplied room ID, live URL or username always replaces the sample. A link or account that cannot be resolved (a bad link, a private account, an unknown username) ends the run SUCCEEDED with one status: "error" record; the reason is shown in the run's status message and log.
Output views
The dataset has these views: Recording Results (overview), Stream & Creator Details, Author, Engagement and Segments (one row per chunk in segmented mode). Besides the original fields, each record carries flat room, author and engagement fields (room and live IDs, timestamps, comment, share and follow counts, author_* profile fields). All additions are extra fields; the original fields are unchanged.
Send results into your apps (MCP connectors)
Optionally pipe the result record into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the recording: the Apify dataset and the MP4 are never changed, and it adds no charge.
- Authorize a connector once under Apify, Settings, API & Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" field (
mcpConnectors). If the picker is empty, you have not authorized a connector yet. - For Notion, also set
notionParentPageUrlto the page where result pages should be created.maxNotifyListingscaps how many records are written per connector (the recorder produces one record per run).
The connection goes through Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
username | string | tiktok | TikTok username to record. user, @user or a pasted profile or live link all work. If you give no username, room ID or live URL, the sample is used. |
roomId | string | (none) | TikTok live room ID. Use this if the run cannot find the room from a username. |
liveUrl | string | https://www.tiktok.com/@tiktok/live | TikTok live or profile URL, for example https://www.tiktok.com/@user/live. Desktop, m.tiktok.com and short vm./vt.tiktok.com links are accepted. |
duration | integer | 20 | Maximum recording duration in seconds. Set to 0 to record until the stream ends. |
segmentDuration | number | 0 | Split the recording into segments of this length, in minutes. Each segment converts and uploads immediately, so partial recordings survive crashes. 0 or empty means a single file. |
cookies | object | (none) | Session cookies (sessionid, sessionid_ss). Only needed if TikTok is not available in your region. |
proxyConfiguration | object | (none) | Apify proxy configuration. Only needed if TikTok blocks your requests. |
mcpConnectors | array | (none) | Optional MCP connectors that receive the result record after the recording. |
notionParentPageUrl | string | (none) | Notion page URL or id for the Notion connector only. |
maxNotifyListings | integer | 50 | Cap on records written to each connector per run (does not affect the dataset). |
Output Example
Sample shape: values are illustrative placeholders, not from a live recording.
{"username": "sampleuser","roomId": "7348921047128372224","startedAt": "2026-02-27T12:00:00.000000+00:00","endedAt": "2026-02-27T12:05:30.000000+00:00","durationSeconds": 330.5,"fileKey": "TK_sampleuser_1772193600.mp4","fileSizeBytes": 52428800,"status": "completed","roomTitle": "Sample live session","viewerCount": 1523,"totalViewers": 8420,"likeCount": 34500,"hasCommerce": false,"isReplay": false,"author": {"id": "6812345678","uniqueId": "sampleuser","nickname": "Sample User","avatarUrl": "https://example.tiktokcdn.com/avatar.jpg","followerCount": 155000000,"isVerified": true,"region": "US"},"streamUrls": [{ "quality": "Origin", "level": 4, "url": "https://example-cdn.tiktokcdn.com/stream-origin.flv" },{ "quality": "HD", "level": 2, "url": "https://example-cdn.tiktokcdn.com/stream-hd.flv" }]}
Plan Requirement
By default the run connects directly with no proxy. In a 2026-10-13 measurement, Apify's standard (AUTO) and residential proxy pools each served every lookup this actor makes; the default direct connection from Apify's cloud was not separately verified, so choose Apify proxy if a run is blocked. TikTok may block cloud IPs or lock a stream to a region; in that case choose Apify proxy in Proxy Configuration (or supply your own proxy URLs) and, for region-locked streams, add session cookies.
With Apify proxy selected, the run starts on the standard pool and moves to residential only if needed. Residential proxies are not included in Apify free plans, and the run tells you so in the log:
- "The selected connection is unavailable to this run. Apify free plans do not include residential proxies. Continuing on a backup connection; some pages may still be unavailable."
- If the backup connection answers: "Served over the backup connection (the default connection was unavailable)."
If nothing could be read, the run ends FAILED with one of these status messages:
- "The proxy connection was refused for this account, so no page could be read. Your Apify plan does not include proxy access; a paid plan is required ..." (also check your own proxy URL credentials).
- "No results: residential proxies are unavailable on this run (Apify free plans do not include them), and the backup connection could not load the requested TikTok pages."
- "Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search. Please try again later."
FAQ
How much does it cost?
Two pay-per-event charges apply: an Actor Start event once per run, and a recording seconds event while the stream is captured. Recording seconds are charged in blocks of 30 seconds during capture, and a trailing partial block shorter than 30 seconds is not charged, so the default 20-second clip incurs only the start event. Capture stops automatically once your run's spending limit is reached. The Pricing tab shows the current rates.
Is it legal to record TikTok livestreams?
This actor only captures a stream that is already public and live on TikTok. You are responsible for how you use the recording: follow TikTok's terms and the laws that apply to you, and get consent or legal advice before republishing or monetizing someone else's broadcast.
Why did my run finish with status "not_live" and no recording?
The creator was not live when the run started. The run still ends SUCCEEDED and pushes one record with status: "not_live", whereas a run that could not read anything, or captured no data, ends FAILED. not_live is not an error: username resolution and the live check both succeeded, there is simply nothing to record right now. Schedule the actor to run periodically if you want to catch the next broadcast automatically.
Why did my recording come back as 0 bytes, or fail with an error?
If the stream returns no data, usually because the broadcast is region-locked, a single-file run pushes a status: "error" record instead of uploading an empty file, the run ends FAILED, and its status message asks you to pick a proxy country matching the broadcaster's region (or supply your own proxy URLs) and try again. In segmented mode, empty segments are skipped, so check fileSizeBytes and segments. Other unexpected failures surface through the run's status message too.
Can I split a long recording so I don't lose it if the run crashes?
Yes. Turn on segmentDuration (in minutes). Each segment converts to MP4 and uploads to the Key-Value Store as soon as it finishes, so a crash or timeout only costs you the segment in progress, not the whole recording.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client. The dataset row returns the file key, and the MP4 downloads from the run's Key-Value Store.
๐ Want more Tiktok data?
Pair this actor with these related scrapers from the same team:
| ๐งฉ TikTok Comments Scraper Scrape comments from TikTok videos using one or more video URLs or IDs. Extract comment... | ๐ฑ TikTok Profile, Hashtag, Search, Video & Trending Scraper Scrape TikTok without login. Extract profiles, bios, follower stats and videos; search by... |
| ๐งฉ TikTok Shop Scraper Scrape TikTok Shop by keyword, category or product URL. Extract prices, discounts, sales... | ๐ฌ Twitch ALL IN ONE URL From $1/1K. Scrape Twitch data at scale, including channels, live streams, clips, VODs... |
| ๐ฑ Universal Media Extractor Extract videos, audio, and metadata from 1000+ websites including YouTube, TikTok... | ๐ฑ Lemon8 Media Scraper Lightweight Lemon8 scraper for extracting image and video URLs from posts, with optional... |
๐ Browse all abotapi scrapers
๐ฌ Support
- ๐ Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- ๐ ๏ธ Need another site, extra fields or a private build? Email contact@abotapi.com.
- โญ Enjoying it? A quick review on the actor page helps other users find it.