X Broadcast Viewer History & Replay Link Scraper
Pricing
from $0.49 / 1,000 results
X Broadcast Viewer History & Replay Link Scraper
Get a public X broadcast's title, state, start/end times, viewer counts over time, thumbnail, broadcaster profile, and an optional replay stream link, resolved from a broadcast link or ID.
Pricing
from $0.49 / 1,000 results
Rating
0.0
(0)
Developer
Dataspryva
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 hours ago
Last modified
Categories
Share
Collect public X broadcasts from a broadcast link, a bare broadcast ID, an announcement post, or a legacy Periscope link. Get the title, state, timing, viewer counts and viewer-history graph, an HLS playback link, a stable cover image, the broadcaster's public profile, and — when the broadcast has ended and its chat is public — the chat replay text. No X account, cookies, or API key required.
What this actor does
- One target list, many link forms:
x.com/i/broadcasts/...,twitter.com/i/broadcasts/..., bare IDs, post links that announce a broadcast, and legacy Periscope/v/<id>or/<user>/<id>links. - Metadata and timing: title, state, creation/start/end times, duration, dimensions, media key, language, tags, and the announcement post.
- Viewer statistics: current/total counters, the viewer-history graph when X exposes it, and derived peak/average viewers. The graph is sample counts, not a fabricated timeline.
- Replay and playback: an HLS playback URL and stream status. Live broadcasts return the live HLS URL; ended broadcasts return the replay URL.
- Public chat replay: optional text messages from an ended, public chat. Live and private chats are not collected; join/heart events are ignored.
- Broadcaster profile: followers, bio, location, account creation date, pinned posts, and verification details, with a compact fallback.
- Stable cover image: the expiring X thumbnail is stored in the run's key-value store; the original X URL is kept beside it.
- Honest status rows: invalid links, old
pscp.tv/wshare links, Spaces, deleted broadcasts, and rate limits each get a clear message instead of a silent failure. - Empty fields are omitted — no
nullvalues or placeholder strings.
Output per record
Each row has a type:
type | Meaning |
|---|---|
broadcast | One broadcast's metadata, viewer statistics, playback, chat summary and broadcaster |
viewer timeline point | One sampled point of the viewer-history graph (only when timeline rows are enabled) |
chat message | One public chat text message (only when chat replay is enabled and available) |
status | A problem row with a status and a human-readable message |
Broadcast fields
- Identity:
id,url,title,state,status(X's machine state when it publishes one) - Timing:
createdAt,updatedAt,startedAt,endedAt,durationSeconds - Viewers:
viewersNow,viewersTotal,viewCountGraph[],viewerHistoryAvailable,viewerGraphPoints,peakViewers,averageViewers,viewerTimelineSampled - Media:
thumbnailUrl(stable),thumbnailUrlOriginal,width,height,mediaKey,cameraRotation,isHighLatency - Replay:
replayAvailable,playbackKind(live/replay/upcoming),streamStatus,replayVideoUrl,replayVideoFormat - Chat:
chatHistoryStatus,chatMessageCount,chatEventCount,chatHistoryTruncated - Broadcaster:
broadcaster(public profile; compact fallback) - Context:
language,tags[],announcementTweetId,announcementTweetUrl,sourceTweetId,sourceTweetUrl(when the input was a post),chatOption,privateChat,isLocked,noHearts,hasModeration,source,collectedAt
Viewer timeline fields
broadcastId, broadcastUrl, title, pointIndex (original graph position), viewers, elapsedSeconds, timestamp, timeEstimated, collectedAt.
Chat message fields
broadcastId, broadcastUrl, title, messageId, username, displayName, text, timestamp, elapsedSeconds, profileImageUrl, twitterId, verified, participantIndex, collectedAt.
Input
| Field | Type | Default | Description |
|---|---|---|---|
broadcastIds | array | – | Broadcast links, bare IDs, announcement posts, or legacy Periscope /v/<id> / /<user>/<id> links (required) |
includeViewerStats | boolean | true | Current/total viewers, viewer-history graph and derived peak/average |
includeViewerTimeline | boolean | false | Emit one row per viewer-history point |
maxViewerTimelinePoints | integer | 0 | Max timeline rows per broadcast; 0 = all; capped runs sample evenly |
includeReplayVideo | boolean | false | Resolve the HLS playback URL and stream status |
includeChatHistory | boolean | false | Collect public chat replay text after the broadcast ends |
maxChatMessages | integer | 1000 | Max public chat text messages per broadcast |
includeThumbnail | boolean | true | Store the cover image and return a stable URL plus the original |
includeBroadcasterProfile | boolean | true | Add the broadcaster's public profile; falls back to the compact record |
Example: broadcast metadata
{"broadcastIds": ["https://x.com/i/broadcasts/1YGNrbPLejQGw"]}
Example: viewer history plus replay
{"broadcastIds": ["1YGNrbPLejQGw"],"includeViewerTimeline": true,"includeReplayVideo": true}
Example: public chat replay
{"broadcastIds": ["https://x.com/i/broadcasts/1BdGYEQPeDNGX"],"includeChatHistory": true,"maxChatMessages": 200}
Example: mixed links and a deleted broadcast
{"broadcastIds": ["https://x.com/i/broadcasts/1YGNrbPLejQGw","https://www.periscope.tv/v/1kvJpmapzboxE","https://x.com/i/broadcasts/1AAAAAAAAAAAA"],"includeReplayVideo": true}
Use cases
- Live-event monitoring: track audience size during and after a public broadcast.
- Newsroom verification: confirm viewer counts, timing and the announcement post for a public statement.
- Archival: preserve broadcast metadata, a stable cover image and a replay URL while they are still available.
- Creator comparison: compare audience, duration and chat activity across broadcasters.
- Dashboard feeds: load the viewer timeline or chat rows directly into a chart or spreadsheet.
- Chat research: study public chat replay around an event without collecting private or live chat.
FAQ
Do I need an X account, cookies or a proxy? No. The actor reads publicly visible broadcast data and selects a working connection automatically. Just add one or more targets and run it.
What counts as an X broadcast?
X live video, the product that replaced Periscope. Its canonical link is x.com/i/broadcasts/<id>; twitter.com links redirect there. Legacy Periscope replay pages no longer exist, but their broadcast IDs can still resolve at x.com when the broadcast survives. If X returns an upcoming broadcast, the row reports the state X publishes and playbackKind: "upcoming"; X's guest payload does not expose reliable scheduled start times or pre-live slate URLs, so those fields are omitted rather than guessed.
Why is the viewer-history graph missing for some broadcasts?
X exposes view_count_graph for only a subset of broadcasts: 26 of 50 (52%) in our October 2026 sample, and rarely for older ones. The actor never invents points; when X has no graph it reports viewerHistoryAvailable: false and omits peak/average.
Are the viewer timeline timestamps exact?
X returns viewer counts only, without per-point times. Timestamps are derived evenly from the broadcast's real start/end (or the collection time for a live broadcast) and flagged timeEstimated: true. averageViewers is the mean of X's sampled points.
What do viewersTotal and viewersNow mean?
They are X's own counters. viewersTotal is not a unique-viewer count, and on an ended broadcast viewersNow is the last concurrent count X reported, not a live figure.
Is the replay a downloadable video?
No. replayVideoUrl is an HLS playback URL for a standard player or your own pipeline. For a live broadcast it is the live HLS URL (playbackKind: "live"); the replay appears after the broadcast ends. Some regional CDN edges return 403 unless the request carries Referer: https://x.com/; add that header if your player is refused.
Why is a replay or chat missing?
A deleted or non-public broadcast has no replay. A live broadcast has no replay yet. Chat replay is collected only after a broadcast ends, only for public chats, and only when X still serves the chat history; many chats contain only join/heart events, so chatMessageCount can be 0. History is read in pages of up to 1,000 events with a 50-page cap per broadcast; maxChatMessages caps text rows, and chatHistoryTruncated marks a capped result.
Do legacy Periscope links work?
/v/<id> and /<user>/<id> links resolve by their trailing broadcast ID. Old pscp.tv/w/... share links are not broadcast IDs and return a legacyShareLinkUnsupported status row.
Does this work on X Spaces?
No. Spaces are audio rooms; they return a spacesNotSupported status row.
Is this affiliated with X? No. This is an independent, third-party actor that reads publicly visible broadcast data and is not operated by or affiliated with X Corp.