# Twitter (X)  Reels Video Downloader (`datapilot/twitter-x-reels-video-downloader`) Actor

Tweet ID, title, text, author, username, views, likes, retweets, replies, duration, thumbnail, and video download URL. Uses multiple API fallbacks, Residential Proxy, automatic extraction, and structured Apify Dataset output.

- **URL**: https://apify.com/datapilot/twitter-x-reels-video-downloader.md
- **Developed by:** [Data Pilot](https://apify.com/datapilot) (community)
- **Categories:** Videos, Integrations, Social media
- **Stats:** 31 total users, 7 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 scraped results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

🐦 **Twitter (X) Video** Downloader is a powerful Apify Actor designed to discover, extract, and collect direct download links and engagement metadata from public **Twitter (X) Video** tweets. This tool provides comprehensive **Twitter (X) Video** intelligence including title, author, view count, likes, retweets, replies, duration, thumbnail, and a direct downloadable video URL for any accessible tweet. Whether you're building a content archive, tracking video performance, or aggregating public video links, the Twitter (X) Video Downloader delivers actionable **Twitter (X) Video** insights efficiently.

With triple-API fallback resolution, bitrate-based quality selection, multi-schema metadata parsing, and reliable Apify Dataset delivery, the Twitter (X) Video Downloader ensures comprehensive **Twitter (X) Video** coverage across any list of tweet URLs. It focuses on key **Twitter (X) Video** signals including download URL, views, likes, retweets, and author, making it an essential tool for content research and video-link aggregation.

***

### 📋 Table of Contents

- [Features](#-features)
- [Data Source](#-data-source)
- [How It Works](#-how-it-works)
- [Input](#-input)
- [Output](#-output)
- [Technical Stack](#-technical-stack)
- [Data Fields](#-data-fields-explained)
- [Use Cases](#-use-cases)
- [Quick Start](#-quick-start)
- [Configuration](#-configuration)
- [Performance](#-performance)
- [Important Notes](#-important-notes)
- [License & Legal](#-license--legal)

***

### 🔥 Features

- **Triple-API Fallback Chain** – Queries Twitter's own Syndication API first, then falls back to vxtwitter and fxtwitter for maximum **Twitter (X) Video** extraction reliability.
- **Highest-Bitrate Selection** – Automatically picks the best-quality MP4 variant available for each **Twitter (X) Video**.
- **Cross-Schema Metadata Parsing** – Normalizes data across three different API response formats into one consistent **Twitter (X) Video** record.
- **View Count Resolution** – Extracts view/impression counts from multiple possible field names and nested structures.
- **Status ID Extraction** – Pulls the tweet's numeric status ID directly from any **Twitter (X) Video** URL format.
- **Duration Formatting** – Converts raw milliseconds/seconds into a clean `HH:MM:SS` or `MM:SS` display format.
- **Author Attribution** – Captures both display name and @handle for the account behind each **Twitter (X) Video**.
- **Engagement Metrics** – Collects views, likes, retweets, and replies alongside every **Twitter (X) Video** link.
- **Batch URL Processing** – Accepts any number of tweet URLs in a single run.
- **Residential Proxy Support** – Apify residential proxy for reliable **Twitter (X) Video** access.
- **Real-Time Dataset Push** – Pushes each successfully extracted **Twitter (X) Video** record to Apify Dataset as it's processed.
- **Graceful Error Handling** – Skips a failing, deleted, or private tweet without stopping the whole run.

***

### 📊 Data Source

#### **Twitter (X) Public Tweet APIs**

- **Authority**: Twitter's own public Syndication API, with vxtwitter and fxtwitter as fallback data sources
- **Access Method**: Browser-impersonated HTTP requests via  against three chained public endpoints
- **Coverage**: Any public tweet containing a **Twitter (X) Video** and accessible without login
- **Data**: Video variants/bitrates, tweet text, author details, and engagement metrics
- **Access**: Public endpoints, no official API key required
- **Update Frequency**: Reflects each **Twitter (X) Video**'s current live state at time of run

***

### ⚙️ How It Works

The Twitter (X) Video Downloader accepts a list of tweet URLs, extracts the numeric status ID from each, and queries three chained public APIs in order — Twitter's own Syndication API first, then vxtwitter, then fxtwitter — stopping as soon as one returns usable video data. Once a response is retrieved, the Actor normalizes fields across the differing schemas: selecting the highest-bitrate MP4 variant when multiple qualities are available, extracting thumbnail and duration, and parsing view/like/retweet/reply counts from whichever fields the source API provides. Every successfully extracted **Twitter (X) Video** record is pushed to the Apify Dataset immediately after processing.

**Key Processing Steps:**

1. **Input Parsing** – Accept a list of tweet URLs (string or array)
2. **Proxy Setup** – Configure Apify residential proxy for the HTTP session
3. **Session Init** – Create a Chrome-impersonated HTTP session for reliable API access
4. **URL Loop** – Iterate through each requested tweet containing a **Twitter (X) Video**
5. **Status ID Extraction** – Parse the numeric tweet ID from the URL
6. **Primary API Call** – Query Twitter's Syndication API for video, media, or text data
7. **Fallback API Calls** – Query vxtwitter, then fxtwitter, if the primary source has no usable data
8. **Video Resolution** – Select the highest-bitrate MP4 variant, or the first available media URL
9. **Metadata Extraction** – Parse title, text, author, thumbnail, and duration
10. **Metrics Extraction** – Resolve views, likes, retweets, and replies across differing field names
11. **Dataset Push** – Push each successfully parsed **Twitter (X) Video** record immediately
12. **Rate Limiting** – Apply a short delay between requests

**Key Benefits:**

- Pull direct download links for any public **Twitter (X) Video** without manual extraction
- Maximize success rate with a resilient three-tier API fallback chain
- Collect full engagement metrics alongside each video link
- Feed video-aggregation tools, research pipelines, or archiving workflows
- Automate recurring **Twitter (X) Video** link extraction as new tweets are published

***

### 📥 Input

The Actor accepts the following input parameters:

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `startUrls` / `urls` | array or string | *(required)* | One or more tweet URLs containing a **Twitter (X) Video**. |
| `proxyConfiguration` | object | `{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}` | Apify Proxy configuration. |

**Example Input:**

```json
{
  "startUrls": [
    "https://twitter.com/someuser/status/1234567890123456789",
    "https://x.com/anotheruser/status/9876543210987654321"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

**Extract a Single Twitter (X) Video:**

```json
{
  "urls": ["https://x.com/someuser/status/1234567890123456789"]
}
```

**Extract from a Single URL String:**

```json
{
  "startUrls": "https://twitter.com/someuser/status/1234567890123456789"
}
```

***

### 📤 Output

The Actor pushes **Twitter (X) Video** records with the following structure:

| Field | Type | Description |
|-------|------|-------------|
| `title` | string | First sentence of the tweet text, used as a display title |
| `id` | string | Numeric tweet status ID |
| `source` | string | Always `"Twitter (X)"` |
| `url` | string | The original tweet URL provided as input |
| `download_url` | string | Direct downloadable video file URL (highest bitrate available) |
| `thumbnail` | string | URL of the video's poster/thumbnail image |
| `duration` | string | Formatted duration (`MM:SS` or `HH:MM:SS`) |
| `duration_raw` | integer | Duration in raw seconds |
| `text` | string | Full tweet text |
| `author_name` | string | Display name of the tweet's author |
| `author_username` | string | @handle of the tweet's author |
| `view_count` | integer | Number of views/impressions |
| `like_count` | integer | Number of likes |
| `retweet_count` | integer | Number of retweets |
| `reply_count` | integer | Number of replies |
| `timestamp` | integer | Unix timestamp of the tweet's creation or scrape time |

**Example Twitter (X) Video Record:**

```json
{
  "title": "This is wild.",
  "id": "1234567890123456789",
  "source": "Twitter (X)",
  "url": "https://x.com/someuser/status/1234567890123456789",
  "download_url": "https://video.twimg.com/ext_tw_video/.../vid/1280x720/abc123.mp4",
  "thumbnail": "https://pbs.twimg.com/ext_tw_video_thumb/.../img/xyz789.jpg",
  "duration": "00:47",
  "duration_raw": 47,
  "text": "This is wild.",
  "author_name": "Some User",
  "author_username": "someuser",
  "view_count": 154200,
  "like_count": 8300,
  "retweet_count": 1200,
  "reply_count": 340,
  "timestamp": 1785000000
}
```

***

### 🧰 Technical Stack

- **HTTP Client:** \`\` with Chrome TLS fingerprint impersonation for reliable **Twitter (X) Video** API access
- **API Chain:** Twitter Syndication API → vxtwitter → fxtwitter, queried in sequence
- **JSON Parsing:** Multi-schema field normalization across all three API response formats
- **Text Processing:** `html.unescape` for clean tweet text and titles
- **Date Handling:** `datetime` with timezone-aware UTC timestamps
- **Async:** `asyncio` with executor-run blocking requests for non-blocking, multi-URL processing
- **Proxy:** Apify Proxy with `RESIDENTIAL` configuration
- **Logging:** Apify Actor logging system
- **Platform:** Apify Actor serverless environment

***

### 📊 Data Fields Explained

#### **Identification**

- **id / url**: The numeric status ID and original link identifying the tweet
- **source**: Always set to `"Twitter (X)"` for clarity in mixed-platform datasets

#### **Media**

- **download\_url**: The resolved direct video file link, highest bitrate preferred
- **thumbnail**: The poster image associated with the **Twitter (X) Video**
- **duration / duration\_raw**: Formatted and raw-second video length

#### **Content & Attribution**

- **title / text**: The display title and full tweet text
- **author\_name / author\_username**: The display name and handle of the tweet's author

#### **Engagement**

- **view\_count / like\_count / retweet\_count / reply\_count**: Publicly visible engagement metrics for the tweet

***

### 🎯 Use Cases

- **Content Archiving** – Preserve copies of public **Twitter (X) Video** content for reference
- **Trend Research** – Analyze view/engagement patterns across a set of tweets
- **Media Aggregation** – Build a dataset of video links and metadata for downstream tools
- **Competitive Analysis** – Track how competitor or partner accounts perform on **Twitter (X) Video**
- **Influencer Research** – Evaluate engagement metrics before a creator partnership
- **Academic Research** – Study public **Twitter (X) Video** trends at scale
- **Personal Backup** – Save direct links to your own or authorized public content

***

### 🚀 Quick Start

#### **1. Prepare Input**

Go to Apify Console and enter:

```json
{
  "startUrls": ["https://x.com/someuser/status/1234567890123456789"]
}
```

#### **2. Run the Actor**

Click **Start**. The Actor will:

- Extract the status ID from each tweet URL
- Query the API chain until usable video data is found
- Resolve the highest-quality **Twitter (X) Video** download link
- Push each result to the Dataset as it's processed

#### **3. Monitor Progress**

Console shows:

```
[1/1] Processing Tweet: https://x.com/someuser/status/1234567890123456789 (ID: 1234567890123456789)
Extracted: 'This is wild.' | Views: 154200 | Likes: 8300 | RTs: 1200
🎉 Scraping completed! Successfully extracted 1 videos.
```

#### **4. View & Download Results**

- **Results Tab**: All **Twitter (X) Video** records
- **Export**: JSON, CSV, Excel, or HTML
- **Filter**: By view count, like count, or author
- **API Access**: Available via the Apify API

***

### ⚙️ Configuration

Single Twitter (X) Video:

```json
{
  "urls": ["https://x.com/someuser/status/1234567890123456789"]
}
```

Multiple tweet URLs:

```json
{
  "startUrls": [
    "https://x.com/user1/status/1234567890123456789",
    "https://x.com/user2/status/9876543210987654321"
  ]
}
```

Run without proxy:

```json
{
  "urls": ["https://x.com/someuser/status/1234567890123456789"],
  "proxyConfiguration": {"useApifyProxy": false}
}
```

***

### 📈 Performance

#### **Processing Speed**

- One to three API requests per tweet, depending on which source returns usable data first
- 0.4 second delay between requests to reduce blocking
- Faster than browser-based scraping since no rendering engine is required

#### **Resource Usage**

- Memory: Low, since no browser instance is launched
- Network: One to three lightweight API requests per **Twitter (X) Video**
- Proxy: One residential proxy tunnel shared across the session for the run

***

### ⚠️ Important Notes

#### **Legal & Compliance**

- **Fair Use**: Respects public API endpoints and applies pacing delays between requests
- **Public Data Only**: Extracts only publicly visible **Twitter (X) Video** content and metadata
- **Copyright**: Downloaded video content may be subject to copyright — only download and reuse content you own or have permission to use
- **Terms of Service**: Automated extraction may be subject to X's Terms of Service — review before large-scale or commercial use
- **Legal**: Not legal advice — consult qualified professionals before using this data or content for compliance-sensitive purposes

#### **Data Quality**

- **Freshness**: Reflects each **Twitter (X) Video**'s live state at time of run
- **Completeness**: Deleted or private tweets will return no data and are skipped
- **Accuracy**: Metrics reflect whichever source API responded first; minor differences between sources are possible
- **Verification**: Cross-check high-stakes figures against the live X app or website

#### **Best Practices**

- Always configure a residential proxy for the most reliable **Twitter (X) Video** access
- Only submit URLs to public tweets — private or restricted content will fail to extract
- Batch multiple tweet URLs together in one run to reduce overhead
- Respect copyright and platform terms when reusing downloaded video content
- Re-run periodically if tracking changes in view/engagement counts over time

***

### 📄 License & Legal

**Terms of Use:**

- Use for legitimate research, archiving, and analytics purposes
- Respect X's (Twitter's) Terms of Service and applicable copyright law
- Do not use for unauthorized redistribution of copyrighted video content
- Use **Twitter (X) Video** data and content responsibly

**Disclaimer:**
Twitter (X) Video Downloader is provided as-is for research and personal-use purposes. Users are solely responsible for compliance with X's ToS, applicable copyright law, and all other relevant regulations. This is not legal advice.

***

### ⚖️ Twitter (X) Video Excellence

This Actor is optimized for **Twitter (X) Video** extraction with:

- ✅ Triple-API fallback for maximum reliability
- ✅ Highest-bitrate video selection
- ✅ Cross-schema metadata normalization
- ✅ Full engagement metrics (views, likes, RTs, replies)
- ✅ Real-time Dataset push
- ✅ Production-ready code

# Actor input Schema

## `startUrls` (type: `array`):

List of Twitter (x.com or twitter.com) status URLs containing video/GIF.

## `proxyConfiguration` (type: `object`):

Select Residential Proxy to bypass Twitter IP restrictions.

## Actor input object example

```json
{
  "startUrls": [
    "https://x.com/Twitter/status/1234567890123456789"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `crawlResults` (type: `string`):

No description

## `twitterOverview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        "https://x.com/Twitter/status/1234567890123456789"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("datapilot/twitter-x-reels-video-downloader").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "startUrls": ["https://x.com/Twitter/status/1234567890123456789"] }

# Run the Actor and wait for it to finish
run = client.actor("datapilot/twitter-x-reels-video-downloader").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://x.com/Twitter/status/1234567890123456789"
  ]
}' |
apify call datapilot/twitter-x-reels-video-downloader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datapilot/twitter-x-reels-video-downloader"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/zVDlrh34Zwp3735an/builds/ceGmD9rSsPfBfVt1k/openapi.json
