Twitter (X) Video Downloader avatar

Twitter (X) Video Downloader

Pricing

from $3.99 / 1,000 tweet medias

Go to Apify Store
Twitter (X) Video Downloader

Twitter (X) Video Downloader

Download Twitter (X) videos, GIFs and photos from tweet URLs or IDs. Get MP4 links in every quality, thumbnails, duration, plus tweet text, author, likes, retweets and views. Export JSON, CSV, Excel.

Pricing

from $3.99 / 1,000 tweet medias

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

18 hours ago

Last modified

Categories

Share

Twitter (X) Video Downloader

Twitter (X) Video Downloader turns tweet links or IDs into direct MP4 download links for every video and GIF on X (Twitter), with all available qualities, photos in original size, and tweet details such as text, author, likes, retweets, and views.

Paste x.com or twitter.com links or numeric tweet IDs and get the best-quality MP4 plus every other resolution, the HLS stream, thumbnail, duration, aspect ratio, and 20+ tweet and author fields, with no X login or API key.

Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

Use Apify Actor parsebird/twitter-video-downloader to get download links for videos, GIFs, and photos in public tweets on X (Twitter). Example with ApifyClient (Python): client.actor("parsebird/twitter-video-downloader").call(run_input={"tweetUrls":["https://x.com/SpaceX/status/1732824684683784516","1986587629740270045"]}). Inputs: tweetUrls array of strings required (x.com, twitter.com, or mobile.twitter.com status links, or numeric tweet IDs; up to 5,000; duplicates processed once); videoOnly boolean default false (skip photos); includeAllQualities boolean default true (videoQualities list); includeMetadata boolean default true (text and author/engagement); includeQuotedMedia boolean default false (also media from the quoted tweet, rows get quotedBy). Output: one row per video or GIF, plus one row per tweet holding all its photos; tweets that fail or have no media get a free row with status failed or no_media and an error. Fields: tweetId, tweetUrl, status (success | failed | no_media), mediaType (video | gif | photo), mediaIndex, mediaCount, text, displayText, createdAt (ISO 8601), language, author {name, username, profileImage, verified, followers}, engagement {likes, retweets, replies, quotes, bookmarks, views} as formatted strings like "125.4K", engagementCounts (same as numbers), thumbnail, duration (m:ss), durationMs, width, height, aspectRatio, quality, downloadUrl (best MP4), hlsUrl, videoQualities[{url, bitrate, quality, resolution, contentType}], photos[{url, originalUrl, width, height, altText}], dataSource, timestamp, error. API docs: https://docs.apify.com/api/client/python/ and https://docs.apify.com/api/client/js/. Token: https://console.apify.com/account/integrations.

What is Twitter (X) Video Downloader?

Twitter (X) Video Downloader is a Twitter video downloader API that gives you direct MP4 links for videos and GIFs in public tweets, in every quality X offers. It also returns photos in original resolution and optional tweet metadata: text, post date, language, author details with follower count, and likes, retweets, replies, quotes, bookmarks, and views.

You don't need an X account, cookies, or an API key. The easiest way to try it is to open the actor, keep the prefilled SpaceX tweet, and click Start. Each tweet takes about a second.

The actor returns download links. It does not store the video files for you; open downloadUrl in a browser or pass it to any download tool.

What can Twitter (X) Video Downloader do?

  • ๐ŸŽฌ Download Twitter videos as MP4, with the highest-bitrate version in downloadUrl.
  • ๐Ÿ“ถ Pick any quality: every MP4 rendition X offers (for example 480x270 up to 2048x1536) with bitrate and resolution, plus the HLS stream.
  • ๐ŸŒ€ Save Twitter GIFs: X stores GIFs as MP4 files, and you get the direct link.
  • ๐Ÿ–ผ๏ธ Get photos in full size: every photo in a tweet with an originalUrl for the full-resolution image and its alt text.
  • ๐Ÿงพ Add tweet details: text with links expanded, date, language, author, followers, likes, retweets, replies, quotes, bookmarks, and views.
  • ๐Ÿ” Follow quoted tweets: optionally include the video or photos from the tweet being quoted.
  • ๐Ÿ”— Paste links as you find them: x.com, twitter.com, mobile.twitter.com, /i/web/status/ links, links ending in /video/1, or bare tweet IDs.
  • โฑ๏ธ Automate with Apify schedules, the Apify API, webhooks, and integrations such as Google Sheets, Make, Zapier, and Slack.
  • ๐Ÿ“ Export results as JSON, CSV, Excel, HTML, or XML.

What data can you extract from X (Twitter)?

