# Truth Social Scraper - Posts, Likes, ReTruths (`om_kh/truth-social-scraper`) Actor

Scrape public Truth Social accounts and posts: text, date, replies, ReTruths, likes, media, links, polls, hashtags and mentions. Followers and verified badge, filters by date, replies, media and only new since last run. No login. $1 per 1,000 posts.

- **URL**: https://apify.com/om_kh/truth-social-scraper.md
- **Developed by:** [Khandji Omar](https://apify.com/om_kh) (community)
- **Categories:** Social media, News, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.55 / 1,000 posts

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Truth Social Scraper — Posts, Likes, ReTruths

> Scrape **public Truth Social accounts**: every post with text, date, **likes, ReTruths and
> replies**, media, links, hashtags and mentions — plus the account's followers and verified
> badge on every row. Go back to any date. No login. **$1 per 1,000 posts, no start fee.**

### Free tier — 20 results free on every run

**The first 20 results of every run are free**, on every run you ever make — not a one-off trial. One guard: the free allowance never covers more than half of a run, so the offer stays sustainable.

### What does this Truth Social scraper do?

Give it handles (`realDonaldTrump`) or profile links (`truthsocial.com/@DevinNunes`). For
each account it reads the posts Truth Social publishes publicly, newest first, up to 5,000
per account or back to the date you choose. ReTruths are flagged and credited to the
original author, and replies can be included or left out.

### Compared with muhammetakkurtt/truth-social-scraper

Read on the Store on 2026-10-23 (Truth Social Scraper). Where it does better, this section says so.

- **Built on the site's own data**, not a resold scraper: no second Actor between you and the source.
- **Free results on every run** and a hard cost cap (`maxTotalChargeUsd`).
- **Price:** $1 per 1,000 here, $5 there.

### Why use it

1. **5× cheaper than the market leader** ($0.001 vs $0.005 per post) and **no start fee**.
2. **Engagement per post:** likes, ReTruths and replies, ready to sort.
3. **Clean text** (HTML removed), links, link titles, media URLs, hashtags and mentions.
4. **Account card on every row:** followers, verified badge.
5. **Date filter** (`postedAfter`) for daily or weekly monitoring with schedules.
6. **Reliable:** requests go through residential IPs, so Truth Social's bot wall does not
   stop the run.

### How to use it in 3 steps

1. Click **Try for free** — an account is prefilled.
2. Add accounts, how many posts, and optionally a start date.
3. Click **Start** and download JSON, CSV or Excel.

### Input

| Field | What it does |
|---|---|
| `accounts` | Handles or truthsocial.com/@handle links (up to 50). |
| `maxPostsPerAccount` | Newest first, 1 to 5,000. Default 100. |
| `postedAfter` | Optional `YYYY-MM-DD`: only posts on or after it. |
| `includeReplies` | Also include the account's replies. Default off. |
| `onlyReplies` | Keep only the account's replies. |
| `onlyMedia` | Keep only posts with a photo or a video. |
| `onlyNewPosts` | Return only what was posted since the previous run (made for schedules: you pay only for new posts). |
| `olderThanPostId` | Continue an earlier export from just under a known post ID. |
| `postUrls` | Single post links or IDs to fetch one by one. |
| `maxTotalChargeUsd` | Optional hard cost cap for the run. |

```json
{
  "accounts": ["realDonaldTrump", "DevinNunes"],
  "maxPostsPerAccount": 500,
  "postedAfter": "2026-09-01"
}
```

### Output

Real example:

```json
{
  "postId": "117356339820644146",
  "url": "https://truthsocial.com/@realDonaldTrump/117356339820644146",
  "createdAt": "2026-09-29T21:00:34.470Z",
  "text": "Iran Has Lost Control of the Strait: https://x.com/BurggrabenH/status/2104361288000221497",
  "isRetruth": false,
  "isReply": false,
  "replies": 778,
  "retruths": 2779,
  "likes": 10875,
  "mediaUrls": [],
  "linkUrl": "https://x.com/BurggrabenH/status/2104361288000221497",
  "linkTitle": "Alexander Stahel 🌻 (@BurggrabenH) on X",
  "hashtags": [],
  "mentions": [],
  "language": "en",
  "accountHandle": "realDonaldTrump",
  "accountName": "Donald J. Trump",
  "accountFollowers": 13087097,
  "accountVerified": true,
  "status": "ok"
}
```

### How much does it cost?

| Event | Price |
|---|---|
| Post | **$0.001** ($1 per 1,000) |
| Start fee | none |

Up to 20 posts of every run are free (at most half of the run). An account that does not
exist is reported and never charged. Paid Apify plans get lower tier prices.

### Use cases

- **Political and policy monitoring** — track statements with a daily schedule.
- **Market-moving news** — posts that move stocks, crypto or prediction markets.
- **Journalism and research** — full archives with engagement for analysis.
- **AI and NLP** — clean text with dates for sentiment and topic models.

### Use it from code (API)

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("om_kh/truth-social-scraper").call(run_input={
    "accounts": ["realDonaldTrump"],
    "postedAfter": "2026-09-01",
})
for post in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(post["createdAt"], post["likes"], post["text"][:80])
```

```bash
curl -X POST "https://api.apify.com/v2/acts/om_kh~truth-social-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"accounts": ["realDonaldTrump"], "maxPostsPerAccount": 40}'
```

### Integrations and MCP

Schedule it every hour with `postedAfter` and push new posts to Slack, Google Sheets or a
database with n8n, Make or Zapier. AI agents can call it through `https://mcp.apify.com` as
`om_kh/truth-social-scraper`.

### Tips and limits

- Only **public accounts**. Keyword search and trends require a Truth Social login and are
  not offered.
- Very large archives take longer because Truth Social limits request rates.

### FAQ

**Do I need a Truth Social account?** No.

**Are ReTruths included?** Yes, flagged with `isRetruth` and `retruthOf`.

**Is it legal?** It reads posts that accounts publish publicly. Use the data in line with
the laws and terms that apply to you.

### Related Actors

- [X (Twitter) Search Scraper - Posts, Likes, Replies](https://apify.com/om_kh/twitter-x-search-scraper) — the same people on X.
- [Kalshi & Polymarket Scraper - Odds, Probability, Volume](https://apify.com/om_kh/kalshi-polymarket-scraper) — how markets react.
- [Google News Scraper - Headlines, Source, Date, API](https://apify.com/om_kh/google-news-scraper) — the coverage that follows.

### Your feedback

Did this Actor save you time? A short review on the **Reviews** tab helps other people find it, and every review is read. Something missing or broken? Open an issue on the **Issues** tab: it is answered and fixed fast.

# Actor input Schema

## `accounts` (type: `array`):

Truth Social handles or profile links (truthsocial.com/@handle), one per line (up to 50).

## `maxPostsPerAccount` (type: `integer`):

Newest first, 1 to 5,000. Default 100.

## `postedAfter` (type: `string`):

Only posts on or after this date (YYYY-MM-DD).

## `includeReplies` (type: `boolean`):

Also return the account's replies to other posts. Default off.

## `onlyReplies` (type: `boolean`):

Keep only the posts the account wrote in reply to someone.

## `onlyMedia` (type: `boolean`):

Keep only posts with a photo or a video.

## `onlyNewPosts` (type: `boolean`):

Remember the newest post of each account and return only what was posted since the previous run. Made for scheduled runs: you pay only for new posts.

## `olderThanPostId` (type: `string`):

Read the timeline from just under a known post ID, to continue an earlier export.

## `postUrls` (type: `array`):

Post links or post IDs to fetch one by one, instead of or in addition to whole timelines.

## `maxTotalChargeUsd` (type: `number`):

Optional hard cost cap for this run.

## Actor input object example

```json
{
  "accounts": [
    "realDonaldTrump"
  ],
  "maxPostsPerAccount": 40,
  "includeReplies": false,
  "onlyReplies": false,
  "onlyMedia": false,
  "onlyNewPosts": false
}
```

# Actor output Schema

## `report` (type: `string`):

A visual summary of delivery, charges, and source issues.

## `results` (type: `string`):

Posts in a sortable table. No JSON knowledge required.

## `csv` (type: `string`):

Results ready for spreadsheets, CRMs, and analytics tools.

## `excel` (type: `string`):

Results as an Excel workbook for non-technical teams.

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

Machine-readable delivery, billing, and source diagnostics.

# 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 = {
    "accounts": [
        "realDonaldTrump"
    ],
    "maxPostsPerAccount": 40
};

// Run the Actor and wait for it to finish
const run = await client.actor("om_kh/truth-social-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 = {
    "accounts": ["realDonaldTrump"],
    "maxPostsPerAccount": 40,
}

# Run the Actor and wait for it to finish
run = client.actor("om_kh/truth-social-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 '{
  "accounts": [
    "realDonaldTrump"
  ],
  "maxPostsPerAccount": 40
}' |
apify call om_kh/truth-social-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,om_kh/truth-social-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/pLtWblx6jkQ8HLiQo/builds/YJgnM94T1iskeuxWL/openapi.json
