Twitter Media Scraper avatar

Twitter Media Scraper

Pricing

from $1.60 / 1,000 media items

Go to Apify Store
Twitter Media Scraper

Twitter Media Scraper

Extract public Twitter/X images, videos, and GIFs from tweet URLs, IDs, @handles, #hashtags, or keywords. Export media URLs, tweet metadata, authors, engagement, and source links.

Pricing

from $1.60 / 1,000 media items

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

📥 Twitter media scraper for public X posts

Twitter Media Scraper extracts images, videos, and GIFs from public Twitter/X posts. Paste tweet URLs, tweet IDs, @handles, #hashtags, or search keywords, then export media URLs together with tweet text, author details, engagement counts, source links, and scrape timestamps.

Use this Twitter media scraper when you need a repeatable way to collect media from X for research, content review, social listening, trend checks, reporting, archiving, or API workflows. Direct tweet targets are useful when you already know the posts. Handles, hashtags, and keywords help you discover recent public posts that contain media.

For a small first run, keep one prefilled target such as #nasa, leave Media types set to images, videos, and GIFs, and keep Media item limit at 25. Once the output shape looks right, add your own targets or run the Actor on a schedule.

✅ What this Actor does

  • Extracts media from public Twitter/X tweet URLs and raw tweet IDs.
  • Discovers recent public media posts from @handles, #hashtags, and keywords.
  • Saves one dataset row per extracted image, video, or GIF media asset.
  • Includes tweet IDs, tweet URLs, author usernames, display names, post text, timestamps, media URLs, thumbnails, media indexes, and scrape timestamps.
  • Adds public engagement counts such as likes, retweets, replies, and views when X exposes them.
  • Lets you choose images only, videos only, GIFs only, or any combination.
  • Stops at your media item limit so run size and spend stay predictable.
  • Runs without a Twitter/X login, cookies, or a user-provided API key.

This Actor is focused on public media extraction. It does not fetch private, protected, deleted, login-only, or account-restricted content.

📊 Data you can export

Each output row represents one media asset from one public Twitter/X post. Core fields include:

  • target - the input value that produced the row.
  • targetType - tweet, profile, hashtag, or keyword.
  • tweetId and tweetUrl - the source post identity.
  • authorUsername and authorName - public author fields when available.
  • text and postedAt - tweet text and timestamp when available.
  • mediaType - image, video, or gif.
  • mediaUrl, thumbnailUrl, mediaIndex, and rawMediaId - media-specific fields.
  • engagement - likes, retweets, replies, and views when available.
  • sourceUrl, canonicalTweetUrl, and scrapedAt - traceability fields for exports and API use.

You can open the dataset in Apify, export it as JSON, CSV, Excel, XML, RSS, or HTML, call it through the Apify API, schedule recurring runs, or connect it to webhooks and integrations.

🚀 How to run

  1. Add one or more public Twitter/X targets in Targets.
  2. Use tweet URLs, tweet IDs, @handles, #hashtags, or plain search keywords.
  3. Keep Media item limit small for the first run, then raise it when the result shape fits your workflow.
  4. Choose Media types to include images, videos, GIFs, or a subset.
  5. Start the Actor and open the dataset.
  6. Use mediaUrl for the direct media link and tweetUrl or canonicalTweetUrl to trace the media back to X.

Example input:

{
"targets": [
"#nasa",
"@NASA",
"https://x.com/teslaownersSV/status/2004891561180758165"
],
"maxItems": 25,
"mediaTypes": ["image", "video", "gif"]
}

📄 Output example

{
"target": "#nasa",
"targetType": "hashtag",
"tweetId": "2061497874714632614",
"tweetUrl": "https://x.com/Astro_Postcard/status/2061497874714632614",
"authorUsername": "Astro_Postcard",
"authorName": "Astro Postcard",
"text": "Astronomy Picture of the Day (2026-06-01)",
"postedAt": "2026-06-01T17:19:28.000Z",
"mediaType": "image",
"mediaUrl": "https://pbs.twimg.com/media/HJvpZJ8WwAAbybh.jpg",
"mediaIndex": 1,
"thumbnailUrl": "https://pbs.twimg.com/media/HJvpZJ8WwAAbybh.jpg",
"altText": null,
"engagement": {
"likes": 0,
"retweets": 0,
"replies": 0,
"views": 2
},
"sourceUrl": "https://x.com/Astro_Postcard/status/2061497874714632614",
"canonicalTweetUrl": "https://x.com/Astro_Postcard/status/2061497874714632614",
"rawMediaId": null,
"scrapedAt": "2026-06-01T17:40:35.551Z"
}

🎯 Input tips

Use direct tweet URLs or tweet IDs when you need media from known posts. Use @handles when you want recent public media posts from a profile. Use #hashtags or keywords when you want media around a topic, campaign, brand, event, or trend.

The Actor only emits rows when media is found. If a target has no public image, video, or GIF media, it is skipped and the run continues.

💸 Pricing

This Actor uses pay-per-event pricing. You are charged for each image, video, or GIF media item that is found and saved. Targets that are skipped because no public media is available do not create media-item events.

The default limit of 25 media items keeps first runs small. Increase Media item limit when you are ready to collect more.

⚖️ Limits and caveats

Twitter/X may hide, remove, rate-limit, or change access to public content. When a field is not exposed for a post, the Actor leaves that field empty and still saves the media item when a usable media URL is available.

The Actor does not bypass privacy controls. Protected accounts, private posts, deleted posts, login-only content, bookmarks, likes, followers, following lists, private messages, and account-only media are outside this Actor's scope.

❓ FAQ

🔒 Can I scrape private Twitter/X media?

No. This Actor is for public Twitter/X media only. It does not fetch protected posts, private account content, private messages, or media that requires access to a specific user account.

🔑 Do I need Twitter cookies or an API key?

No. You do not need to provide Twitter/X cookies, a login, or an API key.

🔎 Can I search by hashtag or profile?

Yes. Add a #hashtag, an @handle, or a keyword in Targets. The Actor discovers recent public posts with media and emits one row per media asset.

💾 Does it download files into Apify storage?

No. The Actor returns media URLs and thumbnails in the dataset. Use the exported URLs in your own downloader, API workflow, or storage pipeline if you need to save the files elsewhere.

📝 Changelog

  • 0.1: Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

🔗 Other actors

Made with ❤️ by Maxime Dupré