# 📰 Truth Social + Rumble Monitor (`skootle/truthsocial-rumble-monitor`) Actor

Cross-platform monitor for Truth Social posts + Rumble videos. Mastodon-compatible API + JSON-LD. Auto-detects when a TS post links to a Rumble video and emits a cross\_platform\_link record. Watchlist mode for daily diffs. Export, run via API, schedule, or integrate with other tools.

- **URL**: https://apify.com/skootle/truthsocial-rumble-monitor.md
- **Developed by:** [Skootle](https://apify.com/skootle) (community)
- **Categories:** News, AI, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 record (post / video / cross-link)s

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

![Truth Social + Rumble Monitor hero](https://raw.githubusercontent.com/kesjam/skootle-actors-assets/main/heroes/truthsocial-rumble-monitor.png)

### TL;DR

Monitor Truth Social posts AND Rumble videos in one actor, with cross-platform link detection so you can correlate a public statement with the video that supports it. Built for journalists tracking Trump in real time, OSINT analysts on election cycles, brand-safety teams watching alt-platform mentions, and academic researchers building alt-platform discourse corpora. Watchlist mode emits only new records since the last run, so daily schedules become a clean diff feed. One unified schema: `recordType: truth_social_post | rumble_video | cross_platform_link`.

---

<!-- skootle:review-cta -->
> Try it on a small dataset, then let us know what you think in a [review](https://apify.com/skootle/truthsocial-rumble-monitor/reviews).

---

### What does Truth Social + Rumble Monitor do?

This actor monitors public statements and supporting videos across Truth Social and Rumble in one unified stream. Pass Truth Social handles or topic queries plus Rumble channel URLs or search terms; get back three record types in one dataset:

1. **`truth_social_post`**, public Truth Social posts with full Mastodon-compatible metadata: post ID, account handle + display name + verified flag, content (HTML + plain text), media attachments, hashtags, mentions, ISO 8601 created-at, engagement counts (replies, reblogs, favorites)

2. **`rumble_video`**, public Rumble videos with title, channel, channel verified flag, description, view count, like count, comment count, duration, ISO 8601 published-at, video URL, embed URL, thumbnail

3. **`cross_platform_link`**, emitted when a Truth Social post links to a Rumble video (auto-detected by URL match), so you can correlate a public statement with its supporting video

Watchlist mode (`watchlistMode: true`) makes this scraper schedulable. State persists across runs.

### Why scrape Truth Social + Rumble?

Truth Social and Rumble are where a meaningful slice of conservative political discourse, alt-platform news, and Trump-orbit statements happen in real time. News desks watching Trump posts, OSINT analysts on election cycles, brand-safety teams checking alt-platform mentions, and academic researchers building discourse corpora all monitor both platforms, usually in two browser tabs.

This actor merges them into one feed and auto-detects when a Truth Social post links to a Rumble video, so a journalist sees the statement and the supporting video correlated in the same record instead of stitching them by hand. Watchlist mode keeps daily schedules clean: only NEW posts and videos since the last run, no duplicates.

### Who needs this?

- **Journalists and news researchers** tracking public figures and topic queries across alt-platforms
- **OSINT and election analysts** monitoring public statements + supporting videos in one pipeline
- **Brand and reputation monitoring teams** surfacing mentions across Truth Social + Rumble
- **Academic researchers** building corpora of alt-platform public discourse
- **AI agents and automation pipelines** consuming a unified cross-platform feed

### How to use Truth Social + Rumble Monitor

1. Open the **Input** tab on the actor page
2. Add Truth Social account handles to `truthSocialAccounts` and/or topic queries to `truthSocialQueries`
3. Add Rumble channel URLs to `rumbleChannels` and/or search terms to `rumbleQueries`
4. Set `maxItemsPerSource` (default 25)
5. Optionally enable `watchlistMode` for daily diffs
6. Click **Start**

### How much will scraping Truth Social + Rumble cost?

This actor is priced per event:

- **Actor Start**: $0.01 once per run
- **Truth Social / Rumble record**: tiered, charged per record written

| Apify plan | $/1000 records |
|---|---|
| FREE | $30.00 |
| BRONZE | $25.50 |
| SILVER | $21.00 |
| GOLD | $18.00 |
| PLATINUM | $18.00 |
| DIAMOND | $16.20 |

A daily watchlist on 5 accounts + 5 channels returns ~50 records day 1, then 5-15 per day. Roughly $0.10-$0.90 per day on GOLD.

### Is it legal to scrape Truth Social + Rumble?

Yes, both platforms are publicly accessible to anyone in a browser without logging in. This actor reads the same public data via Truth Social's official Mastodon-compatible public API and Rumble's public web pages, with proper rate limiting. It does not log into accounts, does not access private DMs, and does not bypass any technical access control.

### Examples

#### Example 1: Daily watchlist on a Truth Social account

```json
{
  "truthSocialAccounts": ["realDonaldTrump"],
  "watchlistMode": true,
  "maxItemsPerSource": 25
}
````

#### Example 2: Topic-query monitoring across Truth Social

```json
{
  "truthSocialQueries": ["election", "border"],
  "watchlistMode": true,
  "maxItemsPerSource": 50
}
```

#### Example 3: Rumble channel watchlist

```json
{
  "rumbleChannels": ["https://rumble.com/c/SomeChannel"],
  "watchlistMode": true,
  "maxItemsPerSource": 25
}
```

#### Example 4: Combined cross-platform monitoring

```json
{
  "truthSocialAccounts": ["realDonaldTrump"],
  "rumbleChannels": ["https://rumble.com/c/SomeChannel"],
  "watchlistMode": true,
  "maxItemsPerSource": 25
}
```

`cross_platform_link` records auto-emit when a Truth Social post URL-references a Rumble video.

#### Example 5: Brand-mention scan

```json
{
  "truthSocialQueries": ["yourBrand"],
  "rumbleQueries": ["yourBrand"],
  "watchlistMode": true,
  "maxItemsPerSource": 50
}
```

#### Example 6: Election-cycle research corpus

```json
{
  "truthSocialQueries": ["voter fraud", "election integrity", "ballot"],
  "rumbleQueries": ["election 2024"],
  "maxItemsPerSource": 200
}
```

#### Example 7: Academic OSINT pipeline

```json
{
  "truthSocialAccounts": ["account1", "account2", "account3"],
  "watchlistMode": true,
  "maxItemsPerSource": 100
}
```

#### Example 8: AI agent autopilot

```json
{
  "truthSocialAccounts": ["account1"],
  "rumbleChannels": ["https://rumble.com/c/Channel"],
  "watchlistMode": true,
  "maxItemsPerSource": 50
}
```

### Input parameters

| Field | Type | Default | Description |
|---|---|---|---|
| `truthSocialAccounts` | string\[] | `[]` | Account handles (without `@`) |
| `truthSocialQueries` | string\[] | `[]` | Free-text search queries |
| `rumbleChannels` | string\[] | `[]` | Full Rumble channel URLs |
| `rumbleQueries` | string\[] | `[]` | Free-text search queries |
| `maxItemsPerSource` | int | `25` | Cap per account/channel/query |
| `watchlistMode` | bool | `false` | Idempotent diff |
| `useApifyProxy` | bool | `true` | Apify residential proxy. Recommended for Rumble. |

### Truth Social + Rumble output format

The dataset has three record types. Filter by `recordType`.

#### `truth_social_post`

| Field | Type | Description |
|---|---|---|
| `outputSchemaVersion`, `recordType`, `recordId` | string | Discriminated identity |
| `postId`, `url` | string | Post ID + URL |
| `accountHandle`, `accountDisplayName`, `accountVerified`, `accountFollowers` | string / bool / int | Account info |
| `content`, `contentPlain` | string | Body (HTML + plain text) |
| `mediaAttachments` | array | `[{ type, url, previewUrl }]` |
| `hashtags`, `mentions` | string\[] | Extracted from content |
| `createdAt`, `scrapedAt` | ISO 8601 | |
| `replyCount`, `reblogCount`, `favoriteCount` | int | Engagement |
| `fieldCompletenessScore`, `agentMarkdown` | int / string | Quality + LLM-ready summary |

#### `rumble_video`

| Field | Type | Description |
|---|---|---|
| `outputSchemaVersion`, `recordType`, `recordId` | string | Discriminated identity |
| `videoId`, `url`, `embedUrl` | string | Rumble IDs + URLs |
| `title`, `description` | string | Title + description |
| `channelName`, `channelUrl`, `channelVerified` | string / bool | Channel info |
| `viewCount`, `likeCount`, `commentCount`, `durationSeconds` | int | Engagement + duration |
| `publishedAt`, `scrapedAt` | ISO 8601 | |
| `thumbnailUrl` | string | Video thumbnail |
| `fieldCompletenessScore`, `agentMarkdown` | int / string | Quality + LLM-ready summary |

#### `cross_platform_link`

| Field | Type | Description |
|---|---|---|
| `outputSchemaVersion`, `recordType`, `recordId` | string | Discriminated identity |
| `truthSocialPostId`, `truthSocialUrl` | string | Source TS post |
| `rumbleVideoId`, `rumbleUrl` | string | Linked Rumble video |
| `linkType` | enum | `embedded` or `referenced` |
| `detectedAt` | ISO 8601 | |
| `agentMarkdown` | string | LLM-ready summary |

#### Truth Social scraper output example

```json
{
  "outputSchemaVersion": "2026-05-08",
  "recordType": "truth_social_post",
  "recordId": "truth:post:111234567890",
  "postId": "111234567890",
  "url": "https://truthsocial.com/@realDonaldTrump/posts/111234567890",
  "accountHandle": "realDonaldTrump",
  "accountDisplayName": "Donald J. Trump",
  "accountVerified": true,
  "accountFollowers": 8500000,
  "content": "<p>Sample post content...</p>",
  "contentPlain": "Sample post content...",
  "hashtags": [],
  "mentions": [],
  "createdAt": "2026-05-08T15:00:00.000Z",
  "replyCount": 1234,
  "reblogCount": 5678,
  "favoriteCount": 12345,
  "fieldCompletenessScore": 100,
  "agentMarkdown": "**📰 @realDonaldTrump (verified, 8.5M followers)**\n> Sample post content...\n- 💬 1,234 replies · 🔁 5,678 reblogs · ❤️ 12,345 likes\n- 📅 2026-05-08\n- 🔗 https://truthsocial.com/@realDonaldTrump/posts/111234567890"
}
```

### During the Actor run

Truth Social pulls run against the platform's public Mastodon-compatible endpoints with no login required. Rumble pulls run over Apify residential proxy with conservative rate-limiting; expect 70-90% pass rate against Rumble's Cloudflare layer.

The actor writes:

1. **`OUTPUT`**, run summary with errors per stage
2. **`AGENT_BRIEFING`**, top posts + videos by engagement
3. **`WATCHLIST_STATE`**, (when `watchlistMode: true`) seen post + video IDs

### FAQ

#### How does Truth Social + Rumble Monitor work?

Truth Social uses a Mastodon-compatible API (clean JSON, no auth). Rumble has no public API; this actor uses HTTP fetches with Apify residential proxy + JSON-LD parse from Rumble's public pages.

#### What's reliability like for Rumble?

Rumble has variable anti-bot blocking via Cloudflare; expect ~70-90% pass rate using Apify residential. ZenRows or similar vendor unblocker is on the v0.2 roadmap.

#### Can I monitor for new content only?

Yes. Set `watchlistMode: true`. The actor stores seen post + video IDs and emits only records new since the last run.

#### Can I correlate a Truth Social post with a Rumble video?

Yes, that's the `cross_platform_link` record type. When a Truth Social post body links to a `rumble.com` URL, the actor emits a separate cross-link record.

#### Can I get historical content beyond the recent feed?

This actor reads the live feeds. Truth Social's API exposes account history; Rumble's search returns recent results only. For deep historical pulls, increase `maxItemsPerSource` and paginate.

#### Can I use this with the Apify API?

Yes. POST to `https://api.apify.com/v2/acts/skootle~truthsocial-rumble-monitor/runs`.

#### Can I integrate with Make / Zapier / n8n / Slack?

Yes. Click **Integrations** on the actor page.

#### Is the data delayed?

Truth Social: live, < 1 minute lag. Rumble: live, < 5 minutes lag.

#### Why does this actor cost more than free TS / Rumble scrapers?

Cross-platform unified format saves you writing two parsers, one for Truth Social and one for Rumble, plus the link-correlation glue between them. Watchlist mode, ISO timestamps, numeric engagement counts, and ready-to-paste LLM summaries are included. Free scrapers leave the integration work on your desk.

#### Your feedback

Hit a bug or want a feature? Open an issue on the [Issues tab](https://apify.com/skootle/truthsocial-rumble-monitor/issues/open) rather than the reviews page, and we'll fix it fast (typically within 48 hours).

### Why choose Truth Social + Rumble Monitor

- **Cross-platform unified schema saves you writing two parsers**, Truth Social posts and Rumble videos land in one dataset with the same shape
- **Cross-platform link detection**, auto-correlate Truth Social posts with the Rumble videos they reference (no other actor does this)
- **Watchlist mode emits only what's new since last run**, safe to schedule daily for new posts and videos
- **Verified flag, follower counts, numeric engagement**, typed, ready to filter or rank
- **ISO 8601 dates everywhere**, sort, window, and aggregate without parsing
- **AI agents can paste records straight into an LLM context**, per-record markdown summary included
- **Hand-tuned for these sources. Fixes ship the same week the sources change**, typically within 24-48 hours
- **Safe to dedupe across re-runs**, stable record IDs upsert cleanly
- **Schema doesn't break your pipeline**, versioned and date-stamped on every record

### Other Skootle actors you might want to check

- **[Reddit Subreddit Scraper](https://apify.com/skootle/reddit-subreddit-monitor)**, sentiment + brand monitoring
- **[Hacker News Watchlist](https://apify.com/skootle/hackernews-watchlist)**, tech discourse stream
- **[GitHub Trending Repos](https://apify.com/skootle/github-trending)**, daily trending dev repos
- **[SEC EDGAR Filings Monitor](https://apify.com/skootle/sec-edgar-filings)**, public-company filings stream
- **[SAM.gov + USAspending Federal Contracts](https://apify.com/skootle/sam-gov-federal-contracts)**, federal contracting opportunities

### Support and contact

File issues on this actor's page, replies within 48 hours.

# Actor input Schema

## `truthSocialAccounts` (type: `array`):

Truth Social handles to fetch recent posts from. Example: \['realDonaldTrump', 'JoeBiden']. The actor uses Truth Social's Mastodon-compatible API which surfaces posts from a specific account by username.

## `rumbleQueries` (type: `array`):

Rumble integration arrives in v0.2 (vendor unblocker integration in progress; Rumble blocks Apify proxy IPs at the network level). Selecting Rumble queries today returns 0 videos. Use Truth Social only for v0.1.

## `postsPerAccount` (type: `integer`):

How many recent posts to fetch per Truth Social account (1-40, Mastodon API max).

## `videosPerQuery` (type: `integer`):

How many Rumble videos to fetch per query (1-50). One search-results page returns ~25.

## `maxItems` (type: `integer`):

Hard cap on total records (posts + videos + cross-links) saved. Default conservative for the 5-minute auto-test.

## `watchlistMode` (type: `boolean`):

When true, only emit records NEW since the previous run. The actor stores seen IDs in the key-value store and dedupes across runs. Perfect for daily/hourly monitoring.

## `emitCrossPlatformLinks` (type: `boolean`):

When true, the actor scans Truth Social posts for Rumble URLs and emits a separate cross\_platform\_link record for each match. Useful for cross-source analysis.

## `useApifyProxy` (type: `boolean`):

Apify residential proxy. Recommended for production; required for Truth Social to bypass Cloudflare. Rumble works without proxy but residential is safer.

## `apifyProxyGroups` (type: `array`):

RESIDENTIAL recommended.

## Actor input object example

```json
{
  "truthSocialAccounts": [
    "realDonaldTrump"
  ],
  "rumbleQueries": [],
  "postsPerAccount": 10,
  "videosPerQuery": 10,
  "maxItems": 20,
  "watchlistMode": false,
  "emitCrossPlatformLinks": true,
  "useApifyProxy": true,
  "apifyProxyGroups": [
    "RESIDENTIAL"
  ]
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

Truth Social posts, Rumble videos, and cross-platform links. Discriminate by recordType.

## `agentBriefing` (type: `string`):

Markdown digest with top-5 Truth Social posts by favourites, top-5 Rumble videos by views, and cross-platform link summary.

## `runSummary` (type: `string`):

Compact OUTPUT object with row counts and per-stage error counts.

# 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 = {
    "truthSocialAccounts": [
        "realDonaldTrump"
    ],
    "rumbleQueries": [],
    "apifyProxyGroups": [
        "RESIDENTIAL"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("skootle/truthsocial-rumble-monitor").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 = {
    "truthSocialAccounts": ["realDonaldTrump"],
    "rumbleQueries": [],
    "apifyProxyGroups": ["RESIDENTIAL"],
}

# Run the Actor and wait for it to finish
run = client.actor("skootle/truthsocial-rumble-monitor").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "truthSocialAccounts": [
    "realDonaldTrump"
  ],
  "rumbleQueries": [],
  "apifyProxyGroups": [
    "RESIDENTIAL"
  ]
}' |
apify call skootle/truthsocial-rumble-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=skootle/truthsocial-rumble-monitor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "📰 Truth Social + Rumble Monitor",
        "description": "Cross-platform monitor for Truth Social posts + Rumble videos. Mastodon-compatible API + JSON-LD. Auto-detects when a TS post links to a Rumble video and emits a cross_platform_link record. Watchlist mode for daily diffs. Export, run via API, schedule, or integrate with other tools.",
        "version": "0.1",
        "x-build-id": "iIAXOELQucccHmKfr"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/skootle~truthsocial-rumble-monitor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-skootle-truthsocial-rumble-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/skootle~truthsocial-rumble-monitor/runs": {
            "post": {
                "operationId": "runs-sync-skootle-truthsocial-rumble-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/skootle~truthsocial-rumble-monitor/run-sync": {
            "post": {
                "operationId": "run-sync-skootle-truthsocial-rumble-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "truthSocialAccounts": {
                        "title": "Truth Social accounts (handles, no @)",
                        "type": "array",
                        "description": "Truth Social handles to fetch recent posts from. Example: ['realDonaldTrump', 'JoeBiden']. The actor uses Truth Social's Mastodon-compatible API which surfaces posts from a specific account by username.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "rumbleQueries": {
                        "title": "Rumble search queries (v0.2 — coming soon)",
                        "type": "array",
                        "description": "Rumble integration arrives in v0.2 (vendor unblocker integration in progress; Rumble blocks Apify proxy IPs at the network level). Selecting Rumble queries today returns 0 videos. Use Truth Social only for v0.1.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "postsPerAccount": {
                        "title": "Posts per Truth Social account",
                        "minimum": 1,
                        "maximum": 40,
                        "type": "integer",
                        "description": "How many recent posts to fetch per Truth Social account (1-40, Mastodon API max).",
                        "default": 10
                    },
                    "videosPerQuery": {
                        "title": "Videos per Rumble query",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "How many Rumble videos to fetch per query (1-50). One search-results page returns ~25.",
                        "default": 10
                    },
                    "maxItems": {
                        "title": "Max total records",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Hard cap on total records (posts + videos + cross-links) saved. Default conservative for the 5-minute auto-test.",
                        "default": 20
                    },
                    "watchlistMode": {
                        "title": "Watchlist mode (idempotent diff)",
                        "type": "boolean",
                        "description": "When true, only emit records NEW since the previous run. The actor stores seen IDs in the key-value store and dedupes across runs. Perfect for daily/hourly monitoring.",
                        "default": false
                    },
                    "emitCrossPlatformLinks": {
                        "title": "Emit cross-platform link records",
                        "type": "boolean",
                        "description": "When true, the actor scans Truth Social posts for Rumble URLs and emits a separate cross_platform_link record for each match. Useful for cross-source analysis.",
                        "default": true
                    },
                    "useApifyProxy": {
                        "title": "Use Apify proxy",
                        "type": "boolean",
                        "description": "Apify residential proxy. Recommended for production; required for Truth Social to bypass Cloudflare. Rumble works without proxy but residential is safer.",
                        "default": true
                    },
                    "apifyProxyGroups": {
                        "title": "Apify proxy groups",
                        "type": "array",
                        "description": "RESIDENTIAL recommended.",
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
