Twitter Video Transcripts Scraper
Pricing
from $10.55 / 1,000 transcript extracteds
Twitter Video Transcripts Scraper
Turn public X video posts into transcript text, timestamped segments, language, author context, media metadata, engagement counts, and source provenance.
Pricing
from $10.55 / 1,000 transcript extracteds
Rating
0.0
(0)
Developer
Automation Lab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Turn supplied public X posts into structured twitter video transcripts. Each successful record contains full speech text, detected language, timestamped segments, post identity, author context, media metadata, engagement counts, and source provenance.
Use the Actor for recurring social-content monitoring, quote review, research datasets, accessibility workflows, and downstream AI analysis. It works with known public X/Twitter status URLs and does not require an X login.
What does Twitter Video Transcripts Scraper do?
The Actor accepts public X post URLs containing spoken video and:
- validates and normalizes each URL;
- obtains a fresh public X guest session;
- resolves the post and attached media through X's public web data flow;
- checks video duration and download safety limits;
- downloads only a low-bandwidth audio stream for processing;
- runs speech recognition inside the Actor container;
- returns one typed dataset record per successful post;
- charges the transcript event only after non-empty transcript text is produced.
Supported URL forms include:
https://x.com/username/status/123456789https://twitter.com/username/status/123456789- equivalent
wwwand mobile Twitter status URLs
The Actor does not search X, crawl profiles, fetch replies, or access private posts.
Who is it for?
Social media analysts
Convert saved X video posts into searchable text. Schedule the same URL list to support recurring content monitoring and retain current source context.
Newsrooms and researchers
Create source-linked transcript datasets from public statements and interviews. Keep the post ID, author, publication time, engagement snapshot, video ID, and canonical URL beside every transcript.
Marketing and content teams
Review spoken campaign messages, product announcements, and podcast clips. Use segment timestamps to locate an approximate quote position in the source video.
Developers and data teams
Send structured records to a warehouse, spreadsheet, vector database, LLM pipeline, or alerting workflow.
Use postId and canonicalUrl as stable join keys.
Why use this Actor?
- Timestamped speech: ordered segments include start, end, and text.
- X-specific provenance: every record retains the supplied URL, normalized post URL, post ID, media ID, author, and post text.
- Media context: duration, dimensions, thumbnail, and an observed public media variant are included when exposed.
- Engagement snapshot: views, likes, reposts, and replies are returned when X exposes them.
- Language control: detect speech automatically or provide a language code.
- No external speech API: transcription runs locally inside the Actor.
- Bounded processing: URLs are processed sequentially, with duration, batch, and media-size limits.
- Success-based item charging: private, deleted, silent, non-video, or failed posts do not receive a transcript charge.
What data can I extract?
| Field | Meaning |
|---|---|
sourceUrl | Original URL supplied in the input |
canonicalUrl | Normalized x.com post URL |
postId | Stable X post ID |
mediaId | Identifier of the resolved video media |
authorName | Public author display name |
authorUsername | Public X username |
authorUrl | Canonical author profile URL |
postText | Text accompanying the video post |
postedAt | Source publication timestamp |
durationSeconds | Video duration reported by X |
width, height | Highest-quality exposed video dimensions |
thumbnailUrl | Public video thumbnail URL |
mediaUrl | Public video variant observed during resolution |
viewCount | Views exposed at extraction time |
likeCount | Likes exposed at extraction time |
repostCount | Reposts exposed at extraction time |
replyCount | Replies exposed at extraction time |
transcript | Full normalized speech transcript |
language | Detected or requested language code |
languageProbability | Detection confidence from zero to one |
segments | Ordered { startSeconds, endSeconds, text } objects |
segmentCount | Number of timestamped segments |
wordCount | Whitespace-delimited transcript word count |
extractionMethod | Media-resolution and transcription provenance |
transcriptionModel | Speech model identifier |
transcribedAt | ISO completion timestamp |
X CDN media and thumbnail URLs may expire.
Use postId and canonicalUrl as durable provenance rather than permanent media storage.
Counts can be null or change after a run.
How to get started
- Open the Actor input page.
- Add one or more public X/Twitter status URLs containing videos.
- Leave
languageonauto, or provide a language such asen,es,fr, orja. - Set the maximum accepted video duration.
- Start the run.
- Open the default dataset and inspect the Twitter video transcripts view.
- Export JSON, CSV, Excel, XML, or RSS, or consume the dataset through the API.
Start with one known public video. After confirming the output fits your workflow, add up to five URLs or save the input as an Apify task.
Input parameters
startUrls
Required array of public X or Twitter post URLs.
Every URL must use a /username/status/numeric-id path and contain downloadable public video audio.
Duplicate post IDs are processed once.
Private, deleted, age-restricted, login-only, image-only, and unsupported URLs fail explicitly. The Actor does not accept profile pages, searches, lists, spaces, or arbitrary direct media files.
maxItems
Maximum number of unique supplied URLs processed in one run. The accepted range is 1–5 and the default is 3. This controls a bounded URL batch; it is not a search-result limit.
language
Use auto to detect the spoken language.
Alternatively enter a two- or three-letter code such as en, es, fr, ja, or deu.
A correct hint can improve short-clip recognition.
maxVideoDurationSeconds
Reject videos longer than this threshold before speech recognition. The accepted range is 10–1800 seconds and the default is 600. Use a lower limit for predictable short-form monitoring runs.
Example input
{"startUrls": [{ "url": "https://x.com/NASA/status/2087601629486813499" }],"maxItems": 1,"language": "en","maxVideoDurationSeconds": 600}
For recurring monitoring, save the URL list as an Apify task and attach a schedule. Each run creates a new dataset with current source metadata and a fresh transcription timestamp.
Example output
This shortened example reflects current real output shape while omitting most segments:
{"sourceUrl": "https://x.com/NASA/status/2087601629486813499","canonicalUrl": "https://x.com/NASA/status/2087601629486813499","postId": "2087601629486813499","mediaId": "2087601144964984832","authorName": "NASA","authorUsername": "NASA","postedAt": "2026-02-02T17:30:13.000Z","durationSeconds": 227.562,"language": "en","languageProbability": 0.999,"transcript": "Talking to us live from Iceland...","segments": [{"startSeconds": 0,"endSeconds": 4.12,"text": "Talking to us live from Iceland."}],"segmentCount": 68,"wordCount": 683,"extractionMethod": "x-public-graphql-yt-dlp-local-ai-speech-to-text","transcriptionModel": "faster-whisper-tiny","transcribedAt": "2026-09-14T15:30:00.000Z"}
Transcript accuracy varies with music, accents, compression, overlapping speakers, background noise, and audio quality. Review consequential quotations against the source video before publishing them.
How much does it cost to transcribe X videos?
Pricing uses two events:
- Run started: $0.005 once per run.
- Video transcript: tiered per successful non-empty transcript.
At the Bronze tier, the transcript event is $0.017584 per successful video. A run with one successful video is approximately $0.022584. A run with five successful videos is approximately $0.09292. Failed URLs do not receive a transcript event, although the one-time start event still applies.
Higher Apify subscription tiers receive lower per-transcript event prices. The Console displays the active tier before a run starts. Runtime, media resolution, and local speech recognition are covered by the Actor's pay-per-event price.
Monitoring and automation workflows
Recurring public-post review
Save a stable list of public X post URLs as an Apify task.
Run it daily or weekly and compare datasets by postId and transcribedAt.
The Actor does not discover new posts or send alerts by itself.
Editorial quote review
Search transcript for a phrase.
Use segments to find its approximate position and open canonicalUrl for verification.
Spreadsheet export
Send author, source URL, language, duration, transcript, and engagement columns to Google Sheets. Keep the full segments array as JSON when a flat sheet is not suitable.
LLM and semantic search
Chunk timestamped segments and retain post/media IDs as metadata. Load the chunks into a vector database or summarization pipeline. Summarization, translation, embeddings, and classification are downstream steps, not Actor output.
Run with the Apify API
Replace YOUR_TOKEN with your Apify API token.
The sync endpoint starts the Actor and returns default dataset items.
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~x-twitter-video-transcript-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"startUrls": [{"url":"https://x.com/NASA/status/2087601629486813499"}],"maxItems": 1,"language": "en","maxVideoDurationSeconds": 600}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/x-twitter-video-transcript-scraper').call({startUrls: [{ url: 'https://x.com/NASA/status/2087601629486813499' }],maxItems: 1,language: 'en',maxVideoDurationSeconds: 600,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0].transcript);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("automation-lab/x-twitter-video-transcript-scraper").call(run_input={"startUrls": [{"url": "https://x.com/NASA/status/2087601629486813499"}],"maxItems": 1,"language": "en","maxVideoDurationSeconds": 600,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items[0]["transcript"])
Use with MCP and AI agents
Connect this Actor to Claude Code through Apify MCP:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/x-twitter-video-transcript-scraper"
Claude Desktop
Add the following remote MCP server configuration to Claude Desktop.
Cursor
Use the same remote server URL in Cursor's MCP settings.
VS Code
Add the same remote MCP server to your VS Code MCP configuration.
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/x-twitter-video-transcript-scraper"}}}
Example prompts:
- “Transcribe this public X video and return every timestamped segment.”
- “Run the X video transcript Actor for these three post URLs and compare the spoken claims.”
- “Extract transcript text, author, post time, duration, and engagement metadata from this X video.”
Provide only public URLs you are authorized to process.
Reliability, limits, and failure behavior
- A run accepts at most five unique post URLs.
- Videos longer than the configured limit are rejected before transcription.
- Media downloads are limited to 80 MB.
- URLs run sequentially to keep CPU and memory predictable.
- The current transcription model favors speed and cost over studio-grade accuracy.
- Public X web endpoints can change; a source-resolution failure is returned as an explicit failed run.
- If one URL fails after earlier successes, successful records remain in the dataset and only those records receive transcript events.
- X media URLs are temporary and should not be treated as permanent archives.
- Silent videos fail because they cannot produce a useful speech transcript.
Troubleshooting
Why did my post produce no transcript?
Confirm the post is public, still available, contains a video with audible speech, and is shorter than your duration limit. Image posts, GIF-only posts, private accounts, removed posts, and region/age restrictions are outside scope.
Why did the run fail after saving some records?
The Actor preserves useful earlier transcripts but fails the run if any requested URL fails. This prevents a partial batch from looking complete. Inspect the log for the affected post ID and source error.
Why is a transcript imperfect?
Speech recognition quality depends on source audio. Try supplying the correct language code, then review low-confidence or consequential passages against the video.
Can it transcribe private or login-only posts?
No. The Actor uses public guest access only and does not accept account cookies or credentials.
Responsible and legal use
Use the Actor only for public content you are permitted to process. Follow applicable laws, platform terms, copyright rules, privacy obligations, and your organization's retention policies. Do not use transcript output to harass people, infer sensitive traits, bypass access controls, or republish protected material without permission.
Speech recognition is probabilistic. Keep the source URL and timestamps, review important quotations, and distinguish machine transcripts from author-provided text.
Related automation-lab Actors
automation-lab/instagram-reel-video-transcriptsfor public Instagram Reel and video transcripts.automation-lab/facebook-video-transcript-extractorfor public Facebook video and Reel transcripts.automation-lab/video-to-text-transcriberfor uploaded files and anonymously reachable direct media URLs.
Choose this Actor when the source is a public X/Twitter status URL and X-specific post provenance matters.
FAQ
Does the Actor download permanent video files?
No. It temporarily downloads a low-bandwidth audio stream for transcription, removes working files after each URL, and returns metadata plus transcript records.
Can I process several videos in one run?
Yes, supply up to five public post URLs and set maxItems accordingly.
Does it translate transcripts?
No. It detects or accepts the spoken language and transcribes in that language. Use a downstream translation step when needed.
Does it use X API credentials?
No. It uses the public web guest flow and does not require an X developer account or user login.
Are engagement counts historical?
No. They are a best-effort snapshot exposed when the post is resolved. Use scheduled runs and external comparison logic if you need change tracking.
Is every successful run charged per URL?
The one-time start event applies once per run. The transcript event applies only to each non-empty transcript successfully produced.