X (Twitter) Video, Photo & GIF Downloader avatar

X (Twitter) Video, Photo & GIF Downloader

Pricing

from $1.00 / 1,000 media downloadeds

Go to Apify Store
X (Twitter) Video, Photo & GIF Downloader

X (Twitter) Video, Photo & GIF Downloader

Download videos, photos, and GIFs from X (Twitter) in bulk. Paste a tweet URL, an X handle, or a search query. Files saved for you, ready to download. Pay per media file.

Pricing

from $1.00 / 1,000 media downloadeds

Rating

0.0

(0)

Developer

LurkAPI

LurkAPI

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Share

Download every video, photo, and GIF from X.com (formerly Twitter). Paste a tweet URL, an X handle, or a search query and get the files straight into your Apify storage with a permanent download link on every row.

πŸ“₯ What it does

Give it any of these inputs and this tool returns one row per media file, plus the actual file saved to your run's storage:

  • Tweet URLs or IDs: paste https://x.com/user/status/123, twitter.com/user/status/123, a share link with ?s=20&t=abc, or just the numeric tweet ID.
  • X handles or profile URLs: paste NASA or https://x.com/NASA to pull every media file from that account.
  • Search queries: use X's advanced-search syntax to find media across the platform (from:elonmusk filter:videos, mars filter:images since:2024-01-01, #space min_faves:1000, and dozens more). See the operator reference.

For every media file you get:

  • The actual file saved in your Apify key-value store (jpg, png, webp for photos; mp4 for videos and animated GIFs).
  • A permanent Apify download link (downloadUrl) that never expires while your run is retained.
  • The original X CDN URL as a fallback (sourceUrl).
  • Full media metadata: type, dimensions, duration (for videos), file size in bytes.
  • The parent tweet's text, ID, canonical URL, and creation timestamp.
  • The author's handle, display name, avatar, and verification badges.
  • Engagement counts on the parent tweet: likes, retweets, replies, quotes, bookmarks, views.

πŸ“‹ How to use it

Step 1: Pick your inputs

Mix any of these in the same run:

  • Tweet URLs / IDs: one entry per tweet.
  • X handles: one entry per profile.
  • Search queries: one entry per query. Any X advanced-search operator works.

Every input is optional as long as at least one has a value.

Step 2: Pick a media type

Filter what gets downloaded:

  • All: videos + photos + GIFs.
  • Video only: mp4 video clips (highest bitrate variant).
  • Photo only: images from tweets (jpg / png / webp).
  • GIF only: X's animated GIFs (served as muted mp4).

Step 3: Set the run size

  • Max media files per run: hard cap across every input. Default 100. Each photo, video, or GIF counts as one. A tweet with 4 photos = 4 files. Cap protects against surprise bills. Raise as high as 5,000.

Step 4: (Optional) Add-on

  • High-resolution originals: for photos, pull the original uploaded file (uncompressed, full resolution) instead of X's 2048px "large" variant. iPhone shots often come back at 4000Γ—3000 or higher. Videos always ship the highest available bitrate; no upgrade needed. Charged once per photo successfully pulled at original resolution.

Step 5: Run

Click Start. Rows stream into the Output tab as each page finishes, so you do not have to wait for the whole run. Files land in the Storage tab as they download.

πŸ“Š What you get

Every row is one media file (a tweet with 4 photos = 4 rows). Four tabs group the fields by what you probably care about:

TabWhat is in it
πŸ“‹ OverviewStatus, type, download link, handle, tweet URL, dimensions, duration, bytes, posted date
πŸ“₯ DownloadsEvery media file with Apify KV link, source URL, preview, dimensions, and file size
🐦 TweetsPer-tweet spread: text, engagement counts, creation timestamp
πŸ‘€ AuthorsAuthor handle, name, avatar, verification badges

You can export from the Output tab as JSON, CSV, or Excel.

Every row has a status field. Success means the file downloaded. Anything else is a human-readable message explaining what happened (file too large, tweet deleted, handle suspended, X CDN denied access). Rows that did not succeed are never billed.

πŸ’° Pricing

You only pay for what you get.

EventRateWhen it fires
Actor run start~$0.00005Once per run (Apify platform overhead)
Media downloaded$1.00 / 1,000Once per file saved successfully to your storage
Original-resolution photo$0.50 / 1,000Once per photo pulled at original resolution (add-on only)

Failed downloads, suspended accounts, and tweets with no media cost nothing.

πŸ’‘ Good to know

  • Files land in your Apify key-value store, not our servers. You get signed download links that anyone with the link can use. Retention depends on your Apify plan.
  • Video always ships at the highest bitrate variant X returns. No configuration needed.
  • Photos are 2048px by default (X's "large" size). Turn on the High-resolution originals add-on to pull the original upload for photos posted at higher resolution.
  • Multi-media tweets explode into multiple rows. A tweet with 3 photos and 1 GIF gives 4 rows, each with its own download link.
  • URL forms accepted: x.com/user/status/123, twitter.com/user/status/123, mobile.x.com/user/status/123, x.com/i/web/status/123, share links with ?s=20&t=abc, and bare numeric tweet IDs.
  • Handle forms accepted: NASA, @NASA, https://x.com/NASA, x.com/NASA?src=share. Handles are case-insensitive.
  • Rows appear in real time. Open the Output tab while the run is still going and start pulling data.
  • 500 MB per-file cap. Videos above this size return a file_too_large status. Rare, but very long uploads from premium accounts can hit it.

For developers

Call this actor through the Apify API:

{
"tweetUrls": ["https://x.com/NASA/status/2075249100035866880"],
"handles": ["NASA", "elonmusk"],
"searchQueries": ["mars filter:videos min_faves:1000"],
"mediaType": "all",
"maxItems": 500,
"includeHighResOriginals": true
}

Every input field is optional. Provide at least one of tweetUrls, handles, or searchQueries.

❓ FAQ

Where do the downloaded files go? Straight into your run's key-value store on Apify. Every row has a downloadUrl that points there. Files stay for as long as your Apify plan retains storage.

Do you keep any copies of my downloads? No. Files exist only in your Apify storage. We never mirror or archive them.

Why did a video come back with file_too_large? The file exceeded 500 MB. This happens occasionally with very long uploads from Premium+ accounts. Try a different tweet or a specific tweet URL that points to a shorter clip.

Why did my run return zero rows? Possible reasons: the tweet was deleted, the account is protected or suspended, the search query did not match any tweets with media, or the media type filter dropped everything. You will see a clear status message on the row.

What is the difference between the default photo size and High-resolution originals? Default photos come back at X's "large" size, capped at 2048px on the long side. High-resolution originals pulls the file the user actually uploaded, which for many phone shots is 4000Γ—3000 or larger. Turn the add-on on when file quality matters more than file size.

Can I use my own X cookies? No. This actor does not accept user cookies.

How long are the files kept? Retention depends on your Apify plan. Free plans typically keep run storage for 7 days; paid plans keep it longer.

πŸ”— Other tools you might like

βš–οΈ Disclaimer

This tool is intended for personal, research, and educational use. You are responsible for complying with X.com's Terms of Service, the original creators' rights, and applicable laws in your jurisdiction. The developer is not liable for misuse. Data availability depends on X at run time.

Keywords: twitter video downloader, x video downloader, twitter photo downloader, x photo downloader, twitter gif downloader, twitter media downloader, bulk twitter downloader, save twitter videos, x media bulk download, no login twitter download