TikTok Story Viewer
Pricing
from $2.70 / 1,000 stories
TikTok Story Viewer
View and export active public TikTok stories from usernames, @handles, or public profile URLs. Get story IDs, timestamps, media links, covers, engagement, music, and author data when TikTok exposes them.
Pricing
from $2.70 / 1,000 stories
Rating
0.0
(0)
Developer
Maxime Dupré
Maintained by CommunityActor stats
0
Bookmarked
31
Total users
11
Monthly active users
7 days ago
Last modified
Categories
Share
🎬 TikTok Story Viewer for active public stories
Brand teams, creators, and researchers can use this TikTok story viewer to check active public stories from TikTok usernames, @handles, or profile URLs. Each saved row gives the story ID, creation time, direct media links, covers, engagement counts, music data, and author details, so you can review current stories with less manual work.
Use it as a TikTok story viewer without a TikTok login when you need public profile story data for monitoring, creator research, social reporting, content review, or archiving links. It does not discover profiles, search TikTok, scrape regular videos, or save media files in Apify storage.
- Review active public stories from a known profile without signing in with TikTok Anonymous Viewer Story.
- Check a public story from a known profile with TikTok Viewer Story Anonymous.
- Export active stories for a submitted profile with TikTok Viewer Story.
- Check current public stories from several profiles with TikTok Story Viewer Anonymous.
- Gather story links and metadata for creator research with TikTok Viewer Anonymous.
📦 Active TikTok story data
Each saved row represents one active public TikTok story. Video stories can include a direct video URL without a watermark and a separate watermarked URL. If TikTok does not provide a distinct watermarked link, watermarkedVideoUrl is null. Photo-style stories use the same row shape and can have null video links while cover data remains available.
🚀 Check public TikTok stories
- Add one or more profiles in TikTok profiles.
- Enter usernames such as
hbomax, @handles such as@tiktok, or public profile URLs such ashttps://www.tiktok.com/@tiktok. - Leave Story limit per profile empty to return all available results until the source is exhausted, or set a positive number for a per-profile cap.
- Choose Story order as
newest,oldest, orprofileOrder. - Start the Actor and open the dataset.
Stories expire quickly. A valid profile with no active public story when the Actor checks it produces no row.
⚙️ Input
Input fields
| Field | Type | What it does |
|---|---|---|
targets | array of strings | Required. Add up to 500 TikTok usernames, @handles, or public profile URLs. |
maxStoriesPerProfile | integer | Optional positive limit for active stories saved from each profile. Leave it empty to return all available results until the source is exhausted. |
sortStories | string | Sets the order for stories from each profile: newest, oldest, or profileOrder. |
Example input
This is the public input from a successful run:
{"targets": ["hbo","hbomax","jamescharles","tiktok","wnba"],"maxStoriesPerProfile": 10,"sortStories": "newest"}
🧾 Output
All rows use the same object shape for video and photo-style stories. Values can be null when TikTok does not provide them.
Output link
| Field | Type | What it does |
|---|---|---|
results | string | Link to the default dataset containing the active public TikTok story rows. |
Dataset row fields
| Field | Type | What it does |
|---|---|---|
storyId | string | Stable TikTok ID for the story. |
videoId | string or null | TikTok video ID for the story media when provided. |
profileUsername | string | Username of the TikTok profile that posted the story. |
createdAt | string or null | Story creation time when provided. |
durationSeconds | integer or null | Story video length in seconds when provided. |
isAd | boolean or null | Whether TikTok marks the story as an ad when the flag is provided. |
author | object | TikTok account details for the story author. |
author.id | string or null | TikTok user ID when provided. |
author.username | string or null | TikTok username for the author when provided. |
author.name | string or null | Author display name when provided. |
author.avatarUrl | string or null | Public author avatar image URL when provided. |
media | object | Direct media links and file size for the story. |
media.videoUrl | string or null | Direct story video URL without a watermark when TikTok provides it. |
media.watermarkedVideoUrl | string or null | Direct story video URL with a TikTok watermark when it differs from media.videoUrl; otherwise null. |
media.coverUrl | string or null | Story cover image URL when provided. |
media.dynamicCoverUrl | string or null | Animated story cover image URL when provided. |
media.originCoverUrl | string or null | Original story cover image URL when provided. |
media.sizeBytes | integer or null | Video file size in bytes when provided. |
media.watermarkedSizeBytes | integer or null | Watermarked video file size in bytes when provided. |
engagement | object | Engagement counts for the story when provided. |
engagement.playCount | integer or null | Number of story views when provided. |
engagement.likeCount | integer or null | Number of story likes when provided. |
engagement.commentCount | integer or null | Number of story comments when provided. |
engagement.shareCount | integer or null | Number of story shares when provided. |
engagement.collectCount | integer or null | Number of story saves when provided. |
music | object | TikTok sound or music details for the story. |
music.id | string or null | TikTok music or sound ID when provided. |
music.title | string or null | Music or sound title when provided. |
music.author | string or null | Music author or sound creator when provided. |
music.playUrl | string or null | Direct audio URL when TikTok provides it. |
music.coverUrl | string or null | Music cover image URL when provided. |
music.durationSeconds | integer or null | Music or sound length in seconds when provided. |
music.isOriginal | boolean or null | Whether TikTok marks the sound as original when the flag is provided. |
Example row
This complete video story row came from a successful run on beta build 1.1.3. It shows separate unwatermarked and watermarked links.
{"storyId": "7688825372107967774","videoId": "7688825372107967774","profileUsername": "cleiamazzeo86","createdAt": "2026-09-23T20:09:40.000Z","durationSeconds": 58,"isAd": false,"author": {"id": "6638285105437048833","username": "cleiamazzeo86","name": "Cleia | TikTok Growth Coach","avatarUrl": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-avt-0068-tx2/955ab4070dad46b4507511930c806b1d~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=9640&refresh_token=9b7982de&x-expires=1790370000&x-signature=v6v%2BAk7dioR%2BlveNX1mo%2BhCmV0c%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=useast5"},"media": {"videoUrl": "https://www.tiktok.com/aweme/v1/play/?faid=1988&file_id=3c166b18493f4da38c0ceef48fc37cfa&is_play_url=1&item_id=7688825372107967774&line=0&ply_type=2&pt=YXdlbWUud2ViLndlYmFwaSYvYXBpL3N0b3J5L2l0ZW1fbGlzdC8mMjAyNjA5MjMyMTU2MDg0NEEwQzA0QTNBQzg0NzM1MzhGQiYxNzkwMjAwNTY4JmM0ZjYzODllOTU2MA&signaturev3=dmlkZW9faWQ7ZmlsZV9pZDtpdGVtX2lkLjhkNGMwYjkzMzJlN2U1MWFhMjkzNzI0NjA3NzRhNGQx&tk=tt_chain_token&video_id=v15044gf0000daq33qvog65mjp1jq9fg","watermarkedVideoUrl": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast8/tos-useast8-pve-0068-tx2/oQS0RDf2qIVDEzEtMBtFEWHEEZDQPEA6rAfdiI/?a=1988&bti=ODszNWYuMDE6&&bt=530&ft=FLr6B6BMyq8.xswFE12pSDRYztGxRf&mime_type=video_mp4&rc=MzZpZGY3Njo6PGc3MzZoaUBpajxtc3A5cnQ2ZDMzaTczNEAxXjA1LS0zNTAxNS4xLy00YSNjbi5nMmRzMG5hLS1kMTJzcw%3D%3D&expire=1790373426&l=2026092321560844A0C04A3AC8473538FB&ply_type=2&policy=2&signature=2530f844d4d20dd15ffc93d83f3eb890&tk=tt_chain_token&btag=e00088000","coverUrl": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/ooAlQXe8jVQOqqIICzM00PWGVgnaAA0IeQMfQI~tplv-tiktokx-origin.image?dr=9636&x-expires=1790370000&x-signature=w1JUOR3Hr8XSabSu0XwC3bme3HA%3D&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=useast5","dynamicCoverUrl": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/oU06SjQERIPAgVZftqIAIZDqI9fFEErDBAtHMt~tplv-tiktokx-origin.image?dr=9636&x-expires=1790370000&x-signature=We7bWIInl3%2BYlffZvd9rH4RoRhs%3D&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=useast5","originCoverUrl": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/oEaIEZfDVItwR6qEPMHfqtSD0BgATEHyFARrIA~tplv-tiktokx-origin.image?dr=9636&x-expires=1790370000&x-signature=92DMJvmDBxEeItfBgbUn39wQGnU%3D&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=useast5","sizeBytes": 4343299,"watermarkedSizeBytes": 3987073},"engagement": {"playCount": 0,"likeCount": 0,"commentCount": 0,"shareCount": 0,"collectCount": 0},"music": {"id": "7688825410284718879","title": "original sound","author": "Cleia | TikTok Growth Coach","playUrl": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast8/tos-useast8-v-27dcd7-tx2/oseLAmgCGVejEAIXMjeLmouGCIAuaET0QNqEAI/?a=1988&bti=ODszNWYuMDE6&&bt=125&ft=GcAInInz7ThwNQ1GXq8Zmo&mime_type=audio_mpeg&rc=Mzk6dW05cjQ2ZDMzaTU8NEBpMzk6dW05cjQ2ZDMzaTU8NEBrcW5gMmRjMW5hLS1kMTJzYSNrcW5gMmRjMW5hLS1kMTJzcw%3D%3D&expire=1790222226&l=2026092321560844A0C04A3AC8473538FB&ply_type=3&policy=3&signature=f6eeb390c1dc147f58289d4a8c2177ba&tk=0&btag=e00048000","coverUrl": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-avt-0068-tx2/955ab4070dad46b4507511930c806b1d~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=9640&refresh_token=9b7982de&x-expires=1790370000&x-signature=v6v%2BAk7dioR%2BlveNX1mo%2BhCmV0c%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=useast5","durationSeconds": 58,"isOriginal": true}}
💳 Pricing
This Actor uses pay-per-event pricing. You are charged once for each active public TikTok story saved to the dataset. A valid profile with no active public stories produces no story row or story event.
🔌 Integrations
Use it with
- Export the dataset as JSON, CSV, Excel, XML, RSS, or HTML.
- Call the Actor through the Apify API.
- Schedule repeat checks for the same profiles.
- Send completed dataset rows to webhooks or your own workflow.
❓ FAQ
What do the two video URL fields mean?
media.videoUrl is the direct story video URL without a watermark when TikTok provides it. media.watermarkedVideoUrl is a separate watermarked URL when TikTok provides one that differs from it. Otherwise, media.watermarkedVideoUrl is null.
What happens when a target is invalid?
Each target must be a TikTok username, @handle, or public profile URL. If all submitted targets are invalid, the run completes with no story rows and reports that no valid profile was processed. This is different from a valid profile with no active story.
What happens when a valid profile has no active story?
When a valid public profile is processed and no active public story is found, the Actor saves no row for that profile and reports a no-match outcome. Stories expire quickly, so a later run can return different results.
What if the run reaches its charge limit?
The native charge limit can stop collection before another story row is saved. The run reports a charge-limited outcome and keeps any rows already collected, including zero rows. It does not report source exhaustion or no active public stories for that stop.
Why is an output field null?
TikTok does not expose every value for every story. Photo-style stories can have null video links, and music or cover fields can also be unavailable.
Can I limit stories or change their order?
Yes. Set Story limit per profile to a positive number for a per-profile cap, or leave it empty to return all available results until the source is exhausted. Story order supports newest, oldest, and profileOrder.
Are regular TikTok videos included?
No. This Actor checks active public stories from profiles. It does not scrape regular profile videos, TikTok search, comments, hashtags, or followers.
Can I use this as an anonymous TikTok story viewer?
You do not need a TikTok account, login, cookies, or API key. The Actor reads public stories only and cannot provide private or unavailable content.
Does this save video files?
No. It returns source media URLs and metadata. Media URLs can expire, so process important links soon after the run.
Can I run it on a schedule?
Yes. You can schedule the Actor on Apify, call it through the API, and send dataset rows to webhooks or other supported workflows.
📝 Changelog
v1.1 (04-09-2026)
- Story rows now include the watermarked video file size when TikTok provides it.
v1.0
- Story rows now provide a distinct watermarked video link when TikTok exposes one, or
nullwhen no distinct link is available.
v0.1
- Initial release.
🆘 Support
For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡
🔗 Related Actors
- Instagram Stories Scraper - Collect active Stories from public Instagram profiles.
- Snapchat Story Viewer - Collect public Snapchat stories and highlights from profiles.
- TikTok Profile Videos API Scraper - Collect regular public TikTok profile videos from known profiles.
- TikTok Video Downloader - Get direct video or audio links from known public TikTok video URLs.
- TikTok Live Search Scraper - Search active public TikTok LIVE rooms by keyword.
Made with ❤️ by Maxime Dupré