Twitter (X) Media Downloader
Download videos, photos, GIFs, audio and poster images from public Twitter/X posts - no login, no cookies. Works with post links or usernames, supports every video quality, audio-only M4A/MP3, quoted-post media and public signed download links.
Open in Apify Store$0.99 / 1K on Free
Short answer
Twitter (X) Media Downloader is an Apify Store Actor for X (Twitter) data that returns 27 published output fields, including tweetUrl, altText, tweetText, likeCount. It lists $0.99 per 1,000 results on the Free plan (pay per event), $0.49 on the Business plan. It takes 18 input settings, none required. It covers 3 of the 7 core X (Twitter) fields this site tracks. Last updated Oct 29, 2026.
From the public Store listing and published build schema, synced 2026-11-12.What it returns
27 fields from the published dataset schema. Export as JSON, CSV or Excel, or read the dataset through the Apify API.
typemedia file for a downloaded file, status for a run message.tweetIdNumeric ID of the post the media belongs to.tweetUrlCanonical URL of the post.mediaTypevideo, photo or gif.mediaUrlMedia URL with the selected photo quality applied (videos/GIFs use the chosen stream).mediaUrlOriginalUntouched X CDN URL of the media, without the quality parameter.thumbnailUrlPreview/poster image URL for videos and GIFs.posterImageUrlPoster image URL on video/GIF rows when includePosterImage is on, with the selected photo quality applied.altTextImage description X stores for the photo or video thumbnail.filenameFile name used in the key-value store.fileSizeBytesReal size of the downloaded file.widthMedia width in pixels.heightMedia height in pixels.durationSecondsVideo or GIF duration.audioFormatAudio container used when the audio-only option is on.downloadUrlPublic signed download link for the stored file.downloadStatusfinished, failed or notDownloaded.uploaderUsernameHandle of the account that posted the media.tweetTextText of the post.likeCountNumber of likes on the post.retweetCountNumber of reposts on the post.viewCountNumber of views on the post.mediaSourcepost for the post's own media, quoted post for media inside a quoted post, poster image for a video thumbnail.statusStatus code on status rows.messageHuman-friendly status or failure message.usernameUsername related to a status row.collectedAtUTC timestamp when the row was created.
Not in the schema among the core X (Twitter) fields: post_id, author, posted_at, reposts. The field matrix shows which other tools return them.
How it differs from the other X (Twitter) Actors
Every field it publishes also appears in at least one of the other 11 catalogue Actors for X (Twitter) with a schema, so pick on price, input options and the fields below.
Pick another Actor if you need
| Actor | Fields it adds | Price / 1K |
|---|---|---|
| X Post, Reply & Profile Lookup by Link or ID | createdAt, replyCount | $0.99 |
| X (Twitter) Profile & Post Engagement Extractor | name, createdAt, replyCount, quoteCount | $0.99 |
| X Video Subtitle & Caption Transcript Converter | videoIndex, videoSource, authorName, language | $0.99 |
| X/Twitter Keyword & Hashtag Tweet Search | createdAt, language, replyCount, quoteCount | $0.99 |
| X Keyword Search with Mention & Reply Operators | createdAt, language, replyCount, quoteCount | $0.99 |
Input
| Setting | Type | Required | Default | What it does |
|---|---|---|---|---|
| postUrls | array | No | – | Paste links of posts to download media from. Accepts x.com and twitter.com links, i/web/status links, or bare post IDs. Optional if you provide usernames or profile links below. |
| usernames | array | No | – | Scan a profile's media posts and download their photos, videos and GIFs. Type handles with or without @, or paste full profile links. Optional if you provide post links above. |
| maxPostsPerUser | integer | No | 20 | How many of each profile's most recent media posts to look at. Posts without matching media or filtered-out posts are skipped. |
| maxItems | integer | No | 100 | Hard cap on dataset rows for the whole run. The actor stops collecting and downloading once this many files are emitted. |
| mediaTypes | array | No | ["video","photo","gif"] | Choose which kinds of media to download. All types are selected by default. |
| imageQuality | string | No | orig | Quality to use for photos (and video poster images). Original is the full-resolution file posted on X. |
| videoQuality | string | No | best | Preferred video resolution. The actor picks the closest available quality when the exact one is not offered. |
| downloadAllQualities | boolean | No | false | Emit and download one separate file for every progressive MP4 quality X offers (for example 1080p, 720p, 480p) instead of only the preferred one. Every quality gets its own row, filename and download link. |
| includePosterImage | boolean | No | true | Save the thumbnail/poster image of each video or GIF as an additional photo file. |
| includeAltText | boolean | No | true | Attach the alt text (image description) X stores for each photo or video thumbnail to the media row. |
Show the other 8 settings
| Setting | Type | Required | Default | What it does |
|---|---|---|---|---|
| audioOnly | boolean | No | false | Download only the audio track of videos. Photos and GIFs are skipped. Files are extracted with ffmpeg and file saving is enabled automatically. |
| audioFormat | string | No | m4a | Format used when Audio only is on. |
| includeQuotedMedia | boolean | No | true | Also download the photos, videos and GIFs that appear inside a quoted post (a post embedded in the linked post). Those rows are marked with mediaSource "quoted post". |
| includeMetadata | boolean | No | true | Attach the post text, date, conversation and reply/quote flags, hashtags, mentions, links, like/repost/reply/quote/bookmark/view counts, author name, avatar, verification and follower count, and a derived engagement rate to every downloaded file. |
| minLikes | integer | No | 0 | When scanning usernames, skip posts with fewer likes than this. Posts whose like count is unknown are kept. Leave at 0 to keep every post. |
| minRetweets | integer | No | 0 | When scanning usernames, skip posts with fewer reposts than this. Posts whose repost count is unknown are kept. Leave at 0 to keep every post. |
| onlyVerifiedAuthors | boolean | No | false | When scanning usernames, skip posts whose author is not verified. Posts where verification is unknown are kept. |
| saveToFile | boolean | No | true | Download each file into this run's key-value store and add a public signed download link. Turn off to collect metadata and direct CDN links only. |
Example input
Built from the input form's published example values and defaults.
{
"postUrls": [
"https://x.com/NASA/status/2107095768821576019"
],
"maxPostsPerUser": 1,
"maxItems": 1,
"mediaTypes": [
"video",
"photo",
"gif"
],
"imageQuality": "orig",
"videoQuality": "best",
"downloadAllQualities": false,
"includePosterImage": false,
"includeAltText": true,
"audioOnly": false,
"audioFormat": "m4a",
"includeQuotedMedia": true,
"includeMetadata": true,
"minLikes": 0,
"minRetweets": 0,
"onlyVerifiedAuthors": false,
"saveToFile": false
} Run it from code or an AI agent
The same run through the Apify API, with the example input. You need an Apify API token; the run is billed to your account at the Store price.
Python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"postUrls": [
"https://x.com/NASA/status/2107095768821576019"
],
"maxPostsPerUser": 1,
"maxItems": 1,
"mediaTypes": [
"video",
"photo",
"gif"
],
"imageQuality": "orig",
"videoQuality": "best",
"downloadAllQualities": False,
"includePosterImage": False,
"includeAltText": True,
"audioOnly": False,
"audioFormat": "m4a",
"includeQuotedMedia": True,
"includeMetadata": True,
"minLikes": 0,
"minRetweets": 0,
"onlyVerifiedAuthors": False,
"saveToFile": False
}
run = client.actor("dataspryva/twitter-x-media-downloader").call(run_input=run_input)
if run is None:
raise RuntimeError("The Actor run was not found.")
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item) pip install apify-client
JavaScript
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "<YOUR_APIFY_TOKEN>" });
const input = {
"postUrls": [
"https://x.com/NASA/status/2107095768821576019"
],
"maxPostsPerUser": 1,
"maxItems": 1,
"mediaTypes": [
"video",
"photo",
"gif"
],
"imageQuality": "orig",
"videoQuality": "best",
"downloadAllQualities": false,
"includePosterImage": false,
"includeAltText": true,
"audioOnly": false,
"audioFormat": "m4a",
"includeQuotedMedia": true,
"includeMetadata": true,
"minLikes": 0,
"minRetweets": 0,
"onlyVerifiedAuthors": false,
"saveToFile": false
};
const run = await client.actor("dataspryva/twitter-x-media-downloader").call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items); npm install apify-client
cURL
curl -X POST "https://api.apify.com/v2/actors/dataspryva~twitter-x-media-downloader/run-sync-get-dataset-items" -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" -d '{"postUrls":["https://x.com/NASA/status/2107095768821576019"],"maxPostsPerUser":1,"maxItems":1,"mediaTypes":["video","photo","gif"],"imageQuality":"orig","videoQuality":"best","downloadAllQualities":false,"includePosterImage":false,"includeAltText":true,"audioOnly":false,"audioFormat":"m4a","includeQuotedMedia":true,"includeMetadata":true,"minLikes":0,"minRetweets":0,"onlyVerifiedAuthors":false,"saveToFile":false}' Waits for the run and returns the dataset items (runs over 300 seconds return HTTP 408; start an async run instead).
MCP (AI agents)
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=dataspryva/twitter-x-media-downloader",
"headers": {
"Authorization": "Bearer <YOUR_APIFY_TOKEN>"
}
}
}
} Adds this Actor as a tool in an MCP client that takes a remote server URL (Cursor, VS Code, Claude Code) through Apify's hosted MCP server. OAuth sign-in also works without the header. Clients that only start local servers can wrap the URL with npx mcp-remote.
What a run costs
The result rate falls on higher Apify plans. Each figure is the published per-result rate times the number of results.
| Apify plan | Per 1,000 | 10,000 results | 100,000 results |
|---|---|---|---|
| Free plan | $0.99 | $9.90 | $99 |
| Starter plan | $0.82 | $8.20 | $82 |
| Scale plan | $0.66 | $6.60 | $66 |
| Business plan | $0.49 | $4.90 | $49 |
- Every run also has a start event, charged per GB of memory (minimum one): $0.10 on Free, $0.03 on Business. At its default memory of 4 GB a run starts at $0.40 on Free. Fewer, larger runs keep this small.
- The Free plan includes $5 of monthly usage (Apify pricing, checked 2026-11-11); at the Free rate that covers at most about 5,050 results, less start events and platform usage.
- Worked example: 10,000 results in one run on the Free plan cost $10.30 ($9.90 for results + $0.40 start), plus Apify platform usage (compute), billed separately by Apify.
- Pay per event. Platform usage (compute) is billed by Apify on top of the event prices. Compare other tools in the cost estimator.
Where it fits among X (Twitter) routes
It ranks 1 of 12 catalogue Actors for X (Twitter) on the published formula (fields, price, reliability, freshness). Its line is highlighted on the map.
- 1 Twitter (X) Media Downloader 27 output fields, pay per event 3 of 7 core fields
$0.99 / 1K - 2 X Post, Reply & Profile Lookup by Link or ID 9 output fields, pay per event 3 of 7 core fields
$0.99 / 1K - 3 X (Twitter) Profile & Post Engagement Extractor 29 output fields, pay per event 3 of 7 core fields
$0.99 / 1K - 4 X Video Subtitle & Caption Transcript Converter 29 output fields, pay per event 3 of 7 core fields
$0.99 / 1K - + 7 other Store tools, combined Reference only 5 of 7 core fields
from $0.15 / 1K - API X API v2 Public API fields not compared
Stops are fields. A ring means the field is in that route's published output schema; no ring means the line passes without it. Bold labels are the core fields for this website, the rest are fields that differ between routes. A white capsule means every data line stops there. The red line is the official API; its field coverage is not compared. A crossed red line means there is no open official API.
Official route: X API v2
Public API. X API v2 uses prepaid pay-per-usage credits. Published standard read rates include $0.005 per Post resource and $0.010 per User resource. Pay-per-use launched on February 6, 2026; legacy Basic and Pro plans migrated to pay-per-use.
Charged per resource returned: $0.005 per Post, $0.010 per User. Owned Reads on qualifying own-account endpoints are $0.001 per resource. A 3 million Post-read monthly cap applies to self-serve pay-per-use.
Other Store tools for X (Twitter)
Reference only, from their public listings.
| Tool | Fields | Price / 1K |
|---|---|---|
| X (Twitter) Tweet Scraper | 120 | $0.15 |
| Tweet Scraper | 17 | $0.25 |
| Tweet Scraper V2 | 12 | $0.40 |
| Twitter (X.com) Scraper Unlimited: No Limits | 12 | $0.40 |
| Twitter (X) Follower Scraper | 29 | $0.15 |
What people use it for
- Download post media
- Collect media metadata
- Extract audio tracks
Other catalogue Actors for X (Twitter)
X Post, Reply & Profile Lookup by Link or ID
Resolve X post links or IDs into text, author, media, polls, quoted/parent posts, engagement metrics and replies, or resolve a handle into that…
X (Twitter) Profile & Post Engagement Extractor
Get any public X profile - bio, followers, verification, avatar, banner - plus latest, top and media posts with full engagement metrics. No login…
X Video Subtitle & Caption Transcript Converter
Convert public X (Twitter) videos into timestamped transcripts and downloadable SRT/VTT subtitle files, using native captions when available and…
X/Twitter Keyword & Hashtag Tweet Search
Search X (Twitter) by keyword, phrase or hashtag and get tweet text, author, engagement metrics, media and language. Every row says which keyword…
X Keyword Search with Mention & Reply Operators
Search X (Twitter) by keyword with filters for date, language, engagement, media, verification, mentioned handle, author, reply target, and…
X Community Activity & Member Finder
Collect public X Community posts, about info, rules and members with no login required. Get the community profile, member count, ranked posts with…
Similar Actors
Pinterest Media Downloader
Download public Pinterest image, GIF, Story Pin, and video media with source metadata and Key-Value Store links.
Snapchat Highlight & Story Media Downloader
Pull individual snaps from a Snapchat profile's saved highlight albums and live story, with downloadable video/image links, post timestamps, and…
Instagram Downloader API - Reels, Video & Photo
Download Instagram photos, videos, Reels and carousel posts from post links or usernames, up to 100 of each per run. Public posts and profiles…
Snapchat Spotlight Video Link & Caption Downloader
Give this actor one or more Snapchat Spotlight links and get back a direct video link, thumbnail, caption, creator info and engagement counts per…
TikTok Video, Audio & Cover Downloader
Download TikTok videos, cover thumbnails, background audio, and slideshow images by post URL, with quality selection and a stable download link…
YouTube Video, Playlist & Channel Downloader with Metadata
Download YouTube videos from direct links, playlists, channels, or search phrases at your chosen quality, with a public file link plus title,…
Questions people ask
How much does Twitter (X) Media Downloader cost?
The published result rate depends on your Apify plan: $0.99 per 1,000 on Free, $0.82 per 1,000 on Starter, $0.66 per 1,000 on Scale, $0.49 per 1,000 on Business. So 10,000 results cost about $9.90 on the Free plan and $4.90 on Business, plus a start fee of $0.10 per run per GB of memory on Free. Platform usage is billed separately.
What data does Twitter (X) Media Downloader return?
Its published output schema lists 27 fields: type, tweetId, tweetUrl, mediaType, mediaUrl, mediaUrlOriginal, thumbnailUrl, posterImageUrl, altText, filename, fileSizeBytes, width, and 15 more. A listed field is not guaranteed to be filled in every row.
What input does Twitter (X) Media Downloader need?
No input is strictly required; the defaults run as is. Common settings: postUrls, usernames, maxPostsPerUser, maxItems, mediaTypes, imageQuality.
What are the alternatives to Twitter (X) Media Downloader for X (Twitter)?
12 catalogue Actors cover X (Twitter). Close alternatives: X Post, Reply & Profile Lookup by Link or ID; X (Twitter) Profile & Post Engagement Extractor; X Video Subtitle & Caption Transcript Converter. The X (Twitter) page compares all of them field by field.
How do I run Twitter (X) Media Downloader from Python or the API?
Use the Apify API client: in Python, ApifyClient(token).actor("dataspryva/twitter-x-media-downloader").call(run_input=...), then read the run's default dataset (run.default_dataset_id); in JavaScript the same call is client.actor("dataspryva/twitter-x-media-downloader").call(input). Without a client, POST the input JSON to https://api.apify.com/v2/actors/dataspryva~twitter-x-media-downloader/run-sync-get-dataset-items with your API token. Ready-to-paste code with the example input is on this page.
Sources
- Twitter (X) Media Downloader on Apify Store
- Published build with input and output schema (JSON)
- X API v2 documentation
Cite this page
Scraper Finder. "Twitter (X) Media Downloader." https://scraperfinder.com/catalogue/twitter-x-media-downloader/ (data checked 2026-11-12).
Run Twitter (X) Media Downloader
$0.99 per 1,000 results. Paste the example input above, set your X (Twitter) query, then export the dataset. Still choosing? Compare every X (Twitter) route.