Twitter Video Transcripts Scraper avatar

Twitter Video Transcripts Scraper

Pricing

from $10.55 / 1,000 transcript extracteds

Go to Apify Store
Twitter Video Transcripts Scraper

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

Automation Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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:

  1. validates and normalizes each URL;
  2. obtains a fresh public X guest session;
  3. resolves the post and attached media through X's public web data flow;
  4. checks video duration and download safety limits;
  5. downloads only a low-bandwidth audio stream for processing;
  6. runs speech recognition inside the Actor container;
  7. returns one typed dataset record per successful post;
  8. charges the transcript event only after non-empty transcript text is produced.

Supported URL forms include:

  • https://x.com/username/status/123456789
  • https://twitter.com/username/status/123456789
  • equivalent www and 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?

FieldMeaning
sourceUrlOriginal URL supplied in the input
canonicalUrlNormalized x.com post URL
postIdStable X post ID
mediaIdIdentifier of the resolved video media
authorNamePublic author display name
authorUsernamePublic X username
authorUrlCanonical author profile URL
postTextText accompanying the video post
postedAtSource publication timestamp
durationSecondsVideo duration reported by X
width, heightHighest-quality exposed video dimensions
thumbnailUrlPublic video thumbnail URL
mediaUrlPublic video variant observed during resolution
viewCountViews exposed at extraction time
likeCountLikes exposed at extraction time
repostCountReposts exposed at extraction time
replyCountReplies exposed at extraction time
transcriptFull normalized speech transcript
languageDetected or requested language code
languageProbabilityDetection confidence from zero to one
segmentsOrdered { startSeconds, endSeconds, text } objects
segmentCountNumber of timestamped segments
wordCountWhitespace-delimited transcript word count
extractionMethodMedia-resolution and transcription provenance
transcriptionModelSpeech model identifier
transcribedAtISO 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

  1. Open the Actor input page.
  2. Add one or more public X/Twitter status URLs containing videos.
  3. Leave language on auto, or provide a language such as en, es, fr, or ja.
  4. Set the maximum accepted video duration.
  5. Start the run.
  6. Open the default dataset and inspect the Twitter video transcripts view.
  7. 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.

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 os
from apify_client import ApifyClient
client = 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().items
print(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.

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.

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.