# Twitter Spaces Scraper – X Sessions, Hosts & Speakers (`scrapingmonkey/twitter-space-details-scraper`) Actor

Extract public Twitter (X) Spaces by URL. Get session details, timing, creator, replay flags, reported totals and available admin and speaker profiles in one row.

- **URL**: https://apify.com/scrapingmonkey/twitter-space-details-scraper.md
- **Developed by:** [ScrapingMonkey](https://apify.com/scrapingmonkey) (community)
- **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

Collect public metadata for Twitter (X) Spaces from their URLs. **Twitter Spaces Scraper** returns the session title, state, schedule, creator, replay flag, listener totals and available admin and speaker profiles in one row per Space.

Use it to organize audio-event records, review public speaker context or compare the details X exposes for scheduled and completed conversations.

| At a glance | Details |
|---|---|
| 📥 Input | Full X or Twitter URLs with an /i/spaces/ path |
| 📤 Output | Title, state, timing, creator, replay flag, counts, admins and speakers |
| 🔐 Login required | No Twitter (X) credentials or cookies |
| ⚡ Processing | Up to 5 requests concurrently with automatic retries |
| 💾 Delivery | One Space row in one table, with matching JSON fields |

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

The Actor retrieves the public session record and the participant profiles supplied with it. Participant lists remain attached to the Space they describe.

- Space ID, canonical URL, title, state and session type
- Creator identity and available public profile fields
- Scheduled, started and ended dates with timestamps
- Reported replay-availability flag
- Available live-listener and participant totals
- Visible admin and speaker profiles, including account links and counts

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

1. Add a full `x.com/i/spaces/…` session URL.
2. Add more Space links for a batch.
3. Start the Actor and review each session's result status.
4. Export the metadata and available speaker columns.

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

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

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

| Field group | Included data |
|---|---|
| Session | ID, URL, title, state and type |
| Timing | Scheduled, start and end dates with timestamps |
| Availability and counts | Replay flag, live-listener total and participant total |
| Creator | Available account identity, bio, links and public counts |
| People | Admin and speaker profile columns |

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

```json
{
  "input": "https://x.com/i/spaces/1AbCdEfGhIjKl",
  "status": "success",
  "id": "1AbCdEfGhIjKl",
  "url": "https://x.com/i/spaces/1AbCdEfGhIjKl",
  "title": "Planning a field research season",
  "state": "Ended",
  "type": "space",
  "narrow_cast_type": "DEFAULT",
  "creator.id": "100100100",
  "creator.username": "northstar_lab",
  "creator.name": "Northstar Lab",
  "creator.profile_url": "https://x.com/northstar_lab",
  "creator.description": "Research, field notes and conversations about science.",
  "creator.location": "Singapore",
  "creator.created_at": "2021-01-15T09:00:00Z",
  "creator.created_timestamp": 1610701200,
  "creator.followers_count": 4200,
  "creator.following_count": 180,
  "creator.posts_count": 640,
  "creator.media_posts_count": 86,
  "creator.likes_given_count": 320,
  "creator.highlights_count": 8,
  "creator.avatar_url": "https://example.com/northstar_lab_normal.jpg",
  "creator.avatar_url_hd": "https://example.com/northstar_lab_400x400.jpg",
  "creator.banner_url": "https://example.com/lab-banner.jpg",
  "creator.website.url": "https://t.co/LabSite",
  "creator.website.expanded_url": "https://example.com/lab",
  "creator.bio_links.url": ["https://t.co/LabSite"],
  "creator.bio_links.expanded_url": ["https://example.com/lab"],
  "creator.bio_links.display_url": ["example.com/lab"],
  "creator.is_verified": false,
  "creator.verified_type": "",
  "creator.is_blue_verified": false,
  "creator.is_identity_verified": false,
  "creator.verification_description": "",
  "creator.verified_since_at": "",
  "creator.is_protected": false,
  "creator.possibly_sensitive": false,
  "creator.professional_type": "Business",
  "creator.affiliates_count": 0,
  "creator.creator_subscriptions_count": 0,
  "creator.can_highlight_posts": true,
  "creator.can_receive_messages": false,
  "creator.can_be_media_tagged": false,
  "creator.description_language": "en",
  "creator.profile_image_shape": "Circle",
  "creator.pinned_post_ids": ["2088355206723477000"],
  "creator.birthdate.day": 0,
  "creator.birthdate.month": 0,
  "creator.birthdate.year": 0,
  "creator.birthdate.visibility": "",
  "creator.birthdate.year_visibility": "",
  "scheduled_at": "2026-09-01T10:00:00Z",
  "scheduled_at_timestamp": 1788256800,
  "started_at": "2026-09-01T10:05:00Z",
  "started_at_timestamp": 1788257100,
  "ended_at": "2026-09-01T11:00:00Z",
  "ended_at_timestamp": 1788260400,
  "is_replay_available": true,
  "total_live_listeners": 180,
  "total_participants": 24,
  "admins.id": ["100100100"],
  "admins.username": ["northstar_lab"],
  "admins.name": ["Northstar Lab"],
  "admins.profile_url": ["https://x.com/northstar_lab"],
  "admins.description": ["Research, field notes and conversations about science."],
  "admins.location": ["Singapore"],
  "admins.created_at": ["2021-01-15T09:00:00Z"],
  "admins.created_timestamp": [1610701200],
  "admins.followers_count": [4200],
  "admins.following_count": [180],
  "admins.posts_count": [640],
  "admins.media_posts_count": [86],
  "admins.likes_given_count": [320],
  "admins.highlights_count": [8],
  "admins.avatar_url": ["https://example.com/northstar_lab_normal.jpg"],
  "admins.avatar_url_hd": ["https://example.com/northstar_lab_400x400.jpg"],
  "admins.banner_url": ["https://example.com/lab-banner.jpg"],
  "admins.website.url": ["https://t.co/LabSite"],
  "admins.website.expanded_url": ["https://example.com/lab"],
  "admins.bio_links.url": [["https://t.co/LabSite"]],
  "admins.bio_links.expanded_url": [["https://example.com/lab"]],
  "admins.bio_links.display_url": [["example.com/lab"]],
  "admins.is_verified": [false],
  "admins.verified_type": [""],
  "admins.is_blue_verified": [false],
  "admins.is_identity_verified": [false],
  "admins.verification_description": [""],
  "admins.verified_since_at": [""],
  "admins.is_protected": [false],
  "admins.possibly_sensitive": [false],
  "admins.professional_type": ["Business"],
  "admins.affiliates_count": [0],
  "admins.creator_subscriptions_count": [0],
  "admins.can_highlight_posts": [true],
  "admins.can_receive_messages": [false],
  "admins.can_be_media_tagged": [false],
  "admins.description_language": ["en"],
  "admins.profile_image_shape": ["Circle"],
  "admins.pinned_post_ids": [["2088355206723477000"]],
  "admins.birthdate.day": [0],
  "admins.birthdate.month": [0],
  "admins.birthdate.year": [0],
  "admins.birthdate.visibility": [""],
  "admins.birthdate.year_visibility": [""],
  "speakers.id": ["100100200"],
  "speakers.username": ["maya_fieldnotes"],
  "speakers.name": ["Maya Chen"],
  "speakers.profile_url": ["https://x.com/maya_fieldnotes"],
  "speakers.description": ["Research, field notes and conversations about science."],
  "speakers.location": ["Singapore"],
  "speakers.created_at": ["2021-01-15T09:00:00Z"],
  "speakers.created_timestamp": [1610701200],
  "speakers.followers_count": [4200],
  "speakers.following_count": [180],
  "speakers.posts_count": [640],
  "speakers.media_posts_count": [86],
  "speakers.likes_given_count": [320],
  "speakers.highlights_count": [8],
  "speakers.avatar_url": ["https://example.com/maya_fieldnotes_normal.jpg"],
  "speakers.avatar_url_hd": ["https://example.com/maya_fieldnotes_400x400.jpg"],
  "speakers.banner_url": ["https://example.com/lab-banner.jpg"],
  "speakers.website.url": ["https://t.co/LabSite"],
  "speakers.website.expanded_url": ["https://example.com/lab"],
  "speakers.bio_links.url": [["https://t.co/LabSite"]],
  "speakers.bio_links.expanded_url": [["https://example.com/lab"]],
  "speakers.bio_links.display_url": [["example.com/lab"]],
  "speakers.is_verified": [false],
  "speakers.verified_type": [""],
  "speakers.is_blue_verified": [false],
  "speakers.is_identity_verified": [false],
  "speakers.verification_description": [""],
  "speakers.verified_since_at": [""],
  "speakers.is_protected": [false],
  "speakers.possibly_sensitive": [false],
  "speakers.professional_type": ["Business"],
  "speakers.affiliates_count": [0],
  "speakers.creator_subscriptions_count": [0],
  "speakers.can_highlight_posts": [true],
  "speakers.can_receive_messages": [false],
  "speakers.can_be_media_tagged": [false],
  "speakers.description_language": ["en"],
  "speakers.profile_image_shape": ["Circle"],
  "speakers.pinned_post_ids": [["2088355206723477000"]],
  "speakers.birthdate.day": [0],
  "speakers.birthdate.month": [0],
  "speakers.birthdate.year": [0],
  "speakers.birthdate.visibility": [""],
  "speakers.birthdate.year_visibility": [""]
}
```

The table and JSON share literal names such as `creator.username` and `speakers.name`. Speaker and admin lists align within each group. A field such as `speakers.bio_links.expanded_url` is a list of lists: one inner link list belongs to each speaker. No participant becomes a separate dataset 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/spaces/` path and a Space ID of 5–40 letters, numbers, underscores or hyphens. Bare IDs, broadcast URLs and ordinary post links are not accepted.

Scheduled, live and ended Spaces can return metadata when it remains available. This Actor does not download audio, transcribe a recording or export a complete listener directory. Admin and speaker lists contain only the profiles supplied with the session response.

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

#### Audio-event catalogs

Keep session titles, creators, schedules and source URLs in a searchable event record.

#### Speaker research

Review the public profiles exposed for speakers and hosts alongside their session context.

#### Event follow-up reporting

Attach available session timing, replay flags and public totals to a completed event report.

#### Session availability tracking

Collect scheduled snapshots of known Spaces to review state changes or disappearance of public metadata.

### Pricing and billable Spaces 💰

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 Space creates one result row. Creator, admin and speaker details remain part of that row.

### Twitter (X) Space 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/spaces/1OdKrOOnlQvGX"]}'
```

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. Spaces with missing or expired metadata produce failed rows. A session must expose at least a title or state to return a useful result.

Participant lists and counters can be partial or empty, especially after a Space ends. The replay flag reports a metadata value and does not supply an audio URL or guarantee playback. A total participant count can differ from the number of returned admins and speakers because those lists do not include every listener.

### Frequently asked questions ❓

#### Does it transcribe or download a Space?

No. It returns session metadata and available participant profiles, not audio files or transcripts.

#### Can I collect a scheduled Space?

Yes, when X exposes its metadata. Start and end fields can remain empty before the session takes place.

#### Does it return every listener?

No. It includes available admin and speaker profiles plus reported totals, without a listener-directory crawl.

#### Why does a replay-enabled Space have no audio URL?

The Actor reads the replay flag from metadata but does not retrieve a replay stream.

#### Can ended Spaces disappear?

Yes. X can remove or expire session metadata, in which case the Actor returns a failed row.

### 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 Space URL per item, for example https://x.com/i/spaces/SPACE\_ID.

## Actor input object example

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

# Actor output Schema

## `spaces` (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/spaces/1OdKrOOnlQvGX"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapingmonkey/twitter-space-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/spaces/1OdKrOOnlQvGX"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapingmonkey/twitter-space-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/spaces/1OdKrOOnlQvGX"
  ]
}' |
apify call scrapingmonkey/twitter-space-details-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapingmonkey/twitter-space-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/JD0AxBiwQFWaKy4d3/builds/rHKO5c1sMXXZvs59K/openapi.json
