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.
X (Twitter) Social mediaVideoAutomation

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

Fields other X (Twitter) catalogue Actors return that Twitter (X) Media Downloader does not
ActorFields it addsPrice / 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

Input settings for Twitter (X) Media Downloader
SettingTypeRequiredDefaultWhat 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
More input settings for Twitter (X) Media Downloader
SettingTypeRequiredDefaultWhat 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.

Cost of Twitter (X) Media Downloader results by Apify plan
Apify planPer 1,00010,000 results100,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.

Route diagram for X (Twitter) dataTwitter (X) Media Downloader: stops at 4 of the 10 fields shown; X Post, Reply & Profile Lookup by Link or ID: stops at 6 of the 10 fields shown; X (Twitter) Profile & Post Engagement Extractor: stops at 6 of the 10 fields shown; X Video Subtitle & Caption Transcript Converter: stops at 2 of the 10 fields shown; Other Store tools (7): stops at 8 of the 10 fields shown; X API v2: public, field coverage not compared.X (Twitter)post idauthorlikestextposted atrepostscreatedAtlikeCountretweetCountreplyCount1234+API

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.

Official documentation

Other Store tools for X (Twitter)

Reference only, from their public listings.

Other Store tools for X (Twitter)
ToolFieldsPrice / 1K
X (Twitter) Tweet Scraper120$0.15
Tweet Scraper17$0.25
Tweet Scraper V212$0.40
Twitter (X.com) Scraper Unlimited: No Limits12$0.40
Twitter (X) Follower Scraper29$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…

3/7 core fields 9 output fields $0.99 per 1K

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…

3/7 core fields 29 output fields $0.99 per 1K

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…

3/7 core fields 29 output fields $0.99 per 1K

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…

3/7 core fields 18 output fields $0.99 per 1K

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…

3/7 core fields 21 output fields $0.99 per 1K

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…

3/7 core fields 21 output fields $0.99 per 1K

Pinterest Media Downloader

Download public Pinterest image, GIF, Story Pin, and video media with source metadata and Key-Value Store links.

16 output fields $0.99 per 1K

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…

68 output fields $0.99 per 1K

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…

11 output fields $0.49 per 1K

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…

28 output fields $0.99 per 1K

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…

12 output fields $0.99 per 1K

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,…

20 output fields $0.99 per 1K

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

Actor updated 2026-10-29 Data synced 2026-11-12
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.

Open in Apify Store