FieldDescription
downloadUrlDirect link to the best-quality MP4
videoQualitiesEvery MP4 quality with bitrate, quality (for example 10368kbps), and resolution (for example 1920x1080)
hlsUrlHLS (m3u8) stream for the video
photosPhoto URLs, originalUrl for full size, dimensions, and alt text
mediaType, thumbnail, duration, durationMs, width, height, aspectRatioMedia type (video, gif, photo) and video details
text, displayText, createdAt, languageTweet text as posted and as displayed (expanded links, media links removed), post time, and language
authorDisplay name, username, profile image, blue check, and followers
engagement, engagementCountsLikes, retweets, replies, quotes, bookmarks, and views, formatted (125.4K) and as numbers
status, errorsuccess, failed (deleted, private, or unavailable), or no_media, with the reason

How to download Twitter videos

  1. Open Twitter (X) Video Downloader and click Try for free or Start.
  2. In Tweet URLs or IDs, paste one tweet link or ID per line. Copy links with Share โ†’ Copy link on X.
  3. Optionally turn on Videos and GIFs only, turn off Include all qualities or Include tweet details, or turn on Include media from quoted tweets.
  4. Click Start.
  5. Open the Output tab and click a downloadUrl to save the MP4, or export the results as JSON, CSV, or Excel.

Input parameters

ParameterTypeRequiredDefaultDescription
tweetUrlsarray of stringsYesโ€”Tweet links from x.com or twitter.com, or numeric tweet IDs. Up to 5,000 per run.
videoOnlybooleanNofalseSkip photos. Photo-only tweets get a free no_media row.
includeAllQualitiesbooleanNotrueAdd videoQualities with every MP4 quality.
includeMetadatabooleanNotrueAdd tweet text, date, language, author, and engagement.
includeQuotedMediabooleanNofalseAlso return media from the quoted tweet (quotedBy is set on those rows).
proxyConfigurationobjectNononeNot needed for most runs; the actor switches to Apify Proxy if X limits requests.

Input / Output

Example input with a URL and an ID:

{
"tweetUrls": [
"https://x.com/katyperry/status/1986587629740270045",
"1732824684683784516"
],
"videoOnly": false,
"includeAllQualities": true,
"includeMetadata": true
}

A real output row for the first tweet (videoQualities shortened to two of five):

{
"tweetId": "1986587629740270045",
"tweetUrl": "https://x.com/katyperry/status/1986587629740270045",
"status": "success",
"mediaType": "video",
"mediaIndex": 1,
"mediaCount": 1,
"text": "bandaids\nout now\nhttps://t.co/21WmKj8jlL https://t.co/ZqOQjRHGDD",
"displayText": "bandaids\nout now\nkaty.lnk.to/BandaidsVideo",
"createdAt": "2025-11-07T00:12:54Z",
"language": "en",
"author": {
"name": "KATY PERRY",
"username": "katyperry",
"profileImage": "https://pbs.twimg.com/profile_images/2070301938965508096/naJYT_MY_normal.jpg",
"verified": true,
"followers": 90024005
},
"engagement": {
"likes": "125.4K",
"retweets": "17.4K",
"replies": "7.2K",
"quotes": "4.4K",
"bookmarks": "5.6K",
"views": "11.4M"
},
"engagementCounts": {
"likes": 125398,
"retweets": 17372,
"replies": 7205,
"quotes": 4373,
"bookmarks": 5586,
"views": 11356289
},
"thumbnail": "https://pbs.twimg.com/amplify_video_thumb/1986587308167208962/img/w4dQka5ShDarBqu9.jpg",
"duration": "0:29",
"durationMs": 29496,
"width": 2048,
"height": 1536,
"aspectRatio": "4:3",
"quality": "25128kbps",
"downloadUrl": "https://video.twimg.com/amplify_video/1986587308167208962/vid/avc1/2048x1536/KjM04BYtvGe3XYO9.mp4?tag=21",
"hlsUrl": "https://video.twimg.com/amplify_video/1986587308167208962/pl/diWbychXzbmsARjY.m3u8?tag=21&v=e90",
"videoQualities": [
{
"url": "https://video.twimg.com/amplify_video/1986587308167208962/vid/avc1/2048x1536/KjM04BYtvGe3XYO9.mp4?tag=21",
"bitrate": 25128000,
"quality": "25128kbps",
"resolution": "2048x1536",
"contentType": "video/mp4"
},
{
"url": "https://video.twimg.com/amplify_video/1986587308167208962/vid/avc1/1440x1080/XCv1kDR6cKT9YT0C.mp4?tag=21",
"bitrate": 10368000,
"quality": "10368kbps",
"resolution": "1440x1080",
"contentType": "video/mp4"
}
],
"dataSource": "graphql",
"timestamp": "2026-09-30T23:21:05.799Z"
}

