# Twitter Broadcast Scraper – X Metadata & View Counts (`scrapingmonkey/twitter-broadcast-details-scraper`) Actor

Extract Twitter (X) broadcast metadata by URL. Get author details, state, start and end times, preview images, dimensions and available viewing counts.

- **URL**: https://apify.com/scrapingmonkey/twitter-broadcast-details-scraper.md
- **Developed by:** [ScrapingMonkey](https://apify.com/scrapingmonkey) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

Look up public Twitter (X) video-broadcast metadata from broadcast URLs. **Twitter Broadcast Scraper** collects the broadcast state, author, start and end times, preview image, dimensions and available viewing counts in one row per broadcast.

Use the results to catalog known broadcasts, add context to event reports or compare the metadata available for live and ended sessions.

| At a glance | Details |
|---|---|
| 📥 Input | Full X or Twitter URLs with an /i/broadcasts/ path |
| 📤 Output | State, author, timing, preview image, dimensions and viewing counts |
| 🔐 Login required | No Twitter (X) credentials or cookies |
| ⚡ Processing | Up to 5 requests concurrently with automatic retries |
| 💾 Delivery | One broadcast row in one table, with matching JSON fields |

### What the Twitter (X) broadcast scraper extracts 🔎

The Actor retrieves the details X exposes for the requested broadcast. It focuses on the broadcast record and its author.

- Broadcast ID, canonical URL, state and availability status
- Author identity and available public profile details
- Start and end times as readable dates and timestamps
- Preview image URL and media key
- Available width and height
- Reported total-watched and currently-watching counts

### How to scrape Twitter (X) broadcasts 🚀

1. Add a full `x.com/i/broadcasts/…` URL.
2. Add other broadcast links to the same list.
3. Start the Actor and review successful and failed records.
4. Export metadata for your broadcast catalog or report.

```json
{
  "inputList": [
    "https://x.com/i/broadcasts/1OGwbbXdjjdKB"
  ]
}
```

Repeated valid links that resolve to the same ID are normally processed once per run.

### Twitter (X) broadcast data fields and complete output 📦

| Field group | Included data |
|---|---|
| Broadcast | ID, URL, state and broadcast status |
| Author | Available identity, profile, links and account counts |
| Timing | Start and end dates with timestamps |
| Visual reference | Preview image, media key, width and height |
| Viewing metrics | Reported total watched and total watching |

Complete illustrative success item with fictional content, not a live result:

```json
{
  "input": "https://x.com/i/broadcasts/1AbCdEfGhIjKl",
  "status": "success",
  "id": "1AbCdEfGhIjKl",
  "url": "https://x.com/i/broadcasts/1AbCdEfGhIjKl",
  "state": "ENDED",
  "broadcast_status": "available",
  "author.id": "100100100",
  "author.username": "northstar_lab",
  "author.name": "Northstar Lab",
  "author.profile_url": "https://x.com/northstar_lab",
  "author.description": "Research, field notes and conversations about science.",
  "author.location": "Singapore",
  "author.created_at": "2021-01-15T09:00:00Z",
  "author.created_timestamp": 1610701200,
  "author.followers_count": 4200,
  "author.following_count": 180,
  "author.posts_count": 640,
  "author.media_posts_count": 86,
  "author.likes_given_count": 320,
  "author.highlights_count": 8,
  "author.avatar_url": "https://example.com/northstar_lab_normal.jpg",
  "author.avatar_url_hd": "https://example.com/northstar_lab_400x400.jpg",
  "author.banner_url": "https://example.com/lab-banner.jpg",
  "author.website.url": "https://t.co/LabSite",
  "author.website.expanded_url": "https://example.com/lab",
  "author.bio_links.url": ["https://t.co/LabSite"],
  "author.bio_links.expanded_url": ["https://example.com/lab"],
  "author.bio_links.display_url": ["example.com/lab"],
  "author.is_verified": false,
  "author.verified_type": "",
  "author.is_blue_verified": false,
  "author.is_identity_verified": false,
  "author.verification_description": "",
  "author.verified_since_at": "",
  "author.is_protected": false,
  "author.possibly_sensitive": false,
  "author.professional_type": "Business",
  "author.affiliates_count": 0,
  "author.creator_subscriptions_count": 0,
  "author.can_highlight_posts": true,
  "author.can_receive_messages": false,
  "author.can_be_media_tagged": false,
  "author.description_language": "en",
  "author.profile_image_shape": "Circle",
  "author.pinned_post_ids": ["2088355206723477000"],
  "author.birthdate.day": 0,
  "author.birthdate.month": 0,
  "author.birthdate.year": 0,
  "author.birthdate.visibility": "",
  "author.birthdate.year_visibility": "",
  "started_at": "2026-09-01T10:00:00Z",
  "started_at_timestamp": 1788256800,
  "ended_at": "2026-09-01T11:00:00Z",
  "ended_at_timestamp": 1788260400,
  "image_url": "https://example.com/lab-broadcast.jpg",
  "media_key": "13_2088355206723477000",
  "width": 1920,
  "height": 1080,
  "total_watched": 820,
  "total_watching": 0
}
```

Author details use literal fields such as `author.username` in both the table and JSON. Available author bio links remain aligned lists under `author.bio_links.*`. All fields describe the same broadcast row.

Successful rows can contain empty strings, zero counts, false flags, empty lists or null optional branches when a value is unavailable. A failed row retains `input`, sets `status` to `failed` and leaves the entity data fields null.

### Input requirements and coverage ⚙️

| Parameter | Type | Required | Default and rules |
|---|---|---|---|
| `inputList` | array of strings | Yes | No default; at least one item. No fixed input-count maximum. |

Submit a full HTTP or HTTPS X/Twitter URL with an `/i/broadcasts/` path and a broadcast ID of 5–40 letters, numbers, underscores or hyphens. Bare IDs, post URLs and Space URLs are not accepted.

The Actor returns metadata only. It does not download a recording, provide a video stream URL, transcribe speech or collect viewer identities. Live and ended broadcasts are eligible when X still exposes their metadata.

### Twitter (X) broadcast data use cases 🎯

#### Broadcast catalogs

Index known broadcasts by URL, author and start time with a preview image for reference.

#### Event reporting

Attach public timing, state and available viewing metrics to an event's broadcast record.

#### Host research

Review available author profiles alongside the broadcasts associated with them.

#### Availability checks

Save repeated snapshots to see whether a known broadcast still exposes public metadata.

### Pricing and billable broadcasts 💰

Check the Actor's **Pricing** tab for the current charging model and rate. The Store configuration is authoritative.

Under dataset-item pricing, each saved success or failed row can count as a billable item. Automatic retries do not independently add result rows.

One processed broadcast creates one result row. The author's public profile fields are included in that row.

### Twitter (X) broadcast API and integrations 🔌

Replace `$ACTOR_ID` with the ID shown in the Actor API tab and `$APIFY_TOKEN` with your Apify token.

```bash
curl -X POST "https://api.apify.com/v2/acts/$ACTOR_ID/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"inputList":["https://x.com/i/broadcasts/1OGwbbXdjjdKB"]}'
```

Start runs through REST, Apify client libraries or schedules. Use webhooks to handle completion, then export the dataset as JSON, CSV or Excel, or send it to Google Sheets, Make, Zapier and your reporting tools.

### Reliability and limits ⚠️

Temporary request failures and selected access errors are retried automatically. Missing broadcasts or responses without useful broadcast details produce failed rows.

Some broadcasts provide only a short author record, so other author columns can be null. Start or end times, dimensions and viewing counts may be absent or zero. State and availability fields report the response at collection time; they do not guarantee that a recording can be played or that view counts represent unique people.

### Frequently asked questions ❓

#### Does it download the broadcast video?

No. It returns broadcast metadata and a preview image URL, without downloading video or returning a recording file.

#### Can it scrape audio Spaces?

Use Twitter Space Details Scraper for X Spaces. This Actor accepts broadcast URLs.

#### Can I collect an ended broadcast?

Yes, if X still exposes its metadata. Old or removed broadcasts may fail.

#### Why are author fields missing?

Some broadcasts expose only a limited author record rather than a full X profile.

#### Are viewing counts unique viewers?

The Actor returns the totals supplied by X. It does not verify their counting method or convert them into unique-viewer estimates.

### Support, responsible use, and related actors 🛟

For a reproducible issue, contact support with the run ID, approximate time and a safe public input. Keep credentials and private data out of support messages.

Use public data in line with applicable privacy, copyright and platform requirements.

# Actor input Schema

## `inputList` (type: `array`):

Add one full X broadcast URL per item, for example https://x.com/i/broadcasts/BROADCAST\_ID.

## Actor input object example

```json
{
  "inputList": [
    "https://x.com/i/broadcasts/1OGwbbXdjjdKB"
  ]
}
```

# Actor output Schema

## `broadcasts` (type: `string`):

Dataset rows with success or failed status.

# 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 = {
    "inputList": [
        "https://x.com/i/broadcasts/1OGwbbXdjjdKB"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapingmonkey/twitter-broadcast-details-scraper").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 = { "inputList": ["https://x.com/i/broadcasts/1OGwbbXdjjdKB"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapingmonkey/twitter-broadcast-details-scraper").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 '{
  "inputList": [
    "https://x.com/i/broadcasts/1OGwbbXdjjdKB"
  ]
}' |
apify call scrapingmonkey/twitter-broadcast-details-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapingmonkey/twitter-broadcast-details-scraper"
        }
    }
}

```

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/PkZXM4vtNNUjl2AEn/builds/A9YU1kjhbwTd6Jhcl/openapi.json