Photo rows carry photos instead of the video fields. Rows for tweets that couldn't be loaded look like {"tweetId": "1", "status": "failed", "error": "Tweet not found or deleted"}. Download results in JSON, CSV, Excel, HTML, or XML.

Python API example

from apify_client import ApifyClient
import urllib.request
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("parsebird/twitter-video-downloader").call(run_input={
"tweetUrls": ["https://x.com/SpaceX/status/1732824684683784516"],
"videoOnly": True,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item["status"] == "success":
urllib.request.urlretrieve(item["downloadUrl"], f"{item['tweetId']}-{item['mediaIndex']}.mp4")
print("saved", item["tweetUrl"], item["quality"])

JavaScript API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('parsebird/twitter-video-downloader').call({
tweetUrls: ['1986587629740270045', 'https://twitter.com/NASA/status/2046969982131507400'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
if (item.mediaType === 'photo') console.log(item.photos.map((p) => p.originalUrl));
else if (item.status === 'success') console.log(item.downloadUrl, item.engagement?.views);
}

See the Python client and JavaScript client docs for more options.

Use cases

  • Social media teams: save your brand's or partners' X videos in the best quality for reposting and archiving.
  • Researchers and journalists: archive videos and their context (text, date, author, views) before they are deleted.
  • Content creators: collect reference clips and GIFs with their engagement numbers.
  • Data pipelines: feed MP4 links into transcription, moderation, or AI video tools, such as our Video & Audio Transcriber.
  • Monitoring: schedule runs over a list of tweets to track views and likes over time.

How it works

  1. The actor reads each tweet the way x.com does for logged-out visitors and collects its media, text, author, and counts.
  2. If that source is unavailable, it falls back to X's public embed data. Those rows have dataSource: "embed", and retweets, quotes, bookmarks, views, and followers are empty because embeds don't include them.
  3. It saves one row per video or GIF, sorted qualities with the best one in downloadUrl, and one row per tweet for its photos.

How much does it cost to download Twitter videos?

What is the price per Twitter video?

The actor uses pay-per-event pricing: you pay per media row saved, and platform usage is included.

EventFree planBronzeSilverGold
media-extracted$0.00599 ($5.99 / 1,000)$0.00499 ($4.99 / 1,000)$0.00449 ($4.49 / 1,000)$0.00399 ($3.99 / 1,000)

One media-extracted event is one successful row: a video, a GIF, or a tweet's photo set. Rows with failed or no_media status are free. The prefilled one-tweet test costs about $0.006 on the Free plan, and 1,000 videos cost $5.99. Apify's free plan includes monthly platform credits you can use to try the actor.

Is downloading X (Twitter) videos legal?

The actor only reads public tweets that X shows to anyone without logging in. Downloading public data is generally legal in many jurisdictions, but videos and photos belong to their creators and are protected by copyright, and profiles contain personal data covered by laws such as GDPR and CCPA. Get permission before reusing someone else's media, respect X's Terms of Service, and consult your lawyer if unsure. Read more in Apify's guide: Is web scraping legal?

ActorBest for
X/Twitter Article Markdown APIX Articles and long posts as clean Markdown
Video & Audio TranscriberTranscribing the videos you download
YouTube Shorts DownloaderYouTube Shorts download links
Telegram Media DownloaderMedia from public Telegram channels
Kick Video DownloaderKick clips and VODs
TikTok Slideshow DownloaderEvery photo from TikTok photo-mode posts

FAQ

Which links work? Status links from x.com, twitter.com, and mobile.twitter.com (with or without ?s=20 or /video/1 at the end), x.com/i/web/status/ links, and numeric tweet IDs. Profile links and other pages are skipped with a warning in the log.

Why did a tweet fail? The tweet was deleted, is from a protected account, or is otherwise unavailable to logged-out visitors. The error field says what X returned. Failed rows are free.

What quality do I get? downloadUrl is the highest-bitrate MP4 X has for that video, which depends on what was uploaded (for example 1280x720 at 2176 kbps or 2048x1536 at 25128 kbps). videoQualities lists every MP4 version, highest first.

Do GIFs have a quality? X stores GIFs as a single MP4 without a bitrate, so quality shows the GIF's size (for example 480x270) and duration is empty.

Why are views empty for some tweets? X only started counting views in December 2022, so older tweets have no view count. Rows with dataSource: "embed" also have no views, retweets, quotes, bookmarks, or followers.

How long do the download links work? Video and photo links from video.twimg.com and pbs.twimg.com opened without X cookies in our tests. X can remove media when a tweet is deleted, so download what you need soon after the run.

Can I download videos from private accounts? No. The actor only reads tweets X shows to logged-out visitors.

Where can I report issues? Open the Issues tab on the actor page with your input and run ID.